use IIndexAttributes adapter (if available) based on adapted object for text index on concept
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3215 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
529bdc7c1f
commit
3589363264
5 changed files with 62 additions and 4 deletions
18
concept.py
18
concept.py
|
@ -401,16 +401,24 @@ class IndexAttributes(object):
|
||||||
def adapted(self):
|
def adapted(self):
|
||||||
return adapted(self.context)
|
return adapted(self.context)
|
||||||
|
|
||||||
|
@Lazy
|
||||||
|
def adaptedIndexAttributes(self):
|
||||||
|
if self.adapted != self.context:
|
||||||
|
return component.queryAdapter(self.adapted, IIndexAttributes)
|
||||||
|
return IIndexAttributes(self.adapted, None)
|
||||||
|
|
||||||
def text(self):
|
def text(self):
|
||||||
# TODO: use IIndexAttributes(self.adapted) if available
|
if self.adaptedIndexAttributes is not None:
|
||||||
|
return self.adaptedIndexAttributes.text()
|
||||||
description = self.context.description
|
description = self.context.description
|
||||||
if isinstance(description, I18NValue):
|
if isinstance(description, I18NValue):
|
||||||
description = ' '.join(description.values())
|
description = ' '.join(description.values())
|
||||||
actx = self.adapted
|
actx = self.adapted
|
||||||
indexAttrs = getattr(actx, '_textIndexAttributes', ())
|
indexAttrs = getattr(actx, '_textIndexAttributes', ())
|
||||||
|
indexValues = [getattr(actx, attr, u'???') for attr in indexAttrs]
|
||||||
return ' '.join([self.title(), description] +
|
return ' '.join([self.title(), description] +
|
||||||
self.creators() +
|
[c for c in self.creators() if c is not None] +
|
||||||
[getattr(actx, attr, u'???') for attr in indexAttrs]).strip()
|
[v for v in indexValues if v is not None]).strip()
|
||||||
|
|
||||||
def title(self):
|
def title(self):
|
||||||
context = self.context
|
context = self.context
|
||||||
|
@ -419,6 +427,10 @@ class IndexAttributes(object):
|
||||||
title = ' '.join(title.values())
|
title = ' '.join(title.values())
|
||||||
return ' '.join((getName(context), title)).strip()
|
return ' '.join((getName(context), title)).strip()
|
||||||
|
|
||||||
|
def date(self):
|
||||||
|
if self.adaptedIndexAttributes is not None:
|
||||||
|
return self.adaptedIndexAttributes.date()
|
||||||
|
|
||||||
def creators(self):
|
def creators(self):
|
||||||
cr = IZopeDublinCore(self.context).creators or []
|
cr = IZopeDublinCore(self.context).creators or []
|
||||||
pau = component.getUtility(IAuthentication)
|
pau = component.getUtility(IAuthentication)
|
||||||
|
|
|
@ -387,6 +387,11 @@
|
||||||
name="text/rtf"
|
name="text/rtf"
|
||||||
factory="cybertools.text.rtf.RtfTransform" />
|
factory="cybertools.text.rtf.RtfTransform" />
|
||||||
|
|
||||||
|
<adapter for="loops.interfaces.ITextDocument"
|
||||||
|
provides="cybertools.text.interfaces.ITextTransform"
|
||||||
|
name="text/html"
|
||||||
|
factory="cybertools.text.html.HtmlTransform" />
|
||||||
|
|
||||||
<adapter for="loops.interfaces.IFile"
|
<adapter for="loops.interfaces.IFile"
|
||||||
provides="cybertools.text.interfaces.ITextTransform"
|
provides="cybertools.text.interfaces.ITextTransform"
|
||||||
name="application/vnd.ms-powerpoint"
|
name="application/vnd.ms-powerpoint"
|
||||||
|
|
29
resource.py
29
resource.py
|
@ -520,6 +520,18 @@ class IndexAttributes(object):
|
||||||
self.context = context
|
self.context = context
|
||||||
|
|
||||||
def text(self):
|
def text(self):
|
||||||
|
actx = adapted(self.context)
|
||||||
|
txt = transformToText(actx)
|
||||||
|
if txt is not None:
|
||||||
|
return txt
|
||||||
|
if not actx.contentType.startswith('text'):
|
||||||
|
return u''
|
||||||
|
data = actx.data
|
||||||
|
if type(data) != unicode:
|
||||||
|
data = data.decode('UTF-8')
|
||||||
|
return data
|
||||||
|
|
||||||
|
def xx_text(self):
|
||||||
context = self.context
|
context = self.context
|
||||||
ti = IType(context).typeInterface
|
ti = IType(context).typeInterface
|
||||||
if ti is not None:
|
if ti is not None:
|
||||||
|
@ -559,6 +571,22 @@ class IndexAttributes(object):
|
||||||
def identifier(self):
|
def identifier(self):
|
||||||
return getName(self.context)
|
return getName(self.context)
|
||||||
|
|
||||||
|
def transformToText(obj, data=None, contentType=None):
|
||||||
|
if data is None:
|
||||||
|
data = obj.data
|
||||||
|
if contentType is None:
|
||||||
|
contentType = obj.contentType
|
||||||
|
transform = component.queryAdapter(obj, ITextTransform, name=contentType)
|
||||||
|
if transform is not None:
|
||||||
|
#rfa = component.queryAdapter(IReadFile, obj)
|
||||||
|
rfa = IReadFile(obj, None)
|
||||||
|
if rfa is None:
|
||||||
|
if isinstance(data, unicode):
|
||||||
|
data = data.encode('UTF-8')
|
||||||
|
return transform(StringIO(data))
|
||||||
|
else:
|
||||||
|
return transform(rfa)
|
||||||
|
|
||||||
|
|
||||||
class ResourceTypeSourceList(object):
|
class ResourceTypeSourceList(object):
|
||||||
|
|
||||||
|
@ -577,4 +605,3 @@ class ResourceTypeSourceList(object):
|
||||||
|
|
||||||
def __len__(self):
|
def __len__(self):
|
||||||
return len(self.resourceTypes)
|
return len(self.resourceTypes)
|
||||||
|
|
||||||
|
|
|
@ -42,6 +42,7 @@ from cybertools.relation.interfaces import IRelationInvalidatedEvent
|
||||||
from cybertools.relation.registry import IndexableRelationAdapter
|
from cybertools.relation.registry import IndexableRelationAdapter
|
||||||
from cybertools.relation.registry import invalidateRelations, removeRelation
|
from cybertools.relation.registry import invalidateRelations, removeRelation
|
||||||
from cybertools.stateful.interfaces import IStatefulIndexInfo
|
from cybertools.stateful.interfaces import IStatefulIndexInfo
|
||||||
|
from cybertools.text.html import HtmlTransform
|
||||||
from cybertools.typology.interfaces import IType
|
from cybertools.typology.interfaces import IType
|
||||||
|
|
||||||
from loops.base import Loops
|
from loops.base import Loops
|
||||||
|
@ -169,6 +170,7 @@ class TestSite(object):
|
||||||
catalog['loops_state'] = KeywordIndex('tokens', IStatefulIndexInfo, False)
|
catalog['loops_state'] = KeywordIndex('tokens', IStatefulIndexInfo, False)
|
||||||
component.provideAdapter(ConceptIndexAttributes)
|
component.provideAdapter(ConceptIndexAttributes)
|
||||||
component.provideAdapter(ResourceIndexAttributes)
|
component.provideAdapter(ResourceIndexAttributes)
|
||||||
|
component.provideAdapter(HtmlTransform, (ITextDocument,), name='text/html')
|
||||||
component.provideAdapter(StatefulResourceIndexInfo)
|
component.provideAdapter(StatefulResourceIndexInfo)
|
||||||
component.provideHandler(handleTransition)
|
component.provideHandler(handleTransition)
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,17 @@ $Id$
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from zope import component
|
from zope import component
|
||||||
|
from zope.annotation.attribute import AttributeAnnotations
|
||||||
|
from zope.annotation.interfaces import IAnnotatable
|
||||||
from zope.app.catalog.catalog import Catalog
|
from zope.app.catalog.catalog import Catalog
|
||||||
from zope.app.catalog.interfaces import ICatalog
|
from zope.app.catalog.interfaces import ICatalog
|
||||||
from zope.app.catalog.field import FieldIndex
|
from zope.app.catalog.field import FieldIndex
|
||||||
from zope.app.catalog.text import TextIndex
|
from zope.app.catalog.text import TextIndex
|
||||||
from zope.app.container.interfaces import IObjectRemovedEvent
|
from zope.app.container.interfaces import IObjectRemovedEvent
|
||||||
|
from zope.app.security.interfaces import IAuthentication
|
||||||
|
from zope.app.security.principalregistry import principalRegistry
|
||||||
|
from zope.dublincore.annotatableadapter import ZDCAnnotatableAdapter
|
||||||
|
from zope.dublincore.interfaces import IZopeDublinCore
|
||||||
|
|
||||||
from cybertools.relation.tests import IntIdsStub
|
from cybertools.relation.tests import IntIdsStub
|
||||||
from cybertools.relation.registry import RelationRegistry
|
from cybertools.relation.registry import RelationRegistry
|
||||||
|
@ -20,8 +26,10 @@ from cybertools.typology.interfaces import IType
|
||||||
from loops.base import Loops
|
from loops.base import Loops
|
||||||
from loops import util
|
from loops import util
|
||||||
from loops.interfaces import IResource, IIndexAttributes
|
from loops.interfaces import IResource, IIndexAttributes
|
||||||
|
from loops.common import LoopsDCAdapter
|
||||||
from loops.concept import Concept
|
from loops.concept import Concept
|
||||||
from loops.concept import IndexAttributes as ConceptIndexAttributes
|
from loops.concept import IndexAttributes as ConceptIndexAttributes
|
||||||
|
from loops.interfaces import ILoopsObject, IConcept
|
||||||
from loops.resource import Resource
|
from loops.resource import Resource
|
||||||
from loops.resource import IndexAttributes as ResourceIndexAttributes
|
from loops.resource import IndexAttributes as ResourceIndexAttributes
|
||||||
from loops.knowledge.setup import SetupManager as KnowledgeSetupManager
|
from loops.knowledge.setup import SetupManager as KnowledgeSetupManager
|
||||||
|
@ -42,7 +50,11 @@ class TestSite(object):
|
||||||
relations = RelationRegistry()
|
relations = RelationRegistry()
|
||||||
relations.setupIndexes()
|
relations.setupIndexes()
|
||||||
component.provideUtility(relations, IRelationRegistry)
|
component.provideUtility(relations, IRelationRegistry)
|
||||||
|
component.provideUtility(principalRegistry, IAuthentication)
|
||||||
component.provideAdapter(IndexableRelationAdapter)
|
component.provideAdapter(IndexableRelationAdapter)
|
||||||
|
component.provideAdapter(ZDCAnnotatableAdapter, (ILoopsObject,), IZopeDublinCore)
|
||||||
|
component.provideAdapter(AttributeAnnotations, (ILoopsObject,))
|
||||||
|
component.provideAdapter(LoopsDCAdapter, (IConcept,), IZopeDublinCore)
|
||||||
|
|
||||||
component.provideAdapter(ConceptType)
|
component.provideAdapter(ConceptType)
|
||||||
component.provideAdapter(ResourceType)
|
component.provideAdapter(ResourceType)
|
||||||
|
|
Loading…
Add table
Reference in a new issue