class Container(containers.DeclarativeContainer): config = providers.Configuration() session = providers.Resource( boto3.session.Session, aws_access_key_id=config.aws_access_key_id, aws_secret_access_key=config.aws_secret_access_key, aws_session_token=config.aws_session_token, ) s3_client = providers.Resource( session.provided.client.call(), service_name='s3', ) sqs_client = providers.Resource( providers.MethodCaller(session.provided.client), # Alternative syntax service_name='sqs', ) service1 = providers.Factory( Service, s3_client=s3_client, sqs_client=sqs_client, ) service2 = providers.Factory( Service, s3_client=session.provided.client.call( service_name='s3'), # Alternative inline syntax sqs_client=session.provided.client.call( service_name='sqs'), # Alternative inline syntax )
class Container(containers.DeclarativeContainer): service = providers.Factory( dict, resource1=providers.Resource(_init1), resource2=providers.Resource(_init2), )
def test_deepcopy_from_memo(): provider = providers.Resource(init_fn) provider_copy_memo = providers.Resource(init_fn) provider_copy = providers.deepcopy( provider, memo={id(provider): provider_copy_memo}, ) assert provider_copy is provider_copy_memo
class Container(containers.DeclarativeContainer): config = providers.Configuration() db_connection = providers.Resource( init_db_connection, db_url=config.db_url, ) user_session = providers.Resource(init_user_session, db=db_connection)
def test_deepcopy_from_memo(self): provider = providers.Resource(init_fn) provider_copy_memo = providers.Resource(init_fn) provider_copy = providers.deepcopy( provider, memo={id(provider): provider_copy_memo}, ) self.assertIs(provider_copy, provider_copy_memo)
def test_traverse_overridden(self): provider1 = providers.Resource(list) provider2 = providers.Resource(tuple) provider = providers.Resource(dict, 'foo') provider.override(provider1) provider.override(provider2) all_providers = list(provider.traverse()) self.assertEqual(len(all_providers), 2) self.assertIn(provider1, all_providers) self.assertIn(provider2, all_providers)
def test_traverse_overridden(): provider1 = providers.Resource(list) provider2 = providers.Resource(tuple) provider = providers.Resource(dict, "foo") provider.override(provider1) provider.override(provider2) all_providers = list(provider.traverse()) assert len(all_providers) == 2 assert provider1 in all_providers assert provider2 in all_providers
def test_call_overridden(self): provider = providers.Resource(init_fn, 1) overriding_provider1 = providers.Resource(init_fn, 2) overriding_provider2 = providers.Resource(init_fn, 3) provider.override(overriding_provider1) provider.override(overriding_provider2) instance1 = provider() instance2 = provider() self.assertIs(instance1, instance2) self.assertEqual(instance1, ((3,), {})) self.assertEqual(instance2, ((3,), {}))
class ContainerWithSingletons(containers.DeclarativeContainer): resource1 = providers.Resource(init_resource, providers.Object(RESOURCE1)) resource2 = providers.Resource(init_resource, providers.Object(RESOURCE2)) client = providers.Singleton( Client, resource1=resource1, resource2=resource2, ) service = providers.Singleton( Service, client=client, )
def test_call_overridden(): provider = providers.Resource(init_fn, 1) overriding_provider1 = providers.Resource(init_fn, 2) overriding_provider2 = providers.Resource(init_fn, 3) provider.override(overriding_provider1) provider.override(overriding_provider2) instance1 = provider() instance2 = provider() assert instance1 is instance2 assert instance1 == ((3, ), {}) assert instance2 == ((3, ), {})
class Container(containers.DeclarativeContainer): resource1 = providers.Resource(init_resource, providers.Object(RESOURCE1)) resource2 = providers.Resource(init_resource, providers.Object(RESOURCE2)) client = providers.Factory( Client, resource1=resource1, resource2=resource2, ) service = providers.Factory( Service, client=client, )
class Container(containers.DeclarativeContainer): config = providers.Configuration() thread_pool = providers.Resource( init_thread_pool, max_workers=config.max_workers, ) logging = providers.Resource( logging.basicConfig, level=logging.INFO, stream=sys.stdout, )
class Container(containers.DeclarativeContainer): resource1 = providers.Resource( _resource, name="r1", ) resource2 = providers.Resource( _resource, name="r2", r1=resource1, ) resource3 = providers.Resource( _resource, name="r3", r2=resource2, )
class Container(containers.DeclarativeContainer): config = providers.Configuration() service = providers.Factory( Service, database=providers.Resource( init_database, url=config.database_url, ), cache=providers.Resource( init_cache, hosts=config.cache_hosts, ), )
class Container(containers.DeclarativeContainer): config = providers.Configuration() active_url = None active_token = None log = providers.Resource( logging.config.fileConfig, fname="logging.ini", ) if config.application.environment: active_url = config.uat.url active_token = config.uat.token else: # Set as per Environment url = None token = None client_session = providers.Singleton(Session) b2c2_client = providers.Factory( B2C2Client, session=client_session, url=active_url, token=active_token, )
def test_init_class(self): class TestResource(resources.Resource): init_counter = 0 shutdown_counter = 0 def init(self): self.__class__.init_counter += 1 def shutdown(self, _): self.__class__.shutdown_counter += 1 provider = providers.Resource(TestResource) result1 = provider() self.assertIsNone(result1) self.assertEqual(TestResource.init_counter, 1) self.assertEqual(TestResource.shutdown_counter, 0) provider.shutdown() self.assertEqual(TestResource.init_counter, 1) self.assertEqual(TestResource.shutdown_counter, 1) result2 = provider() self.assertIsNone(result2) self.assertEqual(TestResource.init_counter, 2) self.assertEqual(TestResource.shutdown_counter, 1) provider.shutdown() self.assertEqual(TestResource.init_counter, 2) self.assertEqual(TestResource.shutdown_counter, 2)
class Containers(containers.DeclarativeContainer): config = providers.Configuration() logging = providers.Resource( logging.config.fileConfig, fname=os.path.join(os.getcwd(), "logging.ini") ) # declare objects initialize trigger_factory = providers.Factory(TriggerFactory) sched_event_listener = providers.Factory(SchedulerEventListener) scheduler = providers.Singleton( ScheduleManager, config = config.sched_config, event_listener = sched_event_listener ) custom_handler = providers.Singleton( ExampleSubscribeHandler, scheduler = scheduler, trigger_fac = trigger_factory ) remote_service = providers.Singleton( SubscribeRpcService, scheduler = scheduler, subscribe_handler = custom_handler )
def test_init_generator(): def _init(): _init.init_counter += 1 yield _init.shutdown_counter += 1 _init.init_counter = 0 _init.shutdown_counter = 0 provider = providers.Resource(_init) result1 = provider() assert result1 is None assert _init.init_counter == 1 assert _init.shutdown_counter == 0 provider.shutdown() assert _init.init_counter == 1 assert _init.shutdown_counter == 1 result2 = provider() assert result2 is None assert _init.init_counter == 2 assert _init.shutdown_counter == 1 provider.shutdown() assert _init.init_counter == 2 assert _init.shutdown_counter == 2
class ContainerWithAttributes(containers.DeclarativeContainer): resource1 = providers.Resource(init_resource, providers.Object(RESOURCE1)) resource2 = providers.Resource(init_resource, providers.Object(RESOURCE2)) client = providers.Factory( Client, resource1, resource2=None, ) client.add_attributes(resource2=resource2) service = providers.Factory( Service, client=None, ) service.add_attributes(client=client)
def test_init_class(): class TestResource(resources.Resource): init_counter = 0 shutdown_counter = 0 def init(self): self.__class__.init_counter += 1 def shutdown(self, _): self.__class__.shutdown_counter += 1 provider = providers.Resource(TestResource) result1 = provider() assert result1 is None assert TestResource.init_counter == 1 assert TestResource.shutdown_counter == 0 provider.shutdown() assert TestResource.init_counter == 1 assert TestResource.shutdown_counter == 1 result2 = provider() assert result2 is None assert TestResource.init_counter == 2 assert TestResource.shutdown_counter == 1 provider.shutdown() assert TestResource.init_counter == 2 assert TestResource.shutdown_counter == 2
async def test_init_async_generator(): resource = object() async def _init(): await asyncio.sleep(0.001) _init.init_counter += 1 yield resource await asyncio.sleep(0.001) _init.shutdown_counter += 1 _init.init_counter = 0 _init.shutdown_counter = 0 provider = providers.Resource(_init) result1 = await provider() assert result1 is resource assert _init.init_counter == 1 assert _init.shutdown_counter == 0 await provider.shutdown() assert _init.init_counter == 1 assert _init.shutdown_counter == 1 result2 = await provider() assert result2 is resource assert _init.init_counter == 2 assert _init.shutdown_counter == 1 await provider.shutdown() assert _init.init_counter == 2 assert _init.shutdown_counter == 2
def test_traverse_types_filtering(self): provider1 = providers.Resource(dict) provider2 = providers.Resource(dict) provider3 = providers.Provider() provider = providers.Provider() provider.override(provider1) provider.override(provider2) provider.override(provider3) all_providers = list(provider.traverse(types=[providers.Resource])) self.assertEqual(len(all_providers), 2) self.assertIn(provider1, all_providers) self.assertIn(provider2, all_providers)
def test_init_and_shutdown_methods(self): async def _init(): await asyncio.sleep(0.001) _init.init_counter += 1 yield await asyncio.sleep(0.001) _init.shutdown_counter += 1 _init.init_counter = 0 _init.shutdown_counter = 0 provider = providers.Resource(_init) self._run(provider.init()) self.assertEqual(_init.init_counter, 1) self.assertEqual(_init.shutdown_counter, 0) self._run(provider.shutdown()) self.assertEqual(_init.init_counter, 1) self.assertEqual(_init.shutdown_counter, 1) self._run(provider.init()) self.assertEqual(_init.init_counter, 2) self.assertEqual(_init.shutdown_counter, 1) self._run(provider.shutdown()) self.assertEqual(_init.init_counter, 2) self.assertEqual(_init.shutdown_counter, 2)
class Container(containers.DeclarativeContainer): config = providers.Configuration(yaml_files=["config.yml"]) logging = providers.Resource( logging.basicConfig, stream=sys.stdout, level=config.log.level, format=config.log.format, ) http_client = providers.Factory(http.HttpClient) example_monitor = providers.Factory( monitors.HttpMonitor, http_client=http_client, options=config.monitors.example, ) httpbin_monitor = providers.Factory( monitors.HttpMonitor, http_client=http_client, options=config.monitors.httpbin, ) dispatcher = providers.Factory( dispatcher.Dispatcher, monitors=providers.List( example_monitor, httpbin_monitor, ), )
def test_init_async_generator(self): resource = object() async def _init(): await asyncio.sleep(0.001) _init.init_counter += 1 yield resource await asyncio.sleep(0.001) _init.shutdown_counter += 1 _init.init_counter = 0 _init.shutdown_counter = 0 provider = providers.Resource(_init) result1 = self._run(provider()) self.assertIs(result1, resource) self.assertEqual(_init.init_counter, 1) self.assertEqual(_init.shutdown_counter, 0) self._run(provider.shutdown()) self.assertEqual(_init.init_counter, 1) self.assertEqual(_init.shutdown_counter, 1) result2 = self._run(provider()) self.assertIs(result2, resource) self.assertEqual(_init.init_counter, 2) self.assertEqual(_init.shutdown_counter, 1) self._run(provider.shutdown()) self.assertEqual(_init.init_counter, 2) self.assertEqual(_init.shutdown_counter, 2)
async def test_init_and_shutdown_methods(): async def _init(): await asyncio.sleep(0.001) _init.init_counter += 1 yield await asyncio.sleep(0.001) _init.shutdown_counter += 1 _init.init_counter = 0 _init.shutdown_counter = 0 provider = providers.Resource(_init) await provider.init() assert _init.init_counter == 1 assert _init.shutdown_counter == 0 await provider.shutdown() assert _init.init_counter == 1 assert _init.shutdown_counter == 1 await provider.init() assert _init.init_counter == 2 assert _init.shutdown_counter == 1 await provider.shutdown() assert _init.init_counter == 2 assert _init.shutdown_counter == 2
def test_init_generator(self): def _init(): _init.init_counter += 1 yield _init.shutdown_counter += 1 _init.init_counter = 0 _init.shutdown_counter = 0 provider = providers.Resource(_init) result1 = provider() self.assertIsNone(result1) self.assertEqual(_init.init_counter, 1) self.assertEqual(_init.shutdown_counter, 0) provider.shutdown() self.assertEqual(_init.init_counter, 1) self.assertEqual(_init.shutdown_counter, 1) result2 = provider() self.assertIsNone(result2) self.assertEqual(_init.init_counter, 2) self.assertEqual(_init.shutdown_counter, 1) provider.shutdown() self.assertEqual(_init.init_counter, 2) self.assertEqual(_init.shutdown_counter, 2)
class Container(containers.DeclarativeContainer): config = providers.Configuration() logging = providers.Resource( logging.basicConfig, stream=sys.stdout, level=config.log.level, format=config.log.format, ) coloredlogs.install() sessions = providers.Singleton(session_storage.SessionStorage, config.telegram) configurator = providers.Singleton(Configurator, sessions) mqtt = providers.Singleton(Mosquitto, configurator, sessions, config.mqtt) startup = providers.Singleton(Startup, sessions, mqtt) dispatcher = providers.Factory(dispatcher.Dispatcher, dispatchables=providers.List( mqtt, startup, ))
def test_traverse_types_filtering(): provider1 = providers.Resource(dict) provider2 = providers.Resource(dict) provider3 = providers.Provider() provider = providers.Provider() provider.override(provider1) provider.override(provider2) provider.override(provider3) all_providers = list(provider.traverse(types=[providers.Resource])) assert len(all_providers) == 2 assert provider1 in all_providers assert provider2 in all_providers
class Container(containers.DeclarativeContainer): resource = providers.Resource(init_async_resource) service = providers.Factory( Service, resource=resource, )