X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/145e56d0df5162f8b57574e5b5656c6354274280..d52c76021eaf1621b4e55a6eba1df1c0404bd7dd:/apps/api/management/commands/mobileinit.py?ds=sidebyside diff --git a/apps/api/management/commands/mobileinit.py b/apps/api/management/commands/mobileinit.py index 8e225f95a..2abbfb3d3 100755 --- a/apps/api/management/commands/mobileinit.py +++ b/apps/api/management/commands/mobileinit.py @@ -8,12 +8,10 @@ import os.path import re import sqlite3 from django.core.management.base import BaseCommand -from slughifi import char_map from api.helpers import timestamp from api.settings import MOBILE_INIT_DB from catalogue.models import Book, Tag -from catalogue.views import tagged_object_list # this should be somewhere else class Command(BaseCommand): @@ -25,7 +23,9 @@ class Command(BaseCommand): db = init_db(last_checked) for b in Book.objects.all(): add_book(db, b) - for t in Tag.objects.exclude(category__in=('book', 'set', 'theme')): + for t in Tag.objects.exclude( + category__in=('book', 'set', 'theme')).exclude(book_count=0): + # only add non-empty tags add_tag(db, t) db.commit() db.close() @@ -51,26 +51,6 @@ def pretty_size(size): return "%d %s" % (size, unit) -special_marks = {'ż': '|', 'Ż': '|',} -def replace_char(m): - char = m.group() - if char_map.has_key(char): - special = special_marks.get(char, '{') - return char_map[char] + special - else: - return char - -def sortify(value): - """ - Turns Unicode into ASCII-sortable str - - Examples : - - >>> slughifi('aa') < slughifi('a a') < slughifi('ą') < slughifi('b') - True - - """ - if not isinstance(value, unicode): value = unicode(value, 'utf-8') @@ -116,10 +96,6 @@ CREATE INDEX IF NOT EXISTS tag_name_index ON tag (name); CREATE INDEX IF NOT EXISTS tag_category_index ON tag (category); CREATE INDEX IF NOT EXISTS tag_sort_key_index ON tag (sort_key); -CREATE TABLE book_tag (book INTEGER, tag INTEGER); -CREATE INDEX IF NOT EXISTS book_tag_book ON book_tag (book); -CREATE INDEX IF NOT EXISTS book_tag_tag_index ON book_tag (tag); - CREATE TABLE state (last_checked INTEGER); """ @@ -130,7 +106,8 @@ CREATE TABLE state (last_checked INTEGER); def current(last_checked): target = os.path.join(MOBILE_INIT_DB, 'initial.db') - os.unlink(target) + if os.path.lexists(target): + os.unlink(target) os.symlink( 'initial.db-%d' % last_checked, target, @@ -167,9 +144,9 @@ def add_book(db, book): html_file_size = book.html_file.size else: html_file = html_file_size = None - parent = book.parent + parent = book.parent_id parent_number = book.parent_number - sort_key = sortify(title) + sort_key = book.sort_key size_str = pretty_size(html_file_size) authors = ", ".join(t.name for t in book.tags.filter(category='author')) db.execute(book_sql, locals()) @@ -179,11 +156,8 @@ def add_tag(db, tag): id = tag.id category = categories[tag.category] name = tag.name - sort_key = sortify(tag.sort_key) + sort_key = tag.sort_key - books = list(tagged_object_list(None, [tag], api=True)) + books = Book.tagged_top_level([tag]) book_ids = ','.join(str(b.id) for b in books) db.execute(tag_sql, locals()) - - for b in books: - db.execute(book_tag_sql, {'book': b.id, 'tag': tag.id})