========================================= Integrating objects from external systems ========================================= Integration of external sources. ($Id$) >>> from zope.app.testing.setup import placefulSetUp, placefulTearDown >>> site = placefulSetUp(True) Accessing Objects on a Remote BSCW Repository ============================================= During testing we do not access a remote repository but just a dummy (fake) repository for testing purposes. >>> from cybertools.integrator.tests.bscw import BSCWServer, sampleObjects >>> from cybertools.integrator.bscw import standardAttributes >>> server = BSCWServer(sampleObjects) >>> server.get_attributes('4', standardAttributes + ['containers'], 1, True) [{...'name': 'public'...}, [{...'name': 'Introduction'...}]] Access via read container and item/file proxies ----------------------------------------------- Let's first register the proxy factory utilities. >>> from zope import component >>> from cybertools.integrator.bscw import ContainerFactory, ItemFactory, FileFactory >>> component.provideUtility(ContainerFactory(), name='bscw') >>> component.provideUtility(ItemFactory(), name='bscw') >>> component.provideUtility(FileFactory(), name='bscw') We can now access the root object of the BSCW repository. >>> from cybertools.integrator.bscw import BSCWConnection >>> connection = BSCWConnection('http://localhost/bscw.cgi/4', ... server=server) >>> root = connection.getProxy() >>> root <...bscw.ReadContainer...> >>> sorted(root.items()) [('bs_5', <...bscw.ReadContainer object...>)] >>> root.address 'bs_4' >>> root.internalPath 'bs_4' >>> root.icon 'folder' >>> root.properties {...'name': 'public'...} >>> root.title 'public' >>> root.description 'Public Repository' >>> str(root.externalURLInfo) 'http://localhost/bscw.cgi/4' >>> list(root.parents) [] Let's also have a look at the item contained in the root object. >>> bs_5 = root['bs_5'] >>> data = server.get_attributes('bs_5', ... ['__class__', 'type', 'id', 'name', 'descr', 'url_link'], 1, True) >>> bs_5.items() [('bs_6', <...bscw.File ...>), ('bs_7', <...bscw.Item ...>)] >>> bs_5.address 'bs_5' >>> bs_5.internalPath 'bs_5' >>> bs_5.icon 'folder' >>> bs_5.properties {...'name': 'Introduction'...} >>> str(bs_5.externalURLInfo) 'http://localhost/bscw.cgi/5' >>> bs_5.properties['containers'] [{'name': 'public', '__id__': 'bs_4'}] >>> [p.address for p in bs_5.parents] ['bs_4'] >>> bs_6 = bs_5['bs_6'] >>> [p.address for p in bs_6.parents] ['bs_5', 'bs_4'] The BSCW Repository View ======================== >>> site['bscw'] = connection >>> bscwAccess = site['bscw'] >>> from cybertools.integrator.browser.bscw import BSCWView >>> from zope.publisher.browser import TestRequest >>> view = BSCWView(bscwAccess, TestRequest()) >>> view.baseUrl = 'http://localhost/bscw.cgi/' >>> view.baseId = '4' >>> items = list(view.content()) >>> items [<...bscw.ItemView...>] >>> items[0].url 'http://127.0.0.1/bscw?id=bs_5' >>> items[0].icon 'http://127.0.0.1/++resource++folder.png' >>> list(items[0].breadCrumbs) [{'url': 'http://127.0.0.1/bscw?id=bs_4', 'title': 'public'}, {'url': 'http://127.0.0.1/bscw?id=bs_5', 'title': 'Introduction'}] The top and the current level are not shown, otherwise we would get: [{'url': 'http://127.0.0.1/bscw?id=bs_4', 'title': 'public'}, {'url': 'http://127.0.0.1/bscw?id=bs_5', 'title': 'Introduction'}] Fin de partie ============= >>> placefulTearDown()