src/ldt/ldt/ldt_utils/segmentserializer.py
author verrierj
Fri, 20 Jan 2012 15:36:37 +0100
changeset 426 4328cd4a7533
parent 424 a2f72b31811b
child 427 e0158472f83a
permissions -rw-r--r--
refactor modal windows + add translations
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
     1
from django.conf import settings
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
     2
from django.utils.datastructures import SortedDict
415
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
     3
from ldt.ldt_utils.models import Project
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
     4
import lxml.etree
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
     5
import uuid
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
     6
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
     7
DATE_FORMATS = ["%d/%m/%Y", "%Y-%m-%d"]
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
     8
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
     9
class SegmentSerializer(object):
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    10
    """
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    11
    Serialize a set of annotations to a cinelab compatible array
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    12
    """
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    13
    
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    14
    def __init__(self, content, segments, viewable_contents=[], default_color=2194379):
420
38e46b1d0bd3 Small bugfixes
verrierj
parents: 415
diff changeset
    15
        """
38e46b1d0bd3 Small bugfixes
verrierj
parents: 415
diff changeset
    16
        viewable_contents should contain all contents from project that a user is allowed to see. The settings.FORBIDDDEN_STREAM_URL
38e46b1d0bd3 Small bugfixes
verrierj
parents: 415
diff changeset
    17
        will be displayed if a content is not found in viewable_contents, and the real stream will be displayed if it is. 
38e46b1d0bd3 Small bugfixes
verrierj
parents: 415
diff changeset
    18
        """
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    19
        self.content = content
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    20
        self.segments = segments
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    21
        self.viewable_contents = viewable_contents
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    22
        self.default_color = default_color
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    23
        self.views = None
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    24
        self.annotation_types = None
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    25
        self.medias = None
426
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
    26
        self.annotations = None 
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
    27
        self.tags = {}
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
    28
               
415
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    29
        self.xml_docs = {}
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    30
        
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    31
    def __get_cutting_title(self, project_id, content_id, ensemble_id, cutting_id):
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    32
        
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    33
        if not self.xml_docs.has_key(project_id):
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    34
            project = Project.objects.get(ldt_id=project_id)
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    35
            doc = lxml.etree.fromstring(project.ldt)
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    36
            self.xml_docs[project_id] = doc
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    37
        else:
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    38
            doc = self.xml_docs[project_id]
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    39
              
426
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
    40
        cutting = doc.xpath('/iri/annotations/content[@id=\'%s\']/ensemble[@id=\'%s\']/decoupage[@id=\'%s\']/title' % (content_id, ensemble_id, cutting_id))
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
    41
        if not cutting:
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
    42
            return None
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
    43
        
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
    44
        cutting = cutting[0]
415
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    45
        
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    46
        return cutting.text       
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    47
    
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    48
    def __parse_views(self):
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    49
        
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    50
        view = {
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    51
                "id": "0",
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    52
                "contents": [
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    53
                    self.content.iri_id
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    54
                ],
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    55
                "annotation_types": [ ],
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    56
        }
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    57
        
424
a2f72b31811b Add french translations + small bugfixes
verrierj
parents: 420
diff changeset
    58
        stat = {
a2f72b31811b Add french translations + small bugfixes
verrierj
parents: 420
diff changeset
    59
                "id": "stat",
a2f72b31811b Add french translations + small bugfixes
verrierj
parents: 420
diff changeset
    60
                "contents": [
a2f72b31811b Add french translations + small bugfixes
verrierj
parents: 420
diff changeset
    61
                    self.content.iri_id
a2f72b31811b Add french translations + small bugfixes
verrierj
parents: 420
diff changeset
    62
                ],
a2f72b31811b Add french translations + small bugfixes
verrierj
parents: 420
diff changeset
    63
                "meta": {
a2f72b31811b Add french translations + small bugfixes
verrierj
parents: 420
diff changeset
    64
                    "stat": self.content.stat_annotation
a2f72b31811b Add french translations + small bugfixes
verrierj
parents: 420
diff changeset
    65
                }
a2f72b31811b Add french translations + small bugfixes
verrierj
parents: 420
diff changeset
    66
        }
a2f72b31811b Add french translations + small bugfixes
verrierj
parents: 420
diff changeset
    67
        
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    68
        self.annotation_types = []
415
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    69
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    70
        annotation_types = []        
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    71
        for seg in self.segments:
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    72
            title = self.__get_cutting_title(seg.project_id, seg.iri_id, seg.ensemble_id, seg.cutting_id)
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    73
            annotation_types.append({'id': seg.cutting_id, 'title': title})
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    74
        
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    75
        for a in annotation_types:
426
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
    76
                                            
415
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    77
            view['annotation_types'].append(a['id'])
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    78
            self.annotation_types.append({
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    79
                    "dc:contributor": "undefined",
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    80
                    "dc:creator": "undefined",
415
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    81
                    "dc:title": a['title'],
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    82
                    "id": a['id'],
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    83
                    "dc:created": "",
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    84
                    "dc:description": "",
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    85
                    "dc:modified": ""
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    86
                })
415
4236f99104ba Annotation-types title are found in search API
verrierj
parents: 412
diff changeset
    87
            
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    88
        
424
a2f72b31811b Add french translations + small bugfixes
verrierj
parents: 420
diff changeset
    89
        self.views = [view, stat]
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    90
        
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    91
    
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    92
    def __parse_content(self):
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    93
        
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    94
        href = ""
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    95
        meta_item_value = ""
420
38e46b1d0bd3 Small bugfixes
verrierj
parents: 415
diff changeset
    96
             
38e46b1d0bd3 Small bugfixes
verrierj
parents: 415
diff changeset
    97
        if self.content not in self.viewable_contents:
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    98
            href = settings.FORBIDDEN_STREAM_URL
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
    99
        elif self.content.videopath:
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   100
            href = self.content.videopath.rstrip('/') + "/" + self.content.src
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   101
            meta_item_value = self.content.videopath.rstrip('/') + "/"
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   102
        else:
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   103
            href = self.content.src
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   104
        
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   105
        media = {
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   106
             "http://advene.liris.cnrs.fr/ns/frame_of_reference/ms" : "o=0",
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   107
             "id" : self.content.iri_id,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   108
             "href" : href,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   109
             "unit" : "ms",
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   110
             "origin" : "0",
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   111
             "meta": {
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   112
                 "dc:creator" : "",
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   113
                 "dc:created" : self.content.creation_date.isoformat(),
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   114
                 "dc:contributor" : "",
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   115
                 "dc:modified" : self.content.update_date.isoformat(),
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   116
                 "dc:creator.contents" : "",
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   117
                 "dc:title" : self.content.title,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   118
                 "dc:description" : self.content.description,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   119
                 "dc:duration" : self.content.get_duration(),
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   120
                 "item": {
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   121
                     "name" : "streamer",
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   122
                     "value": meta_item_value,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   123
                 },
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   124
             }
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   125
        }
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   126
        
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   127
        self.medias = [media]
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   128
        
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   129
    
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   130
    def __parse_segments(self):
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   131
        
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   132
        self.annotations = []
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   133
        
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   134
        for seg in self.segments:
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   135
            
426
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   136
            segment_tags = []
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   137
            for tag in seg.tags.split(';'):
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   138
                if not self.tags.has_key(tag):
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   139
                    new_tag = {
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   140
                        "meta": {
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   141
                            "dc:contributor": "IRI",
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   142
                            "dc:created": seg.date,
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   143
                            "dc:title": tag,
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   144
                            "dc:modified": seg.date,
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   145
                            "dc:creator": "IRI"
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   146
                        },
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   147
                        "id": unicode(uuid.uuid1())
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   148
                    }
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   149
                    self.tags[tag] = new_tag
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   150
                segment_tags.append({'id-ref': self.tags[tag]['id']})
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   151
            
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   152
            segment = {
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   153
                'begin': seg.start_ts,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   154
                'end': seg.start_ts + seg.duration,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   155
                'tags': seg.tags,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   156
                'id': "s_%s" % unicode(uuid.uuid1()),
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   157
                'color': "%s" % self.default_color,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   158
                'media': self.content.iri_id,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   159
                'content': {
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   160
                    'mimetype': 'application/x-ldt-structured',
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   161
                    'description': seg.abstract,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   162
                    'img': {
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   163
                        'src': ''
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   164
                    },
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   165
                    'title': seg.title,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   166
                    'color': '2194379',
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   167
                    'polemics': [ ],
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   168
                    'audio': {
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   169
                        'mimetype': 'audio/mp3',
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   170
                        'src': '',
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   171
                        'href': 'null'
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   172
                    }
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   173
                
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   174
                },
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   175
                'meta': {
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   176
                         "dc:creator": seg.author,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   177
                         "dc:contributor": seg.author,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   178
                         "dc:created": seg.date,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   179
                         "dc:modified": seg.date,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   180
                         "id-ref": seg.iri_id,
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   181
                         "project": seg.project_id
426
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   182
                },
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   183
                'tags': segment_tags                       
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   184
            }
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   185
            
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   186
            self.annotations.append(segment)
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   187
    
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   188
    def serialize_to_cinelab(self):
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   189
        
426
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   190
        if not self.segments:
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   191
            return None
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   192
        
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   193
        self.__parse_content()
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   194
        self.__parse_segments()
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   195
        self.__parse_views()
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   196
        
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   197
        res = {}
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   198
        res['views'] = self.views 
426
4328cd4a7533 refactor modal windows + add translations
verrierj
parents: 424
diff changeset
   199
        res['tags'] = self.tags.values() if len(self.tags) > 0 else None
412
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   200
        res['lists'] = None
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   201
        res['medias'] = self.medias
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   202
        res['annotations'] = self.annotations
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   203
        res['annotation-types'] = self.annotation_types
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   204
        
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   205
        return res
8d777b1d1d92 Add API to search annotations inside a content between two timecodes
verrierj
parents:
diff changeset
   206