fnp
/
wolnelektury.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Move source names to a model.
[wolnelektury.git]
/
apps
/
catalogue
/
models
/
book.py
diff --git
a/apps/catalogue/models/book.py
b/apps/catalogue/models/book.py
index
64dd498
..
27240fb
100644
(file)
--- a/
apps/catalogue/models/book.py
+++ b/
apps/catalogue/models/book.py
@@
-8,17
+8,20
@@
from django.core.cache import get_cache
from django.db import models
from django.db.models import permalink
import django.dispatch
from django.db import models
from django.db.models import permalink
import django.dispatch
+from django.core.urlresolvers import reverse
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext_lazy as _
import jsonfield
from django.utils.datastructures import SortedDict
from django.utils.translation import ugettext_lazy as _
import jsonfield
+from fnpdjango.storage import BofhFileSystemStorage
from catalogue import constants
from catalogue.fields import EbookField
from catalogue.models import Tag, Fragment, BookMedia
from catalogue import constants
from catalogue.fields import EbookField
from catalogue.models import Tag, Fragment, BookMedia
-from catalogue.utils import create_zip, split_tags,
book_upload_path,
related_tag_name
+from catalogue.utils import create_zip, split_tags, related_tag_name
from catalogue import app_settings
from catalogue import tasks
from newtagging import managers
from catalogue import app_settings
from catalogue import tasks
from newtagging import managers
+bofh_storage = BofhFileSystemStorage()
permanent_cache = get_cache('permanent')
permanent_cache = get_cache('permanent')
@@
-43,10
+46,14
@@
class Book(models.Model):
# files generated during publication
cover = EbookField('cover', _('cover'),
# files generated during publication
cover = EbookField('cover', _('cover'),
- upload_to=book_upload_path('jpg'), null=True, blank=True)
+ null=True, blank=True,
+ upload_to=lambda i, n: 'book/cover/%s.jpg' % i.slug,
+ storage=bofh_storage, max_length=255)
# Cleaner version of cover for thumbs
# Cleaner version of cover for thumbs
- cover_thumb = EbookField('cover_thumb', _('cover thumbnail'),
- upload_to=book_upload_path('th.jpg'), null=True, blank=True)
+ cover_thumb = EbookField('cover_thumb', _('cover thumbnail'),
+ null=True, blank=True,
+ upload_to=lambda i, n: 'book/cover_thumb/%s.jpg' % i.slug,
+ max_length=255)
ebook_formats = constants.EBOOK_FORMATS
formats = ebook_formats + ['html', 'xml']
ebook_formats = constants.EBOOK_FORMATS
formats = ebook_formats + ['html', 'xml']
@@
-100,6
+107,12
@@
class Book(models.Model):
def name(self):
return self.title
def name(self):
return self.title
+ def language_code(self):
+ return constants.LANGUAGES_3TO2.get(self.language, self.language)
+
+ def language_name(self):
+ return dict(settings.LANGUAGES).get(self.language_code(), "")
+
def book_tag_slug(self):
return ('l-' + self.slug)[:120]
def book_tag_slug(self):
return ('l-' + self.slug)[:120]
@@
-122,7
+135,7
@@
class Book(models.Model):
if self.has_media(type_):
if type_ in Book.formats:
return getattr(self, "%s_file" % type_)
if self.has_media(type_):
if type_ in Book.formats:
return getattr(self, "%s_file" % type_)
- else:
+ else:
return self.media.filter(type=type_)
else:
return None
return self.media.filter(type=type_)
else:
return None
@@
-134,7
+147,7
@@
class Book(models.Model):
def get_ogg(self):
return self.get_media("ogg")
def get_daisy(self):
def get_ogg(self):
return self.get_media("ogg")
def get_daisy(self):
- return self.get_media("daisy")
+ return self.get_media("daisy")
def reset_short_html(self):
if self.id is None:
def reset_short_html(self):
if self.id is None:
@@
-145,7
+158,7
@@
class Book(models.Model):
for fragm in self.fragments.all().iterator():
fragm.reset_short_html()
for fragm in self.fragments.all().iterator():
fragm.reset_short_html()
- try:
+ try:
author = self.tags.filter(category='author')[0].sort_key
except IndexError:
author = u''
author = self.tags.filter(category='author')[0].sort_key
except IndexError:
author = u''
@@
-317,7
+330,7
@@
class Book(models.Model):
if 'cover' not in dont_build:
book.cover.build_delay()
book.cover_thumb.build_delay()
if 'cover' not in dont_build:
book.cover.build_delay()
book.cover_thumb.build_delay()
-
+
# No saves behind this point.
if has_own_text:
# No saves behind this point.
if has_own_text:
@@
-406,6
+419,10
@@
class Book(models.Model):
for child in self.children.all():
child.parent_cover_changed()
for child in self.children.all():
child.parent_cover_changed()
+ def other_versions(self):
+ """Find other versions (i.e. in other languages) of the book."""
+ return type(self).objects.filter(common_slug=self.common_slug).exclude(pk=self.pk)
+
def related_info(self):
"""Keeps info about related objects (tags, media) in cache field."""
if self._related_info is not None:
def related_info(self):
"""Keeps info about related objects (tags, media) in cache field."""
if self._related_info is not None:
@@
-511,8
+528,6
@@
class Book(models.Model):
rel_info = book.related_info()
names = [(related_tag_name(tag), Tag.create_url('author', tag['slug']))
for tag in rel_info['tags'].get('author', ())]
rel_info = book.related_info()
names = [(related_tag_name(tag), Tag.create_url('author', tag['slug']))
for tag in rel_info['tags'].get('author', ())]
- import logging
- logging.info("%s, %s" % (book.slug, unicode(rel_info['tags'].get('author', ()))))
if 'parents' in rel_info:
books = [(name, Book.create_url(slug))
for name, slug in rel_info['parents']]
if 'parents' in rel_info:
books = [(name, Book.create_url(slug))
for name, slug in rel_info['parents']]
@@
-535,7
+550,7
@@
class Book(models.Model):
"""
# get relevant books and their tags
objects = cls.tagged.with_all(tags)
"""
# get relevant books and their tags
objects = cls.tagged.with_all(tags)
- parents = objects.
filter(html_file=''
).only('slug')
+ parents = objects.
exclude(children=None
).only('slug')
# eliminate descendants
l_tags = Tag.objects.filter(category='book',
slug__in=[book.book_tag_slug() for book in parents.iterator()])
# eliminate descendants
l_tags = Tag.objects.filter(category='book',
slug__in=[book.book_tag_slug() for book in parents.iterator()])
@@
-558,7
+573,7
@@
class Book(models.Model):
'title', 'parent', 'slug')
if filter:
books = books.filter(filter).distinct()
'title', 'parent', 'slug')
if filter:
books = books.filter(filter).distinct()
-
+
book_ids = set(b['pk'] for b in books.values("pk").iterator())
for book in books.iterator():
parent = book.parent_id
book_ids = set(b['pk'] for b in books.values("pk").iterator())
for book in books.iterator():
parent = book.parent_id
@@
-574,7
+589,7
@@
class Book(models.Model):
for tag in Tag.objects.filter(category='author').iterator():
books_by_author[tag] = []
for tag in Tag.objects.filter(category='author').iterator():
books_by_author[tag] = []
- for book in books_by_parent.get(None,()):
+ for book in books_by_parent.get(None,
()):
authors = list(book.tags.filter(category='author'))
if authors:
for author in authors:
authors = list(book.tags.filter(category='author'))
if authors:
for author in authors:
@@
-598,6
+613,14
@@
class Book(models.Model):
audiences = sorted(set([self._audiences_pl.get(a, (99, a)) for a in audiences]))
return [a[1] for a in audiences]
audiences = sorted(set([self._audiences_pl.get(a, (99, a)) for a in audiences]))
return [a[1] for a in audiences]
+ def stage_note(self):
+ stage = self.extra_info.get('stage')
+ if stage and stage < '0.4':
+ return (_('This work needs modernisation'),
+ reverse('infopage', args=['wymagajace-uwspolczesnienia']))
+ else:
+ return None, None
+
def choose_fragment(self):
tag = self.book_tag()
fragments = Fragment.tagged.with_any([tag])
def choose_fragment(self):
tag = self.book_tag()
fragments = Fragment.tagged.with_any([tag])
@@
-612,6
+635,13
@@
class Book(models.Model):
# add the file fields
for format_ in Book.formats:
field_name = "%s_file" % format_
# add the file fields
for format_ in Book.formats:
field_name = "%s_file" % format_
+ upload_to = (lambda upload_path:
+ lambda i, n: upload_path % i.slug
+ )('book/%s/%%s.%s' % (format_, format_))
EbookField(format_, _("%s file" % format_.upper()),
EbookField(format_, _("%s file" % format_.upper()),
- upload_to=book_upload_path(format_),
- blank=True, default='').contribute_to_class(Book, field_name)
+ upload_to=upload_to,
+ storage=bofh_storage,
+ max_length=255,
+ blank=True,
+ default=''
+ ).contribute_to_class(Book, field_name)