src/spel/management/commands/loadoperadata.py
author cavaliet
Tue, 08 Jul 2014 17:50:11 +0200
changeset 115 231c0319666c
parent 108 878a2c621fcf
permissions -rwxr-xr-x
v0.5.22 : correct video call in template
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
84
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
     1
# -*- coding: utf-8 -*-
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
     2
'''
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
     3
Created on Mar 22, 2013
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
     4
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
     5
@author: tc
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
     6
'''
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
     7
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
     8
from datetime import datetime
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
     9
from dircache import listdir
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    10
from django.core.management.base import BaseCommand, CommandError
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    11
from genericpath import isdir, isfile
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    12
from ldt.api.ldt.serializers.cinelabserializer import CinelabSerializer
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    13
from ldt.ldt_utils.models import Media, Content, Project
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    14
from ldt.ldt_utils.stat import update_stat_content
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    15
from ldt.ldt_utils.utils import generate_uuid
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    16
from ldt.security import set_current_user, get_current_user_or_admin
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    17
from ldt.security.cache import cached_assign
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    18
from optparse import make_option
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    19
from os.path import join
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    20
import json
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    21
import lxml.etree
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    22
import os.path
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    23
import time
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    24
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    25
import logging
108
878a2c621fcf v0.5.19 enhance import for content title
cavaliet
parents: 104
diff changeset
    26
from string import replace
84
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    27
logger = logging.getLogger(__name__)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    28
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    29
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    30
class Command(BaseCommand):
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    31
    '''
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    32
    Load medias, contents, project from json generated by ubicast
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    33
    '''
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    34
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    35
    args = 'folder containing folders containing json files'
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    36
    help = 'Load medias, contents and project from json files generated by ubicast for OPERA contents'
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    37
    
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    38
    
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    39
    def __safe_get(self, dict_arg, key, conv = lambda x: x, default= None):
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    40
        val = dict_arg.get(key, default)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    41
        return conv(val) if val else default
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    42
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    43
    def __safe_decode(self, s):
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    44
        if not isinstance(s, basestring):
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    45
            return s
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    46
        try:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    47
            return s.decode('utf8')
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    48
        except:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    49
            try:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    50
                return s.decode('latin1')
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    51
            except:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    52
                return s.decode('utf8','replace')
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    53
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    54
    def handle(self, *args, **options):
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    55
        
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    56
        # Test path
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    57
        if len(args) != 1:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    58
            raise CommandError("The command has no argument or too much arguments. Only one is needed : the folder file path.")
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    59
        
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    60
        # Check if temporary files already exist
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    61
        path = os.path.abspath(args[0])
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    62
        if not os.path.exists(path):
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    63
            raise CommandError("The folder does not exist.")
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    64
        
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    65
        do_import = False
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    66
        confirm = raw_input("""
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    67
    If the database already contains datas, they will be overriden
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    68
    
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    69
    Do you want to continue ?
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    70
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    71
    Type 'y' to continue, or 'n' to quit: """)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    72
        do_import = (confirm == "y")
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    73
        
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    74
        # Continue
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    75
        if do_import:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    76
            print("Parsing folder %s ..." % path)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    77
            for dirpath, dirnames, filenames in os.walk(path):
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    78
                #print("Parsing walk %s, %s, %s" % (dirpath, dirnames, filenames))
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    79
                for filename in filenames:
104
cc1cf7e38c83 v0.5.17 update load opera
cavaliet
parents: 88
diff changeset
    80
                    if filename == "cinelab_iri.json":
108
878a2c621fcf v0.5.19 enhance import for content title
cavaliet
parents: 104
diff changeset
    81
                        ctt_id = os.path.basename(dirpath)
878a2c621fcf v0.5.19 enhance import for content title
cavaliet
parents: 104
diff changeset
    82
                        # dirname is like "acte-1-stuff-thing_1234" and we want "Acte 1 stuff thing"
878a2c621fcf v0.5.19 enhance import for content title
cavaliet
parents: 104
diff changeset
    83
                        content_title = ctt_id.split("_")[0].replace("-"," ").capitalize()
84
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    84
                        json_path = os.path.join(dirpath, filename)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    85
                        print("Parsing json file %s ..." % json_path)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    86
                        json_data = False
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    87
                        try:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    88
                            file_data = open(json_path)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    89
                            json_data = json.load(file_data)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    90
                            file_data.close()
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    91
                        except:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    92
                            print("Error while parsing json file.")
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    93
                        if json_data:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    94
                            dur = int(json_data["medias"][0]["meta"]["duration"])
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    95
                            # Save media and content
115
231c0319666c v0.5.22 : correct video call in template
cavaliet
parents: 108
diff changeset
    96
                            media, _ = Media.objects.get_or_create(src="/data/opera/"+ctt_id+"/720p.mp4", duration=dur)
84
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    97
                            media.is_public = True
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    98
                            content = Content.objects.create(iri_id=ctt_id, 
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
    99
                                                             iriurl=ctt_id+u"/"+ctt_id+u".iri", 
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   100
                                                             media_obj=media, 
108
878a2c621fcf v0.5.19 enhance import for content title
cavaliet
parents: 104
diff changeset
   101
                                                             title=content_title, 
84
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   102
                                                             duration=dur,
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   103
                                                             content_creation_date = json_data["meta"]["dc:created"])
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   104
                            content.is_public = True
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   105
                            content.tags.add("content_opera")
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   106
                            # Get content front projet
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   107
                            proj = content.front_project
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   108
                            username = proj.owner.username
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   109
                            now = datetime.utcnow().isoformat()
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   110
                            # Start data to send to api
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   111
                            proj_data = {}
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   112
                            proj_data["meta"] = {}
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   113
                            proj_data["meta"]["id"] = proj.ldt_id
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   114
                            proj_data["meta"]["dc:title"] = proj.title
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   115
                            proj_data["meta"]["dc:creator"] = username
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   116
                            proj_data["meta"]["dc:description"] = "description added"
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   117
                            proj_data["meta"]["dc:created"] = json_data["meta"]["dc:created"]
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   118
                            proj_data["meta"]["dc:modified"] = json_data["meta"]["dc:modified"]
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   119
                            proj_data["meta"]["dc:contributor"] = username
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   120
                            proj_data["medias"] = []
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   121
                            proj_data["medias"].append({"id": content.iri_id})
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   122
                            # The tags and annotations (main part)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   123
                            proj_data["tags"] = []
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   124
                            proj_data["annotations"] = []
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   125
                            tags_id_label = {}
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   126
                            tags_label_id = {}
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   127
                            for a in json_data["annotations"]:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   128
                                # "content": {  "data": { "modalites_sceniques": "costumes,décors",... } }
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   129
                                # Opera management :
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   130
                                # tag "modalites_sceniques" becomes "opera_modalites_sceniques" 
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   131
                                # tag "mesure" becomes "opera_mesure"
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   132
                                # tag "personnages" becomes "opera_personnages"
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   133
                                # tag "scene" becomes "opera_scene"
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   134
                                # tag "type_travail" becomes "opera_type_travail" 
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   135
                                # tag "acte" becomes "opera_acte"
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   136
                                if "content" in a and "data" in a["content"] and type(a["content"]["data"]) == type(dict()):
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   137
                                    annot_tags = []
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   138
                                    desc = ""
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   139
                                    title = ""
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   140
                                    # Build tags
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   141
                                    for k,v in a["content"]["data"].iteritems():
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   142
                                        if k!="commentaire" and k!="description" and k!="titre":
88
7111c4d04cbc v0.5.8 remove opera command and enhance import opera
cavaliet
parents: 84
diff changeset
   143
                                            if k=="acte" or k=="scene":
7111c4d04cbc v0.5.8 remove opera command and enhance import opera
cavaliet
parents: 84
diff changeset
   144
                                                v = int(v)
84
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   145
                                            k = "opera_" + k
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   146
                                            v = unicode(v).split(",")
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   147
                                            for val in v:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   148
                                                val = val.strip()
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   149
                                                tag_label = k + u": " + val
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   150
                                                if val!="":
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   151
                                                    if not tag_label in tags_label_id:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   152
                                                        tags_label_id[tag_label] = generate_uuid()
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   153
                                                        tags_id_label[tags_label_id[tag_label]] = tag_label
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   154
                                                        #logger.debug("CREATED")
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   155
                                                        #logger.debug(tags_label_id[tag_label] + " = " + tags_id_label[tags_label_id[tag_label]])
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   156
                                                        proj_data["tags"].append({"meta": { "dc:title": tag_label }, "id": tags_label_id[tag_label] })
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   157
                                                    annot_tags.append({"id-ref": tags_label_id[tag_label] })
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   158
                                        elif k=="commentaire" or k=="description":
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   159
                                            desc = v
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   160
                                        elif k=="titre":
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   161
                                            title = v
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   162
                                    # Build annotation with needed fields
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   163
                                    proj_data["annotations"].append({
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   164
                                        "content": {
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   165
                                            "mimetype": "application/x-ldt-structured",
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   166
                                            "description": desc,
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   167
    #                                         "img": {
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   168
    #                                             "src": ""
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   169
    #                                         },
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   170
                                            "title": title,
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   171
    #                                        "polemics": [ ],
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   172
                                        },
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   173
                                        "begin": a["begin"],
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   174
                                        "meta": {
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   175
    #                                        "dc:contributor": "admin",
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   176
                                            "id-ref": a["type"],
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   177
                                            "dc:created": now,
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   178
    #                                        "dc:modified": "2014-03-04T16:40:23.609971",
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   179
                                            "dc:creator": username
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   180
                                        },
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   181
                                        "end": a["end"],
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   182
                                        "tags": annot_tags,
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   183
                                        "color": "16763904",
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   184
                                        "media": ctt_id,
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   185
                                        "id": a["id"]
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   186
                                    })
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   187
                            
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   188
                            # The annotation-types
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   189
                            proj_data["annotation-types"] = []
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   190
                            at_ids = []
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   191
                            for at in json_data["annotation_types"]:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   192
                                proj_data["annotation-types"].append({
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   193
    #                                dc:contributor: "admin",
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   194
                                    "dc:creator": username,
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   195
                                    "dc:title": at["id"],
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   196
                                    "id": at["id"],
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   197
    #                                dc:created: "2014-03-04T14:51:13.907674",
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   198
                                    "dc:description": ""
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   199
    #                                dc:modified: "2014-03-04T14:51:13.907674"
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   200
                                })
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   201
                                at_ids.append({ "id-ref": at["id"] })
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   202
                            # The list of annotation-types
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   203
                            list_id = generate_uuid()
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   204
                            proj_data["lists"] = [{
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   205
                                "items": at_ids,
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   206
                                "meta": {
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   207
                                    "dc:creator": username,
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   208
                                    "id-ref": ctt_id,
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   209
                                    "dc:title": "SPEL",
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   210
                                    "dc:description": ""
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   211
                                },
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   212
                                "id": list_id
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   213
                            }]
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   214
                            # The views for default display
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   215
                            proj_data["views"] = [{
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   216
                                "id": generate_uuid(),
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   217
                                "contents": [ ctt_id ],
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   218
                                "annotation_types": [atid["id-ref"] for atid in at_ids]
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   219
                            }]
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   220
                            
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   221
                            serializr = CinelabSerializer()
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   222
                            serializr.validate_cinelab_json(proj_data)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   223
                            ldt_xml = serializr.cinelab_to_ldt(proj_data)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   224
                            proj.ldt = lxml.etree.tostring(ldt_xml, pretty_print=True)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   225
                            #logger.debug(proj.ldt)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   226
                            proj.save()
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   227
                            update_stat_content(content)
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   228
                    else:
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   229
                        print("Ignoring or not exist.")
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   230
        
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   231
        # This is the end
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   232
        print("This is the end. DO NOT FORGET TO RUN THE COMMAND 'REINDEX -P' TO GENERATE SEGMENTS AND TAGS.")
d58673e1dc90 first step for opera
cavaliet
parents:
diff changeset
   233