web/ldt_utils/ldt/models.py
author ymh <ymh.work@gmail.com>
Tue, 08 Jun 2010 15:31:42 +0200
changeset 4 7c994c98d1df
parent 3 web/ldt/ldt/models.py@651f67b66c51
permissions -rw-r--r--
change ldt.ldt to ldt.ldt_utils
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
from django.db import models
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
from django.conf import settings
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
from ldt.core.models import Document, Owner
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
from django.utils.translation import ugettext_lazy as _
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
from utils import create_ldt, copy_ldt
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
import uuid
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
3
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     8
class Author(models.Model):
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
     9
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    10
    handle = models.CharField(max_length=512, unique=True, blank=True, null=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    11
    email = models.EmailField(unique=False, blank=True, null=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    12
    firstname = models.CharField(max_length=512, blank=True, null=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    13
    lastname = models.CharField(max_length=512, blank=True, null=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    14
    
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    15
    def __unicode__(self):
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    16
        return unicode(self.id) + " - " + self.handle + ", " + self.email + ", " + self.firstname + " " + self.lastname
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    17
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    18
0
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
class Content(models.Model):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
    iri_id = models.CharField(max_length=1024, unique=True)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    iriurl = models.URLField()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
    videopath = models.URLField(null=True, blank=True)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
    creation_date = models.DateTimeField(auto_now_add=True)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
    update_date = models.DateTimeField(auto_now=True)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
    title = models.CharField(max_length=1024, null=True, blank=True)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
    description = models.TextField(null=True, blank=True)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
    external_id = models.CharField(max_length=1024, null=True, blank=True)
3
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    28
    authors = models.ManyToManyField(Author)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    29
    duration = models.IntegerField(null=True, blank=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    30
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    31
    def get_duration(self):
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    32
        if self.duration is None:
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    33
            doc = xml.dom.minidom.parse(self.iri_file_path())
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    34
            doc = Ft.Xml.Domlette.ConvertDocument(doc)        
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    35
            con = xml.xpath.Context.Context(doc, 1, 1, None)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    36
            res = xml.xpath.Evaluate("/iri/body/medias/media[@id='video']/video", context=con)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    37
            self.duration = int(res[0].getAttributeNS(None, 'dur'))
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    38
            self.save()
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    39
        return self.duration
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    40
    
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    41
    def delete(self):
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    42
        super(Content, self).delete()
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    43
        writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    44
        writer.deleteDocuments(lucene.Term("iri_id", self.iri_id))
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    45
        writer.commit() 
0
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
    
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
    def __unicode__(self):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        return str(self.id) + ": " + self.iri_id
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
    def iri_url(self, web_url=settings.WEB_URL):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
        if 'http' in self.iriurl or 'https' in self.iriurl:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
            return self.iriurl
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
        else:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
            return unicode(web_url) + unicode(settings.MEDIA_URL)+u"media/ldt/"+unicode(self.iriurl)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
        
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
class Project(Document):  
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
    STATE_CHOICES=(
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
    (1, 'edition'),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
    (2, 'published'),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
    (3, 'moderated'),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
    (4, 'rejected'),
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    (5, 'deleted')
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
    )
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
    ldt_id = models.CharField(max_length=1024, unique=True)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
    ldt = models.TextField(null=True)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
    title = models.CharField(max_length=1024)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
    contents = models.ManyToManyField(Content)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
    creation_date = models.DateTimeField(auto_now_add=True)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    modification_date = models.DateTimeField(auto_now=True)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    created_by = models.CharField(_("created by"), max_length=70)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
    changed_by = models.CharField(_("changed by"), max_length=70)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
    state = models.IntegerField(choices=STATE_CHOICES, default=1)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
    
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
    def __unicode__(self):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        return unicode(self.id) + u": " + unicode(self.ldt_id)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
    @staticmethod
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
    def create_project(user, title, contents):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
        owner = Owner.objects.get(user=user)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
        project = Project(title=title, owner=owner)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        project.ldt_id = str(uuid.uuid1())
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
        project.created_by=user.username
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
        project.changed_by=user.username
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
        project.state = 1
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
        project.save()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
        for content in contents:
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
            project.contents.add(content)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
        project.save()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
        return create_ldt(project, user)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
    def copy_project(self, user, title):
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
        owner = Owner.objects.get(user=user)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
        project = Project(title=title, owner=owner)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        project = copy_ldt(self, project, user)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
        project.save()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
        for content in self.contents.all():
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
            project.contents.add(content)
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
        project.save()
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
        return project
ecdfc63274bf first import
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
3
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   102
class Segment(models.Model):
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   103
    
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   104
    project_obj = models.ForeignKey(Project, null=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   105
    content = models.ForeignKey(Content)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   106
    project_id = models.CharField(max_length=1024, unique=False, blank=True, null=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   107
    iri_id = models.CharField(max_length=1024, unique=False)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   108
    ensemble_id = models.CharField(max_length=1024, unique=False)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   109
    cutting_id = models.CharField(max_length=1024, unique=False)    
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   110
    element_id = models.CharField(max_length=1024, unique=False)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   111
    tags = models.CharField(max_length=2048, unique=False, null=True, blank=True)  
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   112
    title = models.CharField(max_length=2048, unique=False, null=True, blank=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   113
    duration = models.IntegerField(null=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   114
    start_ts = models.IntegerField(null=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   115
    author = models.CharField(max_length=1024, unique=False, null=True, blank=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   116
    date = models.CharField(max_length=128, unique=False, null=True, blank=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   117
    abstract = models.TextField(null=True, blank=True)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   118
    
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   119
    def __unicode__(self):
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   120
        return "/".join((unicode(self.project_id), unicode(self.iri_id), unicode(self.ensemble_id), unicode(self.cutting_id), unicode(self.element_id)))
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   121
    
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   122
    class Meta:
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   123
        unique_together = (('project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id'),)
651f67b66c51 upgrade lucene
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   124