X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/d54976be7b44bd0c8c3c2afac8f11b2408e6cb14..ccf1868db403f603a87db2194a8ced22a05766f1:/apps/catalogue/fields.py diff --git a/apps/catalogue/fields.py b/apps/catalogue/fields.py index 89b76ee32..0ff2ca9ef 100644 --- a/apps/catalogue/fields.py +++ b/apps/catalogue/fields.py @@ -10,8 +10,11 @@ from catalogue import app_settings from catalogue.constants import LANGUAGES_3TO2 from catalogue.utils import remove_zip, truncate_html_words from celery.task import Task, task +from celery.utils.log import get_task_logger from waiter.utils import clear_cache +task_logger = get_task_logger(__name__) + class EbookFieldFile(FieldFile): """Represents contents of an ebook file field.""" @@ -33,6 +36,11 @@ class EbookField(models.FileField): super(EbookField, self).__init__(*args, **kwargs) self.format_name = format_name + def deconstruct(self): + name, path, args, kwargs = super(EbookField, self).deconstruct() + args.insert(0, self.format_name) + return name, path, args, kwargs + @property def builder(self): """Finds a celery task suitable for the format of the field.""" @@ -44,7 +52,7 @@ class EbookField(models.FileField): def has(model_instance): return bool(getattr(model_instance, self.attname, None)) has.__doc__ = None - has.__name__ = "has_%s" % self.attname + has.__name__ = str("has_%s" % self.attname) has.short_description = self.name has.boolean = True setattr(cls, 'has_%s' % self.attname, has) @@ -77,7 +85,10 @@ class BuildEbook(Task): def run(self, obj, field_name): """Just run `build` on FieldFile, can't pass it directly to Celery.""" - return self.build(getattr(obj, field_name)) + task_logger.info("%s -> %s" % (obj.slug, field_name)) + ret = self.build(getattr(obj, field_name)) + obj.flush_includes() + return ret def build(self, fieldfile): book = fieldfile.instance @@ -144,7 +155,6 @@ class BuildHtml(BuildEbook): if html_output: meta_tags = list(book.tags.filter( category__in=('author', 'epoch', 'genre', 'kind'))) - book_tag = book.book_tag() lang = book.language lang = LANGUAGES_3TO2.get(lang, lang) @@ -157,13 +167,6 @@ class BuildHtml(BuildEbook): fieldfile.field.attname: fieldfile }) - # get ancestor l-tags for adding to new fragments - ancestor_tags = [] - p = book.parent - while p: - ancestor_tags.append(p.book_tag()) - p = p.parent - # Extract fragments closed_fragments, open_fragments = html.extract_fragments(fieldfile.path) for fragment in closed_fragments.values(): @@ -206,11 +209,9 @@ class BuildHtml(BuildEbook): book=book, text=text, short_text=short_text) new_fragment.save() - new_fragment.tags = set(meta_tags + themes + [book_tag] + ancestor_tags) - book.fix_tree_tags() - book.html_built.send(sender=book) + new_fragment.tags = set(meta_tags + themes) + book.html_built.send(sender=type(self), instance=book) return True - book.fix_tree_tags() return False @BuildEbook.register('cover_thumb') @@ -240,19 +241,3 @@ class OverwritingFieldFile(FieldFile): class OverwritingFileField(models.FileField): attr_class = OverwritingFieldFile - - -try: - # check for south - from south.modelsinspector import add_introspection_rules -except ImportError: - pass -else: - add_introspection_rules([ - ( - [EbookField], - [], - {'format_name': ('format_name', {})} - ) - ], ["^catalogue\.fields\.EbookField"]) - add_introspection_rules([], ["^catalogue\.fields\.OverwritingFileField"])