from fnpdjango.storage import BofhFileSystemStorage
from lxml import html
from librarian.cover import WLCover
-from librarian.html import transform_abstrakt
+from librarian.builders.html import AbstraktHtmlBuilder
from librarian.builders import builders
from newtagging import managers
from catalogue import constants
tagged = managers.ModelTaggedItemManager(Tag)
tags = managers.TagDescriptor(Tag)
tag_relations = GenericRelation(Tag.intermediary_table_model)
+ translators = models.ManyToManyField(Tag, blank=True)
html_built = django.dispatch.Signal()
published = django.dispatch.Signal()
def genre_unicode(self):
return self.tag_unicode('genre')
- def translators(self):
- translators = self.get_extra_info_json().get('translators') or []
- return [
- '\xa0'.join(reversed(translator.split(', ', 1))) for translator in translators
- ]
-
def translator(self):
translators = self.get_extra_info_json().get('translators')
if not translators:
return int(total)
def get_time(self):
- return round(self.xml_file.size / 1000 * 40)
+ try:
+ return round(self.xml_file.size / 1000 * 40)
+ except ValueError:
+ return 0
def has_media(self, type_):
if type_ in Book.formats:
has_daisy_file.boolean = True
def has_sync_file(self):
- return self.has_media("sync")
+ return settings.FEATURE_SYNCHRO and self.has_media("sync")
def get_sync(self):
with self.get_media('sync').first().file.open('r') as f:
urlretrieve('%s/%s' % (remote_gallery_url, ilustr_src), ilustr_path)
def load_abstract(self):
- abstract = self.wldocument(parse_dublincore=False).edoc.getroot().find('.//abstrakt')
- if abstract is not None:
- self.abstract = transform_abstrakt(abstract)
- else:
- self.abstract = ''
+ self.abstract = AbstraktHtmlBuilder().build(
+ self.wldocument2()).get_bytes().decode('utf-8')
def load_toc(self):
self.toc = ''
meta_tags = Tag.tags_from_info(book_info)
- for tag in meta_tags:
- if not tag.for_books:
- tag.for_books = True
- tag.save()
-
- book.tags = set(meta_tags + book_shelves)
+ just_tags = [t for (t, rel) in meta_tags if not rel]
+ book.tags = set(just_tags + book_shelves)
book.save() # update sort_key_author
+ book.translators.set([t for (t, rel) in meta_tags if rel == 'translator'])
+
cover_changed = old_cover != book.cover_info()
obsolete_children = set(b for b in book.children.all()
if b not in children)
cls.published.send(sender=cls, instance=book)
return book
+ # TODO TEST
def update_references(self):
Entity = apps.get_model('references', 'Entity')
doc = self.wldocument2()
- doc._compat_assign_section_ids()
- doc._compat_assign_ordered_ids()
+ doc.assign_ids()
+
refs = {}
- for ref_elem in doc.references():
+ for i, ref_elem in enumerate(doc.references()):
uri = ref_elem.attrib.get('href', '')
if not uri:
continue
refs[uri] = ref
if not ref_created:
ref.occurence_set.all().delete()
- sec = ref_elem.get_link()
- m = re.match(r'sec(\d+)', sec)
- assert m is not None
- sec = int(m.group(1))
+ anchor = ref_elem.get_link()
+
snippet = ref_elem.get_snippet()
b = builders['html-snippet']()
for s in snippet:
html = b.output().get_bytes().decode('utf-8')
ref.occurence_set.create(
- section=sec,
+ section=i,
+ anchor=anchor,
html=html
)
self.reference_set.exclude(entity__uri__in=refs).delete()