def __init__(self, book):
self.book = book
- def by_slug(self, slug):
- if slug == self.book.slug:
- return self.book.xml_file
+ def by_slug_and_lang(self, slug, language):
+ if slug == self.book.slug and language == self.language:
+ return open(self.book.xml_file.path)
else:
- return type(self.book).objects.get(slug=slug).xml_file
+ return type(self.book).objects.get(
+ slug=slug, language=language).xml_file
class LockFile(object):
if not DefaultStorage().exists(file_name):
book.build_pdf(customizations=customizations, file_name=file_name)
print "done."
+
+
+class MultiQuerySet(object):
+ def __init__(self, *args, **kwargs):
+ self.querysets = args
+ self._count = None
+
+ def count(self):
+ if not self._count:
+ self._count = sum(len(qs) for qs in self.querysets)
+ return self._count
+
+ def __len__(self):
+ return self.count()
+
+ def __getitem__(self, item):
+ indices = (offset, stop, step) = item.indices(self.count())
+ items = []
+ total_len = stop - offset
+ for qs in self.querysets:
+ if len(qs) < offset:
+ offset -= len(qs)
+ else:
+ items += list(qs[offset:stop])
+ if len(items) >= total_len:
+ return items
+ else:
+ offset = 0
+ stop = total_len - len(items)
+ continue
\ No newline at end of file