mirror of
https://github.com/ets-labs/python-dependency-injector.git
synced 2024-11-22 09:36:48 +03:00
Restrict repeatedly binding of catalog providers
This commit is contained in:
parent
5799b6ff33
commit
476e867dc9
|
@ -86,6 +86,11 @@ class CatalogMetaClass(type):
|
|||
cls.Bundle = mcs.bundle_cls_factory(cls)
|
||||
|
||||
for name, provider in six.iteritems(cls_providers):
|
||||
if provider.is_bound:
|
||||
raise Error('Provider {0} has been already bound to catalog'
|
||||
'{1} as "{2}"'.format(provider,
|
||||
provider.bind.catalog,
|
||||
provider.bind.name))
|
||||
provider.bind = ProviderBinding(cls, name)
|
||||
|
||||
return cls
|
||||
|
|
|
@ -71,6 +71,23 @@ class CatalogsInheritanceTests(unittest.TestCase):
|
|||
p32=CatalogC.p32))
|
||||
|
||||
|
||||
class CatalogProvidersBindingTests(unittest.TestCase):
|
||||
"""Catalog providers binding test cases."""
|
||||
|
||||
def test_provider_is_bound(self):
|
||||
"""Test that providers are bound to the catalogs."""
|
||||
self.assertIs(CatalogA.p11.bind.catalog, CatalogA)
|
||||
self.assertEquals(CatalogA.p11.bind.name, 'p11')
|
||||
|
||||
self.assertIs(CatalogA.p12.bind.catalog, CatalogA)
|
||||
self.assertEquals(CatalogA.p12.bind.name, 'p12')
|
||||
|
||||
def test_provider_rebinding(self):
|
||||
"""Test that provider could not be bound twice."""
|
||||
self.assertRaises(di.Error, type, 'TestCatalog', (di.AbstractCatalog,),
|
||||
dict(some_name=CatalogA.p11))
|
||||
|
||||
|
||||
class CatalogBundleTests(unittest.TestCase):
|
||||
"""Catalog bundle test cases."""
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user