
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@2935 fd906abe-77d9-0310-91a1-e0d9ade77398
78 lines
2.4 KiB
Text
Executable file
78 lines
2.4 KiB
Text
Executable file
===============================================================
|
|
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
|
|
<loops.rest.common.ConceptView object at ...>
|
|
>>> 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()
|
|
|