web/ldt/ldt_utils/models.py
author ymh <ymh.work@gmail.com>
Tue, 21 Sep 2010 06:34:28 +0200
changeset 63 7b721b427b73
parent 62 39b2dab4f939
child 67 90fd14c649bb
permissions -rw-r--r--
new version and some update
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
     1
from django.conf import settings
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
from django.db import models
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
     3
from django.utils.translation import ugettext_lazy as _
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
from ldt.core.models import Document, Owner
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
     5
from django.contrib.auth.models import User
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
     6
import tagging.fields
41
a5719dcb742a add content creation
ymh <ymh.work@gmail.com>
parents: 32
diff changeset
     7
from utils import create_ldt, copy_ldt, create_empty_iri, update_iri, generate_uuid
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
     8
import lxml.etree
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
import os.path
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
import uuid
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
class Author(models.Model):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
    handle = models.CharField(max_length=512, unique=True, blank=True, null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
    email = models.EmailField(unique=False, blank=True, null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
    firstname = models.CharField(max_length=512, blank=True, null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
    lastname = models.CharField(max_length=512, blank=True, null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
    def __unicode__(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
        return unicode(self.id) + " - " + self.handle + ", " + self.email + ", " + self.firstname + " " + self.lastname
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    22
class Media(models.Model):
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    23
    external_id = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('media.external_id'))
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    24
    external_permalink = models.URLField(max_length=1024, null=True, blank=True, verbose_name=_('content.external_permalink'))
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    25
    external_publication_url = models.URLField(max_length=1024, null=True, blank=True, verbose_name=_('content.external_publication_url'))
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    26
    external_src_url = models.URLField(max_length=1024, null=True, blank=True, verbose_name=_('content.external_publication_url'))
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    27
    creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('media.creation_date'))
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    28
    media_creation_date = models.DateTimeField(null=True, blank=True, verbose_name=_('media.media_creation_date'))
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    29
    update_date = models.DateTimeField(auto_now=True, verbose_name=_('media.update_date'))
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    30
    videopath = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('media.videopath'))
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    31
    duration = models.IntegerField(null=True, blank=True, verbose_name=_('media.duration'))
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    32
    creator = models.ForeignKey(User, blank=True, null=True, verbose_name=_('media.creator'))
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    33
    description = models.TextField(null=True, blank=True, verbose_name=_('description'))
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    34
    title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('title'))
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    35
    src = models.CharField(max_length=1024, unique=True, verbose_name=_('media.src'))
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    36
    
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    37
    def __unicode__(self):
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    38
        strings = []
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    39
        if self.title:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    40
            strings.append(unicode(self.title))
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    41
        else:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    42
            strings.append(unicode(self.src))
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    43
        if self.external_id:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    44
            strings.append(unicode(self.external_id))
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    45
        return "|".join(strings)
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
class Content(models.Model):
44
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    48
    iri_id = models.CharField(max_length=1024, unique=True, default=generate_uuid, verbose_name=_('content.iri_id'))
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    49
    iriurl = models.CharField(max_length=1024, verbose_name=_('content.iriurl'))
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    50
#    src = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.src'))
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    51
#    videopath = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.videopath'))
44
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    52
    creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('content.creation_date'))
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    53
    update_date = models.DateTimeField(auto_now=True, verbose_name=_('content.update_date'))
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    54
    title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.title'))
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    55
    description = models.TextField(null=True, blank=True, verbose_name=_('content.description'))
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    56
#    external_id = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('content.external_id'))
44
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    57
    authors = models.ManyToManyField(Author, blank=True, verbose_name=_('content.authors'))
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    58
    duration = models.IntegerField(null=True, blank=True, verbose_name=_('content.duration'))
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    59
    content_creation_date = models.DateTimeField(null=True, blank=True, verbose_name=_('content.content_creation_date'))
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
    60
    tags = tagging.fields.TagField(max_length=2048, null=True, blank=True )
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    61
    media_obj = models.ForeignKey('Media', blank=True, null=True )
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
    def get_duration(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
        if self.duration is None:
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    65
            doc = lxml.etree.parse(self.iri_file_path())
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    66
            res = doc.xpath("/iri/body/medias/media[@id='video']/video")
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    67
            self.duration = int(res[0].get(u'dur') or 0)
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
            self.save()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
        return self.duration
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
    def delete(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
        super(Content, self).delete()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
        writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
        writer.deleteDocuments(lucene.Term("iri_id", self.iri_id))
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
        writer.commit()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
        
5
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    77
    #TODO: better manage the change in .iri name and error scenario (save in temp file + rename
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    78
    def save(self, *args, **kwargs):
41
a5719dcb742a add content creation
ymh <ymh.work@gmail.com>
parents: 32
diff changeset
    79
        
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
        # create iri file if needed
5
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    81
        created = False
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
        try:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
            iri_file_path = self.iri_file_path()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
            if not os.path.exists(iri_file_path):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
                dir = os.path.dirname(iri_file_path)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
                if not os.path.exists(dir):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
                    os.makedirs(dir)
5
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    88
                created = True
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
                file = open(iri_file_path,"w")
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
                create_empty_iri(file, self, "IRI")
5
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    91
            else:
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    92
                created = False
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    93
                update_iri(iri_file_path, self, "IRI")
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    94
                
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
        except Exception, e:
5
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    96
            if created:
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    97
                if os.path.exists(iri_file_path):
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    98
                    os.remove(iri_file_path)
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
    99
            raise e
41
a5719dcb742a add content creation
ymh <ymh.work@gmail.com>
parents: 32
diff changeset
   100
        
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        # update it 
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   102
        super(Content, self).save(*args, **kwargs)
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
    def __unicode__(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
        return str(self.id) + ": " + self.iri_id
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
        
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
    def iri_url(self, web_url=settings.WEB_URL):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
        if 'http' in self.iriurl or 'https' in self.iriurl:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
            return self.iriurl
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
        else:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
            return unicode(web_url) + unicode(settings.MEDIA_URL)+u"media/ldt/"+unicode(self.iriurl)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
    def iri_file_path(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
        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.iriurl))
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
    def iri_url_template(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
        return "${web_url}${media_url}media/ldt/" + unicode(self.iri_id) + "/" + os.path.basename(self.iriurl)
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   118
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   119
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   120
    def __get_empty_media(self):
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   121
        if settings.EMPTY_MEDIA_EXTERNALID:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   122
            empty_media = Media.objects.get(externalid=settings.EMPTY_MEDIA_EXTERNALID)
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   123
            return empty_media
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   124
        else:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   125
            return None
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   126
            
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   127
    
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   128
    def videopath(): #@NoSelf
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   129
        doc = """simulate videopath""" #@UnusedVariable
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   130
       
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   131
        def fget(self):
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   132
            if self.media_obj is None:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   133
                empty_media = self.__get_empty_media()
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   134
                if empty_media:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   135
                    return empty_media.videopath
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   136
                else: 
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   137
                    return None
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   138
            else:
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   139
                return self.media_obj.videopath
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   140
           
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   141
        def fset(self, value):
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   142
            if self.media_obj is not None:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   143
                self.media_obj.videopath = value
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   144
                      
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   145
        return locals()
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   146
       
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   147
    videopath = property(**videopath())
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   148
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   149
    def src(): #@NoSelf
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   150
        doc = """simulate videopath""" #@UnusedVariable
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   151
       
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   152
        def fget(self):
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   153
            if self.media_obj is None:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   154
                empty_media = self.__get_empty_media()
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   155
                if empty_media:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   156
                    return empty_media.src
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   157
                else:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   158
                    return None
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   159
            else:
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   160
                return self.media_obj.src
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   161
           
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   162
        def fset(self, value):
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   163
            if self.media_obj is None or self.media_obj.src != value:
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   164
                media, created = Media.objects.get_or_create(src=value, defaults={'src':value})                
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   165
                self.media_obj = media
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   166
                self.save()
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   167
                      
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   168
        return locals()
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   169
       
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   170
    src = property(**src())
63
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   171
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   172
    def externalid(): #@NoSelf
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   173
        doc = """simulate externalid""" #@UnusedVariable
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   174
       
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   175
        def fget(self):
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   176
            if self.media_obj is None:
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   177
                empty_media = self.__get_empty_media()
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   178
                if empty_media:
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   179
                    return empty_media.externalid
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   180
                else: 
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   181
                    return None
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   182
            else:
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   183
                return self.media_obj.externalid
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   184
           
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   185
        def fset(self, value):
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   186
            if self.media_obj is not None:
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   187
                self.media_obj.externalid = value
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   188
                      
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   189
        return locals()
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   190
       
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   191
    externalid = property(**externalid())
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   192
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
        
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
        
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
class Project(Document):  
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
    STATE_CHOICES=(
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
    (1, 'edition'),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
    (2, 'published'),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
    (3, 'moderated'),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
    (4, 'rejected'),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
    (5, 'deleted')
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
    )
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
    ldt_id = models.CharField(max_length=1024, unique=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
    ldt = models.TextField(null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
    title = models.CharField(max_length=1024)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
    contents = models.ManyToManyField(Content)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
    creation_date = models.DateTimeField(auto_now_add=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
    modification_date = models.DateTimeField(auto_now=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
    created_by = models.CharField(_("created by"), max_length=70)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
    changed_by = models.CharField(_("changed by"), max_length=70)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
    state = models.IntegerField(choices=STATE_CHOICES, default=1)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
    def __unicode__(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
        return unicode(self.id) + u": " + unicode(self.ldt_id)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
    def get_description(self, doc=None):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
        
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
        if doc is None:
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   219
            doc = lxml.etree.fromstring(self.ldt)
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
        
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   221
        res = doc.xpath("/iri/project")
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
        if len(res) > 0:
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   223
            return res[0].get(u'abstract')
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
        else:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
            return None
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
        
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
    @staticmethod
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
    def create_project(user, title, contents):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
        owner = Owner.objects.get(user=user)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
        project = Project(title=title, owner=owner)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
        project.ldt_id = str(uuid.uuid1())
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
        project.created_by=user.username
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
        project.changed_by=user.username
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
        project.state = 1
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
        project.save()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
        for content in contents:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
            project.contents.add(content)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
        project.save()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
        return create_ldt(project, user)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
    def copy_project(self, user, title):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
        owner = Owner.objects.get(user=user)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
        project = Project(title=title, owner=owner)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
        project = copy_ldt(self, project, user)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
        project.save()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
        for content in self.contents.all():
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
            project.contents.add(content)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
        project.save()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
        return project
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
class Segment(models.Model):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
    project_obj = models.ForeignKey(Project, null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
    content = models.ForeignKey(Content)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
    project_id = models.CharField(max_length=1024, unique=False, blank=True, null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
    iri_id = models.CharField(max_length=1024, unique=False)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
    ensemble_id = models.CharField(max_length=1024, unique=False)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
    cutting_id = models.CharField(max_length=1024, unique=False)    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
    element_id = models.CharField(max_length=1024, unique=False)
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   261
    tags = tagging.fields.TagField(max_length=2048, null=True, blank=True, unique=False)
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
    title = models.CharField(max_length=2048, unique=False, null=True, blank=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
    duration = models.IntegerField(null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
    start_ts = models.IntegerField(null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
    author = models.CharField(max_length=1024, unique=False, null=True, blank=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
    date = models.CharField(max_length=128, unique=False, null=True, blank=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
    abstract = models.TextField(null=True, blank=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
    def __unicode__(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
        return "/".join((unicode(self.project_id), unicode(self.iri_id), unicode(self.ensemble_id), unicode(self.cutting_id), unicode(self.element_id)))
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
    class Meta:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
        unique_together = (('project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id'),)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   275