From 30bcb268a38440807c0ff17a101d2bed072f56be Mon Sep 17 00:00:00 2001 From: olivier <> Date: Mon, 6 Apr 2009 10:48:42 +0000 Subject: [PATCH] add revision table, needed for #67 --- telemeta/models/__init__.py | 2 +- telemeta/models/media.py | 37 ++++++++++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 4 deletions(-) diff --git a/telemeta/models/__init__.py b/telemeta/models/__init__.py index 768c640e..b03918c9 100644 --- a/telemeta/models/__init__.py +++ b/telemeta/models/__init__.py @@ -7,6 +7,6 @@ # # Author: Olivier Guilyardi -from telemeta.models.media import MediaCollection, MediaItem, MediaPart, MediaCore +from telemeta.models.media import MediaCollection, MediaItem, MediaPart, MediaCore, Revision from telemeta.models.enum import PhysicalFormat, PublishingStatus diff --git a/telemeta/models/media.py b/telemeta/models/media.py index fd4f7cfa..2b50c355 100644 --- a/telemeta/models/media.py +++ b/telemeta/models/media.py @@ -8,7 +8,8 @@ # Author: Olivier Guilyardi from django.db.models import Model, CharField, FileField, \ - TextField, DecimalField, ForeignKey, DateField + TextField, DecimalField, ForeignKey, DateField, AutoField, \ + DateTimeField from django.core.exceptions import ObjectDoesNotExist from django.conf import settings from xml.dom.minidom import getDOMImplementation @@ -187,7 +188,8 @@ class MediaCollection(Model, MediaCore): def save(self, force_insert=False, force_update=False): if not MediaCore.is_well_formed_id(self.id): raise MediaInvalidIdError() - return super(MediaCollection, self).save(force_insert, force_update) + super(MediaCollection, self).save(force_insert, force_update) + Revision(element_type='collection', element_id=self.id).touch() class Meta: app_label = 'telemeta' @@ -284,7 +286,8 @@ class MediaItem(Model, MediaCore): def save(self, force_insert=False, force_update=False): if not MediaCore.is_well_formed_id(self.id): raise MediaInvalidIdError() - return super(MediaItem, self).save(force_insert, force_update) + super(MediaItem, self).save(force_insert, force_update) + Revision(element_type='item', element_id=self.id).touch() class Meta: app_label = 'telemeta' @@ -319,10 +322,38 @@ class MediaPart(Model, MediaCore): def __unicode__(self): return self.title + def save(self, force_insert=False, force_update=False): + super(MediaPart, self).save(force_insert, force_update) + Revision(element_type='part', element_id=self.id).touch() + class Meta: app_label = 'telemeta' ordering = ['title'] db_table = 'telemeta_part' +class Revision(Model): + id = AutoField(primary_key=True) + element_type = CharField(max_length=16, choices=(('collection', 'collection'), + ('item', 'item'), + ('part', 'part'))) + element_id = CharField(max_length=250) + change_type = CharField(max_length=8, choices= (('create', 'create'), + ('update', 'update'), + ('delete', 'delete'))) + time = DateTimeField(auto_now_add=True) + + + def touch(self): + q = Revision.objects.filter(element_type=self.element_type, element_id=self.element_id) + if q.count(): + self.change_type = 'update' + else: + self.change_type = 'create' + self.save() + + class Meta: + app_label = 'telemeta' + db_table = 'telemeta_revision' + class MediaInvalidIdError(Exception): pass -- 2.39.5