more on export: handle legacy Document class

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2473 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2008-03-24 17:34:28 +00:00
parent c47cc6d9b1
commit d944aca0f5
6 changed files with 22 additions and 13 deletions

4
external/README.txt vendored
View file

@ -127,5 +127,7 @@ Fin de Partie
>>> exportDir = os.path.join(dataDirectory, 'export')
>>> for fname in os.listdir(exportDir):
... os.unlink(os.path.join(exportDir, fname))
... path = os.path.join(exportDir, fname)
... if not os.path.isdir(path):
... os.unlink(path)

12
external/base.py vendored
View file

@ -38,7 +38,8 @@ from cybertools.typology.interfaces import IType
from loops.common import adapted
from loops.external.interfaces import ILoader, IExtractor
from loops.external.element import elementTypes
from loops.interfaces import IConceptSchema
from loops.interfaces import IConceptSchema, IResourceSchema
from loops.resource import Document, MediaAsset
from loops.setup import SetupManager
@ -116,17 +117,18 @@ class Extractor(Base):
def extractResources(self):
elementClass = elementTypes['resource']
for name, obj in self.resources.items():
# TODO: handle ``data`` attribute...
data = self.getObjectData(obj)
data = self.getObjectData(obj, IResourceSchema)
tp = getName(obj.resourceType)
if isinstance(obj, Document): # backward compatibility
tp = 'textdocument'
element = elementClass(name, obj.title, tp, **data)
element.processExport(self)
yield element
def getObjectData(self, obj):
def getObjectData(self, obj, defaultInterface=IConceptSchema):
aObj = adapted(obj)
schemaFactory = component.getAdapter(aObj, ISchemaFactory)
ti = IType(obj).typeInterface or IConceptSchema
ti = IType(obj).typeInterface or defaultInterface
schema = schemaFactory(ti, manager=self) #, request=self.request)
instance = IInstance(aObj)
instance.template = schema

4
external/element.py vendored
View file

@ -106,11 +106,13 @@ class ResourceElement(Element):
def processExport(self, extractor):
content = self.pop('data', '')
fileFlags = 'wb'
if (self.get('contentType', '').startswith('text/')
and isinstance(content, unicode)):
content = content.encode('UTF-8')
fileFlags = 'wt'
dataPath = os.path.join(extractor.resourceDirectory, self['name'])
f = open(dataPath, 'w')
f = open(dataPath, fileFlags)
f.write(content)
f.close()

View file

@ -290,7 +290,8 @@ class Document(Resource):
def setData(self, data):
self._data = data.replace('\r', '')
self._size = len(data)
def getData(self): return self._data
def getData(self):
return self._data
data = property(getData, setData)

View file

@ -34,6 +34,7 @@ class ResourceSchemaFactory(SchemaFactory):
def __call__(self, interface, **kw):
schema = super(ResourceSchemaFactory, self).__call__(interface, **kw)
#if 'data' in schema.fields.keys():
schema.fields.data.height = 10
if self.context.contentType == 'text/html':
schema.fields.data.fieldType = 'html'

11
util.py
View file

@ -98,12 +98,13 @@ def getUidForObject(obj):
def getVarDirectory(request=None):
instanceHome = None
varDir = None
if request is not None:
pub = request.publication
if pub is not None:
instanceHome = os.path.dirname(pub.db.getName())
if instanceHome is None:
varDir = os.path.dirname(pub.db.getName())
if varDir is None:
instanceHome = os.path.dirname(os.path.dirname(os.path.dirname(
os.path.dirname(cybertools.__file__))))
return os.path.join(instanceHome, 'var')
os.path.dirname(cybertools.__file__))))
varDir = os.path.join(instanceHome, 'var')
return varDir