diff --git a/external/README.txt b/external/README.txt index 37a51af..4be1f63 100644 --- a/external/README.txt +++ b/external/README.txt @@ -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) diff --git a/external/base.py b/external/base.py index 4effaf3..f271c85 100644 --- a/external/base.py +++ b/external/base.py @@ -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 diff --git a/external/element.py b/external/element.py index bbde812..1ae93d8 100644 --- a/external/element.py +++ b/external/element.py @@ -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() diff --git a/resource.py b/resource.py index 5600785..e7fe9d4 100644 --- a/resource.py +++ b/resource.py @@ -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) diff --git a/schema.py b/schema.py index 4138236..467a262 100644 --- a/schema.py +++ b/schema.py @@ -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' diff --git a/util.py b/util.py index ae3fad6..fdb3c39 100644 --- a/util.py +++ b/util.py @@ -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