diff --git a/helpers.txt b/helpers.txt index 1eaccb8..43d850b 100755 --- a/helpers.txt +++ b/helpers.txt @@ -108,7 +108,7 @@ So let's check the type of the type object: >>> type_type.tokenForSearch 'loops:concept:type' >>> type_type.qualifiers - ('concept', 'system',) + ('concept',) Now we register another type ('topic') and assign it to cc1: @@ -144,6 +144,8 @@ Now let's have a look at resources. '.loops/resources/document' >>> doc1_type.tokenForSearch 'loops:resource:document' + >>> doc1_type.qualifiers + ('resource',) >>> img1_type = IType(img1) >>> img1_type.title @@ -170,6 +172,16 @@ get a type manager from all loops objects, always with the same context: >>> typeManager.getType('.loops/concepts/topic') == cc1_type True +The listTypes() method allows us to select types that fulfill a certain +condition: + + >>> types = typeManager.listTypes(include=('concept',)) + >>> sorted(t.token for t in types) + ['.loops/concepts/topic', '.loops/concepts/type'] + >>> types = typeManager.listTypes(exclude=('concept',)) + >>> sorted(t.token for t in types) + ['.loops/resources/document', '.loops/resources/mediaasset'] + Index attributes adapter ------------------------ diff --git a/type.py b/type.py index 7d4b7d0..a1b6394 100644 --- a/type.py +++ b/type.py @@ -67,17 +67,27 @@ class ConceptType(LoopsType): adapts(IConcept) + qualifiers = ('concept',) + @Lazy def typeProvider(self): return self.context.conceptType +class ConceptTypeInfo(ConceptType): + + def __init__(self, typeProvider): + self.typeProvider = self.context = typeProvider + + class ResourceType(LoopsType): adapts(IResource) typeTitles = {'MediaAsset': u'Media Asset'} + qualifiers = ('resource',) + @Lazy def title(self): cn = self.className @@ -118,6 +128,17 @@ class LoopsTypeManager(TypeManager): @property def types(self): + return self.conceptTypes() + self.resourceTypes() + + def listTypes(self, include=None, exclude=None): + for t in self.types: + if include and not [q for q in t.qualifiers if q in include]: + continue + if exclude and [q for q in t.qualifiers if q in exclude]: + continue + yield t + + def conceptTypes(self): cm = self.context.getConceptManager() to = cm.getTypeConcept() tp = cm.getTypePredicate() @@ -126,8 +147,7 @@ class LoopsTypeManager(TypeManager): result = to.getChildren([tp]) if to not in result: result.append(to) - cTypes = [LoopsTypeInfo(c) for c in result] - rTypes = [ResourceTypeInfo(cls) for cls in (Document, MediaAsset)] - return tuple(cTypes + rTypes) - + return tuple([ConceptTypeInfo(c) for c in result]) + def resourceTypes(self): + return tuple([ResourceTypeInfo(cls) for cls in (Document, MediaAsset)])