Example #1
0
def load(container_builder: ContainerBuilder):
    container_builder.set_definition(
        Definition("test.resources.test_full.autodiscover2.b.B",
                   "test.resources.test_full.autodiscover2.b.B", [
                       Argument.no_kw_argument(
                           "@test.resources.test_full.autodiscover1.a.A")
                   ]))
Example #2
0
class TestPyLoader(TestCase):
    def setUp(self) -> None:
        self._container_builder = ContainerBuilder([])
        self.loader = PyLoader(self._container_builder)
        self.current_dir = os.path.dirname(__file__)

    def test_load_fails_for_non_absolute_path(self):
        with self.assertRaises(exceptions.PathNotAbsolute):
            self.loader.load("relative/path")

    def test_load_fails_for_non_existing_file(self):
        with self.assertRaises(exceptions.ResourceNotFound):
            self.loader.load("/non/existing/path")

    def test_load_fails_for_loader_without_load_method(self):
        path = os.path.join(self.current_dir, "..", "resources",
                            "test_di_no_load_method.py")
        with self.assertRaises(exceptions.MissingLoaderMethod):
            self.loader.load(path)

    def test_load_works_as_expected(self):
        path = os.path.join(self.current_dir, "..", "resources", "test_di.py")
        self.loader.load(path)
        c = self._container_builder.get("example.C")
        self.assertIsInstance(c, C)
        self.assertIsInstance(c.b, B)
        self.assertIsInstance(c.a, A)

    def test_load_by_module_name_fails_for_non_existing_file(self):
        with self.assertRaises(exceptions.ResourceNotFound):
            self.loader.load_by_module_name("nonexistingpath")

    def test_load_by_module_name_fails_for_loader_without_load_method(self):
        with self.assertRaises(exceptions.MissingLoaderMethod):
            self.loader.load_by_module_name(
                "tests.resources.test_di_no_load_method")

    def test_load_by_module_name_works_as_expected(self):
        self.loader.load_by_module_name("tests.resources.test_di")
        c = self._container_builder.get("example.C")
        self.assertIsInstance(c, C)
        self.assertIsInstance(c.b, B)
        self.assertIsInstance(c.a, A)

    def test_load_dir(self):
        path = os.path.join(self.current_dir, "..", "resources", "loaders")
        self.loader.load_dir(path)
        self.assertIsInstance(self._container_builder.get("same_level_file"),
                              A)
        self.assertIsInstance(self._container_builder.get("one_level_file"), A)
        self.assertIsInstance(self._container_builder.get("two_levels_file"),
                              A)

    def test_load_dir_fails_for_non_absolute_path(self):
        with self.assertRaises(exceptions.PathNotAbsolute):
            self.loader.load_dir("tests/resources/loaders")
Example #3
0
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"),
            ],
        )

    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.assertIsInstance(self.container_builder.get("example.C"), C)
Example #4
0
 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"),
         ],
     )
Example #5
0
    def _configure(self, app: Flask) -> None:
        if not hasattr(app, "extensions"):
            app.extensions = {}

        app.extensions["pypendency"] = {"container": ContainerBuilder([])}

        py_loader = PyLoader(app.extensions["pypendency"]["container"])
        yaml_loader = YamlLoader(app.extensions["pypendency"]["container"])

        di_folder_name = app.config.get("PYPENDENCY_DI_FOLDER_NAME")
        for registered_place in app.config.get("PYPENDENCY_DISCOVER_PATHS"):
            for di_folder in glob.glob(
                    f"{registered_place}/**/{di_folder_name}", recursive=True):
                py_loader.load_dir(di_folder)
                yaml_loader.load_dir(di_folder)
Example #6
0
class TestYamlLoader(TestCase):
    def setUp(self) -> None:
        self._container_builder = ContainerBuilder([])
        self.loader = YamlLoader(self._container_builder)
        self.current_dir = os.path.dirname(__file__)

    def test_load_fails_for_non_absolute_path(self):
        with self.assertRaises(exceptions.PathNotAbsolute):
            self.loader.load("relative/path")

    def test_load_fails_for_non_existing_yaml(self):
        with self.assertRaises(exceptions.ResourceNotFound):
            self.loader.load("/non/existing/path")

    def test_load_fails_for_invalid_yaml(self):
        path = os.path.join(self.current_dir, "..", "resources", "test_invalid_di.yaml")
        with self.assertRaises(exceptions.ParsingErrorOnResource):
            self.loader.load(path)

    def test_load_does_nothing_for_empty_yaml(self):
        mocked_container = Mock(spec=ContainerBuilder)
        path = os.path.join(self.current_dir, "..", "resources", "test_empty.yaml")
        YamlLoader(mocked_container).load(path)
        mocked_container.set_definition.assert_not_called()

    def test_load_works_as_expected(self):
        path = os.path.join(self.current_dir, "..", "resources", "test_di.yaml")
        self.loader.load(path)
        self.assertIsInstance(
            self._container_builder.get("example.C"),
            C
        )

    def test_load_dir(self):
        path = os.path.join(self.current_dir, "..", "resources", "loaders")
        self.loader.load_dir(path)
        self.assertIsInstance(self._container_builder.get("same_level_file"), A)
        self.assertIsInstance(self._container_builder.get("one_level_file"), A)
        self.assertIsInstance(self._container_builder.get("two_levels_file"), A)

        with self.assertRaises(ServiceNotFoundInContainer):
            self._container_builder.get("should_not_exist")

    def test_load_dir_fails_for_non_absolute_path(self):
        with self.assertRaises(exceptions.PathNotAbsolute):
            self.loader.load_dir("tests/resources/loaders")
Example #7
0
def load(container_builder: ContainerBuilder):
    container_builder.set_definition(
        Definition('example.A', 'tests.resources.class_a.A')
    )
    container_builder.set_definition(
        Definition(
            'example.B',
            'tests.resources.class_b.B',
            [Argument.no_kw_argument("@example.A")]
        )
    )
    container_builder.set_definition(
        Definition(
            'example.C',
            'tests.resources.class_c.C',
            [
                Argument.no_kw_argument("@example.A"),
                Argument("b", "@example.B"),
                Argument("kw_arg", "test_param"),
            ]
        )
    )
Example #8
0
def load(container_builder: ContainerBuilder):
    container_builder.set_definition(
        Definition('same_level_file', 'tests.resources.class_a.A'))
Example #9
0
 def setUp(self) -> None:
     self._container_builder = ContainerBuilder([])
     self.loader = PyLoader(self._container_builder)
     self.current_dir = os.path.dirname(__file__)
Example #10
0
 def test_get_container_instance_retrieves_the_same_object(self):
     self.assertIs(ContainerBuilder.get_container_instance(),
                   ContainerBuilder.get_container_instance())