# HG changeset patch # User ymh # Date 1276208250 -7200 # Node ID f81da251d0aab108f731fd45e3de82ffc7c0d573 # Parent d5b6908e4da5a44ec7f586faa54cc81df5be707b improve serialization and add partials diff -r d5b6908e4da5 -r f81da251d0aa .pydevproject --- a/.pydevproject Thu Jun 10 20:49:13 2010 +0200 +++ b/.pydevproject Fri Jun 11 00:17:30 2010 +0200 @@ -4,4 +4,7 @@ python_eulalie python 2.6 + +/eulalie/web + diff -r d5b6908e4da5 -r f81da251d0aa web/eulalie/templates/eulalie/partial/embed.html --- /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 @@ +
+
+ \ No newline at end of file diff -r d5b6908e4da5 -r f81da251d0aa web/eulalie/templates/eulalie/partial/embed_popup.html --- /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 @@ +
+{% include "embed.html" %} +
\ No newline at end of file diff -r d5b6908e4da5 -r f81da251d0aa web/eulalie/templatetags/__init__.py diff -r d5b6908e4da5 -r f81da251d0aa web/eulalie/templatetags/render_partial.py --- /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 diff -r d5b6908e4da5 -r f81da251d0aa web/eulalie/urls.py --- 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() diff -r d5b6908e4da5 -r f81da251d0aa web/ldt/ldt_utils/projectserializer.py --- 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 + diff -r d5b6908e4da5 -r f81da251d0aa web/ldt/ldt_utils/views.py --- 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'