a set of minor tweakings; prepare type management for consequent inclusion of resources/resource types
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@1256 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
parent
714e00bbfc
commit
f2d9bc9af8
4 changed files with 96 additions and 38 deletions
|
@ -125,13 +125,13 @@
|
|||
permission="zope.ManageContent"
|
||||
/>
|
||||
|
||||
<addMenuItem
|
||||
<!--<addMenuItem
|
||||
class="loops.concept.ConceptManager"
|
||||
title="Concept Manager"
|
||||
description="A concept manager manages concepts"
|
||||
permission="zope.ManageContent"
|
||||
view="AddLoopsConceptManager.html"
|
||||
/>
|
||||
/>-->
|
||||
|
||||
<containerViews
|
||||
for="loops.interfaces.IConceptManager"
|
||||
|
@ -218,13 +218,13 @@
|
|||
permission="zope.ManageContent"
|
||||
/>
|
||||
|
||||
<addMenuItem
|
||||
<!--<addMenuItem
|
||||
class="loops.resource.ResourceManager"
|
||||
title="Resource Manager"
|
||||
description="A resource manager manages resources"
|
||||
permission="zope.ManageContent"
|
||||
view="AddLoopsResourceManager.html"
|
||||
/>
|
||||
/>-->
|
||||
|
||||
<containerViews
|
||||
for="loops.interfaces.IResourceManager"
|
||||
|
@ -377,13 +377,13 @@
|
|||
permission="zope.ManageContent"
|
||||
/>
|
||||
|
||||
<addMenuItem
|
||||
<!--<addMenuItem
|
||||
class="loops.view.ViewManager"
|
||||
title="View Manager"
|
||||
description="A view manager manages views, like nodes, menu items, ..."
|
||||
permission="zope.ManageContent"
|
||||
view="AddLoopsViewManager.html"
|
||||
/>
|
||||
/>-->
|
||||
|
||||
<containerViews
|
||||
for="loops.interfaces.IViewManager"
|
||||
|
|
|
@ -185,7 +185,7 @@ get a type manager from all loops objects, always with the same context:
|
|||
True
|
||||
|
||||
>>> types = typeManager.types
|
||||
>>> sorted(t.token for t in types)
|
||||
>>> sorted((t.token) for t in types)
|
||||
['.loops/concepts/predicate', '.loops/concepts/topic',
|
||||
'.loops/concepts/type', 'loops.resource.Document',
|
||||
'loops.resource.MediaAsset']
|
||||
|
|
|
@ -300,8 +300,8 @@ class IMediaAsset(IMediaAssetSchema, IResource, IBaseAsset):
|
|||
""" A resource containing a (typically binary) file-like content
|
||||
or an image.
|
||||
"""
|
||||
|
||||
|
||||
|
||||
|
||||
class IResourceManager(ILoopsObject, IContainer):
|
||||
""" A manager/container for resources.
|
||||
"""
|
||||
|
@ -516,6 +516,34 @@ class ITypeConcept(Interface):
|
|||
source="loops.TypeInterfaceSource",
|
||||
required=False)
|
||||
|
||||
# viewName = schema.TextLine()
|
||||
|
||||
|
||||
class IResourceAdapter(Interface):
|
||||
""" Base interface for adapters for resources. This is the base interface
|
||||
of the interfaces to be used as typeInterface attribute on type concepts
|
||||
specifying resource types.
|
||||
"""
|
||||
|
||||
|
||||
class IFile(IResourceAdapter):
|
||||
""" A media asset that is not shown on a (web) page like an image but
|
||||
may be downloaded instead.
|
||||
"""
|
||||
|
||||
|
||||
class IImage(IResourceAdapter):
|
||||
""" A media asset that may be embedded in a (web) page as an image.
|
||||
"""
|
||||
|
||||
|
||||
class ITextDocument(IResourceAdapter):
|
||||
""" A resource containing some sort of plain text that may be rendered and
|
||||
edited without necessarily involving a special external application
|
||||
(like e.g. OpenOffice); typical content types are text/html, text/xml,
|
||||
text/restructured, etc.
|
||||
"""
|
||||
|
||||
|
||||
# view configurator stuff
|
||||
|
||||
|
|
88
type.py
88
type.py
|
@ -31,12 +31,17 @@ from zope import schema
|
|||
from zope.security.proxy import removeSecurityProxy
|
||||
from cybertools.typology.type import BaseType, TypeManager
|
||||
from loops.interfaces import ILoopsObject, IConcept, IResource
|
||||
from loops.interfaces import ITypeConcept
|
||||
from loops.interfaces import ITypeConcept, IResourceAdapter, IFile, IImage
|
||||
from loops.concept import Concept
|
||||
from loops.resource import Document, MediaAsset
|
||||
from loops.resource import Resource, Document, MediaAsset
|
||||
|
||||
|
||||
class LoopsType(BaseType):
|
||||
|
||||
adapts(ILoopsObject)
|
||||
|
||||
factoryMapping = dict(concept=Concept, resource=Resource)
|
||||
containerMapping = dict(concept='concepts', resource='resources')
|
||||
|
||||
@Lazy
|
||||
def title(self):
|
||||
|
@ -52,55 +57,79 @@ class LoopsType(BaseType):
|
|||
def tokenForSearch(self):
|
||||
tp = self.typeProvider
|
||||
typeName = tp is None and 'unknown' or str(zapi.getName(tp))
|
||||
return ':'.join(('loops:concept', typeName,))
|
||||
return ':'.join(('loops', self.qualifiers[0], typeName,))
|
||||
|
||||
@Lazy
|
||||
def typeInterface(self):
|
||||
adapter = zapi.queryAdapter(self.typeProvider, ITypeConcept)
|
||||
if adapter is not None:
|
||||
return adapter.typeInterface
|
||||
else:
|
||||
conceptType = self.typeProvider
|
||||
typeConcept = self.root.getConceptManager().getTypeConcept()
|
||||
if conceptType is typeConcept:
|
||||
return ITypeConcept
|
||||
return None
|
||||
|
||||
@Lazy
|
||||
def qualifiers(self):
|
||||
ti = self.typeInterface
|
||||
if ti is None or not issubclass(ti, IResourceAdapter):
|
||||
return ('concept',)
|
||||
return ('resource',)
|
||||
|
||||
@Lazy
|
||||
def factory(self):
|
||||
return self.factoryMapping.get(self.qualifiers[0], Concept)
|
||||
|
||||
@Lazy
|
||||
def defaultContainer(self):
|
||||
return self.root[self.containerMapping.get(self.qualifiers[0], 'concept')]
|
||||
|
||||
@Lazy
|
||||
def root(self):
|
||||
return self.context.getLoopsRoot()
|
||||
|
||||
|
||||
class ConceptType(LoopsType):
|
||||
""" The IType adapter for concept objects.
|
||||
"""
|
||||
|
||||
adapts(IConcept)
|
||||
|
||||
qualifiers = ('concept',)
|
||||
factory = Concept
|
||||
|
||||
@Lazy
|
||||
def typeProvider(self):
|
||||
return self.context.conceptType
|
||||
|
||||
@Lazy
|
||||
def defaultContainer(self):
|
||||
return self.root.getConceptManager()
|
||||
|
||||
@Lazy
|
||||
def typeInterface(self):
|
||||
adapter = zapi.queryAdapter(self.typeProvider, ITypeConcept)
|
||||
if adapter is not None: # always gives TypeConcept
|
||||
return adapter.typeInterface
|
||||
else:
|
||||
conceptType = self.typeProvider
|
||||
if conceptType is conceptType.getLoopsRoot().getConceptManager().getTypeConcept():
|
||||
return ITypeConcept
|
||||
return None
|
||||
|
||||
|
||||
class ConceptTypeInfo(ConceptType):
|
||||
class LoopsTypeInfo(LoopsType):
|
||||
""" The type info class used by the type manager for listing types.
|
||||
"""
|
||||
|
||||
def __init__(self, typeProvider):
|
||||
self.typeProvider = self.context = typeProvider
|
||||
|
||||
|
||||
class ConceptType(LoopsType):
|
||||
""" The IType adapter for concept objects.
|
||||
Probably obsolete because all real stuff has gone to LoopsType.
|
||||
"""
|
||||
|
||||
adapts(IConcept)
|
||||
|
||||
|
||||
class ConceptTypeInfo(LoopsTypeInfo):
|
||||
""" The type info class used by the type manager for listing types.
|
||||
Probably obsolete because all real stuff has gone to LoopsTypeInfo.
|
||||
"""
|
||||
|
||||
|
||||
class ResourceType(LoopsType):
|
||||
""" The 'old-style' resource type - different classes (Document, MediaAsset)
|
||||
per type. Will be replaced by new style types that are governed by
|
||||
type concepts as is already the case for concepts.
|
||||
"""
|
||||
|
||||
adapts(IResource)
|
||||
|
||||
typeTitles = {'MediaAsset': u'Media Asset'}
|
||||
|
||||
typeInterface = None
|
||||
qualifiers = ('resource',)
|
||||
typeProvider = None
|
||||
|
||||
@Lazy
|
||||
def title(self):
|
||||
|
@ -204,6 +233,7 @@ class TypeInterfaceSourceList(object):
|
|||
|
||||
implements(schema.interfaces.IIterableSource)
|
||||
|
||||
#typeInterfaces = (ITypeConcept, IFile, IImage,)
|
||||
typeInterfaces = (ITypeConcept,)
|
||||
|
||||
def __init__(self, context):
|
||||
|
|
Loading…
Add table
Reference in a new issue