X-Git-Url: https://git.mdrn.pl/wolnelektury.git/blobdiff_plain/5eaa85a6a703ca0d05063850211eddc414a912b4..cb6cfc1c84798ac22313e3e44cd00ff5da601575:/apps/catalogue/models.py
diff --git a/apps/catalogue/models.py b/apps/catalogue/models.py
index ab480d7fc..2202cc103 100644
--- a/apps/catalogue/models.py
+++ b/apps/catalogue/models.py
@@ -64,6 +64,9 @@ class Tag(TagBase):
gazeta_link = models.CharField(blank=True, max_length=240)
wiki_link = models.CharField(blank=True, max_length=240)
+ class UrlDeprecationWarning(DeprecationWarning):
+ pass
+
categories_rev = {
'autor': 'author',
'epoka': 'epoch',
@@ -122,19 +125,20 @@ class Tag(TagBase):
real_tags = []
ambiguous_slugs = []
category = None
+ deprecated = False
tags_splitted = tags.split('/')
- for index, name in enumerate(tags_splitted):
- if name in Tag.categories_rev:
+ for name in tags_splitted:
+ if category:
+ real_tags.append(Tag.objects.get(slug=name, category=category))
+ category = None
+ elif name in Tag.categories_rev:
category = Tag.categories_rev[name]
else:
- if category:
- real_tags.append(Tag.objects.get(slug=name, category=category))
- category = None
- else:
- try:
- real_tags.append(Tag.objects.exclude(category='book').get(slug=name))
- except Tag.MultipleObjectsReturned, e:
- ambiguous_slugs.append(name)
+ try:
+ real_tags.append(Tag.objects.exclude(category='book').get(slug=name))
+ deprecated = True
+ except Tag.MultipleObjectsReturned, e:
+ ambiguous_slugs.append(name)
if category:
# something strange left off
@@ -145,8 +149,11 @@ class Tag(TagBase):
e.tags = real_tags
e.ambiguous_slugs = ambiguous_slugs
raise e
- else:
- return real_tags
+ if deprecated:
+ e = Tag.UrlDeprecationWarning()
+ e.tags = real_tags
+ raise e
+ return real_tags
else:
return TagBase.get_tag_list(tags)
@@ -156,26 +163,37 @@ class Tag(TagBase):
# TODO: why is this hard-coded ?
-def book_upload_path(ext=None):
+def book_upload_path(ext=None, maxlen=100):
def get_dynamic_path(media, filename, ext=ext):
# how to put related book's slug here?
if not ext:
- ext = media.type
+ if media.type == 'daisy':
+ ext = 'daisy.zip'
+ else:
+ ext = media.type
if not media.name:
name = slughifi(filename.split(".")[0])
else:
name = slughifi(media.name)
- return 'lektura/%s.%s' % (name, ext)
+ return 'lektura/%s.%s' % (name[:maxlen-len('lektura/.%s' % ext)-4], ext)
return get_dynamic_path
class BookMedia(models.Model):
type = models.CharField(_('type'), choices=MEDIA_FORMATS, max_length="100")
- name = models.CharField(_('name'), max_length="100", blank=True)
- file = models.FileField(_('file'), upload_to=book_upload_path(), blank=True)
+ name = models.CharField(_('name'), max_length="100")
+ file = models.FileField(_('file'), upload_to=book_upload_path())
uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False)
extra_info = JSONField(_('extra information'), default='{}')
+ def book_count(self):
+ return self.book_set.count()
+ book_count.short_description = _('book count')
+
+ def books(self):
+ return mark_safe('
'.join("%s" % (reverse('admin:catalogue_book_change', args=[b.id]), b.title) for b in self.book_set.all()))
+ books.short_description = _('books')
+
def __unicode__(self):
return "%s (%s)" % (self.name, self.file.name.split("/")[-1])
@@ -547,7 +565,7 @@ class Book(models.Model):
tag.save()
book_tags.append(tag)
- book.tags = book_tags + book_shelves
+ book.tags = set(book_tags + book_shelves)
book_tag = book.book_tag()
@@ -603,8 +621,8 @@ class Book(models.Model):
new_fragment.save()
new_fragment.tags = set(book_tags + themes + [book_tag] + ancestor_tags)
- if not settings.NO_BUILD_TXT and build_txt:
- book.build_txt()
+ if not settings.NO_BUILD_TXT and build_txt:
+ book.build_txt()
if not settings.NO_BUILD_EPUB and build_epub:
book.root_ancestor.build_epub()