web/ldt/ldt_utils/models.py
changeset 60 a8ad7ebf5902
parent 44 b7e3f3b2d150
child 62 39b2dab4f939
--- a/web/ldt/ldt_utils/models.py	Mon Sep 13 12:56:36 2010 +0200
+++ b/web/ldt/ldt_utils/models.py	Wed Sep 15 15:07:08 2010 +0200
@@ -2,6 +2,8 @@
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from ldt.core.models import Document, Owner
+from django.contrib.auth.models import User
+import tagging.fields
 from utils import create_ldt, copy_ldt, create_empty_iri, update_iri, generate_uuid
 import lxml.etree
 import os.path
@@ -17,20 +19,36 @@
     def __unicode__(self):
         return unicode(self.id) + " - " + self.handle + ", " + self.email + ", " + self.firstname + " " + self.lastname
 
+class Media(models.Model):
+    external_id = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('media.external_id'))
+    external_permalink = models.URLField(max_length=1024, verbose_name=_('content.external_permalink'))
+    external_publication_url = models.URLField(max_length=1024, verbose_name=_('content.external_publication_url'))
+    external_src_url = models.URLField(max_length=1024, verbose_name=_('content.external_publication_url'))
+    creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('media.creation_date'))
+    media_creation_date = models.DateTimeField(null=True, blank=True, verbose_name=_('media.media_creation_date'))
+    update_date = models.DateTimeField(auto_now=True, verbose_name=_('media.update_date'))
+    videopath = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('media.videopath'))
+    duration = models.IntegerField(null=True, blank=True, verbose_name=_('media.duration'))
+    creator = models.ForeignKey(User, blank=True, verbose_name=_('media.creator'))
+    description = models.TextField(null=True, blank=True, verbose_name=_('description'))
+    title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('title'))
+    src = models.CharField(max_length=1024, unique=True, verbose_name=_('media.src'))
 
 class Content(models.Model):
     iri_id = models.CharField(max_length=1024, unique=True, default=generate_uuid, verbose_name=_('content.iri_id'))
     iriurl = models.CharField(max_length=1024, verbose_name=_('content.iriurl'))
-    src = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.src'))
-    videopath = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.videopath'))
+#    src = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.src'))
+#    videopath = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.videopath'))
     creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('content.creation_date'))
     update_date = models.DateTimeField(auto_now=True, verbose_name=_('content.update_date'))
     title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.title'))
     description = models.TextField(null=True, blank=True, verbose_name=_('content.description'))
-    external_id = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.external_id'))
+#    external_id = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.external_id'))
     authors = models.ManyToManyField(Author, blank=True, verbose_name=_('content.authors'))
     duration = models.IntegerField(null=True, blank=True, verbose_name=_('content.duration'))
     content_creation_date = models.DateTimeField(null=True, blank=True, verbose_name=_('content.content_creation_date'))
+    tags = tagging.fields.TagField(max_length=2048, null=True, blank=True )
+    media = models.ForeignKey('Media', blank=True, null=True )
 
     def get_duration(self):
         if self.duration is None:
@@ -87,6 +105,61 @@
 
     def iri_url_template(self):
         return "${web_url}${media_url}media/ldt/" + unicode(self.iri_id) + "/" + os.path.basename(self.iriurl)
+    
+    def videopath(): #@NoSelf
+        doc = """simulate videopath""" #@UnusedVariable
+       
+        def fget(self):
+            if self.media is None:
+                return None
+            else:
+                return self.media.videopath
+           
+        def fset(self, value):
+            if self.media is not None:
+                self.media.videopath = value
+                      
+        return locals()
+       
+    videopath = property(**videopath())
+
+    def src(): #@NoSelf
+        doc = """simulate videopath""" #@UnusedVariable
+       
+        def fget(self):
+            if self.media is None:
+                return None
+            else:
+                return self.media.src
+           
+        def fset(self, value):
+            if self.media is None or self.media.src != value:
+                media, created = Media.objects.get_or_create(src=value, defaults={'src':value})                
+                self.media = media
+                self.save()
+                      
+        return locals()
+       
+    src = property(**src())
+    
+    def videopath(): #@NoSelf
+        doc = """simulate videopath""" #@UnusedVariable
+       
+        def fget(self):
+            if self.media is None:
+                return None
+            else:
+                return self.media.videopath
+           
+        def fset(self, value):
+            if self.media is not None:
+                self.media.videopath = value
+                      
+        return locals()
+       
+    videopath = property(**videopath())
+
+
         
         
 class Project(Document):  
@@ -155,7 +228,7 @@
     ensemble_id = models.CharField(max_length=1024, unique=False)
     cutting_id = models.CharField(max_length=1024, unique=False)    
     element_id = models.CharField(max_length=1024, unique=False)
-    tags = models.CharField(max_length=2048, unique=False, null=True, blank=True)  
+    tags = tagging.fields.TagField(max_length=2048, null=True, blank=True, unique=False)
     title = models.CharField(max_length=2048, unique=False, null=True, blank=True)
     duration = models.IntegerField(null=True)
     start_ts = models.IntegerField(null=True)
@@ -169,3 +242,4 @@
     class Meta:
         unique_together = (('project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id'),)
 
+