Skip to content

Commit dafdace

Browse files
committed
Rename parameters in method signatures.
1 parent e84eddd commit dafdace

File tree

11 files changed

+154
-154
lines changed

11 files changed

+154
-154
lines changed

src/dependency_injection/container.py

Lines changed: 44 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,14 @@
1010

1111
class DependencyContainer(metaclass=SingletonMeta):
1212

13-
def __init__(self, name=None):
13+
def __init__(self, name: str=None):
1414
self.name = name if name is not None else DEFAULT_CONTAINER_NAME
1515
self._registrations = {}
1616
self._singleton_instances = {}
1717
self._scoped_instances = {}
1818

1919
@classmethod
20-
def get_instance(cls, name=None):
20+
def get_instance(cls, name: str=None):
2121
if name is None:
2222
name = DEFAULT_CONTAINER_NAME
2323

@@ -26,88 +26,88 @@ def get_instance(cls, name=None):
2626

2727
return cls._instances[(cls, name)]
2828

29-
def register_transient(self, interface, class_, constructor_args=None):
30-
if interface in self._registrations:
31-
raise ValueError(f"Dependency {interface} is already registered.")
32-
self._registrations[interface] = Registration(interface, class_, Scope.TRANSIENT, constructor_args)
29+
def register_transient(self, dependency: Type, implementation: Type, constructor_args=None):
30+
if dependency in self._registrations:
31+
raise ValueError(f"Dependency {dependency} is already registered.")
32+
self._registrations[dependency] = Registration(dependency, implementation, Scope.TRANSIENT, constructor_args)
3333

34-
def register_scoped(self, interface, class_, constructor_args=None):
35-
if interface in self._registrations:
36-
raise ValueError(f"Dependency {interface} is already registered.")
37-
self._registrations[interface] = Registration(interface, class_, Scope.SCOPED, constructor_args)
34+
def register_scoped(self, dependency: Type, implementation: Type, constructor_args=None):
35+
if dependency in self._registrations:
36+
raise ValueError(f"Dependency {dependency} is already registered.")
37+
self._registrations[dependency] = Registration(dependency, implementation, Scope.SCOPED, constructor_args)
3838

39-
def register_singleton(self, interface, class_, constructor_args=None):
40-
if interface in self._registrations:
41-
raise ValueError(f"Dependency {interface} is already registered.")
42-
self._registrations[interface] = Registration(interface, class_, Scope.SINGLETON, constructor_args)
39+
def register_singleton(self, dependency: Type, implementation: Type, constructor_args=None):
40+
if dependency in self._registrations:
41+
raise ValueError(f"Dependency {dependency} is already registered.")
42+
self._registrations[dependency] = Registration(dependency, implementation, Scope.SINGLETON, constructor_args)
4343

44-
def resolve(self, interface, scope_name=DEFAULT_SCOPE_NAME):
44+
def resolve(self, dependency: Type, scope_name=DEFAULT_SCOPE_NAME):
4545
if scope_name not in self._scoped_instances:
4646
self._scoped_instances[scope_name] = {}
4747

48-
if interface not in self._registrations:
49-
raise KeyError(f"Dependency {interface.__name__} is not registered.")
48+
if dependency not in self._registrations:
49+
raise KeyError(f"Dependency {dependency.__name__} is not registered.")
5050

51-
registration = self._registrations[interface]
52-
dependency_scope = registration.scope
53-
dependency_class = registration.class_
51+
registration = self._registrations[dependency]
52+
scope = registration.scope
53+
implementation = registration.implementation
5454
constructor_args = registration.constructor_args
5555

56-
self._validate_constructor_args(constructor_args=constructor_args, class_=dependency_class)
56+
self._validate_constructor_args(constructor_args=constructor_args, implementation=implementation)
5757

58-
if dependency_scope == Scope.TRANSIENT:
58+
if scope == Scope.TRANSIENT:
5959
return self._inject_dependencies(
60-
class_=dependency_class,
60+
implementation=implementation,
6161
constructor_args=constructor_args
6262
)
63-
elif dependency_scope == Scope.SCOPED:
64-
if interface not in self._scoped_instances[scope_name]:
65-
self._scoped_instances[scope_name][interface] = (
63+
elif scope == Scope.SCOPED:
64+
if dependency not in self._scoped_instances[scope_name]:
65+
self._scoped_instances[scope_name][dependency] = (
6666
self._inject_dependencies(
67-
class_=dependency_class,
67+
implementation=implementation,
6868
scope_name=scope_name,
6969
constructor_args=constructor_args,
7070
))
71-
return self._scoped_instances[scope_name][interface]
72-
elif dependency_scope == Scope.SINGLETON:
73-
if interface not in self._singleton_instances:
74-
self._singleton_instances[interface] = (
71+
return self._scoped_instances[scope_name][dependency]
72+
elif scope == Scope.SINGLETON:
73+
if dependency not in self._singleton_instances:
74+
self._singleton_instances[dependency] = (
7575
self._inject_dependencies(
76-
class_=dependency_class,
76+
implementation=implementation,
7777
constructor_args=constructor_args
7878
)
7979
)
80-
return self._singleton_instances[interface]
80+
return self._singleton_instances[dependency]
8181

82-
raise ValueError(f"Invalid dependency scope: {dependency_scope}")
82+
raise ValueError(f"Invalid dependency scope: {scope}")
8383

84-
def _validate_constructor_args(self, constructor_args: Dict[str, Any], class_: Type) -> None:
85-
class_constructor = inspect.signature(class_.__init__).parameters
84+
def _validate_constructor_args(self, constructor_args: Dict[str, Any], implementation: Type) -> None:
85+
constructor = inspect.signature(implementation.__init__).parameters
8686

8787
# Check if any required parameter is missing
88-
missing_params = [param for param in class_constructor.keys() if
88+
missing_params = [param for param in constructor.keys() if
8989
param not in ["self", "cls", "args", "kwargs"] and
9090
param not in constructor_args]
9191
if missing_params:
9292
raise ValueError(
9393
f"Missing required constructor arguments: "
94-
f"{', '.join(missing_params)} for class '{class_.__name__}'.")
94+
f"{', '.join(missing_params)} for class '{implementation.__name__}'.")
9595

9696
for arg_name, arg_value in constructor_args.items():
97-
if arg_name not in class_constructor:
97+
if arg_name not in constructor:
9898
raise ValueError(
99-
f"Invalid constructor argument '{arg_name}' for class '{class_.__name__}'. "
99+
f"Invalid constructor argument '{arg_name}' for class '{implementation.__name__}'. "
100100
f"The class does not have a constructor parameter with this name.")
101101

102-
expected_type = class_constructor[arg_name].annotation
102+
expected_type = constructor[arg_name].annotation
103103
if expected_type != inspect.Parameter.empty:
104104
if not isinstance(arg_value, expected_type):
105105
raise TypeError(
106106
f"Constructor argument '{arg_name}' has an incompatible type. "
107107
f"Expected type: {expected_type}, provided type: {type(arg_value)}.")
108108

109-
def _inject_dependencies(self, class_, scope_name=None, constructor_args=None):
110-
constructor = inspect.signature(class_.__init__)
109+
def _inject_dependencies(self, implementation, scope_name=None, constructor_args=None):
110+
constructor = inspect.signature(implementation.__init__)
111111
params = constructor.parameters
112112

113113
dependencies = {}
@@ -127,4 +127,4 @@ def _inject_dependencies(self, class_, scope_name=None, constructor_args=None):
127127
else:
128128
dependencies[param_name] = self.resolve(param_info.annotation, scope_name=scope_name)
129129

130-
return class_(**dependencies)
130+
return implementation(**dependencies)
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1-
from typing import Any, Dict
1+
from typing import Any, Dict, Type
22

33
from dependency_injection.scope import Scope
44

55

66
class Registration():
77

8-
def __init__(self, interface, class_, scope: Scope, constructor_args: Dict[str, Any] = None):
9-
self.interface = interface
10-
self.class_ = class_
8+
def __init__(self, dependency: Type, implementation: Type, scope: Scope, constructor_args: Dict[str, Any] = None):
9+
self.dependency = dependency
10+
self.implementation = implementation
1111
self.scope = scope
1212
self.constructor_args = constructor_args or {}

tests/unit_test/container/register/test_register_scoped.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ class Car(Vehicle):
1717
pass
1818

1919
dependency_container = DependencyContainer.get_instance()
20-
interface = Vehicle
21-
dependency_class = Car
20+
dependency = Vehicle
21+
implementation = Car
2222

2323
# act
24-
dependency_container.register_scoped(interface, dependency_class)
24+
dependency_container.register_scoped(dependency, implementation)
2525

2626
# assert
2727
# (no exception thrown)
@@ -37,10 +37,10 @@ class Car(Vehicle):
3737
pass
3838

3939
dependency_container = DependencyContainer.get_instance()
40-
interface = Vehicle
41-
dependency_class = Car
42-
dependency_container.register_scoped(interface, dependency_class)
40+
dependency = Vehicle
41+
implementation = Car
42+
dependency_container.register_scoped(dependency, implementation)
4343

4444
# act + assert
4545
with pytest.raises(ValueError, match="is already registered"):
46-
dependency_container.register_scoped(interface, dependency_class)
46+
dependency_container.register_scoped(dependency, implementation)

tests/unit_test/container/register/test_register_singleton.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ class Car(Vehicle):
1717
pass
1818

1919
dependency_container = DependencyContainer.get_instance()
20-
interface = Vehicle
21-
dependency_class = Car
20+
dependency = Vehicle
21+
implementation = Car
2222

2323
# act
24-
dependency_container.register_singleton(interface, dependency_class)
24+
dependency_container.register_singleton(dependency, implementation)
2525

2626
# assert
2727
# (no exception thrown)
@@ -37,10 +37,10 @@ class Car(Vehicle):
3737
pass
3838

3939
dependency_container = DependencyContainer.get_instance()
40-
interface = Vehicle
41-
dependency_class = Car
42-
dependency_container.register_singleton(interface, dependency_class)
40+
dependency = Vehicle
41+
implementation = Car
42+
dependency_container.register_singleton(dependency, implementation)
4343

4444
# act + assert
4545
with pytest.raises(ValueError, match="is already registered"):
46-
dependency_container.register_singleton(interface, dependency_class)
46+
dependency_container.register_singleton(dependency, implementation)

tests/unit_test/container/register/test_register_transient.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,11 @@ class Car(Vehicle):
1717
pass
1818

1919
dependency_container = DependencyContainer.get_instance()
20-
interface = Vehicle
21-
dependency_class = Car
20+
dependency = Vehicle
21+
implementation = Car
2222

2323
# act
24-
dependency_container.register_transient(interface, dependency_class)
24+
dependency_container.register_transient(dependency, implementation)
2525

2626
# assert (no exception thrown)
2727

@@ -36,10 +36,10 @@ class Car(Vehicle):
3636
pass
3737

3838
dependency_container = DependencyContainer.get_instance()
39-
interface = Vehicle
40-
dependency_class = Car
41-
dependency_container.register_transient(interface, dependency_class)
39+
dependency = Vehicle
40+
implementation = Car
41+
dependency_container.register_transient(dependency, implementation)
4242

4343
# act + assert
4444
with pytest.raises(ValueError, match="is already registered"):
45-
dependency_container.register_transient(interface, dependency_class)
45+
dependency_container.register_transient(dependency, implementation)

tests/unit_test/container/register/test_register_with_args.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ class Car(Vehicle):
1515
pass
1616

1717
dependency_container = DependencyContainer.get_instance()
18-
interface = Vehicle
19-
dependency_class = Car
18+
dependency = Vehicle
19+
implementation = Car
2020

2121
# act + assert (no exception)
22-
dependency_container.register_transient(interface, dependency_class, constructor_args={"color": "red", "mileage": 3800})
22+
dependency_container.register_transient(dependency, implementation, constructor_args={"color": "red", "mileage": 3800})

tests/unit_test/container/resolve/test_resolve_scoped.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@ class Car(Vehicle):
1515
pass
1616

1717
dependency_container = DependencyContainer.get_instance()
18-
interface = Vehicle
19-
dependency_class = Car
20-
dependency_container.register_scoped(interface, dependency_class)
18+
dependency = Vehicle
19+
implementation = Car
20+
dependency_container.register_scoped(dependency, implementation)
2121

2222
# act
23-
resolved_dependency_in_scope_1 = dependency_container.resolve(interface, scope_name="test-scope")
24-
resolved_dependency_in_scope_2 = dependency_container.resolve(interface, scope_name="test-scope")
23+
resolved_dependency_in_scope_1 = dependency_container.resolve(dependency, scope_name="test-scope")
24+
resolved_dependency_in_scope_2 = dependency_container.resolve(dependency, scope_name="test-scope")
2525

2626
# assert
2727
self.assertEqual(resolved_dependency_in_scope_1, resolved_dependency_in_scope_2)
@@ -37,13 +37,13 @@ class Car(Vehicle):
3737
pass
3838

3939
dependency_container = DependencyContainer.get_instance()
40-
interface = Vehicle
41-
dependency_class = Car
42-
dependency_container.register_scoped(interface, dependency_class)
40+
dependency = Vehicle
41+
implementation = Car
42+
dependency_container.register_scoped(dependency, implementation)
4343

4444
# act
45-
resolved_dependency_in_scope_1 = dependency_container.resolve(interface, scope_name="scope_1")
46-
resolved_dependency_in_scope_2 = dependency_container.resolve(interface, scope_name="scope_2")
45+
resolved_dependency_in_scope_1 = dependency_container.resolve(dependency, scope_name="scope_1")
46+
resolved_dependency_in_scope_2 = dependency_container.resolve(dependency, scope_name="scope_2")
4747

4848
# assert
4949
self.assertNotEqual(resolved_dependency_in_scope_1, resolved_dependency_in_scope_2)

tests/unit_test/container/resolve/test_resolve_singleton.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ class Car(Vehicle):
1515
pass
1616

1717
dependency_container = DependencyContainer.get_instance()
18-
interface = Vehicle
19-
dependency_class = Car
20-
dependency_container.register_singleton(interface, dependency_class)
18+
dependency = Vehicle
19+
implementation = Car
20+
dependency_container.register_singleton(dependency, implementation)
2121

2222
# act
23-
resolved_dependency = dependency_container.resolve(interface)
23+
resolved_dependency = dependency_container.resolve(dependency)
2424

2525
# assert
2626
self.assertIsInstance(resolved_dependency, Car)
@@ -36,13 +36,13 @@ class Car(Vehicle):
3636
pass
3737

3838
dependency_container = DependencyContainer()
39-
interface = Vehicle
40-
dependency_class = Car
41-
dependency_container.register_singleton(interface, dependency_class)
39+
dependency = Vehicle
40+
implementation = Car
41+
dependency_container.register_singleton(dependency, implementation)
4242

4343
# act
44-
resolved_dependency_1 = dependency_container.resolve(interface)
45-
resolved_dependency_2 = dependency_container.resolve(interface)
44+
resolved_dependency_1 = dependency_container.resolve(dependency)
45+
resolved_dependency_2 = dependency_container.resolve(dependency)
4646

4747
# assert
4848
self.assertEqual(resolved_dependency_1, resolved_dependency_2)

tests/unit_test/container/resolve/test_resolve_transient.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,12 @@ class Car(Vehicle):
1515
pass
1616

1717
dependency_container = DependencyContainer.get_instance()
18-
interface = Vehicle
19-
dependency_class = Car
20-
dependency_container.register_transient(interface, dependency_class)
18+
dependency = Vehicle
19+
implementation = Car
20+
dependency_container.register_transient(dependency, implementation)
2121

2222
# act
23-
resolved_dependency = dependency_container.resolve(interface)
23+
resolved_dependency = dependency_container.resolve(dependency)
2424

2525
# assert
2626
self.assertIsInstance(resolved_dependency, Car)
@@ -36,13 +36,13 @@ class Car(Vehicle):
3636
pass
3737

3838
dependency_container = DependencyContainer()
39-
interface = Vehicle
40-
dependency_class = Car
41-
dependency_container.register_transient(interface, dependency_class)
39+
dependency = Vehicle
40+
implementation = Car
41+
dependency_container.register_transient(dependency, implementation)
4242

4343
# act
44-
resolved_dependency_1 = dependency_container.resolve(interface)
45-
resolved_dependency_2 = dependency_container.resolve(interface)
44+
resolved_dependency_1 = dependency_container.resolve(dependency)
45+
resolved_dependency_2 = dependency_container.resolve(dependency)
4646

4747
# assert
4848
self.assertNotEqual(resolved_dependency_1, resolved_dependency_2)

0 commit comments

Comments
 (0)