fnp
/
wolnelektury.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
reformat templates
[wolnelektury.git]
/
src
/
catalogue
/
models
/
book.py
diff --git
a/src/catalogue/models/book.py
b/src/catalogue/models/book.py
index
6e66f2e
..
0ed9716
100644
(file)
--- a/
src/catalogue/models/book.py
+++ b/
src/catalogue/models/book.py
@@
-92,7
+92,7
@@
class Book(models.Model):
pass
class Meta:
pass
class Meta:
- ordering = ('sort_key
',
)
+ ordering = ('sort_key
_author', 'sort_key'
)
verbose_name = _('book')
verbose_name_plural = _('books')
app_label = 'catalogue'
verbose_name = _('book')
verbose_name_plural = _('books')
app_label = 'catalogue'
@@
-106,8
+106,11
@@
class Book(models.Model):
except AttributeError:
return ''
except AttributeError:
return ''
- def author_str(self):
- return ", ".join(str(t) for t in self.tags.filter(category='author'))
+ def authors(self):
+ return self.tags.filter(category='author')
+
+ def author_unicode(self):
+ return ", ".join(self.authors().values_list('name', flat=True))
def save(self, force_insert=False, force_update=False, **kwargs):
from sortify import sortify
def save(self, force_insert=False, force_update=False, **kwargs):
from sortify import sortify
@@
-116,8
+119,8
@@
class Book(models.Model):
self.title = unicode(self.title) # ???
try:
self.title = unicode(self.title) # ???
try:
- author = self.
tags.filter(category='author')[0]
.sort_key
- except
Index
Error:
+ author = self.
authors().first()
.sort_key
+ except
Attribute
Error:
author = u''
self.sort_key_author = author
author = u''
self.sort_key_author = author
@@
-150,6
+153,9
@@
class Book(models.Model):
def language_name(self):
return dict(settings.LANGUAGES).get(self.language_code(), "")
def language_name(self):
return dict(settings.LANGUAGES).get(self.language_code(), "")
+ def is_foreign(self):
+ return self.language_code() != settings.LANGUAGE_CODE
+
def has_media(self, type_):
if type_ in Book.formats:
return bool(getattr(self, "%s_file" % type_))
def has_media(self, type_):
if type_ in Book.formats:
return bool(getattr(self, "%s_file" % type_))
@@
-247,6
+253,11
@@
class Book(models.Model):
def download_pictures(self, remote_gallery_url):
gallery_path = self.gallery_path()
def download_pictures(self, remote_gallery_url):
gallery_path = self.gallery_path()
+ # delete previous files, so we don't include old files in ebooks
+ if os.path.isdir(gallery_path):
+ for filename in os.listdir(gallery_path):
+ file_path = os.path.join(gallery_path, filename)
+ os.unlink(file_path)
ilustr_elements = list(self.wldocument().edoc.findall('//ilustr'))
if ilustr_elements:
makedirs(gallery_path)
ilustr_elements = list(self.wldocument().edoc.findall('//ilustr'))
if ilustr_elements:
makedirs(gallery_path)
@@
-470,7
+481,7
@@
class Book(models.Model):
return books
def pretty_title(self, html_links=False):
return books
def pretty_title(self, html_links=False):
- names = [(tag.name, tag.get_absolute_url()) for tag in self.
tags.filter(category='author
')]
+ names = [(tag.name, tag.get_absolute_url()) for tag in self.
authors().only('name', 'category', 'slug
')]
books = self.parents() + [self]
names.extend([(b.title, b.get_absolute_url()) for b in books])
books = self.parents() + [self]
names.extend([(b.title, b.get_absolute_url()) for b in books])
@@
-500,8
+511,7
@@
class Book(models.Model):
"""
books_by_parent = {}
"""
books_by_parent = {}
- books = cls.objects.all().order_by('parent_number', 'sort_key').only(
- 'title', 'parent', 'slug')
+ books = cls.objects.order_by('parent_number', 'sort_key').only('title', 'parent', 'slug')
if book_filter:
books = books.filter(book_filter).distinct()
if book_filter:
books = books.filter(book_filter).distinct()
@@
-521,7
+531,7
@@
class Book(models.Model):
books_by_author[tag] = []
for book in books_by_parent.get(None, ()):
books_by_author[tag] = []
for book in books_by_parent.get(None, ()):
- authors = list(book.
tags.filter(category='author
'))
+ authors = list(book.
authors().only('pk
'))
if authors:
for author in authors:
books_by_author[author].append(book)
if authors:
for author in authors:
books_by_author[author].append(book)
@@
-566,6
+576,15
@@
class Book(models.Model):
else:
return None
else:
return None
+ def update_popularity(self):
+ count = self.tags.filter(category='set').values('user').order_by('user').distinct().count()
+ try:
+ pop = self.popularity
+ pop.count = count
+ pop.save()
+ except BookPopularity.DoesNotExist:
+ BookPopularity.objects.create(book=self, count=count)
+
def add_file_fields():
for format_ in Book.formats:
def add_file_fields():
for format_ in Book.formats:
@@
-585,3
+604,8
@@
def add_file_fields():
).contribute_to_class(Book, field_name)
add_file_fields()
).contribute_to_class(Book, field_name)
add_file_fields()
+
+
+class BookPopularity(models.Model):
+ book = models.OneToOneField(Book, related_name='popularity')
+ count = models.IntegerField(default=0)