=============================================================== loops - Linked Objects for Organization and Processing Services =============================================================== Management of configuration settings and preferences. ($Id$) Setting up a loops Site and Utilities ===================================== Let's do some basic set up >>> from zope import component, interface >>> from zope.traversing.api import getName >>> from zope.app.testing.setup import placefulSetUp, placefulTearDown >>> site = placefulSetUp(True) and build a simple loops site with a concept manager and some concepts (with a relation registry, a catalog, and all the type machinery - what in real life is done via standard ZCML setup or via local utility configuration): >>> from loops.integrator.testsetup import TestSite >>> t = TestSite(site) >>> concepts, resources, views = t.setup() >>> loopsRoot = concepts.getLoopsRoot() Options Adapters ================ Global and site options ----------------------- >>> from cybertools.meta.interfaces import IOptions >>> opt = IOptions(loopsRoot) >>> opt >>> str(opt) '' We now use the loops root object's options field to define some options. >>> loopsRoot.options = ['useVersioning', 'organize.tracking:changes, access'] >>> opt = IOptions(loopsRoot) >>> opt.organize.tracking ['changes', 'access'] >>> opt.useVersioning True >>> print opt organize(tracking=['changes', 'access']) useVersioning=True If we query an option that is not defined on the site level we get a dummy element that corresponds to False. >>> opt.i18n.languages >>> bool(opt.i18n.languages) False We can use a utility for providing global settings. >>> from cybertools.meta.interfaces import IOptions >>> globalOpt = component.getUtility(IOptions) >>> globalOpt.i18n.languages = ['en', 'de'] >>> globalOpt.i18n.languages ['en', 'de'] If we call the site options with the key we want to query the global options will be used as a fallback. >>> opt('i18n.languages') ['en', 'de'] User options (preferences) -------------------------- Type- and object-based settings ------------------------------- Configurator User Interface =========================== Fin de partie ============= >>> placefulTearDown()