Author: jmorliaguet Date: Tue Jun 6 11:24:25 2006 New Revision: 3332 Removed: cpsskins/branches/paris-sprint-2006/relations/tool.py Modified: cpsskins/branches/paris-sprint-2006/browser/tree/slot.py cpsskins/branches/paris-sprint-2006/elements/display.py cpsskins/branches/paris-sprint-2006/elements/format.py cpsskins/branches/paris-sprint-2006/elements/portlet.py cpsskins/branches/paris-sprint-2006/elements/presentation.py cpsskins/branches/paris-sprint-2006/relations/configure.zcml cpsskins/branches/paris-sprint-2006/tests/setup.py cpsskins/branches/paris-sprint-2006/tests/test_relations.py cpsskins/branches/paris-sprint-2006/thememanager.py cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py cpsskins/branches/paris-sprint-2006/utils.py
Log: - removed the IRelationTool. Actually by 'relation tool' we mean 'relation storage', so instead of writing: >>> reltool = IRelationTool(context) >>> reltool.search(...) we have: >>> from cpsskins.utils import getRelationStorage >>> relations = getRelationStorage(context) >>> relations.search(...) the orginal idea was to make it possible to plug in other relation tools than the default one. This is still possible but this will not be done at run timei through an adapter lookup, but during configuration time with: <cpsskins:storage id="relations" title="Relation storage" description="A relation storage contains relations between objects" class="my.relationengine.RelationStorage" <<< interface="cpsskins.relations.IRelationStorage" contains="cpsskins.relations.interfaces.IRelation" /> the storage is physically stored in the theme management folder. Modified: cpsskins/branches/paris-sprint-2006/browser/tree/slot.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/browser/tree/slot.py (original) +++ cpsskins/branches/paris-sprint-2006/browser/tree/slot.py Tue Jun 6 11:24:25 2006 @@ -30,8 +30,7 @@ from cpsskins.elements.interfaces import IPortlet, IDisplayable from cpsskins.ontology import hasPortlet, hasPortletFromPerspective from cpsskins.relations import DyadicRelation, TriadicRelation -from cpsskins.relations.interfaces import IRelationTool -from cpsskins.utils import getThemeManager +from cpsskins.utils import getThemeManager, getRelationStorage class NodeTraversing(BrowserView): """This adapter makes slot nodes traversable. @@ -43,12 +42,12 @@ Override this method if the element is a virtual container. """ context = self.context - reltool = IRelationTool(context) + relations = getRelationStorage(context) if perspective is None or display.mode == IGNORE_PERSPECTIVES: - portlets = reltool.getSeconds(predicate=hasPortlet, first=context) + portlets = relations.getSeconds(predicate=hasPortlet, first=context) elif display.mode == USE_CURRENT_PERSPECTIVE: - portlets = reltool.getSeconds(predicate=hasPortletFromPerspective, + portlets = relations.getSeconds(predicate=hasPortletFromPerspective, first=context, third=perspective) # the portlet order is obtained from the display, if the display is @@ -124,45 +123,30 @@ # the element is not physically moved but slot -> portlet relations # need to be updated. - reltool = IRelationTool(content) + relations = getRelationStorage(content) # TODO: let compound predicates support predicates of different arities - old_relations = reltool.search( - predicate=hasPortlet, - first=src_container, - second=content, - ) + reltool.search( - predicate=hasPortletFromPerspective, - first=src_container, - second=content, - ) + old_relations = relations.search(predicate=hasPortlet, + first=src_container, second=content) \ + + relations.search(predicate=hasPortletFromPerspective, + first=src_container, second=content) - rel = reltool.get(old_relations[0]) + rel = relations.get(old_relations[0]) perspective = len(rel) == 3 and rel.third or None # set the dest_slot -> portlet relation if perspective is None: - relation = DyadicRelation( - predicate=hasPortlet, - first=dest_container, - second=content, - ) + relation = DyadicRelation(predicate=hasPortlet, + first=dest_container, second=content) else: - relation = TriadicRelation( - predicate=hasPortletFromPerspective, - first=dest_container, - second=content, - third=perspective, - ) - - relations = getThemeManager(dest_container).getRelationStorage() + relation = TriadicRelation(predicate=hasPortletFromPerspective, + first=dest_container, second=content, + third=perspective) relations.add(relation) - # remove old src_slot -> portlet relations - reltool.remove(old_relations) + relations.remove(old_relations) # set the portlet's parent explicitly content.__parent__ = dest_container - return content class SlotRemoving(BrowserView): @@ -186,22 +170,16 @@ portlets = getThemeManager(container).getPortletStorage() - reltool = IRelationTool(container) + relations = getRelationStorage(container) if perspective is None: - ids = reltool.search( - predicate=hasPortlet, - first=container, - second=content, - ) + ids = relations.search(predicate=hasPortlet, first=container, + second=content) else: - ids = reltool.search( - predicate=hasPortletFromPerspective, - first=container, - second=content, - third=perspective, - ) + ids = relations.search(predicate=hasPortletFromPerspective, + first=container, second=content, + third=perspective) - reltool.remove(ids) + relations.remove(ids) del portlets[getName(content)] # store the portlet's order in the slot's "BoxGroup" display @@ -263,23 +241,16 @@ raise TypeError("Only portlets can be duplicated inside slots") portlets = getThemeManager(container).getPortletStorage() - duplicated = portlets.duplicate(content) - - reltool = IRelationTool(content) + relations = getRelationStorage(content) # Manage relations - relations = reltool.search( - predicate=hasPortlet, - first=container, - second=content, - ) + reltool.search( - predicate=hasPortletFromPerspective, - first=container, - second=content, - ) + old_relations = relations.search(predicate=hasPortlet, first=container, + second=content) \ + + relations.search(predicate=hasPortletFromPerspective, + first=container, second=content) - rel = reltool.get(relations[0]) + rel = relations.get(old_relations[0]) perspective = len(rel) == 3 and rel.third or None display = IDisplayable(container).getEffectiveDisplay(perspective) @@ -287,22 +258,13 @@ # set the dest_slot -> portlet relation if perspective is None: - relation = DyadicRelation( - predicate=hasPortlet, - first=container, - second=duplicated, - ) + relation = DyadicRelation(predicate=hasPortlet, first=container, + second=duplicated) else: - relation = TriadicRelation( - predicate=hasPortletFromPerspective, - first=container, - second=duplicated, - third=perspective, - ) - - reltool.add(relation) - + relation = TriadicRelation(predicate=hasPortletFromPerspective, + first=container, second=duplicated, + third=perspective) + relations.add(relation) duplicated.__parent__ = container - return duplicated.identifier Modified: cpsskins/branches/paris-sprint-2006/elements/display.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/elements/display.py (original) +++ cpsskins/branches/paris-sprint-2006/elements/display.py Tue Jun 6 11:24:25 2006 @@ -28,11 +28,10 @@ from cpsskins.elements.interfaces import IDisplayable, IDisplay from cpsskins.perspectives.interfaces import IPerspective from cpsskins.relations import DyadicRelation, TriadicRelation -from cpsskins.relations.interfaces import IRelationTool from cpsskins.ontology import hasDisplay, hasDisplayFromPerspective from cpsskins.setup.interfaces import IType from cpsskins.storage.displays import IDisplayStorage -from cpsskins.utils import getThemeManager +from cpsskins.utils import getThemeManager, getRelationStorage USE_CURRENT_PERSPECTIVE = 1 IGNORE_PERSPECTIVES = 2 @@ -99,27 +98,20 @@ """ object = self.context - reltool = IRelationTool(object) + relations = getRelationStorage(object) # if a perspective is specified get the display from that perspective if perspective is not None: - res = reltool.getSeconds( - predicate=hasDisplayFromPerspective, - first=object, - third=perspective, - ) + res = relations.getSeconds(predicate=hasDisplayFromPerspective, + first=object, third=perspective) if res: return res[0] # get the display independently of any perspective else: - res = reltool.getSeconds( - predicate=hasDisplay, - first=object, - ) + res = relations.getSeconds(predicate=hasDisplay, first=object) if res: return res[0] - return default def storeDisplay(self, display): @@ -160,28 +152,19 @@ """ context = self.context - if not IDisplay.providedBy(display): raise ValueError("%s is not a display element" % repr(display)) - if perspective is None: - relation = DyadicRelation( - predicate=hasDisplay, - first=context, - second=display, - ) + relation = DyadicRelation(predicate=hasDisplay, first=context, + second=display) else: if not IPerspective.providedBy(perspective): raise ValueError("%s is not a perspective" % repr(perspective)) - relation = TriadicRelation( - predicate=hasDisplayFromPerspective, - first=context, - second=display, - third=perspective, - ) - - reltool = IRelationTool(context) - reltool.add(relation) + relation = TriadicRelation(predicate=hasDisplayFromPerspective, + first=context, second=display, + third=perspective) + relations = getRelationStorage(context) + relations.add(relation) return display def removeDisplay(self, perspective=None): @@ -192,12 +175,10 @@ display = IDisplayable(context).getDisplay(perspective) # Remove the relation - reltool = IRelationTool(context) - relations = reltool.search( - first=context, - second=display, - predicate=hasDisplayFromPerspective) - reltool.remove(relations) + relations = getRelationStorage(context) + old_relations = relations.search(first=context, second=display, + predicate=hasDisplayFromPerspective) + relations.remove(old_relations) # remove the display displays.remove(display) Modified: cpsskins/branches/paris-sprint-2006/elements/format.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/elements/format.py (original) +++ cpsskins/branches/paris-sprint-2006/elements/format.py Tue Jun 6 11:24:25 2006 @@ -27,9 +27,8 @@ from cpsskins.elements.interfaces import IFormat, IFormattable from cpsskins.ontology import hasFormat, IFormatPredicate from cpsskins.relations import DyadicRelation -from cpsskins.relations.interfaces import IRelationTool from cpsskins.setup.interfaces import IResource, IPreset, IType -from cpsskins.utils import getThemeManager +from cpsskins.utils import getThemeManager, getRelationStorage class Format(Element): @@ -44,8 +43,8 @@ """Return the list of display elements associated to this format. """ - reltool = IRelationTool(self) - return reltool.getFirsts(second=self, predicate=hasFormat) + relations = getRelationStorage(self) + return relations.getFirsts(second=self, predicate=hasFormat) def getPredicate(self): return IType(self).getContentType().getTaggedValue('predicate') @@ -112,9 +111,9 @@ def getFormats(self, name=u'', resolve=True): formats = [] context = self.context - reltool = IRelationTool(context) + relations = getRelationStorage(context) predicate = self.getPredicate(name) - for format in reltool.getSeconds(first=context, predicate=predicate): + for format in relations.getSeconds(first=context, predicate=predicate): if resolve and IPreset.providedBy(format): format = IResource(format).getResource() formats.append(format) @@ -146,15 +145,15 @@ """ context = self.context - reltool = IRelationTool(context) + relations = getRelationStorage(context) predicate = self.getPredicate(IType(format).resourcename) - relations = reltool.search(first=context, predicate=predicate) - reltool.remove(relations) + old_relations = relations.search(first=context, predicate=predicate) + relations.remove(old_relations) relation = DyadicRelation(first=context, second=format, predicate=predicate) - reltool.add(relation) + relations.add(relation) def cloneFormat(self, format): """Clone the format Modified: cpsskins/branches/paris-sprint-2006/elements/portlet.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/elements/portlet.py (original) +++ cpsskins/branches/paris-sprint-2006/elements/portlet.py Tue Jun 6 11:24:25 2006 @@ -28,7 +28,7 @@ from cpsskins.elements.interfaces import IPortlet, ISlot, IDisplayable from cpsskins.ontology import hasPortlet, hasPortletFromPerspective from cpsskins.relations import DyadicRelation, TriadicRelation -from cpsskins.relations.interfaces import IRelationTool +from cpsskins.utils import getRelationStorage class Portlet(Persistent, Contained): """Base class for portlets.""" @@ -65,42 +65,32 @@ portlet.__parent__ = target # update the slot -> portlet relation - reltool = IRelationTool(portlet) + relations = getRelationStorage(portlet) parents = [] # if the portlet was set from a given perspective retrieve the # relations - parents = reltool.search( - predicate=hasPortletFromPerspective, - second=portlet, - ) + parents = relations.search(predicate=hasPortletFromPerspective, + second=portlet) - perspective = parents and reltool.get(parents[0]).third or None + perspective = parents and relations.get(parents[0]).third or None # otherwise: if perspective is None: - parents = reltool.search( - predicate=hasPortlet, - second=portlet, - ) - relation = DyadicRelation( - predicate=hasPortlet, - first=target, - second=portlet, - ) + parents = relations.search(predicate=hasPortlet, + second=portlet) + relation = DyadicRelation(predicate=hasPortlet, first=target, + second=portlet) else: - relation = TriadicRelation( - predicate=hasPortletFromPerspective, - first=target, - second=portlet, - third=perspective, - ) + relation = TriadicRelation(predicate=hasPortletFromPerspective, + first=target, second=portlet, + third=perspective) # store the new slot -> portlet relation - reltool.add(relation) + relations.add(relation) # remove the old relation - reltool.remove(parents) + relations.remove(parents) # update slots' displays src_display = IDisplayable(parent).getEffectiveDisplay(perspective) Modified: cpsskins/branches/paris-sprint-2006/elements/presentation.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/elements/presentation.py (original) +++ cpsskins/branches/paris-sprint-2006/elements/presentation.py Tue Jun 6 11:24:25 2006 @@ -24,10 +24,9 @@ from cpsskins.elements.interfaces import IDisplayable, IFormattable from cpsskins.elements.interfaces import IPresentable from cpsskins.ontology import hasFormat, hasDisplay, hasDisplayFromPerspective -from cpsskins.relations.interfaces import IRelationTool -from cpsskins.setup.interfaces import IType -from cpsskins.utils import getThemeManager from cpsskins.ontology import IFormatPredicate +from cpsskins.setup.interfaces import IType +from cpsskins.utils import getThemeManager, getRelationStorage class Presentable(object): """This adapter makes elements presentable, i.e. displayable and formattable @@ -79,7 +78,7 @@ raise ValueError("Must specify a destination perspective") context = self.context - reltool = IRelationTool(context) + relations = getRelationStorage(context) displayable = IDisplayable(context) default_display = displayable.getDisplay() @@ -87,8 +86,8 @@ displayable.setDisplay(display=display, perspective=perspective) formattable = IFormattable(display) - for r in reltool.search(first=default_display, predicate=hasFormat): - rel = reltool.get(r) + for r in relations.search(first=default_display, predicate=hasFormat): + rel = relations.get(r) format = rel.second formattable.setFormat(format) @@ -106,7 +105,7 @@ raise ValueError("Must specify a perspective.") context = self.context - reltool = IRelationTool(context) + relations = getRelationStorage(context) displayable = IDisplayable(context) display = displayable.getDisplay(perspective) @@ -116,8 +115,8 @@ format = formattable.cloneFormat(current_format) predicate = getUtility(IFormatPredicate, name).predicate - relations = reltool.search(first=display, predicate=predicate) - reltool.remove(relations) + old_relations = relations.search(first=display, predicate=predicate) + relations.remove(old_relations) formattable.setFormat(format) @@ -128,7 +127,7 @@ raise ValueError("Must specify a perspective.") context = self.context - reltool = IRelationTool(context) + relations = getRelationStorage(context) display = IDisplayable(context).getDisplay(perspective) default_display = IDisplayable(context).getDisplay() @@ -142,7 +141,7 @@ associated to the element in various perspectives. """ object = self.context - reltool = IRelationTool(object) + relations = getRelationStorage(object) tmutil = getThemeManager(object) presentations = {} @@ -157,10 +156,10 @@ format_names = [] # override initial values - for r in reltool.search(first=object, predicate=hasDisplay) \ - + reltool.search(first=object, + for r in relations.search(first=object, predicate=hasDisplay) \ + + relations.search(first=object, predicate=hasDisplayFromPerspective): - rel = reltool.get(r) + rel = relations.get(r) display = rel.second formattable = IFormattable(display) perspective = len(rel) == 3 and rel.third or None @@ -177,7 +176,8 @@ customizable = False if perspective is not None: - used_by = reltool.search(second=format, predicate=hasFormat) + used_by = relations.search(second=format, + predicate=hasFormat) customizable = len(used_by) > 1 format_info['customizable'] = customizable format_info['effective'] = not customizable Modified: cpsskins/branches/paris-sprint-2006/relations/configure.zcml ============================================================================== --- cpsskins/branches/paris-sprint-2006/relations/configure.zcml (original) +++ cpsskins/branches/paris-sprint-2006/relations/configure.zcml Tue Jun 6 11:24:25 2006 @@ -101,15 +101,6 @@ /> - <!-- Relation tool --> - - <adapter - for="*" - provides="cpsskins.relations.interfaces.IRelationTool" - factory="cpsskins.relations.tool.RelationTool" - /> - - <!-- Factories --> <utility name="cpsskins.relation.monad" Modified: cpsskins/branches/paris-sprint-2006/tests/setup.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/tests/setup.py (original) +++ cpsskins/branches/paris-sprint-2006/tests/setup.py Tue Jun 6 11:24:25 2006 @@ -33,9 +33,7 @@ from cpsskins.elements.interfaces import IElement, IDisplay from cpsskins.perspectives import perspective from cpsskins.perspectives.interfaces import IPerspective -from cpsskins.relations.interfaces import IRelationTool from cpsskins.relations.interfaces import IRelatable -from cpsskins.relations.tool import RelationTool from cpsskins.setup.adapters import Type, Identifiable from cpsskins.setup.interfaces import IType, IIdentifiable, IResourceManager from cpsskins.setup.interfaces import IPreset @@ -51,7 +49,6 @@ # adapters gsm.registerAdapter(Formattable, (IDisplay,), IPathAdapter, 'formattable') gsm.registerAdapter(Displayable, (IElement,), IPathAdapter, 'displayable') - gsm.registerAdapter(RelationTool, (IElement,), IRelationTool) gsm.registerAdapter(Relatable, (IElement,), IRelatable) gsm.registerAdapter(Identifiable, (IElement,), IIdentifiable) gsm.registerAdapter(Identifiable, (IPreset,), IIdentifiable) Modified: cpsskins/branches/paris-sprint-2006/tests/test_relations.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/tests/test_relations.py (original) +++ cpsskins/branches/paris-sprint-2006/tests/test_relations.py Tue Jun 6 11:24:25 2006 @@ -25,7 +25,6 @@ return unittest.TestSuite(( DocTestSuite('cpsskins.relations.relations'), DocTestSuite('cpsskins.relations.predicates'), - DocTestSuite('cpsskins.relations.tool'), )) if __name__ == '__main__': Modified: cpsskins/branches/paris-sprint-2006/thememanager.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/thememanager.py (original) +++ cpsskins/branches/paris-sprint-2006/thememanager.py Tue Jun 6 11:24:25 2006 @@ -35,7 +35,6 @@ from cpsskins.perspectives import Perspective from cpsskins.perspectives.interfaces import IPerspective from cpsskins.relations import MonadicRelation -from cpsskins.relations.interfaces import IRelationTool from cpsskins.setup.interfaces import IResourceManager, IResource from cpsskins.setup.presets import Presets, IPresets from cpsskins.storage.displays import DisplayStorage, IDisplayStorage @@ -334,17 +333,17 @@ def removeDisplays(self, object): """Remove the displays of a given element """ - reltool = IRelationTool(object) - display_relations = reltool.search(first=object, predicate=hasDisplay) + relations = self.getRelationStorage() + display_relations = relations.search(first=object, predicate=hasDisplay) # Physically remove the displays for rel in display_relations: - display = reltool.get(rel).second + display = relations.get(rel).second container = getParent(display) del container[getName(display)] # Remove the relation - reltool.remove(display_relations) + relations.remove(display_relations) ################################################################### # Formats @@ -359,9 +358,9 @@ del container[getName(format)] # Remove the relation - reltool = IRelationTool(object) - relations = reltool.search(first=object, predicate=hasFormat) - reltool.remove(relations) + relations = self.getRelationStorage() + format_relations = relations.search(first=object, predicate=hasFormat) + relations.remove(format_relations) ################################################################### # Perspectives Modified: cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py (original) +++ cpsskins/branches/paris-sprint-2006/ui/screens/elementeditor/views.py Tue Jun 6 11:24:25 2006 @@ -28,13 +28,12 @@ from cpsskins.elements.interfaces import IDisplay, IFormat from cpsskins.elements.interfaces import IDisplayable, IFormattable from cpsskins.relations import DyadicRelation -from cpsskins.relations.interfaces import IRelationTool from cpsskins.setup.interfaces import IType, IIdentifiable from cpsskins.setup.interfaces import IResourceManager, IResource, IPreset from cpsskins.setup.io import importSite, exportSite from cpsskins.setup.snapshot import Snapshot from cpsskins.storage.interfaces import IStorage -from cpsskins.utils import getThemeManager +from cpsskins.utils import getThemeManager, getRelationStorage class Form(object): """An edit form for elements. @@ -191,15 +190,15 @@ raise TypeError("The resource must be a format.") # remove the existing display <--> format relation - reltool = IRelationTool(context) + relations = getRelationStorage(context) predicate = resource.predicate - old_rel = reltool.search(first=context, predicate=predicate) - reltool.remove(old_rel) + old_rel = relations.search(first=context, predicate=predicate) + relations.remove(old_rel) # create a new display <--> preset relation relation = DyadicRelation(first=context, second=preset, predicate=predicate) - reltool.add(relation) + relations.add(relation) def stopUsingPreset(self, uri=u''): """Stop using a preset referred to by its URI @@ -222,17 +221,17 @@ resource = IResource(preset).getResource() # remove the old display <-> preset relation - reltool = IRelationTool(context) + relations = getRelationStorage(context) predicate = resource.predicate - old_rel = reltool.search(first=context, predicate=predicate) - reltool.remove(old_rel) + old_rel = relations.search(first=context, predicate=predicate) + relations.remove(old_rel) format = locationCopy(removeSecurityProxy(resource)) formats.add(format) relation = DyadicRelation(first=context, second=format, predicate=predicate) - reltool.add(relation) + relations.add(relation) ### Sites ######################################################### Modified: cpsskins/branches/paris-sprint-2006/utils.py ============================================================================== --- cpsskins/branches/paris-sprint-2006/utils.py (original) +++ cpsskins/branches/paris-sprint-2006/utils.py Tue Jun 6 11:24:25 2006 @@ -51,6 +51,9 @@ raise ValueError("No theme management folder was found in this context.") +def getRelationStorage(context=None, name=u''): + return getThemeManager(context, name).getRelationStorage() + def addThemeSkeleton(context): # for testing purposes from cpsskins.elements.interfaces import IDisplayable, IFormattable -- http://lists.nuxeo.com/mailman/listinfo/z3lab-checkins