bug fix for storing Resource.data for documents; starting text transformation for full-text indexing
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1384 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
d765f90103
commit
2467793b66
2 changed files with 61 additions and 31 deletions
|
@ -146,6 +146,9 @@ class EditObject(FormController):
|
||||||
prefix = 'form.'
|
prefix = 'form.'
|
||||||
conceptPrefix = 'assignments.'
|
conceptPrefix = 'assignments.'
|
||||||
|
|
||||||
|
old = None
|
||||||
|
selected = None
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
self.updateFields(self.view.virtualTargetObject)
|
self.updateFields(self.view.virtualTargetObject)
|
||||||
return True
|
return True
|
||||||
|
@ -168,27 +171,31 @@ class EditObject(FormController):
|
||||||
continue
|
continue
|
||||||
value = form[k]
|
value = form[k]
|
||||||
if fn.startswith(self.conceptPrefix) and value:
|
if fn.startswith(self.conceptPrefix) and value:
|
||||||
self.assignConcepts(obj, fn[len(self.conceptPrefix):], value)
|
self.collectConcepts(fn[len(self.conceptPrefix):], value)
|
||||||
else:
|
else:
|
||||||
setattr(adapted, fn, value)
|
setattr(adapted, fn, value)
|
||||||
|
if self.old or self.selected:
|
||||||
|
self.assignConcepts(obj)
|
||||||
notify(ObjectModifiedEvent(obj))
|
notify(ObjectModifiedEvent(obj))
|
||||||
|
|
||||||
def assignConcepts(self, obj, fieldName, value):
|
def collectConcepts(self, fieldName, value):
|
||||||
old = []
|
if self.old is None: self.old = []
|
||||||
selected = []
|
if self.selected is None: self.selected = []
|
||||||
for v in value:
|
for v in value:
|
||||||
if fieldName == 'old':
|
if fieldName == 'old':
|
||||||
old.append(v)
|
self.old.append(v)
|
||||||
elif fieldName == 'selected':
|
elif fieldName == 'selected':
|
||||||
selected.append(v)
|
self.selected.append(v)
|
||||||
for v in old:
|
|
||||||
if v not in selected:
|
def assignConcepts(self, obj):
|
||||||
|
for v in self.old:
|
||||||
|
if v not in self.selected:
|
||||||
c, p = v.split(':')
|
c, p = v.split(':')
|
||||||
concept = util.getObjectForUid(c)
|
concept = util.getObjectForUid(c)
|
||||||
predicate = util.getObjectForUid(p)
|
predicate = util.getObjectForUid(p)
|
||||||
obj.deassignConcept(concept, [predicate])
|
obj.deassignConcept(concept, [predicate])
|
||||||
for v in selected:
|
for v in self.selected:
|
||||||
if v not in old:
|
if v not in self.old:
|
||||||
c, p = v.split(':')
|
c, p = v.split(':')
|
||||||
concept = util.getObjectForUid(c)
|
concept = util.getObjectForUid(c)
|
||||||
predicate = util.getObjectForUid(p)
|
predicate = util.getObjectForUid(p)
|
||||||
|
|
65
resource.py
65
resource.py
|
@ -42,6 +42,7 @@ from zope.event import notify
|
||||||
|
|
||||||
from cybertools.relation.registry import getRelations
|
from cybertools.relation.registry import getRelations
|
||||||
from cybertools.relation.interfaces import IRelatable
|
from cybertools.relation.interfaces import IRelatable
|
||||||
|
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
|
||||||
|
@ -58,8 +59,21 @@ from view import TargetRelation
|
||||||
_ = MessageFactory('loops')
|
_ = MessageFactory('loops')
|
||||||
|
|
||||||
|
|
||||||
|
class ResourceManager(BTreeContainer):
|
||||||
|
|
||||||
|
implements(IResourceManager, ILoopsContained)
|
||||||
|
|
||||||
|
def getLoopsRoot(self):
|
||||||
|
return zapi.getParent(self)
|
||||||
|
|
||||||
|
def getViewManager(self):
|
||||||
|
return self.getLoopsRoot().getViewManager()
|
||||||
|
|
||||||
|
|
||||||
class Resource(Image, Contained):
|
class Resource(Image, Contained):
|
||||||
|
|
||||||
|
# TODO: remove dependency on Image
|
||||||
|
|
||||||
implements(IBaseResource, IResource, IResourceManagerContained, IRelatable, ISized)
|
implements(IBaseResource, IResource, IResourceManagerContained, IRelatable, ISized)
|
||||||
|
|
||||||
proxyInterface = IMediaAssetView
|
proxyInterface = IMediaAssetView
|
||||||
|
@ -155,6 +169,8 @@ class Resource(Image, Contained):
|
||||||
return '%i Bytes' % self.getSize()
|
return '%i Bytes' % self.getSize()
|
||||||
|
|
||||||
|
|
||||||
|
# Document and MediaAsset are legacy classes, will become obsolete
|
||||||
|
|
||||||
class Document(Resource):
|
class Document(Resource):
|
||||||
|
|
||||||
implements(IDocument)
|
implements(IDocument)
|
||||||
|
@ -165,7 +181,7 @@ class Document(Resource):
|
||||||
self.title = title
|
self.title = title
|
||||||
|
|
||||||
_data = u''
|
_data = u''
|
||||||
def setData(self, data): self._data = data
|
def setData(self, data): self._data = data.replace('\r', '')
|
||||||
def getData(self): return self._data
|
def getData(self): return self._data
|
||||||
data = property(getData, setData)
|
data = property(getData, setData)
|
||||||
|
|
||||||
|
@ -175,19 +191,7 @@ class MediaAsset(Resource):
|
||||||
implements(IMediaAsset)
|
implements(IMediaAsset)
|
||||||
|
|
||||||
|
|
||||||
class ResourceManager(BTreeContainer):
|
# type adapters
|
||||||
|
|
||||||
implements(IResourceManager, ILoopsContained)
|
|
||||||
|
|
||||||
def getLoopsRoot(self):
|
|
||||||
return zapi.getParent(self)
|
|
||||||
|
|
||||||
def getViewManager(self):
|
|
||||||
return self.getLoopsRoot().getViewManager()
|
|
||||||
|
|
||||||
|
|
||||||
# adapters and similar stuff
|
|
||||||
|
|
||||||
|
|
||||||
class FileAdapter(ResourceAdapterBase):
|
class FileAdapter(ResourceAdapterBase):
|
||||||
""" A type adapter for providing file functionality for resources.
|
""" A type adapter for providing file functionality for resources.
|
||||||
|
@ -197,7 +201,20 @@ class FileAdapter(ResourceAdapterBase):
|
||||||
_schemas = list(IFile) + list(IBaseResource)
|
_schemas = list(IFile) + list(IBaseResource)
|
||||||
|
|
||||||
|
|
||||||
class TextDocumentAdapter(ResourceAdapterBase):
|
class DocumentAdapter(ResourceAdapterBase):
|
||||||
|
""" Common base class for all resource types with a text-like
|
||||||
|
data attribute.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# let the adapter handle the data attribute:S
|
||||||
|
_attributes = ResourceAdapterBase._attributes + ('data',)
|
||||||
|
|
||||||
|
def setData(self, data): self.context._data = data.replace('\r', '')
|
||||||
|
def getData(self): return self.context._data
|
||||||
|
data = property(getData, setData)
|
||||||
|
|
||||||
|
|
||||||
|
class TextDocumentAdapter(DocumentAdapter):
|
||||||
""" A type adapter for providing text document functionality for resources.
|
""" A type adapter for providing text document functionality for resources.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
@ -205,14 +222,16 @@ class TextDocumentAdapter(ResourceAdapterBase):
|
||||||
_schemas = list(IDocument) + list(IBaseResource)
|
_schemas = list(IDocument) + list(IBaseResource)
|
||||||
|
|
||||||
|
|
||||||
class NoteAdapter(ResourceAdapterBase):
|
class NoteAdapter(DocumentAdapter):
|
||||||
""" A type adapter for providing note functionality for resources.
|
""" A note is a short text document with an associated link.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
implements(INote)
|
implements(INote)
|
||||||
_schemas = list(INote) + list(IBaseResource)
|
_schemas = list(INote) + list(IBaseResource)
|
||||||
|
|
||||||
|
|
||||||
|
# other adapters
|
||||||
|
|
||||||
class DocumentWriteFileAdapter(object):
|
class DocumentWriteFileAdapter(object):
|
||||||
|
|
||||||
implements(IWriteFile)
|
implements(IWriteFile)
|
||||||
|
@ -254,10 +273,14 @@ class IndexAttributes(object):
|
||||||
ti = IType(context).typeInterface
|
ti = IType(context).typeInterface
|
||||||
if ti is not None:
|
if ti is not None:
|
||||||
adapted = ti(context)
|
adapted = ti(context)
|
||||||
#transform = component.queryAdapter(
|
transform = component.queryAdapter(
|
||||||
# adapted, ITextTransform, name=context.contentType)
|
adapted, ITextTransform, name=context.contentType)
|
||||||
#if transform is not None:
|
if transform is not None:
|
||||||
# return transform()
|
rfa = component.queryAdapter(IReadFile, adapted)
|
||||||
|
if rfa is None:
|
||||||
|
return transform(StringIO(context.data))
|
||||||
|
else:
|
||||||
|
return transform(rfa)
|
||||||
if not context.contentType.startswith('text'):
|
if not context.contentType.startswith('text'):
|
||||||
return u''
|
return u''
|
||||||
data = context.data
|
data = context.data
|
||||||
|
|
Loading…
Add table
Reference in a new issue