示例#1
0
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)
示例#5
0
    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)
示例#7
0
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
示例#8
0
    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,), {}))
示例#9
0
        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, ), {})
示例#11
0
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,
        ),
    )
示例#15
0
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,
    )
示例#16
0
    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)
示例#17
0
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
示例#19
0
        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
示例#21
0
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)
示例#23
0
    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,
        ),
    )
示例#25
0
    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)
示例#26
0
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
示例#27
0
    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)
示例#28
0
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,
                                   ))
示例#29
0
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
示例#30
0
文件: async.py 项目: imfht/flaskapps
class Container(containers.DeclarativeContainer):

    resource = providers.Resource(init_async_resource)

    service = providers.Factory(
        Service,
        resource=resource,
    )