v1.53.8 : enhance json generation when for one media V01.53.08
authorcavaliet
Wed, 23 Jul 2014 17:40:08 +0200
changeset 1316 94e317204c4a
parent 1315 8479e91f15cc
child 1317 6c7a7cd62492
v1.53.8 : enhance json generation when for one media
src/ldt/ldt/__init__.py
src/ldt/ldt/ldt_utils/projectserializer.py
src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/embed_player.html
src/ldt/ldt/ldt_utils/views/json.py
--- a/src/ldt/ldt/__init__.py	Wed May 28 16:29:18 2014 +0200
+++ b/src/ldt/ldt/__init__.py	Wed Jul 23 17:40:08 2014 +0200
@@ -1,6 +1,6 @@
 __all__ = ["VERSION", "get_version", "__version__"]
 
-VERSION = (1, 53, 7, "final", 0)
+VERSION = (1, 53, 8, "final", 0)
 
 
 def get_version():
--- a/src/ldt/ldt/ldt_utils/projectserializer.py	Wed May 28 16:29:18 2014 +0200
+++ b/src/ldt/ldt/ldt_utils/projectserializer.py	Wed Jul 23 17:40:08 2014 +0200
@@ -40,6 +40,8 @@
         self.display_ensemble_list = []
         self.first_cutting = first_cutting
         self.only_one_cutting = only_one_cutting
+        # if first_cutting, it means that we limit to the concerned media=
+        self.one_content= None
         
         
     def __parse_views(self, display_node_list):
@@ -342,12 +344,18 @@
             
             self.__parse_views(self.ldt_doc.xpath(xpath_str))
         
-        #getting all contents at once
-        contents_iri_id = list(
-            set(self.ldt_doc.xpath("/iri/medias/media/@id")) |
-            set(self.ldt_doc.xpath("/iri/annotations/content/@id")) |
-            (set(self.ldt_doc.xpath('/iri/annotations/content[ensemble/decoupage/@id=\'%s\']/@id' % self.first_cutting)) if self.first_cutting and self.first_cutting not in self.display_cuttings_list else set())
-        )
+        # getting all contents at once
+        # If self.one_content, we remove the other content
+        if self.first_cutting and self.one_content:
+            contents_iri_id = list(
+                set(self.ldt_doc.xpath('/iri/annotations/content[ensemble/decoupage/@id=\'%s\']/@id' % self.first_cutting))
+            )
+        else:
+            contents_iri_id = list(
+                set(self.ldt_doc.xpath("/iri/medias/media/@id")) |
+                set(self.ldt_doc.xpath("/iri/annotations/content/@id")) |
+                (set(self.ldt_doc.xpath('/iri/annotations/content[ensemble/decoupage/@id=\'%s\']/@id' % self.first_cutting)) if self.first_cutting and self.first_cutting not in self.display_cuttings_list else set())
+            )
         
         contents =  dict([ (c.iri_id, c) for c in Content.objects.filter(iri_id__in=contents_iri_id).select_related('media_obj', 'stat_annotation').prefetch_related("authors")])
         m_cls = ContentType.objects.get(model='media')
@@ -358,7 +366,7 @@
         res = self.ldt_doc.xpath("/iri/medias/media")
         for mediaNode in res:
             iri_id = mediaNode.attrib[u"id"]
-            if self.from_display and iri_id not in self.display_contents_list:
+            if (self.from_display and iri_id not in self.display_contents_list) or iri_id not in contents_iri_id:
                 continue
             content = contents[iri_id]#Content.objects.get(iri_id=iri_id) #@UndefinedVariable
             self.__parse_content(content, medias)
@@ -366,7 +374,7 @@
         res = self.ldt_doc.xpath("/iri/annotations/content")
         for content_node in res:
             content_id = content_node.attrib[u"id"]
-            if self.from_display and content_id not in self.display_contents_list:
+            if (self.from_display and content_id not in self.display_contents_list) or content_id not in contents_iri_id:
                 continue
             content = contents[content_id]#Content.objects.get(iri_id=content_id) #@UndefinedVariable
             for ensemble_node in content_node:
@@ -523,9 +531,11 @@
                 self.__parse_ensemble(ensemble_node, content)
 
     
-    def serialize_to_cinelab(self):
+    def serialize_to_cinelab(self, one_content_param):
     
         res = {}
+        
+        self.one_content = one_content_param
 
         if not self.parsed:
             self.__parse_ldt()
--- a/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/embed_player.html	Wed May 28 16:29:18 2014 +0200
+++ b/src/ldt/ldt/ldt_utils/templates/ldt/ldt_utils/partial/embed_player.html	Wed Jul 23 17:40:08 2014 +0200
@@ -12,7 +12,7 @@
 if (typeof jQuery == "undefined") {
 	jQuery = IriSP.jQuery;
 }
-var metadatas = {metadata: {url: '{{json_url}}'}};
+var metadatas = {metadata: {url: '{{json_url}}?onecontent=1' }};
 var metadata_key = "metadata";
 
 IriSP.libFiles.defaultDir = '{% static "ldt/js/" %}';
--- a/src/ldt/ldt/ldt_utils/views/json.py	Wed May 28 16:29:18 2014 +0200
+++ b/src/ldt/ldt/ldt_utils/views/json.py	Wed Jul 23 17:40:08 2014 +0200
@@ -64,10 +64,15 @@
     escape_bool = False
     if escape_str:
         escape_bool = {'true': True, 'false': False, "0": False, "1": True}.get(escape_str.lower())
+    
+    one_content_str = request.REQUEST.get("onecontent")
+    one_content_bool = False
+    if one_content_str:
+        one_content_bool = {'true': True, 'false': False, "0": False, "1": True}.get(one_content_str.lower())
         
         
     ps = ProjectJsonSerializer(project, serialize_contents, first_cutting=first_cutting)
-    project_dict = ps.serialize_to_cinelab()
+    project_dict = ps.serialize_to_cinelab(one_content_bool)
     
     json_str = simplejson.dumps(project_dict, ensure_ascii=False, indent=indent)