# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
#
+import json
from collections import namedtuple
from django.db import models
from django.utils.translation import ugettext_lazy as _
format_choices = [(k, _('%s file') % t.name)
for k, t in formats.items()]
- type = models.CharField(_('type'), choices=format_choices, max_length="100")
- name = models.CharField(_('name'), max_length="100")
+ type = models.CharField(_('type'), db_index=True, choices=format_choices, max_length="100")
+ name = models.CharField(_('name'), max_length=512)
file = OverwritingFileField(_('file'), upload_to=book_upload_path())
- uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False)
- extra_info = jsonfield.JSONField(_('extra information'), default='{}', editable=False)
+ uploaded_at = models.DateTimeField(_('creation date'), auto_now_add=True, editable=False, db_index=True)
+ extra_info = jsonfield.JSONField(_('extra information'), default={}, editable=False)
book = models.ForeignKey('Book', related_name='media')
source_sha1 = models.CharField(null=True, blank=True, max_length=40, editable=False)
remove_zip("%s_%s" % (self.book.slug, self.type))
extra_info = self.extra_info
+ if isinstance(extra_info, basestring):
+ # Walkaround for weird jsonfield 'no-decode' optimization.
+ extra_info = json.loads(extra_info)
extra_info.update(self.read_meta())
self.extra_info = extra_info
self.source_sha1 = self.read_source_sha1(self.file.path, self.type)