[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