from api.models import Deleted
from catalogue.forms import BookImportForm
from catalogue.models import Book, Tag, BookMedia, Fragment, Collection
-from catalogue.utils import related_tag_name
from picture.models import Picture
from picture.forms import PictureImportForm
from wolnelektury.utils import tz
:raises: ValueError when tags can't be found
"""
if not tags:
- return []
+ return [], []
tags = tags.strip('/').split('/')
real_tags = []
+ books = []
while tags:
category = tags.pop(0)
slug = tags.pop(0)
if not category in allowed:
raise ValueError('Category not allowed.')
- # !^%@#$^#!
if category == 'book':
- slug = 'l-' + slug
+ books.append(Book.objects.get(slug=slug))
try:
real_tags.append(Tag.objects.get(category=category, slug=slug))
except Tag.DoesNotExist:
raise ValueError('Tag not found')
- return real_tags
+ return real_tags, books
# RESTful handlers
are returned.
"""
try:
- tags = read_tags(tags, allowed=book_tag_categories)
+ tags, ancestors_ = read_tags(tags, allowed=book_tag_categories)
except ValueError:
return rc.NOT_FOUND
def _tag_getter(category):
@classmethod
def get_tag(cls, book):
- return ", ".join(related_tag_name(t) for t in book.related_info()['tags'].get(category, []))
+ return ', '.join(tag.name for tag in book.tags.filter(category=category))
return get_tag
for plural, singular in category_singular.items():
setattr(BookDetails, plural, _tags_getter(singular))
except KeyError, e:
return rc.NOT_FOUND
- tags = Tag.objects.filter(category=category_sng).exclude(book_count=0)
+ tags = Tag.objects.filter(category=category_sng).exclude(items=None)
if tags.exists():
return tags
else:
"""
try:
- tags = read_tags(tags, allowed=self.categories)
+ tags, ancestors = read_tags(tags, allowed=self.categories)
except ValueError:
return rc.NOT_FOUND
fragments = Fragment.tagged.with_all(tags).select_related('book')
obj[field] = book.get_absolute_url()
elif field == 'tags':
- obj[field] = [t.id for t in book.tags.exclude(category__in=('book', 'set')).iterator()]
+ obj[field] = [t.id for t in book.tags.exclude(category='set').iterator()]
elif field == 'author':
obj[field] = ", ".join(t.name for t in book.tags.filter(category='author').iterator())
for tag in Tag.objects.filter(category__in=categories,
changed_at__gte=since,
- changed_at__lt=until).iterator():
- # only serve non-empty tags
- if tag.book_count:
- tag_d = cls.tag_dict(tag, fields)
- updated.append(tag_d)
- elif tag.created_at < since:
- deleted.append(tag.id)
+ changed_at__lt=until
+ ).exclude(items=None).iterator():
+ tag_d = cls.tag_dict(tag, fields)
+ updated.append(tag_d)
+ for tag in Tag.objects.filter(category__in=categories,
+ created_at__lt=since,
+ changed_at__gte=since,
+ changed_at__lt=until,
+ items=None).iterator():
+ deleted.append(tag.id)
if updated:
changes['updated'] = updated