web/ldt/ldt_utils/projectserializer.py
author ymh <ymh.work@gmail.com>
Thu, 10 Jun 2010 04:15:15 +0200
changeset 8 d0a1c6d22b0e
child 10 84e31387a741
permissions -rw-r--r--
create iri and serialize
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
8
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
import xml.dom
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
     2
import Ft.Xml.Domlette
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
import xml.xpath
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
from datetime import datetime
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
"""
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
Serialize a project object to a cinelab compatible array
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
"""
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
class ProjectSerializer:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
    
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
    def __init__(self, project):
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    12
        self.project = project
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
        self.ldt_doc = None
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
        self.medias = []
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
        self.annotations = []
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
        self.tags = {}
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
        self.annotation_types = []
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
        self.views = []
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
        self.lists = []
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
    
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
    def __parse_ensemble(self, ensemble_node, content):
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
        ensemble_id = ensemble_node.getAttributeNS("id",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
        ensemble_author = ensemble_node.getAttributeNS("author",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
        ensemble_title = ensemble_node.getAttributeNS("title",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
        ensemble_description = ensemble_node.getAttributeNS("abstract",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
        ensemble_created = datetime.utcnow().iso_format()
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
        ensemble_modified = ensemble_created 
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
        list_items = []
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
        new_list = {
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
            "id" : ensemble_id,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
            "items" : list_items,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
            "metas" : {
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
                "dc:creator":ensemble_author,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
                "dc:created": ensemble_created,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
                "dc:contributor":"undefined",
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
                "dc:modified": ensemble_modified,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
                "dc:title":ensemble_title,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
                "dc:description": ensemble_description,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
                "id-ref":content.iri_id,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
                "editable":"false"
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
            }
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
        }
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
        self.lists.append(new_list)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
        for decoupage_node in ensemble_node.childNodes:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
            if decoupage_node.nodeType != xml.dom.Node.ELEMENT_NODE or decoupage_node.tagName != "decoupage" :
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
                continue
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
            
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
            decoupage_id = decoupage_node.getAttributeNS("id",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
            decoupage_creator = decoupage_node.getAttributeNS("author",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
            if not decoupage_creator:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
                decoupage_creator = "IRI"
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
            decoupage_contributor = decoupage_creator
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
            date_str = decoupage_node.getAttributeNS("date",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
            if date_str :
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
                decoupage_created = datetime.strptime(date_str,"%d/%m/%Y").iso_format()
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
            else :
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
                decoupage_created = datetime.utcnow().iso_format()
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
            decoupage_modified = decoupage_created
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
            
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
            decoupage_title = ""
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
            for txtRes in xml.xpath.Evaluate("title/text()", decoupage_node): 
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
                    decoupage_title += txtRes.data
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
            decoupage_description = ""
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
            for txtRes in xml.xpath.Evaluate("abstract/text()", decoupage_node): 
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
                    decoupage_description += txtRes.data
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
            
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
            
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
            list_items.append({"id-ref":decoupage_id})
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
            
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
            new_annotation_types = {
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
                "id":decoupage_id,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
                "dc:creator":decoupage_creator,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
                "dc:created":decoupage_created,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
                "dc:contributor":decoupage_contributor,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
                "dc:modified":decoupage_modified,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
                "dc:title":decoupage_title,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
                "dc:description":decoupage_description
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
            }
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
            
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
            self.annotation_types.append(new_annotation_types)            
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
                        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
            res = xml.xpath.Evaluate("elements/element", decoupage_node)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
            for element_node in res:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    91
                
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
                element_id = element_node.getAttributeNS("id",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
                element_begin = element_node.getAttributeNS("begin",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
                element_duration = element_node.getAttributeNS("dur",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
                element_media = content.iri_id
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
                element_color = element_node.getAttributeNS("color",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
                
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
                element_title = ""
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
                for txtRes in xml.xpath.Evaluate("title/text()", element_node): 
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
                    element_title += txtRes.data 
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
                element_description = ""
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
                for txtRes in xml.xpath.Evaluate("abstract/text()", element_node): 
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
                    element_description += txtRes.data 
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
                
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
                element_audio_src = ""
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
                element_audio_href = ""
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
                res = xml.xpath.Evaluate("audio", element_node)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
                if len(res) > 0:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
                    element_audio_src = res[0].getAttributeNS(None, "source")
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
                    element_audio_href = res[0].value
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
                
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
                
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
                element_tags = []
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
                
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
                tags = element_node.getAttributeNS("tags",None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
                
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
                tags_list = map(lambda s:s.trim(),tags.split(","))
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
                #tags                                
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
                if tags is None or len(tags) == 0:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
                    tags_list = []
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
                    restagnode = xml.xpath.Evaluate("tag/text()", element_node)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
                    for tagnode in restagnode:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
                        tags_list.append(tagnode.data)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
                        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
                if tags_list is None or len(tags_list) == 0:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
                    tags_list = []
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
                    restagnode = xml.xpath.Evaluate("tags/tag/text()", element_node)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
                    for tagnode in restagnode:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
                        tags_list.append(tagnode.data)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
                
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
                tag_date = datetime.utcnow().iso_format()
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
                for tag_id in tags_list:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
                    if tag_id not in self.tags:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
                        new_tag = {
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
                            "id":tag_id,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
                            "metas" : {
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
                                "dc:creator":"IRI",
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
                                "dc:created": tag_date,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
                                "dc:contributor":"IRI",
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
                                "dc:modified": tag_date,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
                                "dc:title":tag_id
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
                            }
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
                        }
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
                        self.tags[tag_id] = new_tag
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
                    element_tags.append({"id-ref":tag_id})
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
                new_annotation = {
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
                    "begin": element_begin,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
                    "end": int(element_begin) + int(element_duration),
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
                    "id": element_id,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
                    "media": element_media,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
                    "content": {
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
                        "mimetype": "application/x-ldt-structured",
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
                        "title": element_title,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
                        "description": element_description,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
                        "color": element_color,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
                        "audio": {
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
                            "src" : element_audio_src,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
                            "mimetype": "audio/mp3",
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
                            "href": element_audio_href
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
                        },
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   164
                    },
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   165
                    "metas": {
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
                        "id-ref": decoupage_id,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
                        "dc:creator": decoupage_creator,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
                        "dc:contributor": decoupage_contributor,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
                        "dc:created": decoupage_created,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
                        "dc:modified": decoupage_modified
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
                    }
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   172
                }
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   173
                
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
                self.annotations.append(new_annotation)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   176
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   177
    
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   178
    def __parse_ldt(self):
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   179
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
        doc = xml.dom.minidom.parseString(self.project.ldt)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
        self.ldt_doc = Ft.Xml.Domlette.ConvertDocument(doc)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
        con = xml.xpath.Context.Context(doc, 1, 1, None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
        res = xml.xpath.Evaluate("/iri/medias/media", context=con)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
        for mediaNode in res:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
            iri_id = mediaNode.getAttributeNS(None,"id")
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
            content = Content.objects.get(iri_id=iri_id)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
            self.__parser_content(content)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
            
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
        res = xml.xpath.Evaluate("/iri/annotations/content",context=con)               
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
        for content_node in res:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
            content_id = content_node.getAttributeNS(None, "id")
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
            content = Content.objects.get(iri_id=content_id)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
            for ensemble_node in content_node.childNodes:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
                if ensemble_node.nodeType != xml.dom.Node.ELEMENT_NODE or ensemble_node.tagName != "ensemble" :
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
                    continue
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
                self.__parse_ensemble(ensemble_node, content)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
            
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
        #res = xml.xpath.Evaluate("/iri/displays/display",context=con)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
        #for display_node in res:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
            
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
    
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
    
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
    def __parse_content(self, content):
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
        doc = Ft.Xml.Domlette.ConvertDocument(xml.dom.minidom.parse(content.iri_file_path()))
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
        con = xml.xpath.Context.Context(doc, 1, 1, None)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
        authors = content.authors.all()
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
        if len(authors) > 0 :
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
            author = authors[0].handle
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
        else :
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
            author = "IRI"
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
        if len(authors) > 1 :
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
            contributor = authors[1].handle
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
        else :
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
            contributor = author
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
        content_author = ""
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
        res = xml.xpath.Evaluate("/iri/head/meta[@name='author']/@content", context=con)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
        if len(res) > 0:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
            content_author = res[0].value
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
        content_date = ""
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
        res = xml.xpath.Evaluate("/iri/head/meta[@name='date']/@content", context=con)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
        if len(res) > 0:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
            content_date = res[0].value
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
        new_media = {
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
             "http://advene.liris.cnrs.fr/ns/frame_of_reference/ms" : "o=0",
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
             "id" : content.iri_id,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
             "url" : content.videopath.rstrip('/') + "/" + content.src,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
             "dc:creator" : author,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
             "dc:created" : content.creation_date.iso_format(),
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
             "dc:contributor" : contributor,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
             "dc:modified" : content.update_date.iso_format(),
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
             "dc:creator.contents" : content_author,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
             "dc:created.contents" : content_date,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
             "dc:title" : content.title,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
             "dc:description" : content.description,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
             "dc:duration" : content.get_duration(),
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
        }
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
        self.medias.append(new_media)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
        res = xml.xpath.Evaluate("/iri/body/ensembles/ensemble",context=con)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
        for ensemble_node in res:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
            self.__parse_ensemble(ensemble_node, content)
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
    
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
    def serialize_to_cinelab(self):
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
    
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
        res = {}
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   265
        self.__parse_ldt()
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   266
        self.__parse_contents()
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   267
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   268
        project_main_media = ""
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
        if len(self.medias) > 0:
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
            project_main_media = self.medias[0]["id"]
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
        res['metas'] = {
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
             'id': self.project.ldt_id,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
             'dc:created':self.project.creation_date.iso_format(),
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
             'dc:modified':self.project.modification_date.iso_format(),
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
             'dc:contributor':self.project.changed_by,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
             'dc:creator':self.project.created_by,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
             'dc:title':self.project.title,
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
             'dc:description':self.project.get_description(self.ldt_doc), # get from doc, parse ldt
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
             'main_media': {"id-ref":project_main_media}
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
            }
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
        res['medias'] =  self.medias
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
        res['annotation-types'] = self.annotation_types
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
        res['annotations'] = self.annotations
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
        res['lists'] = self.lists
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
        res['tags'] = self.tags.values()
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
        res['views'] = self.views # ignored for the moment
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
        
d0a1c6d22b0e create iri and serialize
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
        return res