Provide typology stuff for concepts

git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1120 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
helmutm 2006-03-08 17:04:48 +00:00
parent dfd398a401
commit 1adedb7b0e
3 changed files with 63 additions and 3 deletions

View file

@ -237,6 +237,7 @@
<adapter factory="loops.resource.IndexableResource" />
<adapter factory="loops.type.ConceptType" />
<adapter factory="loops.type.ResourceType" />
<adapter factory="loops.type.LoopsTypeManager" />
<adapter factory="loops.external.NodesLoader" />

View file

@ -127,6 +127,24 @@ lazy properties, one should always get a new adapter:
>>> cc1_type.typeProvider == topic
True
Now let's have a look at resources.
>>> from loops.interfaces import IResource
>>> from loops.type import ResourceType
>>> ztapi.provideAdapter(IResource, IType, ResourceType)
>>> doc1_type = IType(doc1)
>>> doc1_type.title
u'Document'
>>> doc1_type.token
'.loops/resources/document'
>>> doc1_type.tokenForSearch
'loops:resource:document'
>>> img1_type = IType(img1)
>>> img1_type.title
u'Media Asset'
Can we find out somehow which types are available? This is the time to look
for a type manager. This could be a utility; but in the loops package it
is again an adapter, now for the loops root object. Nevertheless one can
@ -142,7 +160,8 @@ get a type manager from all loops objects, always with the same context:
>>> types = typeManager.types
>>> sorted(t.token for t in types)
['.loops/concepts/topic', '.loops/concepts/type']
['.loops/concepts/topic', '.loops/concepts/type',
'.loops/resources/document', '.loops/resources/mediaasset']
>>> typeManager.getType('.loops/concepts/topic') == cc1_type
True

44
type.py
View file

@ -26,7 +26,8 @@ from zope.app import zapi
from zope.component import adapts
from zope.cachedescriptors.property import Lazy
from cybertools.typology.type import BaseType, TypeManager
from loops.interfaces import ILoopsObject, IConcept
from loops.interfaces import ILoopsObject, IConcept, IResource
from loops.resource import Document, MediaAsset
class LoopsType(BaseType):
@ -71,6 +72,43 @@ class ConceptType(LoopsType):
return self.context.conceptType
class ResourceType(LoopsType):
adapts(IResource)
typeTitles = {'MediaAsset': u'Media Asset'}
@Lazy
def title(self):
cn = self.className
return self.typeTitles.get(cn, unicode(cn))
@Lazy
def token(self):
cn = self.className
return '/'.join(('.loops/resources', cn.lower(),))
@Lazy
def tokenForSearch(self):
cn = self.className
return ':'.join(('loops:resource', cn.lower(),))
@Lazy
def className(self):
return self.context.__class__.__name__
class ResourceTypeInfo(ResourceType):
def __init__(self, cls):
self.cls = cls
@Lazy
def className(self):
return self.cls.__name__
class LoopsTypeManager(TypeManager):
adapts(ILoopsObject)
@ -88,6 +126,8 @@ class LoopsTypeManager(TypeManager):
result = to.getChildren([tp])
if to not in result:
result.append(to)
return tuple(LoopsTypeInfo(c) for c in result)
cTypes = [LoopsTypeInfo(c) for c in result]
rTypes = [ResourceTypeInfo(cls) for cls in (Document, MediaAsset)]
return tuple(cTypes + rTypes)