def test_persistent_registry(): db = DB(DemoStorage()) tm = transaction.TransactionManager() registry = PersistentRegistry() siteobj = Site() with Connection(db, transaction_manager=tm) as conn: with tm: conn.root()['site'] = siteobj siteobj.setLocalRegistry(registry) registry.register((Interface,), Interface, 'dummy2', dummy2) with Connection(db) as conn: site = conn.root()['site'] reg = site.getLocalRegistry() assert reg is registry assert reg.lookup((Interface,), Interface, 'dummy2') == dummy2 with Connection(db) as conn: site = conn.root()['site'] reg = site.getLocalRegistry() assert Interface.component((Interface,), name='dummy') == dummy with pytest.raises(ComponentLookupError): Interface.component((Interface,), name='dummy2') with LookupContext(reg): assert Interface.component((Interface,), name='dummy2') == dummy2 with pytest.raises(ComponentLookupError): Interface.component((Interface,), name='dummy') with pytest.raises(ComponentLookupError): Interface.component((Interface,), name='dummy2') chain = ChainedLookup() chain.add(implicit.lookup) implicit.lookup = chain with Connection(db) as conn: site = conn.root()['site'] reg = site.getLocalRegistry() with LookupChainLink(reg): assert Interface.component((Interface,), name='dummy2') == dummy2 assert Interface.component((Interface,), name='dummy') == dummy with pytest.raises(ComponentLookupError): Interface.component((Interface,), name='dummy2') link = Registry() link.register((Interface,), Interface, 'dummy', dummy3) with Connection(db) as conn: site = conn.root()['site'] reg = site.getLocalRegistry() with LookupChainLink(reg): with LookupChainLink(link): assert Interface.component((Interface,), name='dummy2') == dummy2 assert Interface.component((Interface,), name='dummy') == dummy3 with LookupContext(link): with pytest.raises(ComponentLookupError): assert Interface.component((Interface,), name='dummy2') == dummy2 assert Interface.component((Interface,), name='dummy') == dummy3 with pytest.raises(KeyError): with LookupChainLink(link): pass assert Interface.component((Interface,), name='dummy2') == dummy2 assert Interface.component((Interface,), name='dummy') == dummy3 assert Interface.component((Interface,), name='dummy2') == dummy2 assert Interface.component((Interface,), name='dummy') == dummy