Beispiel #1
0
 def test_property_diff(self):
     """
     The "fields" included in a diff don't have to be fields at all and can
     be properties, for example, as long as a custom ModelDiff is registered
     which dictates what FieldDiff to use for the "field".
     """
     diff.register(FakeFieldModel, FakeFieldModelDiff)
     a = FakeFieldModel(a='abc')
     b = FakeFieldModel(a='def')
     d = diff.diff(a, b)
     self.assertTrue(isinstance(d['b'], (TextFieldDiff,)))
Beispiel #2
0
 def test_property_diff(self):
     """
     The "fields" included in a diff don't have to be fields at all and can
     be properties, for example, as long as a custom ModelDiff is registered
     which dictates what FieldDiff to use for the "field".
     """
     diff.register(FakeFieldModel, FakeFieldModelDiff)
     a = FakeFieldModel(a='abc')
     b = FakeFieldModel(a='def')
     d = diff.diff(a, b)
     self.assertTrue(isinstance(d['b'], (TextFieldDiff, )))
Beispiel #3
0
                obj_lookup = _get_slug_lookup(unique_together, obj, new_p)
                if obj.__class__.objects.filter(**obj_lookup):
                    continue
                obj.slug = new_p.slug
                obj.pk = None  # Reset the primary key before saving.
                obj.save(comment="Parent page renamed")


class PageDiff(diff.BaseModelDiff):
    fields = (
        'name',
        ('content', diff.diffutils.HtmlFieldDiff),
    )


diff.register(Page, PageDiff)
versioning.register(Page)


class PageFile(models.Model):
    file = models.FileField(upload_to='pages/files/',
                            storage=RandomFilenameFileSystemStorage())
    name = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255, editable=False)

    _rough_type_map = [(r'^audio', 'audio'), (r'^video', 'video'),
                       (r'^application/pdf', 'pdf'),
                       (r'^application/msword', 'word'),
                       (r'^text/html', 'html'), (r'^text', 'text'),
                       (r'^image', 'image'),
                       (r'^application/vnd.ms-powerpoint', 'powerpoint'),
Beispiel #4
0
        if not slugify(self.name):
            raise ValidationError("Page name is invalid.")

    def pretty_slug(self):
        if not self.name:
            return self.slug
        return name_to_url(self.name)

    pretty_slug = property(pretty_slug)


class PageDiff(diff.BaseModelDiff):
    fields = ("name", ("content", diff.diffutils.HtmlFieldDiff))


diff.register(Page, PageDiff)


class PageFile(models.Model):
    file = models.FileField(upload_to="pages/files/", storage=RandomFilenameFileSystemStorage())
    name = models.CharField(max_length=255)
    slug = models.SlugField(max_length=255, editable=False)
    history = TrackChanges()

    _rough_type_map = [
        (r"^audio", "audio"),
        (r"^video", "video"),
        (r"^application/pdf", "pdf"),
        (r"^application/msword", "word"),
        (r"^text/html", "html"),
        (r"^text", "text"),
Beispiel #5
0
        return ', '.join(map(unicode, self.tags.all()))

    class Meta:
        ordering = ('page__slug',)


class TagsFieldDiff(diff.BaseFieldDiff):
    template = 'tags/tags_diff.html'

    def get_diff(self):
        set1 = set(self.field1 and self.field1.all() or [])
        set2 = set(self.field2 and self.field2.all() or [])
        deleted = set1.difference(set2)
        added = set2.difference(set1)
        equal = set1.intersection(set2)
        return {'equal': equal, 'deleted': deleted, 'added': added}


class PageTagSetDiff(diff.BaseModelDiff):
    fields = (('tags', TagsFieldDiff),
              )


diff.register(PageTagSet, PageTagSetDiff)
versioning.register(PageTagSet)


# For registration calls
import signals
import feeds