ExternalFile stuff basically working

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1547 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2007-01-11 15:44:24 +00:00
parent 8e45d6a9fd
commit ba2d7a3f7c
5 changed files with 29 additions and 8 deletions

View file

@ -172,7 +172,7 @@ class EditObject(FormController):
form = self.request.form form = self.request.form
ti = IType(obj).typeInterface ti = IType(obj).typeInterface
if ti is not None: if ti is not None:
adapted = IType(obj).typeInterface(obj) adapted = ti(obj)
else: else:
adapted = obj adapted = obj
for k in form.keys(): for k in form.keys():

View file

@ -7,7 +7,7 @@
a[href]:hover { a[href]:hover {
text-decoration: none; text-decoration: none;
color: #c00048; color: #803000;
} }
pre { pre {

View file

@ -319,6 +319,15 @@
set_schema="loops.interfaces.IFile" /> set_schema="loops.interfaces.IFile" />
</class> </class>
<adapter factory="loops.resource.ExternalFileAdapter" trusted="True"
provides="loops.interfaces.IExternalFile" />
<class class="loops.resource.ExternalFileAdapter">
<require permission="zope.View"
interface="loops.interfaces.IFile" />
<require permission="zope.ManageContent"
set_schema="loops.interfaces.IFile" />
</class>
<adapter factory="loops.resource.NoteAdapter" trusted="True" /> <adapter factory="loops.resource.NoteAdapter" trusted="True" />
<class class="loops.resource.NoteAdapter"> <class class="loops.resource.NoteAdapter">
<require permission="zope.View" <require permission="zope.View"
@ -345,6 +354,13 @@
name="application/pdf" name="application/pdf"
factory="cybertools.text.pdf.PdfTransform" /> factory="cybertools.text.pdf.PdfTransform" />
<!-- utilities -->
<utility
factory="cybertools.storage.filesystem.instanceVarSubdirectoryStorage"
name="varsubdir"
/>
<vocabulary <vocabulary
factory="loops.concept.ConceptTypeSourceList" factory="loops.concept.ConceptTypeSourceList"
name="loops.conceptTypeSource" name="loops.conceptTypeSource"

View file

@ -48,7 +48,7 @@ from cybertools.text.interfaces import ITextTransform
from cybertools.typology.interfaces import IType, ITypeManager from cybertools.typology.interfaces import IType, ITypeManager
from interfaces import IBaseResource, IResource from interfaces import IBaseResource, IResource
from interfaces import IFile, INote from interfaces import IFile, IExternalFile, INote
from interfaces import IDocument, ITextDocument, IDocumentSchema, IDocumentView from interfaces import IDocument, ITextDocument, IDocumentSchema, IDocumentView
from interfaces import IMediaAsset, IMediaAssetView from interfaces import IMediaAsset, IMediaAssetView
from interfaces import IResourceManager, IResourceManagerContained from interfaces import IResourceManager, IResourceManagerContained
@ -212,6 +212,8 @@ class FileAdapter(ResourceAdapterBase):
class ExternalFileAdapter(FileAdapter): class ExternalFileAdapter(FileAdapter):
implements(IExternalFile)
@Lazy @Lazy
def externalAddress(self): def externalAddress(self):
# or is this an editable attribute? # or is this an editable attribute?
@ -229,14 +231,15 @@ class ExternalFileAdapter(FileAdapter):
@Lazy @Lazy
def storageParams(self): def storageParams(self):
return self.options.get('storage_parameters') params = self.options.get('storage_parameters') or 'extfiles'
return dict(subdirectory=params)
def setData(self, data): def setData(self, data):
storage = component.getUtility(IExternalStorage, name=self.storageName) storage = component.getUtility(IExternalStorage, name=self.storageName)
storage.setData(self.externalAddress, data, params=self.storageParams) storage.setData(self.externalAddress, data, params=self.storageParams)
def getData(self): def getData(self):
storage = component.getUtility(IExternalStorage) storage = component.getUtility(IExternalStorage, name=self.storageName)
return storage.getData(self.externalAddress, params=self.storageParams) return storage.getData(self.externalAddress, params=self.storageParams)
data = property(getData, setData) data = property(getData, setData)
@ -319,7 +322,8 @@ class IndexAttributes(object):
if transform is not None: if transform is not None:
rfa = component.queryAdapter(IReadFile, adapted) rfa = component.queryAdapter(IReadFile, adapted)
if rfa is None: if rfa is None:
return transform(StringIO(context.data)) data = transform(StringIO(adapted.data))
return data
else: else:
return transform(rfa) return transform(rfa)
if not context.contentType.startswith('text'): if not context.contentType.startswith('text'):

View file

@ -33,7 +33,8 @@ from cybertools.typology.type import BaseType, TypeManager
from cybertools.typology.interfaces import ITypeManager from cybertools.typology.interfaces import ITypeManager
from loops.interfaces import ILoopsObject, IConcept, IResource from loops.interfaces import ILoopsObject, IConcept, IResource
from loops.interfaces import ITypeConcept from loops.interfaces import ITypeConcept
from loops.interfaces import IResourceAdapter, IFile, IImage, ITextDocument, INote from loops.interfaces import IResourceAdapter, IFile, IExternalFile, IImage
from loops.interfaces import ITextDocument, INote
from loops.concept import Concept from loops.concept import Concept
from loops.resource import Resource, Document, MediaAsset from loops.resource import Resource, Document, MediaAsset
from loops.common import AdapterBase from loops.common import AdapterBase
@ -265,7 +266,7 @@ class TypeInterfaceSourceList(object):
implements(schema.interfaces.IIterableSource) implements(schema.interfaces.IIterableSource)
typeInterfaces = (ITypeConcept, IFile, ITextDocument, INote) typeInterfaces = (ITypeConcept, IFile, IExternalFile, ITextDocument, INote)
def __init__(self, context): def __init__(self, context):
self.context = context self.context = context