# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
#
from django.contrib.sites.models import Site
-from django.db import models
+from django.db import models, transaction
from django.template.loader import render_to_string
from django.utils.translation import ugettext_lazy as _
from slughifi import slughifi
def get_absolute_url(self):
return ("catalogue_book", [self.slug])
+ def correct_about(self):
+ return "http://%s%s" % (
+ Site.objects.get_current().domain,
+ self.get_absolute_url()
+ )
# Creating & manipulating
# =======================
return self.public or request.user.is_authenticated()
@classmethod
+ @transaction.commit_on_success
def create(cls, creator, text, *args, **kwargs):
b = cls.objects.create(*args, **kwargs)
b.chunk_set.all().update(creator=creator)
return self.chunk_set.reverse()[0].split(*args, **kwargs)
@classmethod
+ @transaction.commit_on_success
def import_xml_text(cls, text=u'', previous_book=None,
commit_args=None, **kwargs):
"""Imports a book from XML, splitting it into chunks as necessary."""
i += 1
return new_slug
+ @transaction.commit_on_success
def append(self, other, slugs=None, titles=None):
"""Add all chunks of another book to self."""
assert self != other
assert not other.chunk_set.exists()
other.delete()
+ @transaction.commit_on_success
+ def prepend_history(self, other):
+ """Prepend history from all the other book's chunks to own."""
+ assert self != other
+
+ for i in range(len(self), len(other)):
+ title = u"pusta część %d" % i
+ chunk = self.add(slughifi(title), title)
+ chunk.commit('')
+
+ for i in range(len(other)):
+ self[i].prepend_history(other[0])
+
+ assert not other.chunk_set.exists()
+ other.delete()
+
# State & cache
# =============
except ValidationError, e:
raise AssertionError(_('Invalid Dublin Core') + ': ' + str(e))
- valid_about = "http://%s%s" % (Site.objects.get_current().domain, self.get_absolute_url())
+ valid_about = self.correct_about()
assert bi.about == valid_about, _("rdf:about is not") + " " + valid_about
def hidden(self):