示例#1
0
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