web/ldt/ldt_utils/models.py
changeset 71 fc1210bbb854
parent 67 90fd14c649bb
child 72 d672f33a3a67
equal deleted inserted replaced
69:fed56345e904 71:fc1210bbb854
    32     creator = models.ForeignKey(User, blank=True, null=True, verbose_name=_('media.creator'))
    32     creator = models.ForeignKey(User, blank=True, null=True, verbose_name=_('media.creator'))
    33     description = models.TextField(null=True, blank=True, verbose_name=_('description'))
    33     description = models.TextField(null=True, blank=True, verbose_name=_('description'))
    34     title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('title'))
    34     title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('title'))
    35     src = models.CharField(max_length=1024, unique=True, verbose_name=_('media.src'))
    35     src = models.CharField(max_length=1024, unique=True, verbose_name=_('media.src'))
    36     
    36     
       
    37     def stream_src():
       
    38         
       
    39         def fget(self):
       
    40             res_src = self.src.rstrip()
       
    41             if self.videopath and self.videopath.startswith("rtmp://"):
       
    42                 extension = res_src.split(".")[-1]
       
    43                 res_src = {
       
    44                     'flv': lambda s: s,
       
    45                     'mp3': lambda s: "%s:%s" %("mp3",res_src[:-4]),
       
    46                     'mp4': lambda s: "%s:%s" %("mp4",res_src[:-4]),
       
    47                     'f4v': lambda s: "%s:%s" %("mp4",res_src[:-4]),
       
    48                 }.get(extension, lambda s:s)(res_src)
       
    49             return res_src
       
    50     stream_src = property(**stream_src())    
       
    51     
       
    52     def save(self, *args, **kwargs):
       
    53         super(Media, self).save(*args, **kwargs)
       
    54         for content in self.content_set.all():
       
    55             content.sync_iri_file()
       
    56     
    37     def __unicode__(self):
    57     def __unicode__(self):
    38         strings = []
    58         strings = []
    39         if self.title:
    59         if self.title:
    40             strings.append(unicode(self.title))
    60             strings.append(unicode(self.title))
    41         else:
    61         else:
    42             strings.append(unicode(self.src))
    62             strings.append(unicode(self.src))
    43         if self.external_id:
    63         if self.external_id:
    44             strings.append(unicode(self.external_id))
    64             strings.append(unicode(self.external_id))
    45         return "|".join(strings)
    65         return "|".join(strings)
       
    66 
    46 
    67 
    47 class Content(models.Model):
    68 class Content(models.Model):
    48     iri_id = models.CharField(max_length=1024, unique=True, default=generate_uuid, verbose_name=_('content.iri_id'))
    69     iri_id = models.CharField(max_length=1024, unique=True, default=generate_uuid, verbose_name=_('content.iri_id'))
    49     iriurl = models.CharField(max_length=1024, verbose_name=_('content.iriurl'))
    70     iriurl = models.CharField(max_length=1024, verbose_name=_('content.iriurl'))
    50     creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('content.creation_date'))
    71     creation_date = models.DateTimeField(auto_now_add=True, verbose_name=_('content.creation_date'))
    69         super(Content, self).delete()
    90         super(Content, self).delete()
    70         writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
    91         writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
    71         writer.deleteDocuments(lucene.Term("iri_id", self.iri_id))
    92         writer.deleteDocuments(lucene.Term("iri_id", self.iri_id))
    72         writer.commit()
    93         writer.commit()
    73         
    94         
    74     #TODO: better manage the change in .iri name and error scenario (save in temp file + rename
    95     def sync_iri_file(self):
    75     def save(self, *args, **kwargs):
       
    76         
       
    77         # create iri file if needed
    96         # create iri file if needed
    78         created = False
    97         created = False
    79         try:
    98         try:
    80             iri_file_path = self.iri_file_path()
    99             iri_file_path = self.iri_file_path()
    81             if not os.path.exists(iri_file_path):
   100             if not os.path.exists(iri_file_path):
    93             if created:
   112             if created:
    94                 if os.path.exists(iri_file_path):
   113                 if os.path.exists(iri_file_path):
    95                     os.remove(iri_file_path)
   114                     os.remove(iri_file_path)
    96             raise e
   115             raise e
    97         
   116         
       
   117         
       
   118     #TODO: better manage the change in .iri name and error scenario (save in temp file + rename
       
   119     def save(self, *args, **kwargs):
       
   120         
       
   121         self.sync_iri_file()        
    98         # update it 
   122         # update it 
    99         super(Content, self).save(*args, **kwargs)
   123         super(Content, self).save(*args, **kwargs)
   100     
   124     
   101     def __unicode__(self):
   125     def __unicode__(self):
   102         return str(self.id) + ": " + self.iri_id
   126         return str(self.id) + ": " + self.iri_id
   119             empty_media = Media.objects.get(externalid=settings.EMPTY_MEDIA_EXTERNALID)
   143             empty_media = Media.objects.get(externalid=settings.EMPTY_MEDIA_EXTERNALID)
   120             return empty_media
   144             return empty_media
   121         else:
   145         else:
   122             return None
   146             return None
   123             
   147             
       
   148     
       
   149     def stream_src():
       
   150         
       
   151         def fget(self):
       
   152             if self.media_obj is not None:
       
   153                 return self.media_obj.stream_src
       
   154             else:
       
   155                 return None
       
   156     stream_src = property(**stream_src())
   124     
   157     
   125     def videopath(): #@NoSelf
   158     def videopath(): #@NoSelf
   126         doc = """simulate videopath""" #@UnusedVariable
   159         doc = """simulate videopath""" #@UnusedVariable
   127        
   160        
   128         def fget(self):
   161         def fget(self):