--- /dev/null
+# -*- coding: utf-8 -*-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from django.db import models
+from django.utils.translation import ugettext_lazy as _
+
+
+class Source(models.Model):
+ """A collection of books, which might be defined before publishing them."""
+ netloc = models.CharField(_('network location'), max_length=120, primary_key=True)
+ name = models.CharField(_('name'), max_length=120, blank=True)
+
+ class Meta:
+ ordering = ('netloc',)
+ verbose_name = _('source')
+ verbose_name_plural = _('sources')
+ app_label = 'catalogue'
+
+ def __unicode__(self):
+ return self.netloc
+
+ def save(self, *args, **kwargs):
+ from catalogue.models import Book
+ try:
+ str(self.pk)
+ old_self = type(self).objects.get(pk=self)
+ except type(self).DoesNotExist:
+ old_name = u''
+ old_netloc = self.netloc
+ else:
+ old_name = old_self.name
+ old_netloc = old_self.netloc
+
+ ret = super(Source, self).save(*args, **kwargs)
+
+ # If something really changed here, find relevant books
+ # and invalidate their cached includes.
+ if old_name != self.name or old_netloc != self.netloc:
+ for book in Book.objects.all():
+ source = book.extra_info.get('source_url', '')
+ if self.netloc in source or (old_netloc != self.netloc
+ and old_netloc in source):
+ book.flush_includes()
+ return ret