=============================================================== loops.xmlrpc =============================================================== ($Id$) Let's do some basic set up >>> from zope.app.testing.setup import placefulSetUp, placefulTearDown >>> site = placefulSetUp(True) >>> from zope import component, interface >>> from zope.publisher.browser import TestRequest and setup a simple loops site with a concept manager and some concepts (with all the type machinery, what in real life is done via standard ZCML setup): >>> from cybertools.relation.registry import DummyRelationRegistry >>> component.provideUtility(DummyRelationRegistry()) >>> from cybertools.relation.tests import IntIdsStub >>> component.provideUtility(IntIdsStub()) >>> from loops.type import ConceptType, TypeConcept >>> component.provideAdapter(ConceptType) >>> component.provideAdapter(TypeConcept) >>> from loops.base import Loops >>> loopsRoot = site['loops'] = Loops() >>> from loops.setup import SetupManager >>> setup = SetupManager(loopsRoot) >>> concepts, resources, views = setup.setup() Let's look what setup has provided us with: >>> sorted(concepts) [u'domain', u'file', u'hasType', u'note', u'predicate', u'standard', u'textdocument', u'type'] loops Traversal =============== The loops root object provides a traversal mechanism that goes beyond the standard container traversal. One can directly access objects by their unique id or via a symbolic name (like `startObject`); usually the traverser returns a REST view of the object. >>> from loops.rest.traversal import LoopsTraverser >>> from zope.publisher.interfaces.browser import IBrowserPublisher >>> component.provideAdapter(LoopsTraverser, provides=IBrowserPublisher) >>> from loops.rest.common import ConceptView >>> component.provideAdapter(ConceptView) Navigation typically starts at a start object, which by default ist the domain type concept (or the top-level type concept, if there is no domain type): >>> request = TestRequest() >>> obj = LoopsTraverser(loopsRoot, request).publishTraverse(request, 'startObject') >>> obj >>> obj.context.title u'Domain' The traversal adapter returns a view that when called renders the representation of its context object: >>> obj() 'Hello REST' Fin de partie ============= >>> placefulTearDown()