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:
parent
de8e41db3e
commit
32a6449ce0
1 changed files with 20 additions and 6 deletions
|
@ -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')
|
||||||
|
|
Loading…
Add table
Reference in a new issue