コード例 #1
0
class ServiceResolver:
    def __init__(self):
        self.__inspectedArgumentsResolver = InspectedArgumentsResolver()
        self.__argumentsValidator = ArgumentsValidator()
        self.__argumentListResolver = ArgumentListResolver()
        self.__namedArgumentsResolver = NamedArgumentsResolver()

    def resolve(self, service: Service, services2Classes: dict,
                aliases2Services: dict) -> ResolvedService:
        if service.usesFactory():
            factoryClass = services2Classes[service.factoryService.serviceName]
            inspectedArguments = self.__inspectedArgumentsResolver.resolveMethod(
                factoryClass, service.factoryMethod)
        else:
            inspectedArguments = self.__inspectedArgumentsResolver.resolveConstructor(
                service.class_)

        if service.hasNamedArguments():
            resolvedArguments = self.__namedArgumentsResolver.resolve(
                service.arguments, inspectedArguments, service.name)
        else:
            resolvedArguments = self.__argumentListResolver.resolve(
                service.arguments, inspectedArguments, service.name)

        if not service.usesFactory():
            self.__argumentsValidator.validate(service.name, resolvedArguments,
                                               services2Classes,
                                               aliases2Services)

        return ResolvedService(service, resolvedArguments)
コード例 #2
0
class ServiceResolver:
    def __init__(self):
        self.__inspected_arguments_resolver = InspectedArgumentsResolver()
        self.__arguments_validator = ArgumentsValidator()
        self.__argument_list_resolver = ArgumentListResolver()
        self.__named_arguments_resolver = NamedArgumentsResolver()

    def resolve(self, service: Service, services2_classes: dict,
                aliases2_services: dict) -> ResolvedService:
        if service.uses_factory():
            if service.factory_service.service_name not in services2_classes:
                raise Exception(
                    f"Factory service {service.factory_service.service_name} not found"
                )

            factory_class = services2_classes[
                service.factory_service.service_name]
            inspected_arguments = self.__inspected_arguments_resolver.resolve_method(
                factory_class, service.factory_method)
        else:
            inspected_arguments = self.__inspected_arguments_resolver.resolve_constructor(
                service.class_)

        if service.has_named_arguments():
            resolved_arguments = self.__named_arguments_resolver.resolve(
                service.arguments, inspected_arguments, service.name)
        else:
            resolved_arguments = self.__argument_list_resolver.resolve(
                service.arguments, inspected_arguments, service.name)

        if not service.uses_factory():
            self.__arguments_validator.validate(service.name,
                                                resolved_arguments,
                                                services2_classes,
                                                aliases2_services)

        return ResolvedService(service, resolved_arguments)
コード例 #3
0
class ArgumentsValidatorTest(unittest.TestCase):
    def setUp(self):
        self.__argumentsValidator = ArgumentsValidator()

    def test_basic(self):
        self.__argumentsValidator.validate(
            'injecta.mocks.Bar',
            [
                ResolvedArgument(
                    'name', PrimitiveArgument('Jiri Koutny'),
                    InspectedArgument('name', DType('builtins', 'str')))
            ],
            {},
            {},
        )

        self.assertTrue(True)

    def test_exceptionStringForObject(self):
        with self.assertRaises(Exception) as error:
            self.__argumentsValidator.validate(
                'injecta.mocks.Foo',
                [
                    ResolvedArgument(
                        'bar', PrimitiveArgument('Jiri Koutny'),
                        InspectedArgument('bar',
                                          DType('injecta.mocks.Bar', 'Bar')))
                ],
                {},
                {},
            )

        self.assertEqual(
            'Expected dtype "injecta.mocks.Bar.Bar", got "str" (argument "bar", service "injecta.mocks.Foo")',
            str(error.exception))

    def test_exceptionObjectForString(self):
        with self.assertRaises(Exception) as error:
            self.__argumentsValidator.validate(
                'injecta.mocks.Bar',
                [
                    ResolvedArgument(
                        'name', ServiceArgument('injecta.mocks.Empty'),
                        InspectedArgument('name', DType('builtins', 'str')))
                ],
                {'injecta.mocks.Empty': DType('injecta.mocks.Empty', 'Empty')},
                {},
            )

        self.assertEqual(
            'Expected dtype "str", got "injecta.mocks.Empty.Empty" (argument "name", service "injecta.mocks.Bar")',
            str(error.exception))
コード例 #4
0
class ArgumentsValidatorTest(unittest.TestCase):
    def setUp(self):
        self.__arguments_validator = ArgumentsValidator()

    def test_basic(self):
        self.__arguments_validator.validate(
            "injecta.mocks.Bar",
            [ResolvedArgument("name", PrimitiveArgument("Jiri Koutny"), InspectedArgument("name", DType("builtins", "str")))],
            {},
            {},
        )

        self.assertTrue(True)

    def test_exception_string_for_object(self):
        with self.assertRaises(Exception) as error:
            self.__arguments_validator.validate(
                "injecta.mocks.Foo",
                [ResolvedArgument("bar", PrimitiveArgument("Jiri Koutny"), InspectedArgument("bar", DType("injecta.mocks.Bar", "Bar")))],
                {},
                {},
            )

        self.assertEqual(
            'Expected dtype "injecta.mocks.Bar.Bar", got "str" (argument "bar", service "injecta.mocks.Foo")', str(error.exception)
        )

    def test_exception_object_for_string(self):
        with self.assertRaises(Exception) as error:
            self.__arguments_validator.validate(
                "injecta.mocks.Bar",
                [ResolvedArgument("name", ServiceArgument("injecta.mocks.Empty"), InspectedArgument("name", DType("builtins", "str")))],
                {"injecta.mocks.Empty": DType("injecta.mocks.Empty", "Empty")},
                {},
            )

        self.assertEqual(
            'Expected dtype "str", got "injecta.mocks.Empty.Empty" (argument "name", service "injecta.mocks.Bar")', str(error.exception)
        )
コード例 #5
0
 def setUp(self):
     self.__arguments_validator = ArgumentsValidator()
コード例 #6
0
 def __init__(self):
     self.__inspected_arguments_resolver = InspectedArgumentsResolver()
     self.__arguments_validator = ArgumentsValidator()
コード例 #7
0
 def __init__(self):
     self.__inspectedArgumentsResolver = InspectedArgumentsResolver()
     self.__argumentsValidator = ArgumentsValidator()
     self.__argumentListResolver = ArgumentListResolver()
     self.__namedArgumentsResolver = NamedArgumentsResolver()