add api to update project, uses psiton
authorymh <ymh.work@gmail.com>
Sat, 29 Jan 2011 06:46:14 +0100
changeset 13 97ab7b3191cf
parent 12 b1390453f87a
child 14 f786cfad718c
add api to update project, uses psiton
.project
.pydevproject
.settings/org.eclipse.ltk.core.refactoring.prefs
src/ldt/ldt/admin.py
src/ldt/ldt/api/__init__.py
src/ldt/ldt/api/ldt/__init__.py
src/ldt/ldt/api/ldt/handlers.py
src/ldt/ldt/api/ldt/urls.py
src/ldt/ldt/api/urls.py
src/ldt/ldt/auth/__init__.py
src/ldt/ldt/core/__init__.py
src/ldt/ldt/core/handlers/__init__.py
src/ldt/ldt/core/handlers/modpython.py
src/ldt/ldt/core/handlers/modwsgi.py
src/ldt/ldt/core/models.py
src/ldt/ldt/forms/__init__.py
src/ldt/ldt/forms/widgets.py
src/ldt/ldt/ldt_utils/__init__.py
src/ldt/ldt/ldt_utils/admin.py
src/ldt/ldt/ldt_utils/contentindexer.py
src/ldt/ldt/ldt_utils/fileimport.py
src/ldt/ldt/ldt_utils/forms.py
src/ldt/ldt/ldt_utils/models.py
src/ldt/ldt/ldt_utils/projectindexer.py
src/ldt/ldt/ldt_utils/projectserializer.py
src/ldt/ldt/ldt_utils/tests.py
src/ldt/ldt/ldt_utils/urls.py
src/ldt/ldt/ldt_utils/utils.py
src/ldt/ldt/ldt_utils/views.py
src/ldt/ldt/management/__init__.py
src/ldt/ldt/media/img/favicon.ico
src/ldt/ldt/settings.py
src/ldt/ldt/templatetags/__init__.py
src/ldt/ldt/templatetags/navigation.py
src/ldt/ldt/user/__init__.py
src/ldt/ldt/user/admin.py
src/ldt/ldt/user/forms.py
src/ldt/ldt/user/templatetags/__init__.py
src/ldt/ldt/user/urls.py
src/ldt/ldt/user/views.py
src/ldt/ldt/utils/__init__.py
src/ldt/ldt/utils/path.py
src/ldt/ldt/utils/xml.py
src/ldt/ldt/utils/zipfileext.py
src/ldt/setup.py
virtualenv/web/create_python_env.py
virtualenv/web/res/src/django-piston-0.2.2.tar.gz
web/ldtplatform/urls.py
web/static/ldt/img/favicon.ico
--- a/.project	Fri Jan 28 21:33:43 2011 +0100
+++ b/.project	Sat Jan 29 06:46:14 2011 +0100
@@ -13,5 +13,6 @@
 	</buildSpec>
 	<natures>
 		<nature>org.python.pydev.pythonNature</nature>
+		<nature>org.python.pydev.django.djangoNature</nature>
 	</natures>
 </projectDescription>
--- a/.pydevproject	Fri Jan 28 21:33:43 2011 +0100
+++ b/.pydevproject	Sat Jan 29 06:46:14 2011 +0100
@@ -2,6 +2,10 @@
 <?eclipse-pydev version="1.0"?>
 
 <pydev_project>
-<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">Default</pydev_property>
+<pydev_property name="org.python.pydev.PYTHON_PROJECT_INTERPRETER">python_platform</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>/platform/src/ldt</path>
+<path>/platform/web</path>
+</pydev_pathproperty>
 </pydev_project>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.settings/org.eclipse.ltk.core.refactoring.prefs	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,3 @@
+#Fri Jan 28 23:09:33 CET 2011
+eclipse.preferences.version=1
+org.eclipse.ltk.core.refactoring.enable.project.refactoring.history=false
--- a/src/ldt/ldt/admin.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/admin.py	Sat Jan 29 06:46:14 2011 +0100
@@ -1,30 +1,31 @@
-from django.contrib import admin
+#from django.contrib import admin
 from ldt.management import test_cms
 
 """
 site admin pour cms page
 """
 if test_cms():
-    class AdminSite(admin.AdminSite):
-        index_template = 'admin/page_index.html'
-        login_template = 'admin/page_login.html'
-        app_index_template = 'admin/page_app_index.html'    
+    pass
+#    class AdminSite(admin.AdminSite):
+#        index_template = 'admin/page_index.html'
+#        login_template = 'admin/page_login.html'
+#        app_index_template = 'admin/page_app_index.html'    
         
-    admin_site = AdminSite()
+#    admin_site = AdminSite()
 
-    from cms.models import Page
-    from cms.admin import pageadmin
+#    from cms.models import Page
+#    from cms.admin import pageadmin
 
-    class CmsPageAdmin(pageadmin.PageAdmin):
-        change_list_template = "admin/cms_change_list.html"
-        change_form_template = "admin/cms_change_form.html"
+#    class CmsPageAdmin(pageadmin.PageAdmin):
+#        change_list_template = "admin/cms_change_list.html"
+#       change_form_template = "admin/cms_change_form.html"
 
-    admin_site.register(Page, CmsPageAdmin)
+#    admin_site.register(Page, CmsPageAdmin)
 
-    from cms.plugins.snippet.models import Snippet
-    from cms.plugins.snippet.admin import SnippetAdmin
+#    from cms.plugins.snippet.models import Snippet
+#    from cms.plugins.snippet.admin import SnippetAdmin
 
-    class CmsSnippetAdmin(SnippetAdmin):
-          change_form_template = "admin/page_change_form.html"
-          change_list_template = "admin/page_change_list.html"
-    admin_site.register(Snippet, CmsSnippetAdmin)
\ No newline at end of file
+#    class CmsSnippetAdmin(SnippetAdmin):
+#        change_form_template = "admin/page_change_form.html"
+#        change_list_template = "admin/page_change_list.html"
+#    admin_site.register(Snippet, CmsSnippetAdmin)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/api/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,1 @@
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/api/ldt/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,1 @@
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/api/ldt/handlers.py	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,36 @@
+from ldt.ldt_utils.models import Project
+from piston.handler import BaseHandler
+from piston.utils import rc, require_extended
+import logging #@UnresolvedImport
+
+class ProjectHandler(BaseHandler):
+    allowed_methods = ('GET','PUT',)
+    model = Project   
+
+    def read(self, request, project_id):
+        """
+        returns a single project
+        """
+        return Project.objects.get(ldt_id=project_id)
+    
+    @require_extended
+    def update(self, request, project_id):
+        """
+        update a project.
+        """
+        logging.debug("request " + repr(request))
+        data = request.data
+        ldt_str = data["ldt"] 
+        
+        logging.debug("request data" + repr(ldt_str))
+        
+        if not ldt_str:
+            return rc.ALL_OK
+        
+        project = Project.objects.get(ldt_id=project_id)
+        
+        project.ldt = ldt_str
+        
+        project.save()
+        
+        return rc.ALL_OK
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/api/ldt/urls.py	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,9 @@
+from django.conf.urls.defaults import patterns, url
+from piston.resource import Resource
+from ldt.api.ldt.handlers import ProjectHandler
+
+project_handler = Resource(ProjectHandler, None)
+
+urlpatterns = patterns('',
+    url(r'projects/(?P<project_id>[^/.]+)\.?(?P<emitter_format>.*)$', project_handler),
+)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/ldt/ldt/api/urls.py	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,6 @@
+from django.conf.urls.defaults import patterns, include
+
+urlpatterns = patterns('',
+   # all my other url mappings
+   (r'^ldt/', include('ldt.api.ldt.urls')),
+)
--- a/src/ldt/ldt/auth/__init__.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/auth/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -4,4 +4,4 @@
     if check_meth:
         return check_meth(user)
     else:
-        return user.is_staff
\ No newline at end of file
+        return user.is_staff
--- a/src/ldt/ldt/core/__init__.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/core/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,1 @@
+
--- a/src/ldt/ldt/core/handlers/__init__.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/core/handlers/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,1 @@
+
--- a/src/ldt/ldt/core/handlers/modpython.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/core/handlers/modpython.py	Sat Jan 29 06:46:14 2011 +0100
@@ -5,4 +5,4 @@
 
     import django.core.handlers.modpython
 
-    return django.core.handlers.modpython.handler(req)
\ No newline at end of file
+    return django.core.handlers.modpython.handler(req)
--- a/src/ldt/ldt/core/handlers/modwsgi.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/core/handlers/modwsgi.py	Sat Jan 29 06:46:14 2011 +0100
@@ -6,7 +6,7 @@
     prev_sys_path = list(sys.path)
 
     sys.path.append(environ['PROJECT_PATH'])
-    for path in environ.get('PYTHON_PATH',"").split(os.pathsep):
+    for path in environ.get('PYTHON_PATH', "").split(os.pathsep):
         if path:
             site.addsitedir(path)
 
@@ -21,4 +21,4 @@
 
     _application = django.core.handlers.wsgi.WSGIHandler()
 
-    return _application(environ, start_response)
\ No newline at end of file
+    return _application(environ, start_response)
--- a/src/ldt/ldt/core/models.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/core/models.py	Sat Jan 29 06:46:14 2011 +0100
@@ -3,8 +3,8 @@
 
 
 class Owner(models.Model):
-    user = models.ForeignKey(User,  blank=True, null=True)
-    group = models.ForeignKey(Group,  blank=True, null=True)
+    user = models.ForeignKey(User, blank=True, null=True)
+    group = models.ForeignKey(Group, blank=True, null=True)
 
     def __unicode__(self):
         if self.user:
@@ -14,7 +14,7 @@
 
 
 class Document(models.Model):
-    owner= models.ForeignKey(Owner, blank = True, null=True)
+    owner = models.ForeignKey(Owner, blank=True, null=True)
 
     class Meta:
         abstract = True
--- a/src/ldt/ldt/forms/__init__.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/forms/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,1 @@
+
--- a/src/ldt/ldt/forms/widgets.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/forms/widgets.py	Sat Jan 29 06:46:14 2011 +0100
@@ -14,4 +14,4 @@
     
     def format_output(self, rendered_widgets):
         return mark_safe(u'<div class="ldtdatetime"><div class="ldtdate"><div class="ldtdatetitle">%s</div> <div class="ldtdatefield">%s</div></div><div class="ldttime"><div class="ldttimetitle">%s</div> <div class="ldttimefield">%s</div></div></div>' % \
-            (_('Date'), rendered_widgets[0],  _('Time'), rendered_widgets[1]))
+            (_('Date'), rendered_widgets[0], _('Time'), rendered_widgets[1]))
--- a/src/ldt/ldt/ldt_utils/__init__.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -5,11 +5,11 @@
 
 STORE = lucene.SimpleFSDirectory(lucene.File(settings.INDEX_PATH))
 ANALYZER = lucene.PerFieldAnalyzerWrapper(lucene.StandardAnalyzer(lucene.Version.LUCENE_CURRENT))
-ANALYZER.addAnalyzer("tags",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
-ANALYZER.addAnalyzer("title",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
-ANALYZER.addAnalyzer("abstract",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
-ANALYZER.addAnalyzer("all",lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("tags", lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("title", lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("abstract", lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
+ANALYZER.addAnalyzer("all", lucene.FrenchAnalyzer(lucene.Version.LUCENE_CURRENT))
 
 
-VERSION  = (0,1)
+VERSION = (0, 1)
 VERSION_STR = unicode(".".join(map(lambda i:"%02d" % (i,), VERSION)))
--- a/src/ldt/ldt/ldt_utils/admin.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/admin.py	Sat Jan 29 06:46:14 2011 +0100
@@ -16,10 +16,10 @@
 class ContentAdmin(admin.ModelAdmin):
     
     def import_file(self, request):
-        if request.method =='POST':
+        if request.method == 'POST':
             form = LdtImportForm(request.POST, request.FILES)
             if form.is_valid():
-                filetoprocess =form.cleaned_data['importFile']
+                filetoprocess = form.cleaned_data['importFile']
                 flatten = form.cleaned_data['flatten']
                 videoPath = form.cleaned_data['videoPath']
                 # fi = None
@@ -51,7 +51,7 @@
                 # try:
                 writer = lucene.IndexWriter(STORE, ANALYZER, True, lucene.IndexWriter.MaxFieldLength.UNLIMITED)
                 contentList = form.cleaned_data["contents"]
-                indexer = ContentIndexer(contentList,writer)
+                indexer = ContentIndexer(contentList, writer)
                 indexer.index_all()
 
                 writer.close()
--- a/src/ldt/ldt/ldt_utils/contentindexer.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/contentindexer.py	Sat Jan 29 06:46:14 2011 +0100
@@ -22,7 +22,7 @@
 
 class ContentIndexer(object):
         
-        def __init__(self, contentList, writer, decoupage_blackList = settings.DECOUPAGE_BLACKLIST):
+        def __init__(self, contentList, writer, decoupage_blackList=settings.DECOUPAGE_BLACKLIST):
                 self.__contentList = contentList
                 self.__decoupage_blacklist = decoupage_blackList
                 self.__writer = writer
@@ -49,7 +49,7 @@
                 self.index_content(content)
                 
         def index_content(self, content):
-            url =content.iri_url()
+            url = content.iri_url()
             filepath = urllib.urlopen(url)
             doc = lxml.etree.fromstring(filepath) 
            
@@ -58,19 +58,19 @@
             res = doc.xpath("/iri/body/ensembles/ensemble")
 
             for ensemble in res:
-                ensembleId = ensemble.get(None,u"id")
+                ensembleId = ensemble.get(None, u"id")
                 
                 for decoupageNode in ensemble.getchildren():
-                    if decoupageNode.tag != "decoupage"  or decoupageNode.get(None,u"id") in self.decoupage_blacklist:
+                    if decoupageNode.tag != "decoupage"  or decoupageNode.get(None, u"id") in self.decoupage_blacklist:
 
                         continue
                     
-                    decoupId = decoupageNode.get(None,u"id")
+                    decoupId = decoupageNode.get(None, u"id")
                     res = decoupageNode.xpath("elements/element")
                     for elementNode in res:
                         doc = lucene.Document()
-                        elementId = elementNode.get(None,u"id")
-                        tags = elementNode.get(None,u"tags")
+                        elementId = elementNode.get(None, u"id")
+                        tags = elementNode.get(None, u"tags")
                         
                         if tags is not None:                            
                             tags.replace(",", ";")
@@ -127,7 +127,7 @@
             
 class ProjectIndexer(object):
         
-        def __init__(self, projectList, writer, decoupage_blackList = settings.DECOUPAGE_BLACKLIST):
+        def __init__(self, projectList, writer, decoupage_blackList=settings.DECOUPAGE_BLACKLIST):
                 self.__projectList = projectList
                 self.__decoupage_blacklist = decoupage_blackList
                 self.__writer = writer
@@ -163,21 +163,21 @@
             res = doc.xpath("/iri/annotations/content")
 
             for content in res:
-                contentId = content.get(None,u"id")
+                contentId = content.get(None, u"id")
  
                 ensembleId = "ens_perso"
                 
                 for decoupageNode in content.getchildren():
                     # pocketfilms.utils.log.debug("Indexing content decoupage : "+ repr(decoupageNode.nodeType) + " in " + repr(self.decoupage_blacklist))
-                    if decoupageNode.tag != "decoupage"  or decoupageNode.get(None,"id") in self.decoupage_blacklist:
+                    if decoupageNode.tag != "decoupage"  or decoupageNode.get(None, "id") in self.decoupage_blacklist:
                         continue
                     
-                    decoupId = decoupageNode.get(None,u"id")
+                    decoupId = decoupageNode.get(None, u"id")
                     res = decoupageNode.xpath("elements/element")
                     for elementNode in res:
                         doc = lucene.Document()
-                        elementId = elementNode.get(None,u"id")
-                        tags = elementNode.get(None,u"tags")
+                        elementId = elementNode.get(None, u"id")
+                        tags = elementNode.get(None, u"tags")
                         
                         if tags is not None:                            
                             tags.replace(",", ";")
--- a/src/ldt/ldt/ldt_utils/fileimport.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/fileimport.py	Sat Jan 29 06:46:14 2011 +0100
@@ -24,7 +24,7 @@
 class IriInfo(object):
 
     
-    def __init__(self, id, order, titledesc, basepath="", videopath=settings.STREAM_URL, decoupage_blacklist = settings.DECOUPAGE_BLACKLIST, flatten = True):
+    def __init__(self, id, order, titledesc, basepath="", videopath=settings.STREAM_URL, decoupage_blacklist=settings.DECOUPAGE_BLACKLIST, flatten=True):
         self.id = id
         self.basepath = basepath
         self.order = order
@@ -89,7 +89,7 @@
                 if cnode.tag == "decoupage":
                     if newEnsemble is None:
                         #newensemble = doc.createElementNS(None,'ensemble')
-                        ensembleid = self.id+"_"+str(uuid.uuid1())
+                        ensembleid = self.id + "_" + str(uuid.uuid1())
                         newensemble = lxml.etree.SubElement(ensemblesnode,
                                                             'ensemble',
                                                             {'id' : ensembleid,
@@ -108,7 +108,7 @@
                     ensembleid = cnode.attrib['id']
                     cloneNode = deepcopy(cnode)
                     if ensembleid in ensembleids:
-                        ensembleid = self.id+"_"+str(uuid.uuid1())
+                        ensembleid = self.id + "_" + str(uuid.uuid1())
                         cloneNode.set(u"id", ensembleid)
                     ensembleids.append(ensembleid)
                     ensemblesnode.append(cloneNode)
@@ -140,7 +140,7 @@
     def saveContent(self):
 
         defaults_media = {'src':unicode(self.videourl), 'title':unicode(self.title), 'description':unicode(self.desc), 'videopath': unicode(self.videopath.rstrip("/") + "/")}
-        media, media_created = Media.objects.get_or_create(src=unicode(self.videourl), defaults = defaults_media)
+        media, media_created = Media.objects.get_or_create(src=unicode(self.videourl), defaults=defaults_media)
         if not media_created:
             for key, value in defaults_media.items():
                 setattr(media, key, value)
@@ -148,14 +148,14 @@
         media.save()
 
         defaults_content = { 
-            'iriurl': unicode(self.src), 
+            'iriurl': unicode(self.src),
             'title':unicode(self.title),
             'description':unicode(self.desc),
             'media':media,
             'iri':unicode(self.id + u"/" + os.path.basename(self.src)),
             'duration':int(self.duration)
         }
-        content, self.created = Content.objects.get_or_create(iri_id=self.id, defaults = defaults_content)
+        content, self.created = Content.objects.get_or_create(iri_id=self.id, defaults=defaults_content)
         if not self.created:
             for key, value in defaults_content.items():
                 setattr(content, key, value)
@@ -316,12 +316,12 @@
                     # Get iri file's url from ldt. This url can be relative path or absolute path.
                 #contents[id].src = medianode.attributes['src'].value
                 contents[id].src = medianode.attrib['src']
-                if medianode.attrib['video'] !="":
+                if medianode.attrib['video'] != "":
                     contents[id].videopath = medianode.attrib['video']
-                elif self.videopath !="" or self.videopath:
+                elif self.videopath != "" or self.videopath:
                     contents[id].videopath = self.videopath
                 else:
-                    contents[id].videopath =settings.STREAM_URL
+                    contents[id].videopath = settings.STREAM_URL
                     
                 
         #get annotation of file ldt
--- a/src/ldt/ldt/ldt_utils/forms.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/forms.py	Sat Jan 29 06:46:14 2011 +0100
@@ -41,7 +41,7 @@
     #iri_id = forms.CharField(max_length=1024, widget=forms.HiddenInput, initial=generate_uuid)
     iriurl = forms.CharField(max_length=1024, widget=forms.HiddenInput, required=False)
     content_creation_date = forms.SplitDateTimeField(widget=ldt_widgets.LdtSplitDateTime, required=False, label=_("content.content_creation_date"))
-    media_input_type =  forms.ChoiceField(required=False, label=_("content.media_input_type"), choices=(("upload",_("file_upload")),("url",_("url")),("link",_("existing_media")),("create",_("create_media")),("none",_("none_media")) ))
+    media_input_type = forms.ChoiceField(required=False, label=_("content.media_input_type"), choices=(("upload", _("file_upload")), ("url", _("url")), ("link", _("existing_media")), ("create", _("create_media")), ("none", _("none_media"))))
     
     def clean_iri_id(self):
         data = self.cleaned_data.get('iri_id')
@@ -67,7 +67,7 @@
         
     class Media:
         css = {
-            'all' : ('admin/css/forms.css','admin/css/base.css', 'admin/css/widgets.css')
+            'all' : ('admin/css/forms.css', 'admin/css/base.css', 'admin/css/widgets.css')
                }
         
 class MediaForm(forms.ModelForm):
@@ -82,5 +82,5 @@
     
     class Media:
         css = {
-            'all' : ('admin/css/forms.css','admin/css/base.css', 'admin/css/widgets.css')
+            'all' : ('admin/css/forms.css', 'admin/css/base.css', 'admin/css/widgets.css')
                }
--- a/src/ldt/ldt/ldt_utils/models.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/models.py	Sat Jan 29 06:46:14 2011 +0100
@@ -1,15 +1,16 @@
 from django.conf import settings
+from django.contrib.auth.models import User
 from django.db import models
 from django.utils.translation import ugettext_lazy as _
 from ldt.core.models import Document, Owner
-from django.contrib.auth.models import User
-import tagging.fields
-from utils import create_ldt, copy_ldt, create_empty_iri, update_iri, generate_uuid
+from ldt.ldt_utils import STORE, ANALYZER
+from utils import create_ldt, copy_ldt, create_empty_iri, update_iri, \
+    generate_uuid
+import lucene
 import lxml.etree
 import os.path
+import tagging.fields
 import uuid
-import lucene
-from ldt.ldt_utils import STORE, ANALYZER
 
 class Author(models.Model):
 
@@ -36,7 +37,7 @@
     title = models.CharField(max_length=1024, null=True, blank=True, verbose_name=_('title'))
     src = models.CharField(max_length=1024, unique=True, verbose_name=_('media.src'))
     
-    def stream_src():
+    def stream_src(): #@NoSelf
         
         def fget(self):
             res_src = self.src.rstrip()
@@ -44,9 +45,9 @@
                 extension = res_src.split(".")[-1]
                 res_src = {
                     'flv': lambda s: s,
-                    'mp3': lambda s: "%s:%s" %("mp3",res_src[:-4]),
-                    'mp4': lambda s: "%s:%s" %("mp4",res_src[:-4]),
-                    'f4v': lambda s: "%s:%s" %("mp4",res_src[:-4]),
+                    'mp3': lambda s: "%s:%s" % ("mp3", res_src[:-4]),
+                    'mp4': lambda s: "%s:%s" % ("mp4", res_src[:-4]),
+                    'f4v': lambda s: "%s:%s" % ("mp4", res_src[:-4]),
                 }.get(extension, lambda s:s)(res_src.lower())
             return res_src
         
@@ -80,8 +81,8 @@
     authors = models.ManyToManyField(Author, blank=True, verbose_name=_('content.authors'))
     duration = models.IntegerField(null=True, blank=True, verbose_name=_('content.duration'))
     content_creation_date = models.DateTimeField(null=True, blank=True, verbose_name=_('content.content_creation_date'))
-    tags = tagging.fields.TagField(max_length=2048, null=True, blank=True )
-    media_obj = models.ForeignKey('Media', blank=True, null=True )
+    tags = tagging.fields.TagField(max_length=2048, null=True, blank=True)
+    media_obj = models.ForeignKey('Media', blank=True, null=True)
     
     class Meta:
         ordering = ["title"]
@@ -92,7 +93,7 @@
             res = doc.xpath("/iri/body/medias/media[@id='video']/video")
             if len(res) > 0:
                 try:
-                    self.duration = int(res[0].get(u'dur',0) or 0)
+                    self.duration = int(res[0].get(u'dur', 0) or 0)
                 except:
                     self.duration = 0
             else:
@@ -116,7 +117,7 @@
                 if not os.path.exists(dir):
                     os.makedirs(dir)
                 created = True
-                file = open(iri_file_path,"w")
+                file = open(iri_file_path, "w")
                 create_empty_iri(file, self, "IRI")
             else:
                 created = False
@@ -143,7 +144,7 @@
         if 'http' in self.iriurl or 'https' in self.iriurl:
             return self.iriurl
         else:
-            return unicode(web_url) + unicode(settings.MEDIA_URL)+u"media/ldt/"+unicode(self.iriurl)
+            return unicode(web_url) + unicode(settings.MEDIA_URL) + u"media/ldt/" + unicode(self.iriurl)
     
     def iri_file_path(self):
         return os.path.join(os.path.join(os.path.join(os.path.join(settings.MEDIA_ROOT, "media"), "ldt"), self.iri_id), os.path.basename(self.iriurl))
@@ -160,7 +161,7 @@
             return None
             
     
-    def stream_src():
+    def stream_src(): #@NoSelf
         
         def fget(self):
             if self.media_obj is not None:
@@ -212,7 +213,7 @@
            
         def fset(self, value):
             if self.media_obj is None or self.media_obj.src != value:
-                media, created = Media.objects.get_or_create(src=value, defaults={'src':value})                
+                media, created = Media.objects.get_or_create(src=value, defaults={'src':value})                #@UnusedVariable
                 self.media_obj = media
                 self.save()
                       
@@ -244,7 +245,7 @@
         
         
 class Project(Document):  
-    STATE_CHOICES=(
+    STATE_CHOICES = (
     (1, 'edition'),
     (2, 'published'),
     (3, 'moderated'),
@@ -284,9 +285,9 @@
     def create_project(user, title, contents):
         owner = Owner.objects.get(user=user)
         project = Project(title=title, owner=owner)
-        project.ldt_id = str(uuid.uuid1())
-        project.created_by=user.username
-        project.changed_by=user.username
+        project.ldt_id = str(uuid.uuid1()) #@UndefinedVariable
+        project.created_by = user.username
+        project.changed_by = user.username
         project.state = 1
         project.save()
         for content in contents:
--- a/src/ldt/ldt/ldt_utils/projectindexer.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/projectindexer.py	Sat Jan 29 06:46:14 2011 +0100
@@ -13,7 +13,7 @@
     return property(**func()) 
 
 class ProjectIndexer(object):
-    def __init__(self, projectList, writer, decoupage_blackList = settings.DECOUPAGE_BLACKLIST):
+    def __init__(self, projectList, writer, decoupage_blackList=settings.DECOUPAGE_BLACKLIST):
         self.__projectList = projectList
         self.__decoupage_blacklist = decoupage_blackList
         self.__writer = writer
@@ -42,18 +42,18 @@
     def index_project(self, project):
         # ldt.utils.log.debug("Indexing project : "+str(project.ldt_id))
         
-        ldt=project.ldt
-        doc = lxml.etree.fromstring(ldt.encode( "utf-8" ))
+        ldt = project.ldt
+        doc = lxml.etree.fromstring(ldt.encode("utf-8"))
  
         self.__writer.deleteDocuments(lucene.Term("ldt_id", project.ldt_id))
             
         res = doc.xpath("/iri/annotations/content")
-        project.ldt.encode( "utf-8 " )
+        project.ldt.encode("utf-8 ")
 
         for content in res:
             contentId = content.get("id")
  
-            res =content.xpath("ensemble")
+            res = content.xpath("ensemble")
             for ensemble in res:
                 ensembleId = ensemble.get("id")
  
--- a/src/ldt/ldt/ldt_utils/projectserializer.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/projectserializer.py	Sat Jan 29 06:46:14 2011 +0100
@@ -6,7 +6,7 @@
 import lxml.etree
 import uuid
 
-DATE_FORMATS = ["%d/%m/%Y","%Y-%m-%d"]
+DATE_FORMATS = ["%d/%m/%Y", "%Y-%m-%d"]
 
 
 """
@@ -107,7 +107,7 @@
             if date_str :
                 for date_format in DATE_FORMATS:
                     try:
-                        decoupage_created = datetime.strptime(date_str,date_format).isoformat()
+                        decoupage_created = datetime.strptime(date_str, date_format).isoformat()
                         break
                     except Exception:
                         decoupage_created = None
@@ -148,7 +148,7 @@
                 element_media = content.iri_id
                 element_color = element_node.attrib[u"color"]
                 
-                element_title = reduce_text_node(element_node,"title/text()")        
+                element_title = reduce_text_node(element_node, "title/text()")        
                 element_description = reduce_text_node(element_node, "abstract/text()")                
                 element_twitter = reduce_text_node(element_node, "meta/twitter/text()")
                 
@@ -156,14 +156,14 @@
                 element_audio_href = ""
                 res = element_node.xpath("audio")
                 if len(res) > 0:
-                    element_audio_src = res[0].get(u"source",u"")
-                    element_audio_href =  res[0].text                
+                    element_audio_src = res[0].get(u"source", u"")
+                    element_audio_href = res[0].text                
                 
                 element_tags = []
                 
-                tags = element_node.get(u"tags",u"")
+                tags = element_node.get(u"tags", u"")
                 
-                tags_list = map(lambda s:s.strip(),tags.split(","))
+                tags_list = map(lambda s:s.strip(), tags.split(","))
 
                 #tags                                
                 if tags is None or len(tags) == 0:
@@ -338,7 +338,7 @@
                  "dc:duration" : content.get_duration(),
                  "item": {
                      "name" : "streamer",
-                     "value": meta_item_value, 
+                     "value": meta_item_value,
                  },
              }
         }
@@ -375,7 +375,7 @@
             }
                 
                     
-        res['medias'] =  self.medias_dict.values() if len(self.medias_dict) > 0 else None
+        res['medias'] = self.medias_dict.values() if len(self.medias_dict) > 0 else None
         res['lists'] = self.lists_dict.values() if len(self.lists_dict) > 0 else None
         res['tags'] = self.tags.values() if len(self.tags) > 0 else None
         res['views'] = self.views_dict.values() if len(self.views_dict) > 0 else None
@@ -404,11 +404,11 @@
             content_id = annot['media']
             content = Content.objects.get(iri_id=content_id)
             if annot['tags']:
-                tags_list = map(lambda tag_entry: self.tags_dict[tag_entry['id-ref']]['meta']['dc:title'],annot['tags'])
+                tags_list = map(lambda tag_entry: self.tags_dict[tag_entry['id-ref']]['meta']['dc:title'], annot['tags'])
             else:
                 tags_list = []
             begin = int(annot['begin'])
-            duration = int(annot['end'])-begin
+            duration = int(annot['end']) - begin
             if content.media_obj and content.media_obj.external_publication_url:
                 uri = "%s#t=%d" % (content.media_obj.external_publication_url, begin)
 
--- a/src/ldt/ldt/ldt_utils/tests.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/tests.py	Sat Jan 29 06:46:14 2011 +0100
@@ -49,7 +49,7 @@
         self.project.save()
         
         self.projectcopy = Project(title="the2ndproject")
-        self.projectcopy.id="22"
+        self.projectcopy.id = "22"
 
     def tearDown(self):
         self.project.delete()
@@ -66,13 +66,13 @@
         self.cont2.iri_id = "id2"
         self.cont2.save()
         
-        self.project.contents.add(self.cont1,self.cont2)
+        self.project.contents.add(self.cont1, self.cont2)
     
-        f=tempfile.TemporaryFile(mode='r+')
-        self.LU.generateLdt(Content.objects.all(),f)
+        f = tempfile.TemporaryFile(mode='r+')
+        self.LU.generateLdt(Content.objects.all(), f)
         f.seek(0)
         ldoc = lxml.etree.parse(f)
-        self.assertEqual(ldoc.xpath("/iri/displays/display/content")[9].get("id"),self.cont2.iri_id)
+        self.assertEqual(ldoc.xpath("/iri/displays/display/content")[9].get("id"), self.cont2.iri_id)
         self.assertEqual(ldoc.xpath("/iri/medias/media")[8].get("id"), self.cont1.iri_id)
         f.close()
 
@@ -85,8 +85,8 @@
         self.cont4.iri_id = "id4"
         self.cont4.save()
         
-        self.project.contents.add(self.cont3,self.cont4)
-        ldoc = self.LU.generateInit(None,None)
+        self.project.contents.add(self.cont3, self.cont4)
+        ldoc = self.LU.generateInit(None, None)
         self.assertEqual(ldoc.xpath("/iri/files/init")[0].tag, "init")
         self.assertEqual(ldoc.xpath("/iri/files/library")[0].tag, "library")
         self.assertEqual(ldoc.xpath("/iri/files/init/file")[0].get("video"), settings.STREAM_URL)
@@ -100,11 +100,11 @@
         self.cont6.iri_id = "id6"
         self.cont6.save()
         
-        self.project.contents.add(self.cont5,self.cont6)
-        self.project.ldt=""
+        self.project.contents.add(self.cont5, self.cont6)
+        self.project.ldt = ""
         create_ldt(self.project, self.user)
         ldt = lxml.etree.fromstring(self.project.ldt)
-        self.assertEqual(ldt.xpath("/iri")[0].tag,"iri")
+        self.assertEqual(ldt.xpath("/iri")[0].tag, "iri")
         self.assertEqual(ldt.xpath("/iri/project")[0].get("title"), self.project.title)
         self.assertEqual(ldt.xpath("/iri/medias/media")[0].get("src"), self.cont5.iri_url())
         self.assertEqual(ldt.xpath("/iri/medias/media")[1].get("id"), self.cont6.iri_id)
@@ -118,15 +118,15 @@
         self.cont8.iri_id = "id8"
         self.cont8.save()
         
-        self.project.contents.add(self.cont7,self.cont8)
+        self.project.contents.add(self.cont7, self.cont8)
         copy_ldt(self.project, self.projectcopy, self.user)
-        ldt1=lxml.etree.fromstring(self.project.ldt)
-        ldt2=lxml.etree.fromstring(self.projectcopy.ldt)
-        self.assertTrue(ldt1.xpath("/iri/project")[0].get("id")!= ldt2.xpath("/iri/project")[0].get("id"))
-        self.assertEqual(ldt1.xpath("/iri/medias/media")[0].get("id"),ldt2.xpath("/iri/medias/media")[0].get("id"))
-        self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble")[0].get("title"),ldt2.xpath("/iri/annotations/content/ensemble")[0].get("title"))
-        self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble/decoupage")[0].get("id"),ldt2.xpath("/iri/annotations/content/ensemble/decoupage")[0].get("id"))
-        self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble/decoupage/title")[1].text,ldt2.xpath("/iri/annotations/content/ensemble/decoupage/title")[1].text.strip("\n\t"))
+        ldt1 = lxml.etree.fromstring(self.project.ldt)
+        ldt2 = lxml.etree.fromstring(self.projectcopy.ldt)
+        self.assertTrue(ldt1.xpath("/iri/project")[0].get("id") != ldt2.xpath("/iri/project")[0].get("id"))
+        self.assertEqual(ldt1.xpath("/iri/medias/media")[0].get("id"), ldt2.xpath("/iri/medias/media")[0].get("id"))
+        self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble")[0].get("title"), ldt2.xpath("/iri/annotations/content/ensemble")[0].get("title"))
+        self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble/decoupage")[0].get("id"), ldt2.xpath("/iri/annotations/content/ensemble/decoupage")[0].get("id"))
+        self.assertEqual(ldt1.xpath("/iri/annotations/content/ensemble/decoupage/title")[1].text, ldt2.xpath("/iri/annotations/content/ensemble/decoupage/title")[1].text.strip("\n\t"))
 
     def test_create_empty_iri(self):
         self.cont9 = Content(iriurl="id9/iriurl1")
@@ -137,7 +137,7 @@
         self.cont10.iri_id = "id10"
         self.cont10.save()
         
-        self.project.contents.add(self.cont9,self.cont10)
+        self.project.contents.add(self.cont9, self.cont10)
         tmp = tempfile.TemporaryFile(mode='r+')
         create_empty_iri(tmp, self.cont9, "admin")
         tmp.seek(0)
--- a/src/ldt/ldt/ldt_utils/urls.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/urls.py	Sat Jan 29 06:46:14 2011 +0100
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import *
+from django.conf.urls.defaults import patterns, url
 from ldt.management import test_ldt
 
 # Uncomment the next two lines to enable the admin:
@@ -23,13 +23,13 @@
     url(r'^cljson/externalid/(?P<id>.*)$', 'views.project_json_externalid'),
     url(r'^rdf/id/(?P<ldt_id>.*)$', 'views.project_annotations_rdf'),
     url(r'^/?$', "views.workspace", name="root-view"),
-    url(r'^filterprojects/_(?P<filter>[\w\%\_\-\+]*?)/(?P<is_owner>true|false)/(?P<status>\d)$', "views.projectsfilter", ),
-    url(r'^filtercontents/_(?P<filter>[\w\%\_\-\+]*?)/$', "views.contentsfilter", ),
+    url(r'^filterprojects/_(?P<filter>[\w\%\_\-\+]*?)/(?P<is_owner>true|false)/(?P<status>\d)$', "views.projectsfilter",),
+    url(r'^filtercontents/_(?P<filter>[\w\%\_\-\+]*?)/$', "views.contentsfilter",),
     (r'^embedpopup/?$', "views.popup_embed"),
 )
 
 urlpatterns += patterns('',
-    url('^jsi18n','django.views.i18n.javascript_catalog', name='jsi18n'),
+    url('^jsi18n', 'django.views.i18n.javascript_catalog', name='jsi18n'),
 )
 
 
--- a/src/ldt/ldt/ldt_utils/utils.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/utils.py	Sat Jan 29 06:46:14 2011 +0100
@@ -18,7 +18,7 @@
 }
 
 def reduce_text_node(element_node, xpath_str):
-    return reduce(lambda t, s: t+s, element_node.xpath(xpath_str, smart_strings=False), "")
+    return reduce(lambda t, s: t + s, element_node.xpath(xpath_str, smart_strings=False), "")
 
 def boolean_convert(bool):
     if bool is None:
@@ -43,7 +43,7 @@
         res = []
         for hit in hits.scoreDocs:
             doc = indexSearcher.doc(hit.doc)
-            res.append({"iri_id":doc.get("iri_id"),"ensemble_id":doc.get("ensemble_id"),"decoupage_id":doc.get("decoupage_id"), "element_id":doc.get("element_id")})
+            res.append({"iri_id":doc.get("iri_id"), "ensemble_id":doc.get("ensemble_id"), "decoupage_id":doc.get("decoupage_id"), "element_id":doc.get("element_id")})
         indexSearcher.close()
         return res
 
@@ -52,16 +52,16 @@
 
 class LdtUtils(object):
     
-    def generateLdt(self, contentList, file, title = u"", author=u"IRI Web", web_url=u"", media_url="", startSegment = None, contributions=None):
+    def generateLdt(self, contentList, file, title=u"", author=u"IRI Web", web_url=u"", media_url="", startSegment=None, contributions=None):
 
         iri = lxml.etree.Element(u'iri')
         doc = lxml.etree.ElementTree(iri)
     
         project = lxml.etree.SubElement(iri, u'project')
-        project.set(u"id",unicode(str(uuid.uuid1())))
-        project.set(u"title",unicode(title))
-        project.set(u"user",author)
-        project.set(u"abstract",u"")
+        project.set(u"id", unicode(str(uuid.uuid1())))
+        project.set(u"title", unicode(title))
+        project.set(u"user", author)
+        project.set(u"abstract", u"")
     
         medias = lxml.etree.SubElement(iri, u"medias")
         for content in contentList:
@@ -69,11 +69,11 @@
             if content.videopath :
                 videopath = unicode(content.videopath)
             media = lxml.etree.SubElement(medias, "media")
-            media.set(u"id",content.iri_id)
-            media.set(u"src",content.iri_url(web_url))
-            media.set(u"video",videopath)
-            media.set(u"pict",u"")
-            media.set(u"extra",u"")
+            media.set(u"id", content.iri_id)
+            media.set(u"src", content.iri_url(web_url))
+            media.set(u"video", videopath)
+            media.set(u"pict", u"")
+            media.set(u"extra", u"")
     
             if contributions is None:
                 contributions = []
@@ -88,7 +88,7 @@
                         contentnode = annotations_nodes[contentid]
                     else:
                         contentnode = {"id":contentid, "ensembles":[]}
-                        annotations_nodes[contentid]=contentnode
+                        annotations_nodes[contentid] = contentnode
                     for ens in content.childNodes:
                         if ens.tag.endswith("ensemble"):
                             contentnode["ensembles"].append(ens.tag)
@@ -100,13 +100,13 @@
                     if content.content_base.iri_id in annotations_nodes:
                         contentnode = annotations_nodes[content.content_base.iri_id]
                         if contentnode is not None:
-                            if len(contentnode["ensembles"])>0:
+                            if len(contentnode["ensembles"]) > 0:
                                 content = lxml.etree.SubElement(annotation, "content")
-                                content.set("id",contentnode["id"])
+                                content.set("id", contentnode["id"])
                                 content.text = u""
                             else:
                                 content = lxml.etree.SubElement(annotation, "content")
-                                content.set("id",contentnode["id"])
+                                content.set("id", contentnode["id"])
     
             else:
                 annotations = lxml.etree.SubElement(iri, "annotations")
@@ -115,13 +115,13 @@
         displays = lxml.etree.SubElement(iri, "displays")
         if len(contentList) > 0:
             display = lxml.etree.SubElement(displays, "display")
-            display.set(u"id",u"0")
-            display.set(u"title",u"generated")
-            display.set(u"idsel",contentList[0].iri_id)
-            display.set(u"tc",u"0")
+            display.set(u"id", u"0")
+            display.set(u"title", u"generated")
+            display.set(u"idsel", contentList[0].iri_id)
+            display.set(u"tc", u"0")
             for content in contentList:
-                contentd = lxml.etree.SubElement(display,"content")
-                contentd.set(u"id",content.iri_id)
+                contentd = lxml.etree.SubElement(display, "content")
+                contentd.set(u"id", content.iri_id)
                 filepath = urllib.urlopen(content.iri_url())
             
                 udoc = lxml.etree.parse(filepath)
@@ -131,16 +131,16 @@
                     ensemble_id = decoupagenode.getparent().get(u"id")
                     decoupage_id = decoupagenode.get(u"id")
                     ensemble_id = decoupagenode.getparent().get(u"id")
-                    decoupage = lxml.etree.SubElement(contentd,"decoupage")
-                    decoupage.set(u"id",decoupage_id)
-                    decoupage.set(u"idens",ensemble_id)
+                    decoupage = lxml.etree.SubElement(contentd, "decoupage")
+                    decoupage.set(u"id", decoupage_id)
+                    decoupage.set(u"idens", ensemble_id)
             if startSegment is not None:
-                activeSegment = lxml.etree.SubElement(display,"activeSegment")
-                idas = lxml.etree.SubElement(activeSegment,"id")
-                idas.set(u"idctt",startSegment["idcontent"])
-                idas.set(u"idens" ,startSegment["idgroup"])
-                idas.set(u"idcut",startSegment["idcutting"])
-                idas.set(u"idseg",startSegment["idsegment"])
+                activeSegment = lxml.etree.SubElement(display, "activeSegment")
+                idas = lxml.etree.SubElement(activeSegment, "id")
+                idas.set(u"idctt", startSegment["idcontent"])
+                idas.set(u"idens" , startSegment["idgroup"])
+                idas.set(u"idcut", startSegment["idcutting"])
+                idas.set(u"idseg", startSegment["idsegment"])
     
         edits = lxml.etree.SubElement(iri, "edits")
         
@@ -152,14 +152,14 @@
         iri = lxml.etree.Element('iri')
         impl = lxml.etree.ElementTree(iri)
  
-        elementFiles = lxml.etree.SubElement(iri,'files')    
+        elementFiles = lxml.etree.SubElement(iri, 'files')    
         elementInit = lxml.etree.SubElement(elementFiles, 'init')
         elementfile = lxml.etree.SubElement(elementInit, 'file')
             
-        elementfile.set('src',settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url))
+        elementfile.set('src', settings.WEB_URL + django.core.urlresolvers.reverse(method, args=url))
         elementfile.set('display', '1')
         if(search):
-            elementfile.set("segsel",settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url))   
+            elementfile.set("segsel", settings.WEB_URL + django.core.urlresolvers.reverse(search, args=url))   
 
     
         # /*chemin video : tant que le serveur de media n'est pas up, */
@@ -210,7 +210,7 @@
         elementMedia.set('id', content.iri_id)
         elementMedia.set('src', content.iri_url())
 
-        if content.videopath and content.videopath !="":
+        if content.videopath and content.videopath != "":
             elementMedia.set('video', content.videopath)
         else:
             elementMedia.set('video', settings.STREAM_URL)
@@ -244,7 +244,7 @@
         #eg: "iiiielizabethrosse/ENMI08-III_elizabethrosse.iri"
             url = content.iri_url()
         else:
-            url =content.iriurl
+            url = content.iriurl
         file = urllib.urlopen(url)
         doc = lxml.etree.parse(file)
         res = doc.xpath("/iri/body/ensembles/ensemble/decoupage")        
@@ -252,7 +252,7 @@
         #node decoupage
         for decoupagenode in res:
             decoupage_id = decoupagenode.get(u"id")
-            parent= decoupagenode.getparent()
+            parent = decoupagenode.getparent()
             ensemble_id = parent.get(u"id")
             elementDecoupage = lxml.etree.SubElement(elementContent, 'decoupage')
             elementDecoupage.set('idens', ensemble_id)
@@ -271,11 +271,11 @@
 
 def copy_ldt(project, new_project, user):
     new_project.ldt_id = str(uuid.uuid1())
-    new_project.created_by=user.username
-    new_project.changed_by=user.username
+    new_project.created_by = user.username
+    new_project.changed_by = user.username
     new_project.state = 1
     
-    contentList=project.contents.all()
+    contentList = project.contents.all()
     
     """create xml"""
     
@@ -303,22 +303,22 @@
     meta_id.set(u'name', u'id')
     meta_id.set(u'content', unicode(content.iri_id))
     meta_title = lxml.etree.SubElement(head, 'meta')
-    meta_title.set(u'name',u'title')
+    meta_title.set(u'name', u'title')
     meta_title.set(u'content', unicode(content.title))
     meta_abstract = lxml.etree.SubElement(head, 'meta')
-    meta_abstract.set(u'name',u'abstract')
+    meta_abstract.set(u'name', u'abstract')
     meta_abstract.set(u'content', unicode(content.description))
     meta_author = lxml.etree.SubElement(head, 'meta')
-    meta_author.set(u'name',u'author')
+    meta_author.set(u'name', u'author')
     meta_author.set(u'content', unicode(username))
     meta_contributor = lxml.etree.SubElement(head, 'meta')
-    meta_contributor.set(u'name',u'contributor')
+    meta_contributor.set(u'name', u'contributor')
     meta_contributor.set(u'content', unicode(username))
     meta_date = lxml.etree.SubElement(head, 'meta')
-    meta_date.set(u'name',u'date')
+    meta_date.set(u'name', u'date')
     meta_date.set(u'content', unicode(datetime.date.today().isoformat()))
     meta_copyright = lxml.etree.SubElement(head, 'meta')
-    meta_copyright.set(u'name',u'copyright')
+    meta_copyright.set(u'name', u'copyright')
     meta_copyright.set(u'content', u'IRI')
     meta_type = lxml.etree.SubElement(head, 'meta')
     meta_type.set(u'name', u'type')
@@ -331,15 +331,15 @@
     medias = lxml.etree.SubElement(body, 'medias')
 
     media_video = lxml.etree.SubElement(medias, 'media')
-    media_video.set(u'id',u'video')
+    media_video.set(u'id', u'video')
     video = lxml.etree.SubElement(media_video, 'video')
-    video.set(u'src',unicode(content.stream_src))
-    video.set(u'id',unicode(content.iri_id))
-    video.set(u'dur',unicode(content.duration))
-    video.set(u'begin',u'0')
+    video.set(u'src', unicode(content.stream_src))
+    video.set(u'id', unicode(content.iri_id))
+    video.set(u'dur', unicode(content.duration))
+    video.set(u'begin', u'0')
 
     media_tool = lxml.etree.SubElement(medias, 'media')
-    media_tool.set(u'id',u'tool')
+    media_tool.set(u'id', u'tool')
     tool = lxml.etree.SubElement(media_tool, 'tool')
 
     display = lxml.etree.SubElement(body, 'display')
--- a/src/ldt/ldt/ldt_utils/views.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/ldt_utils/views.py	Sat Jan 29 06:46:14 2011 +0100
@@ -75,11 +75,11 @@
     annotations = ps.getAnnotations(first_cutting=True)
 
     embed_rendered = dict((typestr,
-                           (lambda s:escape(lxml.etree.tostring(fragment_fromstring(render_to_string("ldt/ldt_utils/partial/embed_%s.html"%(s), {'json_url':json_url,'player_id':player_id, 'annotations':annotations, 'ldt_id': ldt_id}, context_instance=RequestContext(request))),pretty_print=True)))(typestr))
-                           for typestr in ('player','seo_body', 'seo_meta', 'links')  )
+                           (lambda s:escape(lxml.etree.tostring(fragment_fromstring(render_to_string("ldt/ldt_utils/partial/embed_%s.html" % (s), {'json_url':json_url, 'player_id':player_id, 'annotations':annotations, 'ldt_id': ldt_id}, context_instance=RequestContext(request))), pretty_print=True)))(typestr))
+                           for typestr in ('player', 'seo_body', 'seo_meta', 'links'))
 
     return render_to_response("ldt/ldt_utils/embed_popup.html",
-                              {'json_url':json_url,'player_id':player_id, 'embed_rendered':embed_rendered, 'annotations':annotations, 'ldt_id' : ldt_id},
+                              {'json_url':json_url, 'player_id':player_id, 'embed_rendered':embed_rendered, 'annotations':annotations, 'ldt_id' : ldt_id},
                               context_instance=RequestContext(request))
 
 
@@ -108,7 +108,7 @@
             filter = filter[1:]
         query &= Q(title__icontains=filter)
 
-    project_list =  Project.objects.filter(query)
+    project_list = Project.objects.filter(query)
 
     return render_to_response("ldt/ldt_utils/partial/projectslist.html",
                               {'projects': project_list},
@@ -135,7 +135,7 @@
 
 def searchForm(request):
     form = SearchForm()
-    return render_to_response('ldt/ldt_utils/search_form.html',{'form': form} , context_instance=RequestContext(request))    
+    return render_to_response('ldt/ldt_utils/search_form.html', {'form': form} , context_instance=RequestContext(request))    
 
 def searchIndex(request):
     
@@ -149,7 +149,7 @@
         language_code = request.LANGUAGE_CODE[:2]
     
         url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, queryStr])
-        return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
+        return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
     else:
         resp = HttpResponse()
         resp.write("<html><head></head><body>Error : No result</body></html>");
@@ -158,13 +158,13 @@
 
     language_code = request.LANGUAGE_CODE[:2]
     url = settings.WEB_URL + django.core.urlresolvers.reverse("ldt.ldt_utils.views.searchInit", args=[field, query])
-    return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
+    return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': url}, context_instance=RequestContext(request))
 
 def searchInit(request, field, query):
     
     ldtgen = LdtUtils()
     
-    doc = ldtgen.generateInit([field,query], 'ldt.ldt_utils.views.searchLdt', 'ldt.ldt_utils.views.searchSegments')
+    doc = ldtgen.generateInit([field, query], 'ldt.ldt_utils.views.searchLdt', 'ldt.ldt_utils.views.searchSegments')
     
     resp = HttpResponse(mimetype="text/xml;charset=utf-8")
     doc.write(resp, pretty_print=True)
@@ -176,7 +176,7 @@
     resp = HttpResponse(mimetype="text/xml")
     queryStr = ""
 
-    if query and len(query)>0:        
+    if query and len(query) > 0:        
         queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
         searcher = LdtSearch()
         ids = {}
@@ -194,14 +194,14 @@
 
             
     ldtgen = LdtUtils()
-    ldtgen.generateLdt(contentList, file=resp, title = u"Recherche : " + queryStr)
+    ldtgen.generateLdt(contentList, file=resp, title=u"Recherche : " + queryStr)
     
     return resp
 
 
 def searchSegments(request, field, query, edition=None):
     
-    if query and len(query)>0:
+    if query and len(query) > 0:
         searcher = LdtSearch()
         
         queryStr = base64.urlsafe_b64decode(query.encode("ascii")).decode("utf8")
@@ -241,7 +241,7 @@
     except:
         return HttpResponseRedirect(settings.LOGIN_URL)
     ldtProjects = Project.objects.filter(owner=owner)
-    context={
+    context = {
     'contents': contents,
     'projects': ldtProjects.reverse(),
     }
@@ -250,7 +250,7 @@
 @login_required         
 def list_content(request):
     contents = Content.objects.all()
-    context={
+    context = {
         'contents': contents,
     }
     return render_to_response('ldt/ldt_utils/content_list.html', context, context_instance=RequestContext(request))
@@ -263,14 +263,14 @@
             user = request.user
             Project.create_project(title=form.cleaned_data['title'], user=user, contents=form.cleaned_data['contents'])
             form_status = "saved"
-            contents=[]
+            contents = []
             #return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
     else:
         form = LdtAddForm()
         contents = Content.objects.all()
         form_status = "none"
             
-    return render_to_response('ldt/ldt_utils/create_ldt.html', {'contents': contents, 'form': form, 'form_status':form_status,'create_project_action':reverse(create_ldt_view)}, context_instance=RequestContext(request))
+    return render_to_response('ldt/ldt_utils/create_ldt.html', {'contents': contents, 'form': form, 'form_status':form_status, 'create_project_action':reverse(create_ldt_view)}, context_instance=RequestContext(request))
      
 def created_ldt(request):
     return render_to_response('ldt/ldt_utils/save_done.html', context_instance=RequestContext(request))
@@ -278,33 +278,33 @@
 def indexProject(request, id):
 
     urlStr = settings.WEB_URL + reverse("space_ldt_init", args=['ldtProject', id])
-    posturl= settings.WEB_URL + reverse("ldt.ldt_utils.views.save_ldtProject")
+    posturl = settings.WEB_URL + reverse("ldt.ldt_utils.views.save_ldtProject")
     language_code = request.LANGUAGE_CODE[:2]
     
     ldt = get_object_or_404(Project, ldt_id=id)
-    if ldt.state ==2: #published
+    if ldt.state == 2: #published
         readonly = 'true'
     else:
         readonly = 'false'
     
-    return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/', 'url': urlStr, 'posturl': posturl, 'id': id, 'readonly': readonly}, context_instance=RequestContext(request))
+    return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': urlStr, 'posturl': posturl, 'id': id, 'readonly': readonly}, context_instance=RequestContext(request))
     
 def init(request, method, url):
     ldtgen = LdtUtils()
 
-    doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.'+method, None)
+    doc = ldtgen.generateInit([url], 'ldt.ldt_utils.views.' + method, None)
 
     resp = HttpResponse(mimetype="text/xml")
-    resp['Cache-Control']='no-cache, must-revalidate'
-    resp['Pragma']='no-cache'
+    resp['Cache-Control'] = 'no-cache, must-revalidate'
+    resp['Pragma'] = 'no-cache'
 
-    resp.write( etree.tostring(doc, pretty_print=True, xml_declaration=True, encoding="utf-8")) 
+    resp.write(etree.tostring(doc, pretty_print=True, xml_declaration=True, encoding="utf-8")) 
     return resp
        
 def ldtProject(request, id):
     resp = HttpResponse(mimetype="text/xml")
-    resp['Cache-Control']='no-cache, must-revalidate'
-    resp['Pragma']='no-cache'
+    resp['Cache-Control'] = 'no-cache, must-revalidate'
+    resp['Pragma'] = 'no-cache'
     
     project = Project.objects.get(ldt_id=id)
     resp.write(project.ldt)
@@ -313,20 +313,20 @@
 
 def project_json_id(request, id):
     
-    project = get_object_or_404(Project,ldt_id=id)
+    project = get_object_or_404(Project, ldt_id=id)
 
     return project_json(request, project, False)
 
 
 def project_json_externalid(request, id):
         
-    res_proj = get_list_or_404(Project.objects.order_by('-modification_date'),contents__external_id = id)
+    res_proj = get_list_or_404(Project.objects.order_by('-modification_date'), contents__external_id=id)
     
     return project_json(request, res_proj[0], False)
 
 
 
-def project_json(request, project, serialize_contents = True):
+def project_json(request, project, serialize_contents=True):
     
     if not ldt_auth.checkAccess(request.user, project):
         return HttpResponseForbidden(_("You can not access this project"))
@@ -339,8 +339,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'
+    resp['Cache-Control'] = 'no-cache, must-revalidate'
+    resp['Pragma'] = 'no-cache'
     
     indent = request.REQUEST.get("indent")
     if indent is None:
@@ -361,7 +361,7 @@
     json_str = simplejson.dumps(project_dict, ensure_ascii=False, indent=indent)
     
     if callback is not None:
-        json_str = "%s(%s)" % (callback,json_str)
+        json_str = "%s(%s)" % (callback, json_str)
     
     if escape_bool:
         json_str = escape(json_str)
@@ -385,8 +385,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'
+    resp['Cache-Control'] = 'no-cache, must-revalidate'
+    resp['Pragma'] = 'no-cache'
 
     ps = ProjectSerializer(project, from_contents=False, from_display=True) 
     annotations = ps.getAnnotations(first_cutting=True)
@@ -397,7 +397,7 @@
     dc = u"{%s}" % dc_ns
     nsmap = {u'rdf' : rdf_ns, u'dc':dc_ns}
     
-    rdf_root = etree.Element(rdf+u"RDF", nsmap=nsmap)
+    rdf_root = etree.Element(rdf + u"RDF", nsmap=nsmap)
     
     logging.debug("RDF annotations : " + repr(annotations))
     
@@ -405,16 +405,16 @@
         uri = u""
         if 'uri' in annotation and annotation['uri']:
             uri = unicode(annotation['uri'])
-        annot_desc = etree.SubElement(rdf_root, rdf+u"Description")
-        annot_desc.set(rdf+u'about',uri)
+        annot_desc = etree.SubElement(rdf_root, rdf + u"Description")
+        annot_desc.set(rdf + u'about', uri)
         if annotation['title']:
-            etree.SubElement(annot_desc, dc+'title').text = etree.CDATA(unicode(annotation['title']))
+            etree.SubElement(annot_desc, dc + 'title').text = etree.CDATA(unicode(annotation['title']))
         if annotation['desc']:
-            etree.SubElement(annot_desc, dc+'description').text = etree.CDATA(unicode(annotation['desc']))
+            etree.SubElement(annot_desc, dc + 'description').text = etree.CDATA(unicode(annotation['desc']))
         if annotation['tags']:
             for tag in annotation['tags']:
-                etree.SubElement(annot_desc, dc+'subject').text = etree.CDATA(unicode(tag))
-        etree.SubElement(annot_desc,dc+'coverage').text = u"start=%s, duration=%s" % (annotation['begin'], annotation['duration'])
+                etree.SubElement(annot_desc, dc + 'subject').text = etree.CDATA(unicode(tag))
+        etree.SubElement(annot_desc, dc + 'coverage').text = u"start=%s, duration=%s" % (annotation['begin'], annotation['duration'])
         
     resp.write(u"<?xml version=\"1.0\" encoding=\"utf-8\"?>\n")
     resp.write(u"<!DOCTYPE rdf:RDF PUBLIC \"-//DUBLIN CORE//DCMES DTD 2002/07/31//EN\" \"http://dublincore.org/documents/2002/07/31/dcmes-xml/dcmes-xml-dtd.dtd\">\n")
@@ -424,23 +424,23 @@
     return resp
 
 def save_ldtProject(request):
-    if request.method=="POST":
+    if request.method == "POST":
         ldt = request.POST['ldt']
         id = request.POST['id']
-        ldtproject=Project.objects.get(ldt_id=id)
+        ldtproject = Project.objects.get(ldt_id=id)
 
 	    #save xml ldt
-        ldtproject.ldt=ldt
+        ldtproject.ldt = ldt
 
 
-        doc = lxml.etree.fromstring(ldtproject.ldt.encode( "utf-8" ))
+        doc = lxml.etree.fromstring(ldtproject.ldt.encode("utf-8"))
         result = doc.xpath("/iri/project")
         
         #set new title
         ldtproject.title = result[0].get("title")
         
         #get new content list
-        new_contents=[]
+        new_contents = []
         result = doc.xpath("/iri/medias/media")
         for medianode in result:
             id = medianode.get("id")
@@ -454,7 +454,7 @@
         ldtproject.save()
     else:
         ldt = ''
-        new_contents=[]
+        new_contents = []
     
     return render_to_response('ldt/ldt_utils/save_done.html', {'ldt': ldt, 'id':id, 'title':ldtproject.title, 'contents': new_contents}, context_instance=RequestContext(request))
 
@@ -469,7 +469,7 @@
     if redirect:
         return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
     else:
-        return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state,'ldt_id': ldt.ldt_id}}, ensure_ascii=False),mimetype='application/json')
+        return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state, 'ldt_id': ldt.ldt_id}}, ensure_ascii=False), mimetype='application/json')
     
 @login_required    
 def unpublish(request, id, redirect=True):
@@ -480,18 +480,18 @@
     if redirect:
         return HttpResponseRedirect(reverse("ldt.ldt_utils.views.list_ldt"))
     else:
-        return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state,'ldt_id': ldt.ldt_id}}, ensure_ascii=False),mimetype='application/json')
+        return HttpResponse(simplejson.dumps({'res':True, 'ldt': {'id': ldt.id, 'state':ldt.state, 'ldt_id': ldt.ldt_id}}, ensure_ascii=False), mimetype='application/json')
     
 
 def index(request, url):
     
-    urlStr = settings.WEB_URL + reverse("ldt_init", args=['ldt',url])
+    urlStr = settings.WEB_URL + reverse("ldt_init", args=['ldt', url])
     language_code = request.LANGUAGE_CODE[:2]
     
-    return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX+'swf/ldt/', 'url': urlStr, 'weburl':settings.WEB_URL+settings.BASE_URL}, context_instance=RequestContext(request))
+    return render_to_response('ldt/ldt_utils/init_ldt.html', {'LDT_MEDIA_PREFIX': settings.LDT_MEDIA_PREFIX, 'colorurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/color.xml', 'i18nurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/pkg/i18n', 'language': language_code, 'baseurl': settings.LDT_MEDIA_PREFIX + 'swf/ldt/', 'url': urlStr, 'weburl':settings.WEB_URL + settings.BASE_URL}, context_instance=RequestContext(request))
 
 
-def ldt(request, url, startSegment = None):
+def ldt(request, url, startSegment=None):
     
     resp = HttpResponse(mimetype="text/xml; charset=utf-8")
     resp['Cache-Control'] = 'no-cache'
@@ -499,7 +499,7 @@
     contentList = Content.objects.filter(iri_id=url)
 
     ldtgen = LdtUtils()
-    ldtgen.generateLdt(contentList, file=resp, title = contentList[0].title, startSegment=startSegment)
+    ldtgen.generateLdt(contentList, file=resp, title=contentList[0].title, startSegment=startSegment)
 
     return resp
 
@@ -516,12 +516,12 @@
     if request.method == "POST" :
         form = AddProjectForm(request.POST)
         if form.is_valid():
-            user=request.user
+            user = request.user
             project = Project.create_project(title=form.cleaned_data['title'], user=user, contents=contents)
             return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProject', args=[project.ldt_id]))
     else:
         form = AddProjectForm()
-    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'contents':contents, 'create_project_action':reverse("ldt.ldt_utils.views.create_project",args=[iri_id])}, context_instance=RequestContext(request))
+    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'contents':contents, 'create_project_action':reverse("ldt.ldt_utils.views.create_project", args=[iri_id])}, context_instance=RequestContext(request))
 
 @login_required
 def update_project(request, ldt_id):
@@ -529,38 +529,38 @@
     project = get_object_or_404(Project, ldt_id=ldt_id)
     contents = project.contents.all()
     if request.method == "POST" :
-        submit_action = request.REQUEST.get("submit_button",False)
+        submit_action = request.REQUEST.get("submit_button", False)
         if submit_action == "prepare_delete":
             errors = []
             if project.state == 2:
-                errors.append(_("the project %(title)s is published. please unpublish before deleting.")%{'title':project.title})
+                errors.append(_("the project %(title)s is published. please unpublish before deleting.") % {'title':project.title})
                 message = _("can not delete the project. Please correct the following error")
-                title =  _('title error deleting project')
+                title = _('title error deleting project')
             else:
-                message = _("please confirm deleting project %(title)s")%{'title':project.title}
+                message = _("please confirm deleting project %(title)s") % {'title':project.title}
                 title = _("confirm deletion")
             return render_to_response('ldt/ldt_utils/error_confirm.html', {'errors':errors, 'message':message, 'title': title}, context_instance=RequestContext(request))
         elif submit_action == "delete":
             if project.state != 2:
                 project.delete()
-            form_status= 'deleted'
+            form_status = 'deleted'
             form = AddProjectForm()
         else:
-            form_status= 'saved'
+            form_status = 'saved'
             form = AddProjectForm(request.POST)
             if form.is_valid():
                 if project.title != form.cleaned_data['title']:
-                    project.title=form.cleaned_data['title']
+                    project.title = form.cleaned_data['title']
                     ldt = lxml.etree.fromstring(project.ldt.encode("utf-8"))
                     res = ldt.xpath("/iri/project")
-                    res[0].set("title",project.title)
-                    project.ldt = lxml.etree.tostring(ldt,pretty_print=True)
+                    res[0].set("title", project.title)
+                    project.ldt = lxml.etree.tostring(ldt, pretty_print=True)
                     project.save()
     else:
         form = AddProjectForm({'title':unicode(project.title)})
-        form_status= 'none'
+        form_status = 'none'
         
-    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'ldt_id': ldt_id, 'contents':contents, 'create_project_action':reverse("ldt.ldt_utils.views.update_project",args=[ldt_id])}, context_instance=RequestContext(request))
+    return render_to_response('ldt/ldt_utils/create_ldt.html', {'form':form, 'form_status':form_status, 'ldt_id': ldt_id, 'contents':contents, 'create_project_action':reverse("ldt.ldt_utils.views.update_project", args=[ldt_id])}, context_instance=RequestContext(request))
 
 
 @login_required
@@ -570,7 +570,7 @@
     if request.method == "POST" :
         form = CopyProjectForm(request.POST)
         if form.is_valid():
-            user=request.user
+            user = request.user
             project = project.copy_project(title=request.POST['title'], user=user)
             return HttpResponseRedirect(reverse('ldt.ldt_utils.views.indexProject', args=[project.ldt_id]))
     else:
@@ -583,17 +583,17 @@
     if iri_id:        
         instance_content = Content.objects.get(iri_id=iri_id)
         instance_media = instance_content.media_obj
-        logging.debug("write_content_base : valid form: for instance : media -> " + repr(instance_media) + " content : for instance : " + repr(instance_content) ) 
+        logging.debug("write_content_base : valid form: for instance : media -> " + repr(instance_media) + " content : for instance : " + repr(instance_content)) 
     else:
         logging.debug("No iri_id")
         instance_content = None
         instance_media = None
     
-    form_status= 'none'        
-    if request.method =="POST":
+    form_status = 'none'        
+    if request.method == "POST":
         
         if instance_content is not None:
-            content_instance_val = model_to_dict(instance_content,exclude=ContentForm.Meta.exclude)
+            content_instance_val = model_to_dict(instance_content, exclude=ContentForm.Meta.exclude)
         else:
             content_instance_val = {}
         
@@ -604,7 +604,7 @@
         #add prefix
         
         def add_prefix(dict, prefix):
-            for key,value in dict.items():
+            for key, value in dict.items():
                 dict['%s-%s' % (prefix, key)] = value
                 del(dict[key])
         
@@ -622,7 +622,7 @@
         media_valid = media_form.is_valid()
         content_valid = content_form.is_valid()
         
-        logging.debug("write_content_base : valid form: for instance : " + repr(instance_media) + " -> media " + str(media_valid) +" content : for instance : " + repr(instance_content) + " : " + str(content_valid) )
+        logging.debug("write_content_base : valid form: for instance : " + repr(instance_media) + " -> media " + str(media_valid) + " content : for instance : " + repr(instance_content) + " : " + str(content_valid))
         
         if media_valid and content_valid :
             
@@ -667,10 +667,10 @@
                         extension = ""
                         base_basename_filename = base_source_filename
                     else:
-                        base_basename_filename  =  base_source_filename[:-1 *(len(extension)+1)]
+                        base_basename_filename = base_source_filename[:-1 * (len(extension) + 1)]
                     i = 0
                     while os.path.exists(destination_filepath):
-                        base_source_filename = "%s.%d.%s" % (base_basename_filename,i,extension)
+                        base_source_filename = "%s.%d.%s" % (base_basename_filename, i, extension)
                         destination_filepath = os.path.join(settings.STREAM_PATH, base_source_filename)
                         i += 1
                         
@@ -679,7 +679,7 @@
                     if len(src_prefix) > 0:
                         cleaned_data["src"] = src_prefix + "/" + base_source_filename
                     else:
-                        cleaned_data["src"] =  base_source_filename
+                        cleaned_data["src"] = base_source_filename
                     
                     chunck = source_file.read(2048)
                     while chunck:
@@ -692,7 +692,7 @@
                     #set error for form
                     if media_input_type == "url":
                         errors = media_form._errors.setdefault("external_src_url", ErrorList())
-                        errors.append(_("Problem when downloading file from url : ")+str(inst))
+                        errors.append(_("Problem when downloading file from url : ") + str(inst))
                     elif media_input_type == "upload":
                         errors = media_form._errors.setdefault("media_file", ErrorList())
                         errors.append(_("Problem when uploading file : ") + str(inst))
@@ -730,7 +730,7 @@
                 content_defaults.update(content_form.cleaned_data)
                 content_defaults['media_obj'] = media
                 del content_defaults["media_input_type"]
-                content, created = Content.objects.get_or_create(iri_id = content_form.cleaned_data['iri_id'], defaults = content_defaults)
+                content, created = Content.objects.get_or_create(iri_id=content_form.cleaned_data['iri_id'], defaults=content_defaults)
                 if not created:
                     
                     for attribute in ('iriurl', 'title', 'description', 'duration', 'content_creation_date', 'tags', 'media_obj'):
@@ -749,7 +749,7 @@
         form_status = 'empty'
         initial = { 'media_input_type':"link"}
         
-        content_form = ContentForm(prefix="content", instance=instance_content, initial = initial )
+        content_form = ContentForm(prefix="content", instance=instance_content, initial=initial)
         media_form = MediaForm(prefix="media", instance=instance_media)
         
         if instance_content is not None:
@@ -760,7 +760,7 @@
 @login_required
 def write_content(request, iri_id=None):
     
-    submit_action = request.REQUEST.get("submit_button",False) 
+    submit_action = request.REQUEST.get("submit_button", False) 
 
     if submit_action == "prepare_delete": 
         errors, titles = prepare_delete_content(request, iri_id)
@@ -780,11 +780,11 @@
         content_form, media_form, form_status = write_content_base(request, iri_id)
 
     if iri_id:
-        create_content_action =  reverse('ldt.ldt_utils.views.write_content', kwargs={'iri_id':iri_id})
+        create_content_action = reverse('ldt.ldt_utils.views.write_content', kwargs={'iri_id':iri_id})
     else:
-        create_content_action =  reverse('ldt.ldt_utils.views.write_content')
+        create_content_action = reverse('ldt.ldt_utils.views.write_content')
     
-    return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'media_form': media_form,'form_status': form_status,'create_content_action': create_content_action, 'iri_id': iri_id}, context_instance=RequestContext(request))
+    return render_to_response('ldt/ldt_utils/create_content.html', {'content_form': content_form, 'media_form': media_form, 'form_status': form_status, 'create_content_action': create_content_action, 'iri_id': iri_id}, context_instance=RequestContext(request))
 
 @login_required
 def prepare_delete_content(request, iri_id=None):
@@ -800,7 +800,7 @@
             projects_nb = len(projects)
             if projects_nb > 0:
                 project_titles = map(lambda p: unicode(p.title), projects)
-                errors.append(ungettext("Content '%(title)s' is referenced by this project : %(project_titles)s. Please delete it beforehand.", "Content '%(title)s' is referenced by %(count)d projects: %(project_titles)s. Please delete them beforehand.", projects_nb)%{'title':unicode(content.title),'count':projects_nb, 'project_titles': ",".join(project_titles)})
+                errors.append(ungettext("Content '%(title)s' is referenced by this project : %(project_titles)s. Please delete it beforehand.", "Content '%(title)s' is referenced by %(count)d projects: %(project_titles)s. Please delete them beforehand.", projects_nb) % {'title':unicode(content.title), 'count':projects_nb, 'project_titles': ",".join(project_titles)})
  
         
     return errors, titles
--- a/src/ldt/ldt/management/__init__.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/management/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -23,7 +23,7 @@
         try:
             owner = Owner.objects.get(user=instance)
         except ObjectDoesNotExist:
-            owner=Owner(user=instance)
+            owner = Owner(user=instance)
             owner.save() 
     
 signals.post_save.connect(post_save_user, User) 
@@ -33,7 +33,7 @@
         try:
             owner = Owner.objects.get(group=instance)
         except ObjectDoesNotExist:
-            owner=Owner(group=instance)
+            owner = Owner(group=instance)
             owner.save()
     
 signals.post_save.connect(post_save_group, Group) 
Binary file src/ldt/ldt/media/img/favicon.ico has changed
--- a/src/ldt/ldt/settings.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/settings.py	Sat Jan 29 06:46:14 2011 +0100
@@ -39,7 +39,7 @@
     'jogging.middleware.LoggingMiddleware',
 )
 
-TEMPLATE_CONTEXT_PROCESSORS = ( 
+TEMPLATE_CONTEXT_PROCESSORS = (
     "django.core.context_processors.request",
     "django.core.context_processors.auth",
     "django.core.context_processors.debug",
@@ -62,7 +62,7 @@
 MANAGERS = settings.MANAGERS
 INSTALLED_APPS = settings.INSTALLED_APPS
 LANGUAGES = settings.LANGUAGES
-DECOUPAGE_BLACKLIST =getattr(settings, 'DECOUPAGE_BLACKLIST', 'de_PPP')
+DECOUPAGE_BLACKLIST = getattr(settings, 'DECOUPAGE_BLACKLIST', 'de_PPP')
 STREAM_URL = getattr(settings, 'STREAM_URL', '')
 STREAM_PATH = getattr(settings, 'STREAM_PATH', '')
 STREAM_SRC_PREFIX = getattr(settings, 'STREAM_SRC_PREFIX', '')
@@ -74,8 +74,8 @@
 GLOBAL_LOG_HANDLERS = [logging.FileHandler(LOG_FILE)]
 
 
-ACCOUNT_ACTIVATION_DAYS =  getattr(settings, 'ACCOUNT_ACTIVATION_DAYS', 7)
-LDT_MEDIA_PREFIX =  getattr(settings, 'LDT_MEDIA_PREFIX', MEDIA_URL + 'ldt/')
+ACCOUNT_ACTIVATION_DAYS = getattr(settings, 'ACCOUNT_ACTIVATION_DAYS', 7)
+LDT_MEDIA_PREFIX = getattr(settings, 'LDT_MEDIA_PREFIX', MEDIA_URL + 'ldt/')
 LDT_MAX_SEARCH_NUMBER = 50
 LDT_JSON_DEFAULT_INDENT = 2
 
--- a/src/ldt/ldt/templatetags/__init__.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/templatetags/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,1 @@
+
--- a/src/ldt/ldt/templatetags/navigation.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/templatetags/navigation.py	Sat Jan 29 06:46:14 2011 +0100
@@ -16,4 +16,4 @@
      
         if re.search(pattern, request.path):
             return css_class
-    return ''
\ No newline at end of file
+    return ''
--- a/src/ldt/ldt/user/__init__.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/user/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,1 @@
+
--- a/src/ldt/ldt/user/admin.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/user/admin.py	Sat Jan 29 06:46:14 2011 +0100
@@ -1,12 +1,10 @@
+from copy import deepcopy #@UnresolvedImport
 from django.contrib import admin
-from django.contrib.auth.admin import UserAdmin, GroupAdmin
+from django.contrib.auth.admin import UserAdmin
 from django.utils.translation import ugettext as _
-from ldt import settings
-from copy import deepcopy
 from forms import ldtForm, IriGroupForm
 from models import ldt, IriGroup
 
-
 class ldtAdmin(UserAdmin):    
     list_display = ('username', 'email', 'first_name', 'last_name')
     
@@ -14,7 +12,7 @@
         (None, {'fields': ('username', ('password1', 'password2'))}),
         (_('User details'), {'fields': (('first_name', 'last_name'), 'email')}),
         (_('Groups'), {'fields': ('groups',)}),
-        (_('Permissions'), {'fields': ('is_staff', 'user_permissions')}),        
+        (_('Permissions'), {'fields': ('is_staff', 'user_permissions')}),
     ]    
     form = ldtForm
     model = ldt
--- a/src/ldt/ldt/user/forms.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/user/forms.py	Sat Jan 29 06:46:14 2011 +0100
@@ -19,12 +19,12 @@
         if instance:
             initial = initial or {}           
         
-        super(ldtForm, self).__init__(data, files, auto_id, prefix, 
+        super(ldtForm, self).__init__(data, files, auto_id, prefix,
             initial, error_class, label_suffix, empty_permitted, instance)
             
         # filtre les permissions necessaires
         content_type_list = get_content_type_list()
-        self.fields['user_permissions'].queryset = Permission.objects.filter(content_type__in = content_type_list)
+        self.fields['user_permissions'].queryset = Permission.objects.filter(content_type__in=content_type_list)
         
         if instance:
             self.fields['password1'].required = False
@@ -67,12 +67,12 @@
         if instance:
             initial = initial or {}                               
         
-        super(IriGroupForm, self).__init__(data, files, auto_id, prefix, 
+        super(IriGroupForm, self).__init__(data, files, auto_id, prefix,
             initial, error_class, label_suffix, empty_permitted, instance)
             
         # filtre les permissions necessaires
         content_type_list = get_content_type_list()
-        self.fields['permissions'].queryset = Permission.objects.filter(content_type__in = content_type_list)
+        self.fields['permissions'].queryset = Permission.objects.filter(content_type__in=content_type_list)
         
 class EmailChangeForm(forms.Form):
     email1 = forms.EmailField(label=_("E-mail"), max_length=75)
@@ -92,7 +92,7 @@
 
     
     def save(self):
-        self.user.email=self.cleaned_data['email1']
+        self.user.email = self.cleaned_data['email1']
         self.user.save()
         return self.user
 
--- a/src/ldt/ldt/user/templatetags/__init__.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/user/templatetags/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -0,0 +1,1 @@
+
--- a/src/ldt/ldt/user/urls.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/user/urls.py	Sat Jan 29 06:46:14 2011 +0100
@@ -1,7 +1,7 @@
-from django.conf.urls.defaults import *
+from django.conf.urls.defaults import patterns, url
 
 urlpatterns = patterns('',
-    url(r'^loginAjax/$', 'ldt.user.views.loginAjax'), 
+    url(r'^loginAjax/$', 'ldt.user.views.loginAjax'),
     url(r'^profile/', 'ldt.user.views.profile'),
     url(r'^logout/', 'ldt.user.views.logout_view'),
     url(r'^space/$', 'ldt.user.views.space'),
--- a/src/ldt/ldt/user/views.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/user/views.py	Sat Jan 29 06:46:14 2011 +0100
@@ -13,7 +13,7 @@
 
 
 def home(request):
-    return render_to_response('ldt/user/home.html',context_instance=RequestContext(request))
+    return render_to_response('ldt/user/home.html', context_instance=RequestContext(request))
     
 @login_required   
 def profile(request):
@@ -23,7 +23,7 @@
 def space(request, page_id=None, slug=None):
     cms = test_cms()
     ldt = test_ldt()
-    context={
+    context = {
         'cms': cms,
         'ldt': ldt
     }
@@ -39,21 +39,21 @@
     
 def loginAjax(request, loginstate_template_name='ldt/user/login_form.html'):
     if request.method == "POST":
-        username=request.POST["username"]
-        password=request.POST["password"]
+        username = request.POST["username"]
+        password = request.POST["password"]
         user = authenticate(username=username, password=password)
         error_message = _(u"Sorry, that's not a valid username or password.")
         if user is not None:
             if user.is_active:
                 login(request, user)
-                context = RequestContext(request, { 'username': user.username,})
+                context = RequestContext(request, { 'username': user.username, })
                 template = loader.get_template(loginstate_template_name)
                 html = template.render(context)
-                return HttpResponse(simplejson.dumps({'message': u'successful', 'username': user.username, 'html': html, 'reload': request.POST["reload"],}))               
+                return HttpResponse(simplejson.dumps({'message': u'successful', 'username': user.username, 'html': html, 'reload': request.POST["reload"], }))               
             else:
-                return HttpResponse(simplejson.dumps({'message': error_message,}))
+                return HttpResponse(simplejson.dumps({'message': error_message, }))
         else:
-            return HttpResponse(simplejson.dumps({'message': error_message,}))
+            return HttpResponse(simplejson.dumps({'message': error_message, }))
     return render_to_response('ldt/user/login_ajax.html', context_instance=RequestContext(request))
             
 @login_required              
@@ -67,7 +67,7 @@
             return HttpResponseRedirect(post_change_redirect)
     else:
         form = EmailChangeForm(request.user)
-    return render_to_response('ldt/user/change_email.html', {'form': form,}, context_instance=RequestContext(request))
+    return render_to_response('ldt/user/change_email.html', {'form': form, }, context_instance=RequestContext(request))
     
 @login_required    
 def change_email_done(request, template_name='ldt/user/change_email_done.html'):
--- a/src/ldt/ldt/utils/__init__.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/utils/__init__.py	Sat Jan 29 06:46:14 2011 +0100
@@ -1,2 +1,2 @@
 
-    
\ No newline at end of file
+    
--- a/src/ldt/ldt/utils/path.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/utils/path.py	Sat Jan 29 06:46:14 2011 +0100
@@ -10,5 +10,5 @@
 
 def sanitize_filename(filename):
     cleanedFilename = unicodedata.normalize('NFKD', filename).encode('ASCII', 'ignore').lower()
-    return ''.join(c for c in cleanedFilename if c in validFilenameChars).replace(' ','_')
-    
\ No newline at end of file
+    return ''.join(c for c in cleanedFilename if c in validFilenameChars).replace(' ', '_')
+    
--- a/src/ldt/ldt/utils/xml.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/utils/xml.py	Sat Jan 29 06:46:14 2011 +0100
@@ -4,4 +4,4 @@
 	for node in nodelist:
 		if node.nodeType == node.TEXT_NODE:
 			rc = rc + node.data
-	return rc
\ No newline at end of file
+	return rc
--- a/src/ldt/ldt/utils/zipfileext.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/ldt/utils/zipfileext.py	Sat Jan 29 06:46:14 2011 +0100
@@ -6,9 +6,9 @@
             os.mkdir(dir, 0777)
         for name in self.namelist():
             if name.endswith('/'):
-                os.mkdir(os.path.join(dir,name))
+                os.mkdir(os.path.join(dir, name))
             else:
-                outfile = open(os.path.join(dir,name), 'wb')
+                outfile = open(os.path.join(dir, name), 'wb')
                 outfile.write(self.read(name))
                 outfile.close()
 
--- a/src/ldt/setup.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/src/ldt/setup.py	Sat Jan 29 06:46:14 2011 +0100
@@ -32,12 +32,12 @@
         data_files.append([dirpath, [os.path.join(dirpath, f) for f in filenames]])
 
 setup(
-    name = 'Ldt',
-    version = version,
-    author = 'Yves-Marie Haussonne (IRI)',
-    author_email = 'contact@iri.centrepompidou.fr',
-    packages = packages,
-    data_files = data_files,
+    name='Ldt',
+    version=version,
+    author='Yves-Marie Haussonne (IRI)',
+    author_email='contact@iri.centrepompidou.fr',
+    packages=packages,
+    data_files=data_files,
 #    package_data = {
 #        '': [
 #            'media/*',
@@ -47,13 +47,13 @@
 #            'templates/cms/admin/cms/page/*.html',
 #       ]
 #    },
-    scripts  =[],
-    url = 'https://www.iri.centrepompidou.fr/dev/hg/platform',
-    license = 'LICENSE.txt',
-    description = 'Platform ldt',
-    long_description = open('README.txt').read(),
-    zip_safe = False,
-    classifiers = ['Development Status :: 5 - Production/Stable',
+    scripts=[],
+    url='https://www.iri.centrepompidou.fr/dev/hg/platform',
+    license='LICENSE.txt',
+    description='Platform ldt',
+    long_description=open('README.txt').read(),
+    zip_safe=False,
+    classifiers=['Development Status :: 5 - Production/Stable',
                    'Environment :: Web Environment',
                    'Framework :: Django',
                    'Intended Audience :: Developers',
--- a/virtualenv/web/create_python_env.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/virtualenv/web/create_python_env.py	Sat Jan 29 06:46:14 2011 +0100
@@ -49,6 +49,7 @@
 EXTRA_TEXT += "    'DJANGO-EXTENSIONS' : { 'setup': 'django-extensions', 'url':'https://github.com/django-extensions/django-extensions/tarball/0.6', 'local':'"+ os.path.abspath(os.path.join(src_base,"django-extensions-0.6.tar.gz"))+"' },\n"
 EXTRA_TEXT += "    'DJANGO-REGISTRATION' : { 'setup': 'django-registration', 'url':'http://bitbucket.org/ubernostrum/django-registration/get/tip.tar.gz', 'local':'"+ os.path.abspath(os.path.join(src_base,"django-registration.tar.gz"))+"' },\n"
 EXTRA_TEXT += "    'DJANGO-TAGGING' : { 'setup': 'django-tagging', 'url':'http://django-tagging.googlecode.com/files/django-tagging-0.3.1.tar.gz', 'local':'"+ os.path.abspath(os.path.join(src_base,"django-tagging-0.3.1.tar.gz"))+"' },\n"
+EXTRA_TEXT += "    'DJANGO-PISTON' : { 'setup': 'django-piston', 'url':'http://bitbucket.org/jespern/django-piston/downloads/django-piston-0.2.2.tar.gz', 'local':'"+ os.path.abspath(os.path.join(src_base,"django-piston-0.2.2.tar.gz"))+"' },\n"
 EXTRA_TEXT += "    'LXML' : { 'setup': 'lxml', 'url': '"+ os.path.abspath(os.path.join(src_base,"lxml_2.2.8.tar.gz"))+"', 'local': '"+ os.path.abspath(os.path.join(src_base,"lxml-2.2.8.tar.gz"))+"'},\n"
 EXTRA_TEXT += "}\n"
 
@@ -210,6 +211,7 @@
             ('DJANGO-EXTENSIONS', 'pip', None, None),
             ('DJANGO-REGISTRATION', 'easy_install', '-Z', None),
             ('DJANGO-TAGGING', 'pip', None, None),
+            ('DJANGO-PISTON', 'pip', None, None),
             ]
             
         if system_str == "Darwin":
Binary file virtualenv/web/res/src/django-piston-0.2.2.tar.gz has changed
--- a/web/ldtplatform/urls.py	Fri Jan 28 21:33:43 2011 +0100
+++ b/web/ldtplatform/urls.py	Sat Jan 29 06:46:14 2011 +0100
@@ -1,4 +1,4 @@
-from django.conf.urls.defaults import patterns ,include, url
+from django.conf.urls.defaults import patterns ,include
 from django.contrib import admin
 
 
@@ -18,6 +18,7 @@
 
     (r'^ldt/', include('ldt.ldt_utils.urls')),
     (r'^user/', include('ldt.user.urls')),
+    (r'^api/', include('ldt.api.urls')),
 
     (r'^accounts/', include('registration.backends.simple.urls')),
     
Binary file web/static/ldt/img/favicon.ico has changed