web/blinkster/ldt/models.py
author ymh <ymh.work@gmail.com>
Tue, 01 Jun 2010 19:07:23 +0200
changeset 35 8b65c9054eac
parent 29 cc9b7e14412b
child 36 bbe6f42d42b2
permissions -rw-r--r--
correct errors
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
import os
29
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
     2
import xml
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
     3
import Ft.Xml
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
from django.db import models
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
from django.contrib import admin
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
import lucene
3
526ebd3988b0 replace pocketfilms occurence by blinkster
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     8
from blinkster.ldt import STORE
526ebd3988b0 replace pocketfilms occurence by blinkster
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     9
from blinkster.ldt import ANALYZER
526ebd3988b0 replace pocketfilms occurence by blinkster
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    10
from blinkster import settings
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
class Author(models.Model):
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
    handle = models.CharField(max_length=512, unique=True, blank=True, null=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    email = models.EmailField(unique=False, blank=True, null=True)
35
8b65c9054eac correct errors
ymh <ymh.work@gmail.com>
parents: 29
diff changeset
    16
    firstname = models.CharField(max_length=512, blank=True, null=True)
8b65c9054eac correct errors
ymh <ymh.work@gmail.com>
parents: 29
diff changeset
    17
    lastname = models.CharField(max_length=512, blank=True, null=True)
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
    
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
    def __unicode__(self):
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
        return unicode(self.id) + " - " + self.handle + ", " + self.email + ", " + self.firstname + " " + self.lastname
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
class Content(models.Model):
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    def uploadTo(self, filename):
35
8b65c9054eac correct errors
ymh <ymh.work@gmail.com>
parents: 29
diff changeset
    25
        return "media/ldt/" + self.iri_id + "/" + filename
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    iri_id = models.CharField(max_length=1024, unique=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
    iri = models.FileField(upload_to=uploadTo, null=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
    creation_date = models.DateTimeField(auto_now_add=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
    update_date = models.DateTimeField(auto_now=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
    title = models.CharField(max_length=1024, null=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
    description = models.TextField(null=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
    external_id = models.CharField(max_length=1024, null=True, blank=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
    authors = models.ManyToManyField(Author)
29
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    35
    duration = models.IntegerField(null=True, blank=True)
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    36
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    37
    def get_duration(self):
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    38
        if self.duration is None:
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    39
            doc = xml.dom.minidom.parse(self.iri_file_path())
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    40
            doc = Ft.Xml.Domlette.ConvertDocument(doc)        
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    41
            con = xml.xpath.Context.Context(doc, 1, 1, None)
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    42
            res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    43
            self.duration = int(res[0].getAttributeNS(None, 'dur'))
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    44
            self.save()
cc9b7e14412b update django and lucene
ymh <ymh.work@gmail.com>
parents: 16
diff changeset
    45
        return self.duration
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    def delete(self):
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        super(Content, self).delete()
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
        writer = lucene.IndexModifier(STORE, ANALYZER, True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
        writer.deleteDocuments(lucene.Term("iri_id", self.iri_id))
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        writer.flush()
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
    
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
    def iri_file_path(self):
35
8b65c9054eac correct errors
ymh <ymh.work@gmail.com>
parents: 29
diff changeset
    54
        return os.path.join(os.path.join(os.path.join(os.path.join(settings.MEDIA_ROOT, "media"), "ldt"), self.iri_id), os.path.basename(self.iri.path))
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
    def iri_url(self, web_url=""):
35
8b65c9054eac correct errors
ymh <ymh.work@gmail.com>
parents: 29
diff changeset
    57
        return unicode(web_url) + unicode(settings.MEDIA_URL) + u"media/ldt/" + unicode(self.iri_id) + "/" + os.path.basename(self.iri.path)
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    def iri_url_template(self):
35
8b65c9054eac correct errors
ymh <ymh.work@gmail.com>
parents: 29
diff changeset
    60
            return "${web_url}${media_url}media/ldt/" + unicode(self.iri_id) + "/" + os.path.basename(self.iri.path)
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    def __unicode__(self):
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
        return str(self.id) + ": " + self.iri_id
16
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    64
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
class LdtProject(models.Model):
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    ldt_id = models.CharField(max_length=1024, unique=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    ldt = models.TextField(null=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    authors = models.ManyToManyField(Author)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    contents = models.ManyToManyField(Content)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
    creation_date = models.DateTimeField(auto_now_add=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    modification_date = models.DateTimeField(auto_now=True)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
    def __unicode__(self):
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        return unicode(self.id) + u": " + unicode(self.ldt_id)
16
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    77
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    78
class Segment(models.Model):
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    79
    
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    80
    project_obj = models.ForeignKey(LdtProject, null=True)
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    81
    content = models.ForeignKey(Content)
35
8b65c9054eac correct errors
ymh <ymh.work@gmail.com>
parents: 29
diff changeset
    82
    project_id = models.CharField(max_length=1024, unique=False, blank=True, null=True)
16
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    83
    iri_id = models.CharField(max_length=1024, unique=False)
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    84
    ensemble_id = models.CharField(max_length=1024, unique=False)
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    85
    cutting_id = models.CharField(max_length=1024, unique=False)    
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    86
    element_id = models.CharField(max_length=1024, unique=False)
35
8b65c9054eac correct errors
ymh <ymh.work@gmail.com>
parents: 29
diff changeset
    87
    tags = models.CharField(max_length=2048, unique=False, null=True, blank=True)  
16
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    88
    title = models.CharField(max_length=2048, unique=False, null=True, blank=True)
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    89
    duration = models.IntegerField(null=True)
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    90
    start_ts = models.IntegerField(null=True)
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    91
    author = models.CharField(max_length=1024, unique=False, null=True, blank=True)
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    92
    date = models.CharField(max_length=128, unique=False, null=True, blank=True)
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    93
    abstract = models.TextField(null=True, blank=True)
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    94
    
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    95
    def __unicode__(self):
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    96
        return "/".join((unicode(self.project_id), unicode(self.iri_id), unicode(self.ensemble_id), unicode(self.cutting_id), unicode(self.element_id)))
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    97
    
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
    98
    class Meta:
35
8b65c9054eac correct errors
ymh <ymh.work@gmail.com>
parents: 29
diff changeset
    99
        unique_together = (('project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id'),)
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
    
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
    
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
admin.site.register(Content)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
admin.site.register(Author)
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
admin.site.register(LdtProject)
16
146d86480e85 add query for details
ymh <ymh.work@gmail.com>
parents: 3
diff changeset
   105
admin.site.register(Segment)
0
0d40e90630ef Blinkster creation
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106