improve serialization and add partials
authorymh <ymh.work@gmail.com>
Fri, 11 Jun 2010 00:17:30 +0200
changeset 27 f81da251d0aa
parent 26 d5b6908e4da5
child 28 8ba2fbb792ff
improve serialization and add partials
.pydevproject
web/eulalie/templates/eulalie/partial/embed.html
web/eulalie/templates/eulalie/partial/embed_popup.html
web/eulalie/templatetags/__init__.py
web/eulalie/templatetags/render_partial.py
web/eulalie/urls.py
web/ldt/ldt_utils/projectserializer.py
web/ldt/ldt_utils/views.py
--- a/.pydevproject	Thu Jun 10 20:49:13 2010 +0200
+++ b/.pydevproject	Fri Jun 11 00:17:30 2010 +0200
@@ -4,4 +4,7 @@
 <pydev_project>
 <pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python_eulalie</pydev_property>
 <pydev_property name="org.python.pydev.PYTHON_PROJECT_VERSION">python 2.6</pydev_property>
+<pydev_pathproperty name="org.python.pydev.PROJECT_SOURCE_PATH">
+<path>/eulalie/web</path>
+</pydev_pathproperty>
 </pydev_project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/eulalie/templates/eulalie/partial/embed.html	Fri Jun 11 00:17:30 2010 +0200
@@ -0,0 +1,5 @@
+<div id="{{ player_id }}">
+</div>
+<script type="text/javascript">
+    playerLdt(550,310, "{{ json_url }}","{{ player_id }}");
+</script>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/eulalie/templates/eulalie/partial/embed_popup.html	Fri Jun 11 00:17:30 2010 +0200
@@ -0,0 +1,3 @@
+<div class="player_ldt">
+{% include "embed.html" %}  
+</div>
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/web/eulalie/templatetags/render_partial.py	Fri Jun 11 00:17:30 2010 +0200
@@ -0,0 +1,36 @@
+from django import template
+
+register = template.Library()
+
+class PartialNode(template.Node):
+    def __init__(self, partial, params):
+        self.partial = partial
+        self.params = params
+    
+    def render(self, context):
+        context_params = {}
+        for k, v in self.params.items():
+            try:
+                context_params[k] = eval(v)
+            except:
+                context_params[k] = template.Variable(v).resolve(context)
+      
+        t = template.loader.get_template('partials/%s' % self.partial)
+        return t.render(template.Context(context_params))
+
+@register.tag
+def render_partial(parser, token):
+    parts = token.split_contents()
+    params = {}
+    try:
+        tag_name, partial = parts[:2]
+        if partial.startswith('"'): partial = partial[1:-1]
+        for p in parts[2:]:
+            k, v = p.split(':')
+            params[k] = v
+      
+    except ValueError:
+        raise template.TemplateSyntaxError, '%r tag requires at least a single argument and no ' \
+                                             'spaces in name:value list' % parts[0]
+    
+    return PartialNode(partial, params)
\ No newline at end of file
--- a/web/eulalie/urls.py	Thu Jun 10 20:49:13 2010 +0200
+++ b/web/eulalie/urls.py	Fri Jun 11 00:17:30 2010 +0200
@@ -1,6 +1,7 @@
-from django.conf.urls.defaults import patterns,include
+from django.conf.urls.defaults import patterns ,include
 from django.contrib import admin
 
+
 # Uncomment the next two lines to enable the admin:
 admin.autodiscover()
 
--- a/web/ldt/ldt_utils/projectserializer.py	Thu Jun 10 20:49:13 2010 +0200
+++ b/web/ldt/ldt_utils/projectserializer.py	Fri Jun 11 00:17:30 2010 +0200
@@ -47,7 +47,6 @@
             }
         }
         
-        self.lists.append(new_list)
         
         for decoupage_node in ensemble_node.childNodes:
             if decoupage_node.nodeType != xml.dom.Node.ELEMENT_NODE or decoupage_node.tagName != "decoupage" :
@@ -159,6 +158,9 @@
                         self.tags[tag_id] = new_tag
                     element_tags.append({"id-ref":tag_id})
 
+                if not element_tags:
+                    element_tags = None
+                    
                 new_annotation = {
                     "begin": element_begin,
                     "end": int(element_begin) + int(element_duration),
@@ -175,6 +177,7 @@
                             "href": element_audio_href
                         },
                     },
+                    "tags": element_tags,
                     "meta": {
                         "id-ref": decoupage_id,
                         "dc:creator": decoupage_creator,
@@ -186,8 +189,11 @@
                 
                 self.annotations.append(new_annotation)
         
+        if not list_items:
+            new_list["items"] = None
+        self.lists.append(new_list)
 
-    
+
     def __parse_ldt(self):
         
         doc = xml.dom.minidom.parseString(self.project.ldt.encode("utf-8"))
@@ -300,11 +306,32 @@
              'main_media': {"id-ref":project_main_media}
             }
         
+        if not self.medias:
+            self.medias = None
+                        
+        if not self.annotation_types:
+            self.annotation_types = None
+        
+        if len(self.tags) == 0:
+            tags = None
+        else:
+            tags = self.tags.values()
+            
+        if not self.lists:
+            self.lists = None
+            
+        if not self.views:
+            self.views = None
+            
+        if not self.annotations:
+            self.annotations = None
+        
         res['medias'] =  self.medias
         res['annotation-types'] = self.annotation_types
         res['annotations'] = self.annotations
         res['lists'] = self.lists
-        res['tags'] = self.tags.values()
+        res['tags'] = tags
         res['views'] = self.views # ignored for the moment
         
-        return res
\ No newline at end of file
+        return res
+        
--- a/web/ldt/ldt_utils/views.py	Thu Jun 10 20:49:13 2010 +0200
+++ b/web/ldt/ldt_utils/views.py	Fri Jun 11 00:17:30 2010 +0200
@@ -207,7 +207,9 @@
     if mimetype is None:
         mimetype = "application/json; charset=utf-8"
     else:
-        mimetype.encode("utf-8") 
+        mimetype = mimetype.encode("utf-8")
+    if "charset" not in mimetype:
+        mimetype += "; charset=utf-8" 
     resp = HttpResponse(mimetype=mimetype)
     resp['Cache-Control']='no-cache, must-revalidate'
     resp['Pragma']='no-cache'