orphans = []
books_by_author = SortedDict()
+ books_nav = SortedDict()
for tag in models.Tag.objects.filter(category='author'):
books_by_author[tag] = []
+ if books_nav.has_key(tag.sort_key[0]):
+ books_nav[tag.sort_key[0]].append(tag)
+ else:
+ books_nav[tag.sort_key[0]] = [tag]
for book in books_by_parent[None]:
authors = list(book.tags.filter(category='author'))
objects = fragments
else:
# get relevant books and their tags
- objects = models.Book.tagged.with_all(tags).order_by()
+ objects = models.Book.tagged.with_all(tags)
if not shelf_is_set:
# eliminate descendants
l_tags = models.Tag.objects.filter(category='book', slug__in=[book.book_tag_slug() for book in objects])
def book_text(request, slug):
book = get_object_or_404(models.Book, slug=slug)
+ if not book.has_html_file():
+ raise Http404
book_themes = {}
for fragment in book.fragments.all():
for theme in fragment.tags.filter(category='theme'):
return Q(**kwargs)
-if settings.DATABASE_ENGINE == 'sqlite3':
+if settings.DATABASES['default']['ENGINE'] == 'django.db.backends.sqlite3':
_word_starts_with = _sqlite_word_starts_with
return type
+def books_starting_with(prefix):
+ prefix = prefix.lower()
+ return models.Book.objects.filter(_word_starts_with('title', prefix))
+
def find_best_matches(query, user=None):
""" Finds a Book, Tag or Bookstub best matching a query.
temp = tempfile.TemporaryFile()
archive = zipfile.ZipFile(temp, 'w')
+ already = set()
for book in collect_books(models.Book.tagged.with_all(shelf)):
if 'pdf' in formats and book.pdf_file:
filename = book.pdf_file.path
archive.write(filename, str('%s.pdf' % book.slug))
- if 'epub' in formats and book.epub_file:
- filename = book.epub_file.path
- archive.write(filename, str('%s.epub' % book.slug))
+ if book.root_ancestor not in already and 'epub' in formats and book.root_ancestor.epub_file:
+ filename = book.root_ancestor.epub_file.path
+ archive.write(filename, str('%s.epub' % book.root_ancestor.slug))
+ already.add(book.root_ancestor)
if 'odt' in formats and book.odt_file:
filename = book.odt_file.path
archive.write(filename, str('%s.odt' % book.slug))
for book in collect_books(models.Book.tagged.with_all(shelf)):
if book.pdf_file:
formats['pdf'] = True
- if book.epub_file:
+ if book.root_ancestor.epub_file:
formats['epub'] = True
if book.odt_file:
formats['odt'] = True