src/ldt/ldt/ldt_utils/fileimport.py
changeset 896 72f7ec8a8789
parent 167 fe00e7302efe
child 1360 f69b5d8ba4b9
--- a/src/ldt/ldt/ldt_utils/fileimport.py	Tue Nov 06 13:56:54 2012 +0100
+++ b/src/ldt/ldt/ldt_utils/fileimport.py	Tue Nov 06 14:40:44 2012 +0100
@@ -1,11 +1,13 @@
+from StringIO import StringIO
 from copy import deepcopy #@UnresolvedImport
 from django.conf import settings
 from django.core.exceptions import ObjectDoesNotExist
 from django.db import transaction
 from ldt.utils import zipfileext
+from ldt.utils.url import request_with_auth
 from models import Content, Media
 import fnmatch
-import lxml.etree
+import lxml.etree #@UnresolvedImport
 import mimetypes #@UnresolvedImport
 import os.path
 import shutil #@UnresolvedImport
@@ -25,8 +27,8 @@
 class IriInfo(object):
 
     
-    def __init__(self, id, order, titledesc, basepath="", videopath=settings.STREAM_URL, decoupage_blacklist=settings.DECOUPAGE_BLACKLIST, flatten=True):
-        self.id = id
+    def __init__(self, iri_id, order, titledesc, basepath="", videopath=settings.STREAM_URL, decoupage_blacklist=settings.DECOUPAGE_BLACKLIST, flatten=True):
+        self.id = iri_id
         self.basepath = basepath
         self.order = order
         self.src = ""
@@ -48,14 +50,15 @@
     def process_iri(self):
         # for just import a file ldt and get the title for every media
         if 'http' in self.src:
-            #url = urllib.urlopen(self.src)
             path = self.src
-            #doc = xml.dom.minidom.parse(url)
         #for import a zip, get title and copy file .iri in the media directory
         else:
             path = os.path.join(self.basepath, self.src)
-            #doc = xml.dom.minidom.parse(path)
-            
+        
+        if 'http' in path:
+            _,content = request_with_auth(path)
+            path = StringIO(content)
+        
         doc = lxml.etree.parse(path) #@UndefinedVariable
         
         
@@ -78,9 +81,9 @@
             #if node.nodeType == xml.dom.Node.ELEMENT_NODE and node.tagName == "ensemble":
             if node.tag == "ensemble":
                 #id = node.getAttributeNS(None,u"id")
-                id = node.attrib["id"]
-                if id not in ensembleids:
-                    ensembleids.append(id)
+                ens_id = node.attrib["id"]
+                if ens_id not in ensembleids:
+                    ensembleids.append(ens_id)
 
         if self.annotations is not None:
             newEnsemble = None
@@ -304,43 +307,41 @@
         
         for i, medianode in  enumerate(result):
         # get iri file's id from file ldt
-            #id = medianode.attributes['id'].value
-            id = medianode.attrib['id']
+            iri_id = medianode.attrib['id']
             if self.check_existing_media:
                 try:
-                    Content.objects.get(iri_id=id)
+                    Content.objects.get(iri_id=iri_id)
                     do_pass = True
                 except ObjectDoesNotExist: #Content.DoesNotExist
                     do_pass = False
             else:
                     do_pass = False
             if not do_pass:
-                if not (contents.has_key(id)):
+                if not (contents.has_key(iri_id)):
                     # Create instance iriInfo(id, order, titledesc, basepath="", videopath=settings.STREAM_URL)
                     if ldtpath:
-                        contents[id] = IriInfo(id, i, "", os.path.dirname(ldtpath), flatten=self.flatten)
+                        contents[iri_id] = IriInfo(iri_id, i, "", os.path.dirname(ldtpath), flatten=self.flatten)
                     else: 
-                        contents[id] = IriInfo(id, i, "", flatten=self.flatten)
+                        contents[iri_id] = IriInfo(iri_id, i, "", flatten=self.flatten)
                     # 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']
+                contents[iri_id].src = medianode.attrib['src']
                 if medianode.attrib['video'] != "":
-                    contents[id].videopath = medianode.attrib['video']
+                    contents[iri_id].videopath = medianode.attrib['video']
                 elif self.videopath != "" or self.videopath:
-                    contents[id].videopath = self.videopath
+                    contents[iri_id].videopath = self.videopath
                 else:
-                    contents[id].videopath = settings.STREAM_URL
+                    contents[iri_id].videopath = settings.STREAM_URL
                     
                 
         #get annotation of file ldt
         result = doc.xpath("/iri/annotations/content")
         
         for contentnode in result:
-            id = contentnode.attrib['id']
-            if contents.has_key(id):
+            content_id = contentnode.attrib['id']
+            if contents.has_key(content_id):
                 if self.author:
                     contentnode.set("author", unicode(self.author))
-                contents[id].annotations = contentnode
+                contents[content_id].annotations = contentnode
         
         #go throught values
         for iriinfo in contents.values():