Exemple #1
0
 def setUp(self):
     self.__servicesPreparer = ServicesPreparer(
         SchemaValidator(),
         ServiceParser(
             ArgumentParser(),
             DTypeResolver(),
         )
     )
 def __init__(self):
     self.__classes2ServicesBuilder = Classes2ServicesBuilder()
     self.__servicesPreparer = ServicesPreparer(
         SchemaValidator(),
         ServiceParser(
             ArgumentParser(),
             DTypeResolver(),
         ))
     self.__servicesResolver = ServiceResolver()
     self.__parametersParser = ParametersParser()
     self.__tag2ServicesPreparer = Tag2ServicesPreparer()
     self.__defaultCompilerPasses = [
         YamlTagArgumentsCompilerPass(),
         AutowiringCompilerPass(ArgumentsAutowirer(ArgumentResolver())),
     ]
Exemple #3
0
class ServicesPreparerTest(unittest.TestCase):

    def setUp(self):
        self.__servicesPreparer = ServicesPreparer(
            SchemaValidator(),
            ServiceParser(
                ArgumentParser(),
                DTypeResolver(),
            )
        )

    def test_basic(self):
        rawServices = {
            'injecta.mocks.Bar.Bar': {
                'arguments': [
                    'Jiri Koutny'
                ]
            },
            'injecta.mocks.Foo.Foo': {
                'arguments': [
                    '@injecta.mocks.Bar.Bar'
                ]
            },
            'injecta.mocks.Bar.BarAlias': '@injecta.mocks.Bar.Bar',
        }

        expectedService1 = Service(
            'injecta.mocks.Bar.Bar',
            DType('injecta.mocks.Bar', 'Bar'),
            [
                PrimitiveArgument('Jiri Koutny'),
            ]
        )

        expectedService2 = Service(
            'injecta.mocks.Foo.Foo',
            DType('injecta.mocks.Foo', 'Foo'),
            [
                ServiceArgument('injecta.mocks.Bar.Bar'),
            ]
        )

        expectedAlias1 = ServiceAlias('injecta.mocks.Bar.BarAlias', 'injecta.mocks.Bar.Bar')

        services, aliases = self.__servicesPreparer.prepare(rawServices)

        self.assertEqual(expectedService1, services[0])
        self.assertEqual(expectedService2, services[1])
        self.assertEqual(expectedAlias1, aliases[0])
class ServicesPreparerTest(unittest.TestCase):
    def setUp(self):
        self.__services_preparer = ServicesPreparer(
            SchemaValidator(),
            ServiceParser(
                ArgumentParser(),
                DTypeResolver(),
            ),
        )

    def test_basic(self):
        raw_services = {
            "injecta.mocks.Bar.Bar": {"arguments": ["Jiri Koutny"]},
            "injecta.mocks.Foo.Foo": {"arguments": ["@injecta.mocks.Bar.Bar"]},
            "injecta.mocks.Bar.BarAlias": "@injecta.mocks.Bar.Bar",
        }

        expected_service1 = Service(
            "injecta.mocks.Bar.Bar",
            DType("injecta.mocks.Bar", "Bar"),
            [
                PrimitiveArgument("Jiri Koutny"),
            ],
        )

        expected_service2 = Service(
            "injecta.mocks.Foo.Foo",
            DType("injecta.mocks.Foo", "Foo"),
            [
                ServiceArgument("injecta.mocks.Bar.Bar"),
            ],
        )

        expected_alias1 = ServiceAlias("injecta.mocks.Bar.BarAlias", "injecta.mocks.Bar.Bar")

        services, aliases = self.__services_preparer.prepare(raw_services)

        self.assertEqual(expected_service1, services[0])
        self.assertEqual(expected_service2, services[1])
        self.assertEqual(expected_alias1, aliases[0])
Exemple #5
0
class ContainerBuilder:
    def __init__(self):
        self.__classes2_services_builder = Classes2ServicesBuilder()
        self.__services_preparer = ServicesPreparer(
            SchemaValidator(),
            ServiceParser(
                ArgumentParser(),
                DTypeResolver(),
            ),
        )
        self.__services_resolver = ServiceResolver()
        self.__parameters_parser = ParametersParser()
        self.__tag2_services_preparer = Tag2ServicesPreparer()
        self.__default_compiler_passes = [
            YamlTagArgumentsCompilerPass(),
            AutowiringCompilerPass(ArgumentsAutowirer(ArgumentResolver())),
        ]

    def build(self, raw_config: dict,
              hooks: Hooks = Hooks()) -> ContainerBuild:
        if "parameters" not in raw_config or raw_config["parameters"] is None:
            raw_config["parameters"] = dict()
        if "services" not in raw_config or raw_config["services"] is None:
            raw_config["services"] = dict()

        raw_config = hooks.start(raw_config)

        parameters = self.__parameters_parser.parse(
            raw_config["parameters"], hooks.get_custom_parameters())
        parameters = hooks.parameters_parsed(parameters)

        services, aliases = self.__services_preparer.prepare(
            raw_config["services"])
        services, aliases = hooks.services_prepared(services, aliases,
                                                    parameters)

        container_build = self._build(parameters, services, aliases)

        for compiler_pass in self.__default_compiler_passes:
            compiler_pass.process(container_build)

        hooks.container_build_ready(container_build)

        return container_build

    def _build(self, parameters: Box, services: List[Service],
               aliases: List[ServiceAlias]):
        aliases2_services = {
            service_alias.name: service_alias.aliased_service
            for service_alias in aliases
        }
        classes2_services = self.__classes2_services_builder.build(services)
        services2_classes = {
            service.name: service.class_
            for service in services
        }

        resolved_services: List[ResolvedService] = [
            self.__services_resolver.resolve(service, services2_classes,
                                             aliases2_services)
            for service in services
        ]

        tag2_services = self.__tag2_services_preparer.prepare(services)

        return ContainerBuild(parameters, resolved_services, classes2_services,
                              aliases2_services, tag2_services)