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)
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)
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))
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) )
def setUp(self): self.__arguments_validator = ArgumentsValidator()
def __init__(self): self.__inspected_arguments_resolver = InspectedArgumentsResolver() self.__arguments_validator = ArgumentsValidator()
def __init__(self): self.__inspectedArgumentsResolver = InspectedArgumentsResolver() self.__argumentsValidator = ArgumentsValidator() self.__argumentListResolver = ArgumentListResolver() self.__namedArgumentsResolver = NamedArgumentsResolver()