]> git.parisson.com Git - telemeta.git/commitdiff
add revision table, needed for #67
authorolivier <>
Mon, 6 Apr 2009 10:48:42 +0000 (10:48 +0000)
committerolivier <>
Mon, 6 Apr 2009 10:48:42 +0000 (10:48 +0000)
telemeta/models/__init__.py
telemeta/models/media.py

index 768c640e4bd5b0397ffc46fc6897795199f0fd69..b03918c9e33f5a0e8c71e5c861c46a5609748ac3 100644 (file)
@@ -7,6 +7,6 @@
 #
 # Author: Olivier Guilyardi <olivier@samalyse.com>
 
-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
 
index fd4f7cfa8a4e471e4d65dbc6031807a7189e3471..2b50c35572d2f466064675d4b55876a51ff24ae4 100644 (file)
@@ -8,7 +8,8 @@
 # Author: Olivier Guilyardi <olivier@samalyse.com>
 
 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