web/ldt/ldt_utils/models.py
author ymh <ymh.work@gmail.com>
Tue, 12 Oct 2010 03:23:33 +0200
changeset 82 9202807b4cec
parent 81 97b12f5f2c7a
child 83 ec31a4bd86d3
permissions -rw-r--r--
evolutions
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'))
81
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
    24
    external_permalink = models.URLField(max_length=1024, verify_exists=False, null=True, blank=True, verbose_name=_('media.external_permalink'))
82
9202807b4cec evolutions
ymh <ymh.work@gmail.com>
parents: 81
diff changeset
    25
    external_publication_url = models.URLField(max_length=1024, verify_exists=True, null=True, blank=True, verbose_name=_('media.external_publication_url'))
81
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
    26
    external_src_url = models.URLField(max_length=1024, verify_exists=False, null=True, blank=True, verbose_name=_('media.external_src_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
    
71
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    37
    def stream_src():
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    38
        
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    39
        def fget(self):
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    40
            res_src = self.src.rstrip()
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    41
            if self.videopath and self.videopath.startswith("rtmp://"):
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    42
                extension = res_src.split(".")[-1]
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    43
                res_src = {
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    44
                    'flv': lambda s: s,
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    45
                    'mp3': lambda s: "%s:%s" %("mp3",res_src[:-4]),
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    46
                    'mp4': lambda s: "%s:%s" %("mp4",res_src[:-4]),
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    47
                    'f4v': lambda s: "%s:%s" %("mp4",res_src[:-4]),
81
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
    48
                }.get(extension, lambda s:s)(res_src.lower())
71
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    49
            return res_src
72
d672f33a3a67 correct some various js bugs
ymh <ymh.work@gmail.com>
parents: 71
diff changeset
    50
        
d672f33a3a67 correct some various js bugs
ymh <ymh.work@gmail.com>
parents: 71
diff changeset
    51
        return locals()
d672f33a3a67 correct some various js bugs
ymh <ymh.work@gmail.com>
parents: 71
diff changeset
    52
    
71
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    53
    stream_src = property(**stream_src())    
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    54
    
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    55
    def save(self, *args, **kwargs):
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    56
        super(Media, self).save(*args, **kwargs)
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    57
        for content in self.content_set.all():
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    58
            content.sync_iri_file()
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    59
    
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    60
    def __unicode__(self):
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    61
        strings = []
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    62
        if self.title:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    63
            strings.append(unicode(self.title))
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    64
        else:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    65
            strings.append(unicode(self.src))
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    66
        if self.external_id:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    67
            strings.append(unicode(self.external_id))
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
    68
        return "|".join(strings)
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
71
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
    70
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
class Content(models.Model):
44
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    72
    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
    73
    iriurl = models.CharField(max_length=1024, verbose_name=_('content.iriurl'))
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    74
    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
    75
    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
    76
    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
    77
    description = models.TextField(null=True, blank=True, verbose_name=_('content.description'))
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    78
    authors = models.ManyToManyField(Author, blank=True, verbose_name=_('content.authors'))
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    79
    duration = models.IntegerField(null=True, blank=True, verbose_name=_('content.duration'))
b7e3f3b2d150 Create content form
ymh <ymh.work@gmail.com>
parents: 41
diff changeset
    80
    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
    81
    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
    82
    media_obj = models.ForeignKey('Media', blank=True, null=True )
81
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
    83
    
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
    84
    class Meta:
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
    85
        ordering = ["title"]
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
    def get_duration(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
        if self.duration is None:
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    89
            doc = lxml.etree.parse(self.iri_file_path())
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
    90
            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
    91
            self.duration = int(res[0].get(u'dur') or 0)
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
            self.save()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
        return self.duration
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
    def delete(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
        super(Content, self).delete()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
        writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
        writer.deleteDocuments(lucene.Term("iri_id", self.iri_id))
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
        writer.commit()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
        
71
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   101
    def sync_iri_file(self):
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
        # create iri file if needed
5
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   103
        created = False
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
        try:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
            iri_file_path = self.iri_file_path()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
            if not os.path.exists(iri_file_path):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
                dir = os.path.dirname(iri_file_path)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
                if not os.path.exists(dir):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
                    os.makedirs(dir)
5
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   110
                created = True
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
                file = open(iri_file_path,"w")
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
                create_empty_iri(file, self, "IRI")
5
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   113
            else:
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   114
                created = False
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   115
                update_iri(iri_file_path, self, "IRI")
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   116
                
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
        except Exception, e:
5
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   118
            if created:
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   119
                if os.path.exists(iri_file_path):
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   120
                    os.remove(iri_file_path)
d42bb045f7d1 apply changes from eulalie
ymh <ymh.work@gmail.com>
parents: 0
diff changeset
   121
            raise e
41
a5719dcb742a add content creation
ymh <ymh.work@gmail.com>
parents: 32
diff changeset
   122
        
71
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   123
        
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   124
    #TODO: better manage the change in .iri name and error scenario (save in temp file + rename
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   125
    def save(self, *args, **kwargs):
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   126
        
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   127
        self.sync_iri_file()        
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
        # update it 
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   129
        super(Content, self).save(*args, **kwargs)
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
    def __unicode__(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
        return str(self.id) + ": " + self.iri_id
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
        
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
    def iri_url(self, web_url=settings.WEB_URL):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
        if 'http' in self.iriurl or 'https' in self.iriurl:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
            return self.iriurl
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
        else:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
            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
   139
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
    def iri_file_path(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
        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
   142
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
    def iri_url_template(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
        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
   145
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   146
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   147
    def __get_empty_media(self):
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   148
        if settings.EMPTY_MEDIA_EXTERNALID:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   149
            empty_media = Media.objects.get(externalid=settings.EMPTY_MEDIA_EXTERNALID)
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   150
            return empty_media
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   151
        else:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   152
            return None
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   153
            
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   154
    
71
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   155
    def stream_src():
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   156
        
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   157
        def fget(self):
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   158
            if self.media_obj is not None:
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   159
                return self.media_obj.stream_src
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   160
            else:
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   161
                return None
72
d672f33a3a67 correct some various js bugs
ymh <ymh.work@gmail.com>
parents: 71
diff changeset
   162
        
d672f33a3a67 correct some various js bugs
ymh <ymh.work@gmail.com>
parents: 71
diff changeset
   163
        return locals()
d672f33a3a67 correct some various js bugs
ymh <ymh.work@gmail.com>
parents: 71
diff changeset
   164
    
71
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   165
    stream_src = property(**stream_src())
fc1210bbb854 correct translation +some bug on update
ymh <ymh.work@gmail.com>
parents: 67
diff changeset
   166
    
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   167
    def videopath(): #@NoSelf
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   168
        doc = """simulate videopath""" #@UnusedVariable
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
        def fget(self):
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   171
            if self.media_obj is None:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   172
                empty_media = self.__get_empty_media()
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   173
                if empty_media:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   174
                    return empty_media.videopath
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   175
                else: 
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   176
                    return None
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   177
            else:
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   178
                return self.media_obj.videopath
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   179
           
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   180
        def fset(self, value):
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   181
            if self.media_obj is not None:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   182
                self.media_obj.videopath = value
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   183
                      
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   184
        return locals()
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   185
       
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   186
    videopath = property(**videopath())
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   187
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   188
    def src(): #@NoSelf
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   189
        doc = """simulate videopath""" #@UnusedVariable
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   190
       
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   191
        def fget(self):
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   192
            if self.media_obj is None:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   193
                empty_media = self.__get_empty_media()
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   194
                if empty_media:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   195
                    return empty_media.src
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   196
                else:
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   197
                    return None
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   198
            else:
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   199
                return self.media_obj.src
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   200
           
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   201
        def fset(self, value):
62
39b2dab4f939 separate contet and media
ymh <ymh.work@gmail.com>
parents: 60
diff changeset
   202
            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
   203
                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
   204
                self.media_obj = media
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   205
                self.save()
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   206
                      
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   207
        return locals()
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   208
       
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   209
    src = property(**src())
63
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   210
67
90fd14c649bb add edition for content
ymh <ymh.work@gmail.com>
parents: 63
diff changeset
   211
    def external_id(): #@NoSelf
63
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   212
        doc = """simulate externalid""" #@UnusedVariable
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   213
       
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   214
        def fget(self):
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   215
            if self.media_obj is None:
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   216
                empty_media = self.__get_empty_media()
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   217
                if empty_media:
67
90fd14c649bb add edition for content
ymh <ymh.work@gmail.com>
parents: 63
diff changeset
   218
                    return empty_media.external_id
63
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   219
                else: 
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   220
                    return None
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   221
            else:
67
90fd14c649bb add edition for content
ymh <ymh.work@gmail.com>
parents: 63
diff changeset
   222
                return self.media_obj.external_id
63
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   223
           
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   224
        def fset(self, value):
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   225
            if self.media_obj is not None:
67
90fd14c649bb add edition for content
ymh <ymh.work@gmail.com>
parents: 63
diff changeset
   226
                self.media_obj.external_id = value
63
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   227
                      
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   228
        return locals()
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   229
       
67
90fd14c649bb add edition for content
ymh <ymh.work@gmail.com>
parents: 63
diff changeset
   230
    external_id = property(**external_id())
63
7b721b427b73 new version and some update
ymh <ymh.work@gmail.com>
parents: 62
diff changeset
   231
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
        
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
        
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
class Project(Document):  
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
    STATE_CHOICES=(
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
    (1, 'edition'),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
    (2, 'published'),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
    (3, 'moderated'),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
    (4, 'rejected'),
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
    (5, 'deleted')
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
    )
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
    ldt_id = models.CharField(max_length=1024, unique=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
    ldt = models.TextField(null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
    title = models.CharField(max_length=1024)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
    contents = models.ManyToManyField(Content)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
    creation_date = models.DateTimeField(auto_now_add=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
    modification_date = models.DateTimeField(auto_now=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
    created_by = models.CharField(_("created by"), max_length=70)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
    changed_by = models.CharField(_("changed by"), max_length=70)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
    state = models.IntegerField(choices=STATE_CHOICES, default=1)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
    
81
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
   252
    class Meta:
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
   253
        ordering = ["title"]
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
   254
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
   255
    
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
    def __unicode__(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
        return unicode(self.id) + u": " + unicode(self.ldt_id)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
    def get_description(self, doc=None):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
        
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
        if doc is None:
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   262
            doc = lxml.etree.fromstring(self.ldt)
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
        
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   264
        res = doc.xpath("/iri/project")
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
        if len(res) > 0:
32
eac14c3ae625 introduce lxml en update some code
ymh <ymh.work@gmail.com>
parents: 5
diff changeset
   266
            return res[0].get(u'abstract')
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
        else:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
            return None
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
        
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
    @staticmethod
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
    def create_project(user, title, contents):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
        owner = Owner.objects.get(user=user)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
        project = Project(title=title, owner=owner)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
        project.ldt_id = str(uuid.uuid1())
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
        project.created_by=user.username
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
        project.changed_by=user.username
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
        project.state = 1
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
        project.save()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
        for content in contents:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
            project.contents.add(content)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
        project.save()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
        return create_ldt(project, user)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
    def copy_project(self, user, title):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
        owner = Owner.objects.get(user=user)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
        project = Project(title=title, owner=owner)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
        project = copy_ldt(self, project, user)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
        project.save()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
        for content in self.contents.all():
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
            project.contents.add(content)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
        project.save()
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
        return project
81
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
   294
    
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
   295
    def checkAccess(self, user):
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
   296
        if (user and user.is_staff) or self.state == 2: 
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
   297
            return True
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
   298
        else:
97b12f5f2c7a first version of embed and auth. plan to implement rbac
ymh <ymh.work@gmail.com>
parents: 72
diff changeset
   299
            return False
0
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   300
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   301
class Segment(models.Model):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   302
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   303
    project_obj = models.ForeignKey(Project, null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
    content = models.ForeignKey(Content)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   305
    project_id = models.CharField(max_length=1024, unique=False, blank=True, null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   306
    iri_id = models.CharField(max_length=1024, unique=False)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   307
    ensemble_id = models.CharField(max_length=1024, unique=False)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   308
    cutting_id = models.CharField(max_length=1024, unique=False)    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   309
    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
   310
    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
   311
    title = models.CharField(max_length=2048, unique=False, null=True, blank=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   312
    duration = models.IntegerField(null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
    start_ts = models.IntegerField(null=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   314
    author = models.CharField(max_length=1024, unique=False, null=True, blank=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   315
    date = models.CharField(max_length=128, unique=False, null=True, blank=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   316
    abstract = models.TextField(null=True, blank=True)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   317
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   318
    def __unicode__(self):
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   319
        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
   320
    
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
    class Meta:
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
        unique_together = (('project_id', 'iri_id', 'ensemble_id', 'cutting_id', 'element_id'),)
cc4a51750724 first commit
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
60
a8ad7ebf5902 various update and splitmedia from content
ymh <ymh.work@gmail.com>
parents: 44
diff changeset
   324