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