[Erp5-report] r40875 jm - /erp5/trunk/products/ERP5/Document/BusinessTemplate.py

nobody at svn.erp5.org nobody at svn.erp5.org
Mon Nov 29 15:18:46 CET 2010


Author: jm
Date: Mon Nov 29 15:18:42 2010
New Revision: 40875

URL: http://svn.erp5.org?rev=40875&view=rev
Log:
Speed up download of *.bt5 BT by a factor of 2

Modified:
    erp5/trunk/products/ERP5/Document/BusinessTemplate.py

Modified: erp5/trunk/products/ERP5/Document/BusinessTemplate.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/BusinessTemplate.py?rev=40875&r1=40874&r2=40875&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] (original)
+++ erp5/trunk/products/ERP5/Document/BusinessTemplate.py [utf8] Mon Nov 29 15:18:42 2010
@@ -427,35 +427,26 @@ class BusinessTemplateTarball(BusinessTe
     return self.fobj
 
   def _initImport(self, file=None, **kw):
-    self.f = file
+    self.tar = tarfile.TarFile(fileobj=StringIO(GzipFile(fileobj=file).read()))
+    self.item_dict = {}
+    setdefault = self.item_dict.setdefault
+    for info in self.tar.getmembers():
+      if info.isreg():
+        path = info.name.split('/')
+        if path[0] == '.':
+          del path[0]
+        file_name = '/'.join(path[2:])
+        if '%' in file_name:
+          file_name = unquote(file_name)
+        setdefault(path[1], []).append((file_name, info))
 
   def importFiles(self, item, **kw):
     """
       Import all file from the archive to the site
     """
-    class_name = item.__class__.__name__
-    self.f.seek(0)
-    data = GzipFile(fileobj=self.f).read()
-    io = StringIO(data)
-    tar = tarfile.TarFile(fileobj=io)
-    for info in tar.getmembers():
-      if 'CVS' in info.name.split('/'):
-        continue
-      if '.svn' in info.name.split('/'):
-        continue
-      if class_name in info.name.split('/'):
-        if info.isreg():
-          file = tar.extractfile(info)
-          tar_file_name = info.name.startswith('./') and info.name[2:] or \
-              info.name
-          folders = tar_file_name.split('/')
-          file_name = ('/').join(folders[2:])
-          if '%' in file_name:
-            file_name = unquote(file_name)
-          item._importFile(file_name, file)
-          file.close()
-    tar.close()
-    io.close()
+    extractfile = self.tar.extractfile
+    for file_name, info in self.item_dict.get(item.__class__.__name__, ()):
+      item._importFile(file_name, extractfile(info))
 
 class TemplateConditionError(Exception): pass
 class TemplateConflictError(Exception): pass




More information about the Erp5-report mailing list