From 643dbe4efc9578d026cfd5328379ed0a9daf83e7 Mon Sep 17 00:00:00 2001 From: Erik Villarreal Gallardo Date: Mon, 2 Jun 2025 10:25:01 +0200 Subject: [PATCH 1/4] move set_definition method to container --- src/pypendency/builder.py | 12 ------------ src/pypendency/container.py | 11 +++++++++++ 2 files changed, 11 insertions(+), 12 deletions(-) diff --git a/src/pypendency/builder.py b/src/pypendency/builder.py index 7c1ca60..4f8803d 100644 --- a/src/pypendency/builder.py +++ b/src/pypendency/builder.py @@ -1,6 +1,5 @@ from typing import Optional, List -from pypendency import exceptions from pypendency.container import Container from pypendency.definition import Definition @@ -19,16 +18,5 @@ def get_container_instance(cls): return cls._instance - def set_definition(self, definition: Definition) -> None: - if self.is_resolved(): - raise exceptions.ForbiddenChangeOnResolvedContainer() - - if self.has(definition.identifier): - raise exceptions.ServiceAlreadyDefined(definition.identifier) - - self._service_mapping.update({ - definition.identifier: definition - }) - container_builder = ContainerBuilder.get_container_instance() diff --git a/src/pypendency/container.py b/src/pypendency/container.py index a392b39..d87c57e 100644 --- a/src/pypendency/container.py +++ b/src/pypendency/container.py @@ -82,6 +82,17 @@ def get(self, identifier: str) -> Optional[object]: return self._do_get(identifier) + def set_definition(self, definition: Definition) -> None: + if self.is_resolved(): + raise exceptions.ForbiddenChangeOnResolvedContainer() + + if self.has(definition.identifier): + raise exceptions.ServiceAlreadyDefined(definition.identifier) + + self._service_mapping.update({ + definition.identifier: definition + }) + def _do_get(self, identifier: str) -> Optional[object]: empty = object() From 20ab624bc0be0babe8e505c50cb24e8d49c6c2d6 Mon Sep 17 00:00:00 2001 From: Erik Villarreal Gallardo Date: Tue, 3 Jun 2025 15:28:10 +0200 Subject: [PATCH 2/4] move tests to proper files --- tests/test_builder.py | 59 ----------------------------------------- tests/test_container.py | 22 +++++++++++++++ 2 files changed, 22 insertions(+), 59 deletions(-) diff --git a/tests/test_builder.py b/tests/test_builder.py index 7b2b5a9..6c62a5e 100644 --- a/tests/test_builder.py +++ b/tests/test_builder.py @@ -1,72 +1,13 @@ from unittest import TestCase -from unittest.mock import sentinel -from pypendency import exceptions -from pypendency.argument import Argument from pypendency.builder import ContainerBuilder -from pypendency.definition import Definition -from pypendency.tag import Tag -from tests.resources.class_c import C - class TestContainerBuilder(TestCase): def setUp(self) -> None: self.container_builder = ContainerBuilder([]) - self.definition_a = Definition( - "example.A", - "tests.resources.class_a.A" - ) - self.definition_b = Definition( - "example.B", - "tests.resources.class_b.B", - [Argument.no_kw_argument("@example.A")], - ) - self.definition_c = Definition( - "example.C", - "tests.resources.class_c.C", - [ - Argument.no_kw_argument("@example.A"), - Argument("kw_arg", "test_param"), - Argument("b", "@example.B"), - ], - ) - self.definition_d = Definition( - "example.D", - "tests.resources.class_c.C", - [ - Argument.no_kw_argument("@example.A"), - Argument("kw_arg", "test_param"), - Argument("b", "@example.B"), - ], - { - Tag(identifier="test_tag_A", value=sentinel.test_tag_A_value), - }, - ) - self.definition_e = Definition( - "example.E", - "tests.resources.class_a.A", - tags={ - Tag(identifier="test_tag_A", value=sentinel.test_tag_A_value), - Tag(identifier="test_tag_B", value=sentinel.test_tag_B_value), - }, - ) def test_get_container_instance_retrieves_the_same_object(self): self.assertIs( ContainerBuilder.get_container_instance(), ContainerBuilder.get_container_instance() ) - - def test_set_definition_fails_if_resolved(self): - self.container_builder.resolve() - - with self.assertRaises(exceptions.ForbiddenChangeOnResolvedContainer): - self.container_builder.set_definition(self.definition_a) - - def test_set_definitions_sets_properly_so_services_can_be_retrieved(self): - self.container_builder.set_definition(self.definition_b) - self.container_builder.set_definition(self.definition_a) - self.container_builder.set_definition(self.definition_c) - self.container_builder.set_definition(self.definition_d) - self.container_builder.set_definition(self.definition_e) - self.assertIsInstance(self.container_builder.get("example.C"), C) diff --git a/tests/test_container.py b/tests/test_container.py index 1a52a93..6b1a0cd 100644 --- a/tests/test_container.py +++ b/tests/test_container.py @@ -40,6 +40,14 @@ def setUp(self) -> None: Tag(identifier="test_tag_B", value=sentinel.test_tag_B), }, ) + self.definition_e = Definition( + "example.E", + "tests.resources.class_a.A", + tags={ + Tag(identifier="test_tag_A", value=sentinel.test_tag_A_value), + Tag(identifier="test_tag_B", value=sentinel.test_tag_B_value), + }, + ) def test_is_resolved_is_false_on_instantiation(self): self.assertFalse(self.container.is_resolved()) @@ -305,3 +313,17 @@ def test_get_services_identifiers_by_tag_name_raises_when_tag_doesnt_exist(self) with self.assertRaises(exceptions.TagNotFoundInContainer): container.get_services_identifiers_by_tag_name("this_tag_shouldn't_exist", None) + + def test_set_definition_fails_if_resolved(self): + self.container.resolve() + + with self.assertRaises(exceptions.ForbiddenChangeOnResolvedContainer): + self.container.set_definition(self.definition_a) + + def test_set_definitions_sets_properly_so_services_can_be_retrieved(self): + self.container.set_definition(self.definition_b) + self.container.set_definition(self.definition_a) + self.container.set_definition(self.definition_c) + self.container.set_definition(self.definition_d) + self.container.set_definition(self.definition_e) + self.assertIsInstance(self.container.get("example.C"), C) From f55fb29bf6ed4f0b0c3d51a1a357aa14af565389 Mon Sep 17 00:00:00 2001 From: Erik Villarreal Gallardo Date: Wed, 4 Jun 2025 11:48:45 +0200 Subject: [PATCH 3/4] change definition_e --- tests/test_container.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/tests/test_container.py b/tests/test_container.py index 6b1a0cd..fe72f59 100644 --- a/tests/test_container.py +++ b/tests/test_container.py @@ -42,10 +42,14 @@ def setUp(self) -> None: ) self.definition_e = Definition( "example.E", - "tests.resources.class_a.A", - tags={ + "tests.resources.class_c.C", + [ + Argument.no_kw_argument("@example.A"), + Argument("kw_arg", "test_param"), + Argument("b", "@example.B"), + ], + { Tag(identifier="test_tag_A", value=sentinel.test_tag_A_value), - Tag(identifier="test_tag_B", value=sentinel.test_tag_B_value), }, ) From 1b1b6d4b17cda49e55c620ecbc73564ef627fda2 Mon Sep 17 00:00:00 2001 From: Erik Villarreal Gallardo Date: Wed, 4 Jun 2025 11:52:29 +0200 Subject: [PATCH 4/4] change sentinel test tags name --- tests/test_container.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_container.py b/tests/test_container.py index fe72f59..1388963 100644 --- a/tests/test_container.py +++ b/tests/test_container.py @@ -36,8 +36,8 @@ def setUp(self) -> None: "example.D", "tests.resources.class_a.A", tags={ - Tag(identifier="test_tag_A", value=sentinel.test_tag_A), - Tag(identifier="test_tag_B", value=sentinel.test_tag_B), + Tag(identifier="test_tag_A", value=sentinel.test_tag_A_value), + Tag(identifier="test_tag_B", value=sentinel.test_tag_B_value), }, ) self.definition_e = Definition( @@ -277,7 +277,7 @@ def test_get_services_identifiers_by_tag_name(self): "example.E", "tests.resources.class_a.A", tags={ - Tag(identifier="test_tag_A", value=sentinel.test_tag_A), + Tag(identifier="test_tag_A", value=sentinel.test_tag_A_value), }, ) ]) @@ -291,7 +291,7 @@ def test_get_services_identifiers_by_tag_name(self): { "msg": "With value", "tag_identifier": "test_tag_A", - "tag_value": sentinel.test_tag_A, + "tag_value": sentinel.test_tag_A_value, }, ] @@ -310,7 +310,7 @@ def test_get_services_identifiers_by_tag_name_raises_when_tag_doesnt_exist(self) "example.E", "tests.resources.class_a.A", tags={ - Tag(identifier="test_tag_A", value=sentinel.test_tag_A), + Tag(identifier="test_tag_A", value=sentinel.test_tag_A_value), }, ) ])