provide separate method for reading individual document property settings

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@4112 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2010-12-23 07:22:42 +00:00
parent de8e41db3e
commit 32a6449ce0

View file

@ -71,28 +71,42 @@ class OfficeFile(ExternalFileAdapter):
externalAddress = property(ExternalFileAdapter.getExternalAddress, externalAddress = property(ExternalFileAdapter.getExternalAddress,
setExternalAddress) setExternalAddress)
def processDocument(self): @Lazy
def docFilename(self):
subDir = self.storageParams.get('subdirectory') subDir = self.storageParams.get('subdirectory')
fn = self.storage.getDir(self.externalAddress, subDir) return self.storage.getDir(self.externalAddress, subDir)
# open ZIP file, process properties, set version property in file
@Lazy
def docPropertyDom(self):
fn = self.docFilename
try: try:
zf = ZipFile(fn, 'r') zf = ZipFile(fn, 'r')
except IOError, e: except IOError, e:
from logging import getLogger from logging import getLogger
self.logger.warn(e) self.logger.warn(e)
return return
#print '***', zf.namelist()
if self.propFileName not in zf.namelist(): if self.propFileName not in zf.namelist():
self.logger.warn('Custom properties not found in file %s.' % self.logger.warn('Custom properties not found in file %s.' %
self.externalAddress) self.externalAddress)
propsXml = zf.read(self.propFileName) propsXml = zf.read(self.propFileName)
dom = etree.fromstring(propsXml) zf.close()
return etree.fromstring(propsXml)
def getDocProperty(self, pname):
for p in self.docPropertyDom:
name = p.attrib.get('name')
if name == pname:
return p[0].text
return None
def processDocument(self):
changed = False changed = False
docVersion = None docVersion = None
version = IVersionable(self.context).versionId version = IVersionable(self.context).versionId
strType = ('{http://schemas.openxmlformats.org/' strType = ('{http://schemas.openxmlformats.org/'
'officeDocument/2006/docPropsVTypes}lpwstr') 'officeDocument/2006/docPropsVTypes}lpwstr')
attributes = {} attributes = {}
dom = self.docPropertyDom
for p in dom: for p in dom:
name = p.attrib.get('name') name = p.attrib.get('name')
value = p[0].text value = p[0].text
@ -107,7 +121,7 @@ class OfficeFile(ExternalFileAdapter):
changed = True changed = True
elif attr is not None: elif attr is not None:
attributes[attr] = value attributes[attr] = value
zf.close() fn = self.docFilename
if changed: if changed:
newFn = fn + '.new' newFn = fn + '.new'
zf = ZipFile(fn, 'r') zf = ZipFile(fn, 'r')