def save(self, force_insert=False, force_update=False, reset_short_html=True, refresh_mp3=True):
if reset_short_html:
# Reset _short_html during save
+ update = {}
for key in filter(lambda x: x.startswith('_short_html'), self.__dict__):
+ update[key] = ''
self.__setattr__(key, '')
+ # Fragment.short_html relies on book's tags, so reset it here too
+ self.fragments.all().update(**update)
book = super(Book, self).save(force_insert, force_update)
book_info = dcparser.parse(xml_file)
if not isinstance(xml_file, File):
- xml_file = File(xml_file)
+ xml_file = File(open(xml_file))
try:
return cls.from_text_and_meta(xml_file, book_info, overwrite)
book.save()
book_tags = []
- for category in ('kind', 'genre', 'author', 'epoch'):
- tag_name = getattr(book_info, category)
- tag_sort_key = tag_name
- if category == 'author':
- tag_sort_key = tag_name.last_name
- tag_name = ' '.join(tag_name.first_names) + ' ' + tag_name.last_name
- tag, created = Tag.objects.get_or_create(slug=slughifi(tag_name), category=category)
- if created:
- tag.name = tag_name
- tag.sort_key = slughifi(tag_sort_key)
- tag.save()
- book_tags.append(tag)
+ categories = (('kinds', 'kind'), ('genres', 'genre'), ('authors', 'author'), ('epochs', 'epoch'))
+ for field_name, category in categories:
+ try:
+ tag_names = getattr(book_info, field_name)
+ except:
+ tag_names = [getattr(book_info, category)]
+ for tag_name in tag_names:
+ tag_sort_key = tag_name
+ if category == 'author':
+ tag_sort_key = tag_name.last_name
+ tag_name = ' '.join(tag_name.first_names) + ' ' + tag_name.last_name
+ tag, created = Tag.objects.get_or_create(slug=slughifi(tag_name), category=category)
+ if created:
+ tag.name = tag_name
+ tag.sort_key = slughifi(tag_sort_key)
+ tag.save()
+ book_tags.append(tag)
book.tags = book_tags
if short_html and len(short_html):
return mark_safe(short_html)
else:
- book_authors = [mark_safe(u'<a href="%s">%s</a>' % (tag.get_absolute_url(), tag.name))
- for tag in self.book.tags if tag.category == 'author']
-
setattr(self, key, unicode(render_to_string('catalogue/fragment_short.html',
- {'fragment': self, 'book': self.book, 'book_authors': book_authors})))
+ {'fragment': self})))
self.save()
return mark_safe(getattr(self, key))