From 4c8cd988cc7332f92c2f4f519106f1f85e33ea64 Mon Sep 17 00:00:00 2001 From: edraft Date: Wed, 24 Sep 2025 20:53:01 +0200 Subject: [PATCH] Removed ServiceProviderABC #186 --- example/custom/database/src/application.py | 4 +- example/custom/di/src/di/application.py | 4 +- example/custom/di/src/di/startup.py | 4 +- example/custom/di/src/di/static_test.py | 4 +- .../custom/general/src/general/application.py | 4 +- .../general/src/general/test_extension.py | 4 +- .../general/src/general/test_service.py | 4 +- .../src/translation/application.py | 4 +- .../translation/src/translation/startup.py | 4 +- src/cpl-api/cpl/api/application/web_app.py | 4 +- src/cpl-api/cpl/api/router.py | 8 +- .../cpl/application/abc/application_abc.py | 6 +- .../abc/application_extension_abc.py | 4 +- .../cpl/application/application_builder.py | 4 +- .../cpl/auth/keycloak/keycloak_user.py | 4 +- .../auth/schema/_administration/api_key.py | 5 +- .../auth/schema/_administration/auth_user.py | 18 +-- .../schema/_administration/auth_user_dao.py | 4 +- .../schema/_permission/api_key_permission.py | 6 +- .../cpl/auth/schema/_permission/role.py | 10 +- .../schema/_permission/role_permission.py | 6 +- .../cpl/auth/schema/_permission/role_user.py | 6 +- src/cpl-core/cpl/core/ctx/user_context.py | 4 +- .../cpl/core/log/structured_logger.py | 4 +- src/cpl-core/cpl/core/log/wrapped_logger.py | 10 +- .../database/abc/data_access_object_abc.py | 10 +- .../cpl/database/mysql/mysql_pool.py | 4 +- .../cpl/database/postgres/postgres_pool.py | 4 +- .../cpl/database/service/seeder_service.py | 4 +- src/cpl-dependency/cpl/dependency/__init__.py | 8 +- src/cpl-dependency/cpl/dependency/context.py | 2 +- src/cpl-dependency/cpl/dependency/inject.py | 6 +- src/cpl-dependency/cpl/dependency/scope.py | 22 --- .../cpl/dependency/scope_abc.py | 20 --- .../cpl/dependency/scope_builder.py | 18 --- .../cpl/dependency/service_collection.py | 6 +- .../cpl/dependency/service_descriptor.py | 2 +- .../cpl/dependency/service_lifetime.py | 7 + .../cpl/dependency/service_lifetime_enum.py | 7 - .../cpl/dependency/service_provider.py | 30 +---- .../cpl/dependency/service_provider_abc.py | 127 ------------------ unittests/unittests/application.py | 4 +- .../di/service_collection_test_case.py | 4 +- .../di/service_provider_test_case.py | 10 +- 44 files changed, 108 insertions(+), 326 deletions(-) delete mode 100644 src/cpl-dependency/cpl/dependency/scope.py delete mode 100644 src/cpl-dependency/cpl/dependency/scope_abc.py delete mode 100644 src/cpl-dependency/cpl/dependency/scope_builder.py create mode 100644 src/cpl-dependency/cpl/dependency/service_lifetime.py delete mode 100644 src/cpl-dependency/cpl/dependency/service_lifetime_enum.py delete mode 100644 src/cpl-dependency/cpl/dependency/service_provider_abc.py diff --git a/example/custom/database/src/application.py b/example/custom/database/src/application.py index 9eab0810..39112dbc 100644 --- a/example/custom/database/src/application.py +++ b/example/custom/database/src/application.py @@ -3,7 +3,7 @@ from cpl.auth.keycloak import KeycloakAdmin from cpl.core.console import Console from cpl.core.environment import Environment from cpl.core.log import LoggerABC -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider from model.city import City from model.city_dao import CityDao from model.user import User @@ -11,7 +11,7 @@ from model.user_dao import UserDao class Application(ApplicationABC): - def __init__(self, services: ServiceProviderABC): + def __init__(self, services: ServiceProvider): ApplicationABC.__init__(self, services) self._logger = services.get_service(LoggerABC) diff --git a/example/custom/di/src/di/application.py b/example/custom/di/src/di/application.py index 89b1f2a9..e2501429 100644 --- a/example/custom/di/src/di/application.py +++ b/example/custom/di/src/di/application.py @@ -1,6 +1,6 @@ from cpl.application.abc import ApplicationABC from cpl.core.console.console import Console -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider from cpl.dependency.scope import Scope from di.static_test import StaticTest from di.test_abc import TestABC @@ -10,7 +10,7 @@ from di.tester import Tester class Application(ApplicationABC): - def __init__(self, services: ServiceProviderABC): + def __init__(self, services: ServiceProvider): ApplicationABC.__init__(self, services) def _part_of_scoped(self): diff --git a/example/custom/di/src/di/startup.py b/example/custom/di/src/di/startup.py index d10d53f7..2a8a430b 100644 --- a/example/custom/di/src/di/startup.py +++ b/example/custom/di/src/di/startup.py @@ -1,5 +1,5 @@ from cpl.application.abc import StartupABC -from cpl.dependency import ServiceProviderABC, ServiceCollection +from cpl.dependency import ServiceProvider, ServiceCollection from di.di_tester_service import DITesterService from di.test1_service import Test1Service from di.test2_service import Test2Service @@ -14,7 +14,7 @@ class Startup(StartupABC): def configure_configuration(self): ... - def configure_services(self, services: ServiceCollection) -> ServiceProviderABC: + def configure_services(self, services: ServiceCollection) -> ServiceProvider: services.add_scoped(TestService) services.add_scoped(DITesterService) diff --git a/example/custom/di/src/di/static_test.py b/example/custom/di/src/di/static_test.py index edce2f40..e60d3f53 100644 --- a/example/custom/di/src/di/static_test.py +++ b/example/custom/di/src/di/static_test.py @@ -1,4 +1,4 @@ -from cpl.dependency import ServiceProvider, ServiceProviderABC +from cpl.dependency import ServiceProvider, ServiceProvider from cpl.dependency.inject import inject from di.test_service import TestService @@ -6,5 +6,5 @@ from di.test_service import TestService class StaticTest: @staticmethod @inject - def test(services: ServiceProviderABC, t1: TestService): + def test(services: ServiceProvider, t1: TestService): t1.run() diff --git a/example/custom/general/src/general/application.py b/example/custom/general/src/general/application.py index 106f7fba..8bae265b 100644 --- a/example/custom/general/src/general/application.py +++ b/example/custom/general/src/general/application.py @@ -4,7 +4,7 @@ from typing import Optional from cpl.application.abc import ApplicationABC from cpl.core.configuration import Configuration from cpl.core.console import Console -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider from cpl.core.environment import Environment from cpl.core.log import LoggerABC from cpl.core.pipes import IPAddressPipe @@ -16,7 +16,7 @@ from test_settings import TestSettings class Application(ApplicationABC): - def __init__(self, services: ServiceProviderABC): + def __init__(self, services: ServiceProvider): ApplicationABC.__init__(self, services) self._logger = self._services.get_service(LoggerABC) self._mailer = self._services.get_service(EMailClientABC) diff --git a/example/custom/general/src/general/test_extension.py b/example/custom/general/src/general/test_extension.py index 86b23a48..1cede92d 100644 --- a/example/custom/general/src/general/test_extension.py +++ b/example/custom/general/src/general/test_extension.py @@ -1,10 +1,10 @@ from cpl.application.abc import ApplicationExtensionABC from cpl.core.console import Console -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider class TestExtension(ApplicationExtensionABC): @staticmethod - def run(services: ServiceProviderABC): + def run(services: ServiceProvider): Console.write_line("Hello World from App Extension") diff --git a/example/custom/general/src/general/test_service.py b/example/custom/general/src/general/test_service.py index 37e9572f..08e8c6e3 100644 --- a/example/custom/general/src/general/test_service.py +++ b/example/custom/general/src/general/test_service.py @@ -1,10 +1,10 @@ from cpl.core.console.console import Console -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider from cpl.core.pipes.ip_address_pipe import IPAddressPipe class TestService: - def __init__(self, provider: ServiceProviderABC): + def __init__(self, provider: ServiceProvider): self._provider = provider def run(self): diff --git a/example/custom/translation/src/translation/application.py b/example/custom/translation/src/translation/application.py index 84a70346..7fa00e65 100644 --- a/example/custom/translation/src/translation/application.py +++ b/example/custom/translation/src/translation/application.py @@ -1,14 +1,14 @@ from cpl.application import ApplicationABC from cpl.core.configuration import ConfigurationABC from cpl.core.console import Console -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider from cpl.translation.translate_pipe import TranslatePipe from cpl.translation.translation_service_abc import TranslationServiceABC from cpl.translation.translation_settings import TranslationSettings class Application(ApplicationABC): - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + def __init__(self, config: ConfigurationABC, services: ServiceProvider): ApplicationABC.__init__(self, config, services) self._translate: TranslatePipe = services.get_service(TranslatePipe) diff --git a/example/custom/translation/src/translation/startup.py b/example/custom/translation/src/translation/startup.py index 7d411ac3..cfaf8d2a 100644 --- a/example/custom/translation/src/translation/startup.py +++ b/example/custom/translation/src/translation/startup.py @@ -1,6 +1,6 @@ from cpl.application import StartupABC from cpl.core.configuration import ConfigurationABC -from cpl.dependency import ServiceProviderABC, ServiceCollection +from cpl.dependency import ServiceProvider, ServiceCollection from cpl.core.environment import Environment @@ -12,6 +12,6 @@ class Startup(StartupABC): configuration.add_json_file("appsettings.json") return configuration - def configure_services(self, services: ServiceCollection, environment: Environment) -> ServiceProviderABC: + def configure_services(self, services: ServiceCollection, environment: Environment) -> ServiceProvider: services.add_translation() return services.build() diff --git a/src/cpl-api/cpl/api/application/web_app.py b/src/cpl-api/cpl/api/application/web_app.py index dbff7557..c6a28b48 100644 --- a/src/cpl-api/cpl/api/application/web_app.py +++ b/src/cpl-api/cpl/api/application/web_app.py @@ -28,14 +28,14 @@ from cpl.api.typing import HTTPMethods, PartialMiddleware, PolicyResolver from cpl.application.abc.application_abc import ApplicationABC from cpl.core.configuration import Configuration from cpl.dependency.inject import inject -from cpl.dependency.service_provider_abc import ServiceProviderABC +from cpl.dependency.service_provider import ServiceProvider PolicyInput = Union[dict[str, PolicyResolver], Policy] class WebApp(ApplicationABC): - def __init__(self, services: ServiceProviderABC): + def __init__(self, services: ServiceProvider): super().__init__(services, [auth, api]) self._app: Starlette | None = None diff --git a/src/cpl-api/cpl/api/router.py b/src/cpl-api/cpl/api/router.py index e4beb61b..27dfd5ab 100644 --- a/src/cpl-api/cpl/api/router.py +++ b/src/cpl-api/cpl/api/router.py @@ -3,6 +3,7 @@ from enum import Enum from cpl.api.model.validation_match import ValidationMatch from cpl.api.registry.route import RouteRegistry from cpl.api.typing import HTTPMethods +from cpl.dependency import get_provider class Router: @@ -95,9 +96,7 @@ class Router: from cpl.api.model.api_route import ApiRoute if not registry: - from cpl.dependency.service_provider_abc import ServiceProviderABC - - routes = ServiceProviderABC.get_global_service(RouteRegistry) + routes = get_provider().get_service(RouteRegistry) else: routes = registry @@ -144,9 +143,8 @@ class Router: """ from cpl.api.model.api_route import ApiRoute - from cpl.dependency.service_provider_abc import ServiceProviderABC - routes = ServiceProviderABC.get_global_service(RouteRegistry) + routes = get_provider().get_service(RouteRegistry) def inner(fn): path = getattr(fn, "_route_path", None) diff --git a/src/cpl-application/cpl/application/abc/application_abc.py b/src/cpl-application/cpl/application/abc/application_abc.py index 6ffe8317..f4838d06 100644 --- a/src/cpl-application/cpl/application/abc/application_abc.py +++ b/src/cpl-application/cpl/application/abc/application_abc.py @@ -5,7 +5,7 @@ from cpl.application.host import Host from cpl.core.log.log_level import LogLevel from cpl.core.log.log_settings import LogSettings from cpl.core.log.logger_abc import LoggerABC -from cpl.dependency.service_provider_abc import ServiceProviderABC +from cpl.dependency.service_provider import ServiceProvider def __not_implemented__(package: str, func: Callable): @@ -16,12 +16,12 @@ class ApplicationABC(ABC): r"""ABC for the Application class Parameters: - services: :class:`cpl.dependency.service_provider_abc.ServiceProviderABC` + services: :class:`cpl.dependency.service_provider.ServiceProvider` Contains instances of prepared objects """ @abstractmethod - def __init__(self, services: ServiceProviderABC, required_modules: list[str | object] = None): + def __init__(self, services: ServiceProvider, required_modules: list[str | object] = None): self._services = services self._required_modules = ( [x.__name__ if not isinstance(x, str) else x for x in required_modules] if required_modules else [] diff --git a/src/cpl-application/cpl/application/abc/application_extension_abc.py b/src/cpl-application/cpl/application/abc/application_extension_abc.py index 9a2e011c..b4149cb9 100644 --- a/src/cpl-application/cpl/application/abc/application_extension_abc.py +++ b/src/cpl-application/cpl/application/abc/application_extension_abc.py @@ -1,10 +1,10 @@ from abc import ABC, abstractmethod -from cpl.dependency.service_provider_abc import ServiceProviderABC +from cpl.dependency.service_provider import ServiceProvider class ApplicationExtensionABC(ABC): @staticmethod @abstractmethod - def run(services: ServiceProviderABC): ... + def run(services: ServiceProvider): ... diff --git a/src/cpl-application/cpl/application/application_builder.py b/src/cpl-application/cpl/application/application_builder.py index cc36da88..dc2a9caf 100644 --- a/src/cpl-application/cpl/application/application_builder.py +++ b/src/cpl-application/cpl/application/application_builder.py @@ -7,7 +7,7 @@ from cpl.application.abc.startup_abc import StartupABC from cpl.application.abc.startup_extension_abc import StartupExtensionABC from cpl.application.host import Host from cpl.core.errors import dependency_error -from cpl.dependency.context import get_current_provider, use_root_provider +from cpl.dependency.context import get_provider, use_root_provider from cpl.dependency.service_collection import ServiceCollection TApp = TypeVar("TApp", bound=ApplicationABC) @@ -36,7 +36,7 @@ class ApplicationBuilder(Generic[TApp]): @property def service_provider(self): - provider = get_current_provider() + provider = get_provider() if provider is None: provider = self._services.build() use_root_provider(provider) diff --git a/src/cpl-auth/cpl/auth/keycloak/keycloak_user.py b/src/cpl-auth/cpl/auth/keycloak/keycloak_user.py index 53bab61d..e72c1e34 100644 --- a/src/cpl-auth/cpl/auth/keycloak/keycloak_user.py +++ b/src/cpl-auth/cpl/auth/keycloak/keycloak_user.py @@ -1,5 +1,5 @@ from cpl.core.utils.get_value import get_value -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider class KeycloakUser: @@ -32,5 +32,5 @@ class KeycloakUser: def id(self) -> str: from cpl.auth import KeycloakAdmin - keycloak_admin: KeycloakAdmin = ServiceProviderABC.get_global_service(KeycloakAdmin) + keycloak_admin: KeycloakAdmin = get_provider().get_service(KeycloakAdmin) return keycloak_admin.get_user_id(self._username) diff --git a/src/cpl-auth/cpl/auth/schema/_administration/api_key.py b/src/cpl-auth/cpl/auth/schema/_administration/api_key.py index de1e3bb3..16f57a7d 100644 --- a/src/cpl-auth/cpl/auth/schema/_administration/api_key.py +++ b/src/cpl-auth/cpl/auth/schema/_administration/api_key.py @@ -10,7 +10,8 @@ from cpl.core.log.logger import Logger from cpl.core.typing import Id, SerialId from cpl.core.utils.credential_manager import CredentialManager from cpl.database.abc.db_model_abc import DbModelABC -from cpl.dependency.service_provider_abc import ServiceProviderABC +from cpl.dependency import get_provider +from cpl.dependency.service_provider import ServiceProvider _logger = Logger(__name__) @@ -47,7 +48,7 @@ class ApiKey(DbModelABC): async def permissions(self): from cpl.auth.schema._permission.api_key_permission_dao import ApiKeyPermissionDao - apiKeyPermissionDao = ServiceProviderABC.get_global_provider().get_service(ApiKeyPermissionDao) + apiKeyPermissionDao = get_provider().get_service(ApiKeyPermissionDao) return [await x.permission for x in await apiKeyPermissionDao.find_by_api_key_id(self.id)] diff --git a/src/cpl-auth/cpl/auth/schema/_administration/auth_user.py b/src/cpl-auth/cpl/auth/schema/_administration/auth_user.py index a7a11b02..cae14f97 100644 --- a/src/cpl-auth/cpl/auth/schema/_administration/auth_user.py +++ b/src/cpl-auth/cpl/auth/schema/_administration/auth_user.py @@ -10,7 +10,7 @@ from cpl.auth.permission.permissions import Permissions from cpl.core.typing import SerialId from cpl.database.abc import DbModelABC from cpl.database.logger import DBLogger -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider class AuthUser(DbModelABC): @@ -36,12 +36,12 @@ class AuthUser(DbModelABC): return "ANONYMOUS" try: - keycloak = ServiceProviderABC.get_global_service(KeycloakAdmin) + keycloak = get_provider().get_service(KeycloakAdmin) return keycloak.get_user(self._keycloak_id).get("username") except KeycloakGetError as e: return "UNKNOWN" except Exception as e: - logger = ServiceProviderABC.get_global_service(DBLogger) + logger = get_provider().get_service(DBLogger) logger.error(f"Failed to get user {self._keycloak_id} from Keycloak", e) return "UNKNOWN" @@ -51,12 +51,12 @@ class AuthUser(DbModelABC): return "ANONYMOUS" try: - keycloak = ServiceProviderABC.get_global_service(KeycloakAdmin) + keycloak = get_provider().get_service(KeycloakAdmin) return keycloak.get_user(self._keycloak_id).get("email") except KeycloakGetError as e: return "UNKNOWN" except Exception as e: - logger = ServiceProviderABC.get_global_service(DBLogger) + logger = get_provider().get_service(DBLogger) logger.error(f"Failed to get user {self._keycloak_id} from Keycloak", e) return "UNKNOWN" @@ -64,26 +64,26 @@ class AuthUser(DbModelABC): async def roles(self): from cpl.auth.schema._permission.role_user_dao import RoleUserDao - role_user_dao: RoleUserDao = ServiceProviderABC.get_global_service(RoleUserDao) + role_user_dao: RoleUserDao = get_provider().get_service(RoleUserDao) return [await x.role for x in await role_user_dao.get_by_user_id(self.id)] @async_property async def permissions(self): from cpl.auth.schema._administration.auth_user_dao import AuthUserDao - auth_user_dao: AuthUserDao = ServiceProviderABC.get_global_service(AuthUserDao) + auth_user_dao: AuthUserDao = get_provider().get_service(AuthUserDao) return await auth_user_dao.get_permissions(self.id) async def has_permission(self, permission: Permissions) -> bool: from cpl.auth.schema._administration.auth_user_dao import AuthUserDao - auth_user_dao: AuthUserDao = ServiceProviderABC.get_global_service(AuthUserDao) + auth_user_dao: AuthUserDao = get_provider().get_service(AuthUserDao) return await auth_user_dao.has_permission(self.id, permission) async def anonymize(self): from cpl.auth.schema._administration.auth_user_dao import AuthUserDao - auth_user_dao: AuthUserDao = ServiceProviderABC.get_global_service(AuthUserDao) + auth_user_dao: AuthUserDao = get_provider().get_service(AuthUserDao) self._keycloak_id = str(uuid.UUID(int=0)) await auth_user_dao.update(self) diff --git a/src/cpl-auth/cpl/auth/schema/_administration/auth_user_dao.py b/src/cpl-auth/cpl/auth/schema/_administration/auth_user_dao.py index f808b746..8963259f 100644 --- a/src/cpl-auth/cpl/auth/schema/_administration/auth_user_dao.py +++ b/src/cpl-auth/cpl/auth/schema/_administration/auth_user_dao.py @@ -5,7 +5,7 @@ from cpl.auth.schema._administration.auth_user import AuthUser from cpl.database import TableManager from cpl.database.abc import DbModelDaoABC from cpl.database.external_data_temp_table_builder import ExternalDataTempTableBuilder -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider class AuthUserDao(DbModelDaoABC[AuthUser]): @@ -36,7 +36,7 @@ class AuthUserDao(DbModelDaoABC[AuthUser]): async def has_permission(self, user_id: int, permission: Union[Permissions, str]) -> bool: from cpl.auth.schema._permission.permission_dao import PermissionDao - permission_dao: PermissionDao = ServiceProviderABC.get_global_service(PermissionDao) + permission_dao: PermissionDao = get_provider().get_service(PermissionDao) p = await permission_dao.get_by_name(permission if isinstance(permission, str) else permission.value) result = await self._db.select_map( f""" diff --git a/src/cpl-auth/cpl/auth/schema/_permission/api_key_permission.py b/src/cpl-auth/cpl/auth/schema/_permission/api_key_permission.py index a3751b0f..8a7f8e4b 100644 --- a/src/cpl-auth/cpl/auth/schema/_permission/api_key_permission.py +++ b/src/cpl-auth/cpl/auth/schema/_permission/api_key_permission.py @@ -5,7 +5,7 @@ from async_property import async_property from cpl.core.typing import SerialId from cpl.database.abc import DbJoinModelABC -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider class ApiKeyPermission(DbJoinModelABC): @@ -31,7 +31,7 @@ class ApiKeyPermission(DbJoinModelABC): async def api_key(self): from cpl.auth.schema._administration.api_key_dao import ApiKeyDao - api_key_dao: ApiKeyDao = ServiceProviderABC.get_global_service(ApiKeyDao) + api_key_dao: ApiKeyDao = get_provider().get_service(ApiKeyDao) return await api_key_dao.get_by_id(self._api_key_id) @property @@ -42,5 +42,5 @@ class ApiKeyPermission(DbJoinModelABC): async def permission(self): from cpl.auth.schema._permission.permission_dao import PermissionDao - permission_dao: PermissionDao = ServiceProviderABC.get_global_service(PermissionDao) + permission_dao: PermissionDao = get_provider().get_service(PermissionDao) return await permission_dao.get_by_id(self._permission_id) diff --git a/src/cpl-auth/cpl/auth/schema/_permission/role.py b/src/cpl-auth/cpl/auth/schema/_permission/role.py index 9e0a4b72..325fec91 100644 --- a/src/cpl-auth/cpl/auth/schema/_permission/role.py +++ b/src/cpl-auth/cpl/auth/schema/_permission/role.py @@ -6,7 +6,7 @@ from async_property import async_property from cpl.auth.permission.permissions import Permissions from cpl.core.typing import SerialId from cpl.database.abc import DbModelABC -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider class Role(DbModelABC): @@ -44,22 +44,22 @@ class Role(DbModelABC): async def permissions(self): from cpl.auth.schema._permission.role_permission_dao import RolePermissionDao - role_permission_dao: RolePermissionDao = ServiceProviderABC.get_global_service(RolePermissionDao) + role_permission_dao: RolePermissionDao = get_provider().get_service(RolePermissionDao) return [await x.permission for x in await role_permission_dao.get_by_role_id(self.id)] @async_property async def users(self): from cpl.auth.schema._permission.role_user_dao import RoleUserDao - role_user_dao: RoleUserDao = ServiceProviderABC.get_global_service(RoleUserDao) + role_user_dao: RoleUserDao = get_provider().get_service(RoleUserDao) return [await x.user for x in await role_user_dao.get_by_role_id(self.id)] async def has_permission(self, permission: Permissions) -> bool: from cpl.auth.schema._permission.permission_dao import PermissionDao from cpl.auth.schema._permission.role_permission_dao import RolePermissionDao - permission_dao: PermissionDao = ServiceProviderABC.get_global_service(PermissionDao) - role_permission_dao: RolePermissionDao = ServiceProviderABC.get_global_service(RolePermissionDao) + permission_dao: PermissionDao = get_provider().get_service(PermissionDao) + role_permission_dao: RolePermissionDao = get_provider().get_service(RolePermissionDao) p = await permission_dao.get_by_name(permission.value) diff --git a/src/cpl-auth/cpl/auth/schema/_permission/role_permission.py b/src/cpl-auth/cpl/auth/schema/_permission/role_permission.py index 4fdcdcbe..33b60f04 100644 --- a/src/cpl-auth/cpl/auth/schema/_permission/role_permission.py +++ b/src/cpl-auth/cpl/auth/schema/_permission/role_permission.py @@ -5,7 +5,7 @@ from async_property import async_property from cpl.core.typing import SerialId from cpl.database.abc import DbModelABC -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider class RolePermission(DbModelABC): @@ -31,7 +31,7 @@ class RolePermission(DbModelABC): async def role(self): from cpl.auth.schema._permission.role_dao import RoleDao - role_dao: RoleDao = ServiceProviderABC.get_global_service(RoleDao) + role_dao: RoleDao = get_provider().get_service(RoleDao) return await role_dao.get_by_id(self._role_id) @property @@ -42,5 +42,5 @@ class RolePermission(DbModelABC): async def permission(self): from cpl.auth.schema._permission.permission_dao import PermissionDao - permission_dao: PermissionDao = ServiceProviderABC.get_global_service(PermissionDao) + permission_dao: PermissionDao = get_provider().get_service(PermissionDao) return await permission_dao.get_by_id(self._permission_id) diff --git a/src/cpl-auth/cpl/auth/schema/_permission/role_user.py b/src/cpl-auth/cpl/auth/schema/_permission/role_user.py index a4ed13fc..6f1f659e 100644 --- a/src/cpl-auth/cpl/auth/schema/_permission/role_user.py +++ b/src/cpl-auth/cpl/auth/schema/_permission/role_user.py @@ -5,7 +5,7 @@ from async_property import async_property from cpl.core.typing import SerialId from cpl.database.abc import DbJoinModelABC -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider class RoleUser(DbJoinModelABC): @@ -31,7 +31,7 @@ class RoleUser(DbJoinModelABC): async def user(self): from cpl.auth.schema._administration.auth_user_dao import AuthUserDao - auth_user_dao: AuthUserDao = ServiceProviderABC.get_global_service(AuthUserDao) + auth_user_dao: AuthUserDao = get_provider().get_service(AuthUserDao) return await auth_user_dao.get_by_id(self._user_id) @property @@ -42,5 +42,5 @@ class RoleUser(DbJoinModelABC): async def role(self): from cpl.auth.schema._permission.role_dao import RoleDao - role_dao: RoleDao = ServiceProviderABC.get_global_service(RoleDao) + role_dao: RoleDao = get_provider().get_service(RoleDao) return await role_dao.get_by_id(self._role_id) diff --git a/src/cpl-core/cpl/core/ctx/user_context.py b/src/cpl-core/cpl/core/ctx/user_context.py index eec696bc..a60d69f9 100644 --- a/src/cpl-core/cpl/core/ctx/user_context.py +++ b/src/cpl-core/cpl/core/ctx/user_context.py @@ -2,15 +2,15 @@ from contextvars import ContextVar from typing import Optional from cpl.auth.schema._administration.auth_user import AuthUser +from cpl.dependency import get_provider _user_context: ContextVar[Optional[AuthUser]] = ContextVar("user", default=None) def set_user(user: Optional[AuthUser]): - from cpl.dependency.service_provider_abc import ServiceProviderABC from cpl.core.log.logger_abc import LoggerABC - logger = ServiceProviderABC.get_global_service(LoggerABC) + logger = get_provider().get_service(LoggerABC) logger.trace("Setting user context", user.id) _user_context.set(user) diff --git a/src/cpl-core/cpl/core/log/structured_logger.py b/src/cpl-core/cpl/core/log/structured_logger.py index e16755dd..41ae66de 100644 --- a/src/cpl-core/cpl/core/log/structured_logger.py +++ b/src/cpl-core/cpl/core/log/structured_logger.py @@ -9,6 +9,7 @@ from starlette.requests import Request from cpl.core.log.log_level import LogLevel from cpl.core.log.logger import Logger from cpl.core.typing import Source, Messages +from cpl.dependency import get_provider class StructuredLogger(Logger): @@ -99,10 +100,9 @@ class StructuredLogger(Logger): if user is None: return - from cpl.dependency.service_provider_abc import ServiceProviderABC from cpl.auth.keycloak.keycloak_admin import KeycloakAdmin - keycloak = ServiceProviderABC.get_global_service(KeycloakAdmin) + keycloak = get_provider().get_service(KeycloakAdmin) kc_user = keycloak.get_user(user.keycloak_id) message["user"] = { "id": str(user.id), diff --git a/src/cpl-core/cpl/core/log/wrapped_logger.py b/src/cpl-core/cpl/core/log/wrapped_logger.py index b56b4df8..e137637c 100644 --- a/src/cpl-core/cpl/core/log/wrapped_logger.py +++ b/src/cpl-core/cpl/core/log/wrapped_logger.py @@ -4,7 +4,7 @@ from typing import Type from cpl.core.log import LoggerABC, LogLevel from cpl.core.typing import Messages from cpl.dependency.inject import inject -from cpl.dependency.service_provider_abc import ServiceProviderABC +from cpl.dependency.service_provider import ServiceProvider class WrappedLogger(LoggerABC): @@ -19,12 +19,12 @@ class WrappedLogger(LoggerABC): self._set_logger() @inject - def _set_logger(self, services: ServiceProviderABC): + def _set_logger(self, services: ServiceProvider): from cpl.core.log import Logger t_logger: Type[Logger] = services.get_service_type(LoggerABC) if t_logger is None: - raise Exception("No LoggerABC service registered in ServiceProviderABC") + raise Exception("No LoggerABC service registered in ServiceProvider") self._logger = t_logger(self._source, self._file_prefix) @@ -43,8 +43,8 @@ class WrappedLogger(LoggerABC): from cpl.dependency import ServiceCollection ignore_classes = [ - ServiceProviderABC, - ServiceProviderABC.__subclasses__(), + ServiceProvider, + ServiceProvider.__subclasses__(), ServiceCollection, WrappedLogger, WrappedLogger.__subclasses__(), diff --git a/src/cpl-database/cpl/database/abc/data_access_object_abc.py b/src/cpl-database/cpl/database/abc/data_access_object_abc.py index bb153246..25d40b74 100644 --- a/src/cpl-database/cpl/database/abc/data_access_object_abc.py +++ b/src/cpl-database/cpl/database/abc/data_access_object_abc.py @@ -9,21 +9,19 @@ from cpl.core.utils.get_value import get_value from cpl.core.utils.string import String from cpl.database.abc.db_context_abc import DBContextABC from cpl.database.const import DATETIME_FORMAT -from cpl.database.logger import DBLogger from cpl.database.external_data_temp_table_builder import ExternalDataTempTableBuilder +from cpl.database.logger import DBLogger from cpl.database.postgres.sql_select_builder import SQLSelectBuilder from cpl.database.typing import T_DBM, Attribute, AttributeFilters, AttributeSorts +from cpl.dependency import get_provider class DataAccessObjectABC(ABC, Generic[T_DBM]): @abstractmethod def __init__(self, model_type: Type[T_DBM], table_name: str): - from cpl.dependency.service_provider_abc import ServiceProviderABC - - self._db = ServiceProviderABC.get_global_service(DBContextABC) - - self._logger = ServiceProviderABC.get_global_service(DBLogger) + self._db = get_provider().get_service(DBContextABC) + self._logger = get_provider().get_service(DBLogger) self._model_type = model_type self._table_name = table_name diff --git a/src/cpl-database/cpl/database/mysql/mysql_pool.py b/src/cpl-database/cpl/database/mysql/mysql_pool.py index ba2bfacd..44f648ff 100644 --- a/src/cpl-database/cpl/database/mysql/mysql_pool.py +++ b/src/cpl-database/cpl/database/mysql/mysql_pool.py @@ -6,7 +6,7 @@ from mysql.connector.aio import MySQLConnectionPool from cpl.core.environment import Environment from cpl.database.logger import DBLogger from cpl.database.model import DatabaseSettings -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider class MySQLPool: @@ -35,7 +35,7 @@ class MySQLPool: await cursor.execute("SELECT 1") await cursor.fetchall() except Exception as e: - logger = ServiceProviderABC.get_global_service(DBLogger) + logger = get_provider().get_service(DBLogger) logger.fatal(f"Error connecting to the database: {e}") finally: await con.close() diff --git a/src/cpl-database/cpl/database/postgres/postgres_pool.py b/src/cpl-database/cpl/database/postgres/postgres_pool.py index 91db7562..19cdd656 100644 --- a/src/cpl-database/cpl/database/postgres/postgres_pool.py +++ b/src/cpl-database/cpl/database/postgres/postgres_pool.py @@ -7,7 +7,7 @@ from psycopg_pool import AsyncConnectionPool, PoolTimeout from cpl.core.environment import Environment from cpl.database.logger import DBLogger from cpl.database.model import DatabaseSettings -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider class PostgresPool: @@ -37,7 +37,7 @@ class PostgresPool: await pool.check_connection(con) except PoolTimeout as e: await pool.close() - logger = ServiceProviderABC.get_global_service(DBLogger) + logger = get_provider().get_service(DBLogger) logger.fatal(f"Failed to connect to the database", e) self._pool = pool diff --git a/src/cpl-database/cpl/database/service/seeder_service.py b/src/cpl-database/cpl/database/service/seeder_service.py index c23d39e3..74491f8c 100644 --- a/src/cpl-database/cpl/database/service/seeder_service.py +++ b/src/cpl-database/cpl/database/service/seeder_service.py @@ -1,11 +1,11 @@ from cpl.database.abc.data_seeder_abc import DataSeederABC from cpl.database.logger import DBLogger -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider class SeederService: - def __init__(self, provider: ServiceProviderABC): + def __init__(self, provider: ServiceProvider): self._provider = provider self._logger = provider.get_service(DBLogger) diff --git a/src/cpl-dependency/cpl/dependency/__init__.py b/src/cpl-dependency/cpl/dependency/__init__.py index fb8e0c72..fa94d32c 100644 --- a/src/cpl-dependency/cpl/dependency/__init__.py +++ b/src/cpl-dependency/cpl/dependency/__init__.py @@ -1,9 +1,7 @@ -from .context import get_current_provider, use_provider +from .context import get_provider, use_provider from .inject import inject -from .scope import Scope -from .scope_abc import ScopeABC from .service_collection import ServiceCollection from .service_descriptor import ServiceDescriptor -from .service_lifetime_enum import ServiceLifetimeEnum +from .service_lifetime import ServiceLifetimeEnum +from .service_provider import ServiceProvider from .service_provider import ServiceProvider -from .service_provider_abc import ServiceProviderABC diff --git a/src/cpl-dependency/cpl/dependency/context.py b/src/cpl-dependency/cpl/dependency/context.py index f07aab4b..d81c299e 100644 --- a/src/cpl-dependency/cpl/dependency/context.py +++ b/src/cpl-dependency/cpl/dependency/context.py @@ -17,5 +17,5 @@ def use_provider(provider): _current_provider.reset(token) -def get_current_provider(): +def get_provider(): return _current_provider.get() diff --git a/src/cpl-dependency/cpl/dependency/inject.py b/src/cpl-dependency/cpl/dependency/inject.py index 6b92368c..3e6b915f 100644 --- a/src/cpl-dependency/cpl/dependency/inject.py +++ b/src/cpl-dependency/cpl/dependency/inject.py @@ -2,7 +2,7 @@ import functools from asyncio import iscoroutinefunction from inspect import signature -from cpl.dependency.context import get_current_provider +from cpl.dependency.context import get_provider def inject(f=None): @@ -15,7 +15,7 @@ def inject(f=None): async def async_inner(*args, **kwargs): from cpl.dependency.service_provider import ServiceProvider - provider: ServiceProvider | None = get_current_provider() + provider: ServiceProvider | None = get_provider() if provider is None: raise ValueError( "No provider in current context. Use 'with use_provider(provider):' to set the provider in the current context." @@ -30,7 +30,7 @@ def inject(f=None): def inner(*args, **kwargs): from cpl.dependency.service_provider import ServiceProvider - provider: ServiceProvider | None = get_current_provider() + provider: ServiceProvider | None = get_provider() if provider is None: raise ValueError( "No provider in current context. Use 'with use_provider(provider):' to set the provider in the current context." diff --git a/src/cpl-dependency/cpl/dependency/scope.py b/src/cpl-dependency/cpl/dependency/scope.py deleted file mode 100644 index 24cae6fe..00000000 --- a/src/cpl-dependency/cpl/dependency/scope.py +++ /dev/null @@ -1,22 +0,0 @@ -from cpl.dependency.scope_abc import ScopeABC -from cpl.dependency.service_provider_abc import ServiceProviderABC - - -class Scope(ScopeABC): - def __init__(self, service_provider: ServiceProviderABC): - self._service_provider = service_provider - self._service_provider.set_scope(self) - ScopeABC.__init__(self) - - def __enter__(self): - return self - - def __exit__(self, *args): - self.dispose() - - @property - def service_provider(self) -> ServiceProviderABC: - return self._service_provider - - def dispose(self): - self._service_provider = None diff --git a/src/cpl-dependency/cpl/dependency/scope_abc.py b/src/cpl-dependency/cpl/dependency/scope_abc.py deleted file mode 100644 index 6beb18e0..00000000 --- a/src/cpl-dependency/cpl/dependency/scope_abc.py +++ /dev/null @@ -1,20 +0,0 @@ -from abc import ABC, abstractmethod - - -class ScopeABC(ABC): - r"""ABC for the class :class:`cpl.dependency.scope.Scope`""" - - def __init__(self): ... - - @property - @abstractmethod - def service_provider(self): - r"""Returns to service provider of scope - - Returns: - Object of type :class:`cpl.dependency.service_provider_abc.ServiceProviderABC` - """ - - @abstractmethod - def dispose(self): - r"""Sets service_provider to None""" diff --git a/src/cpl-dependency/cpl/dependency/scope_builder.py b/src/cpl-dependency/cpl/dependency/scope_builder.py deleted file mode 100644 index 3d6f5fce..00000000 --- a/src/cpl-dependency/cpl/dependency/scope_builder.py +++ /dev/null @@ -1,18 +0,0 @@ -from cpl.dependency.scope import Scope -from cpl.dependency.scope_abc import ScopeABC -from cpl.dependency.service_provider_abc import ServiceProviderABC - - -class ScopeBuilder: - r"""Class to build :class:`cpl.dependency.scope.Scope`""" - - def __init__(self, service_provider: ServiceProviderABC) -> None: - self._service_provider = service_provider - - def build(self) -> ScopeABC: - r"""Returns scope - - Returns: - Object of type :class:`cpl.dependency.scope.Scope` - """ - return Scope(self._service_provider) diff --git a/src/cpl-dependency/cpl/dependency/service_collection.py b/src/cpl-dependency/cpl/dependency/service_collection.py index 52fa500a..47c2d1fe 100644 --- a/src/cpl-dependency/cpl/dependency/service_collection.py +++ b/src/cpl-dependency/cpl/dependency/service_collection.py @@ -4,9 +4,8 @@ from cpl.core.log.logger_abc import LoggerABC from cpl.core.typing import T, Service from cpl.core.utils.cache import Cache from cpl.dependency.service_descriptor import ServiceDescriptor -from cpl.dependency.service_lifetime_enum import ServiceLifetimeEnum +from cpl.dependency.service_lifetime import ServiceLifetimeEnum from cpl.dependency.service_provider import ServiceProvider -from cpl.dependency.service_provider_abc import ServiceProviderABC class ServiceCollection: @@ -62,9 +61,8 @@ class ServiceCollection: self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.transient, service) return self - def build(self) -> ServiceProviderABC: + def build(self) -> ServiceProvider: sp = ServiceProvider(self._service_descriptors) - ServiceProviderABC.set_global_provider(sp) return sp def add_module(self, module: str | object) -> Self: diff --git a/src/cpl-dependency/cpl/dependency/service_descriptor.py b/src/cpl-dependency/cpl/dependency/service_descriptor.py index a2febf13..99834ad4 100644 --- a/src/cpl-dependency/cpl/dependency/service_descriptor.py +++ b/src/cpl-dependency/cpl/dependency/service_descriptor.py @@ -1,6 +1,6 @@ from typing import Union, Optional -from cpl.dependency.service_lifetime_enum import ServiceLifetimeEnum +from cpl.dependency.service_lifetime import ServiceLifetimeEnum class ServiceDescriptor: diff --git a/src/cpl-dependency/cpl/dependency/service_lifetime.py b/src/cpl-dependency/cpl/dependency/service_lifetime.py new file mode 100644 index 00000000..28c3aa5d --- /dev/null +++ b/src/cpl-dependency/cpl/dependency/service_lifetime.py @@ -0,0 +1,7 @@ +from enum import Enum, auto + + +class ServiceLifetimeEnum(Enum): + singleton = auto() + scoped = auto() + transient = auto() diff --git a/src/cpl-dependency/cpl/dependency/service_lifetime_enum.py b/src/cpl-dependency/cpl/dependency/service_lifetime_enum.py deleted file mode 100644 index 339d78ea..00000000 --- a/src/cpl-dependency/cpl/dependency/service_lifetime_enum.py +++ /dev/null @@ -1,7 +0,0 @@ -from enum import Enum - - -class ServiceLifetimeEnum(Enum): - singleton = 0 - scoped = 1 - transient = 2 diff --git a/src/cpl-dependency/cpl/dependency/service_provider.py b/src/cpl-dependency/cpl/dependency/service_provider.py index 0eedc46f..b82e658c 100644 --- a/src/cpl-dependency/cpl/dependency/service_provider.py +++ b/src/cpl-dependency/cpl/dependency/service_provider.py @@ -1,4 +1,3 @@ -import copy import typing from inspect import signature, Parameter, Signature from typing import Optional, Type @@ -7,14 +6,11 @@ from cpl.core.configuration import Configuration from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC from cpl.core.environment import Environment from cpl.core.typing import T, R, Source -from cpl.dependency.scope_abc import ScopeABC -from cpl.dependency.scope_builder import ScopeBuilder from cpl.dependency.service_descriptor import ServiceDescriptor -from cpl.dependency.service_lifetime_enum import ServiceLifetimeEnum -from cpl.dependency.service_provider_abc import ServiceProviderABC +from cpl.dependency.service_lifetime import ServiceLifetimeEnum -class ServiceProvider(ServiceProviderABC): +class ServiceProvider: r"""Provider for the services Parameter @@ -31,10 +27,7 @@ class ServiceProvider(ServiceProviderABC): self, service_descriptors: list[ServiceDescriptor], ): - ServiceProviderABC.__init__(self) - self._service_descriptors: list[ServiceDescriptor] = service_descriptors - self._scope: Optional[ScopeABC] = None def _find_service(self, service_type: type) -> Optional[ServiceDescriptor]: origin_type = typing.get_origin(service_type) or service_type @@ -103,7 +96,7 @@ class ServiceProvider(ServiceProviderABC): elif parameter.annotation == Source: params.append(origin_service_type.__name__) - elif issubclass(parameter.annotation, ServiceProviderABC): + elif issubclass(parameter.annotation, ServiceProvider): params.append(self) elif issubclass(parameter.annotation, Environment): @@ -139,21 +132,6 @@ class ServiceProvider(ServiceProviderABC): return service_type(*params, *args, **kwargs) - def set_scope(self, scope: ScopeABC): - self._scope = scope - - def create_scope(self) -> ScopeABC: - descriptors = [] - - for descriptor in self._service_descriptors: - if descriptor.lifetime == ServiceLifetimeEnum.singleton: - descriptors.append(descriptor) - else: - descriptors.append(copy.deepcopy(descriptor)) - - sb = ScopeBuilder(ServiceProvider(descriptors)) - return sb.build() - def get_service(self, service_type: T, *args, **kwargs) -> Optional[R]: result = self._find_service(service_type) @@ -166,8 +144,6 @@ class ServiceProvider(ServiceProviderABC): implementation = self._build_service(service_type, *args, **kwargs) if ( result.lifetime == ServiceLifetimeEnum.singleton - or result.lifetime == ServiceLifetimeEnum.scoped - and self._scope is not None ): result.implementation = implementation diff --git a/src/cpl-dependency/cpl/dependency/service_provider_abc.py b/src/cpl-dependency/cpl/dependency/service_provider_abc.py deleted file mode 100644 index 7b0d39dd..00000000 --- a/src/cpl-dependency/cpl/dependency/service_provider_abc.py +++ /dev/null @@ -1,127 +0,0 @@ -from abc import abstractmethod, ABC -from inspect import Signature -from typing import Optional, Type - -from cpl.core.typing import T -from cpl.dependency.scope_abc import ScopeABC - - -class ServiceProviderABC(ABC): - r"""ABC for the class :class:`cpl.dependency.service_provider.ServiceProvider`""" - - _provider: Optional["ServiceProviderABC"] = None - - @abstractmethod - def __init__(self): ... - - @classmethod - def set_global_provider(cls, provider: "ServiceProviderABC"): - cls._provider = provider - - @classmethod - def get_global_provider(cls) -> Optional["ServiceProviderABC"]: - return cls._provider - - @classmethod - def get_global_service(cls, instance_type: Type[T], *args, **kwargs) -> Optional[T]: - if cls._provider is None: - return None - return cls._provider.get_service(instance_type, *args, **kwargs) - - @classmethod - def get_global_services(cls, instance_type: Type[T], *args, **kwargs) -> list[Optional[T]]: - if cls._provider is None: - return [] - return cls._provider.get_services(instance_type, *args, **kwargs) - - @abstractmethod - def _build_by_signature(self, sig: Signature, origin_service_type: type = None) -> list[T]: ... - - @abstractmethod - def _build_service(self, service_type: type, *args, **kwargs) -> object: - r"""Creates instance of given type - - Parameter - --------- - instance_type: :class:`type` - The type of the searched instance - - Returns - ------- - Object of the given type - """ - - @abstractmethod - def set_scope(self, scope: ScopeABC): - r"""Sets the scope of service provider - - Parameter - --------- - Object of type :class:`cpl.dependency.scope_abc.ScopeABC` - Service scope - """ - - @abstractmethod - def create_scope(self) -> ScopeABC: - r"""Creates a service scope - - Returns - ------- - Object of type :class:`cpl.dependency.scope_abc.ScopeABC` - """ - - @abstractmethod - def get_service(self, instance_type: Type[T], *args, **kwargs) -> Optional[T]: - r"""Returns instance of given type - - Parameter - --------- - instance_type: :class:`cpl.core.type.T` - The type of the searched instance - - Returns - ------- - Object of type Optional[:class:`cpl.core.type.T`] - """ - - @abstractmethod - def get_service_type(self, instance_type: Type[T]) -> Optional[Type[T]]: - r"""Returns the registered service type for loggers - - Parameter - --------- - instance_type: :class:`cpl.core.type.T` - The type of the searched instance - - Returns - ------- - Object of type Optional[:class:`type`] - """ - - @abstractmethod - def get_services(self, service_type: Type[T], *args, **kwargs) -> list[Optional[T]]: - r"""Returns instance of given type - - Parameter - --------- - service_type: :class:`cpl.core.type.T` - The type of the searched instance - - Returns - ------- - Object of type list[Optional[:class:`cpl.core.type.T`] - """ - - @abstractmethod - def get_service_types(self, service_type: Type[T]) -> list[Type[T]]: - r"""Returns all registered service types - - Parameter - --------- - service_type: :class:`cpl.core.type.T` - The type of the searched instance - - Returns - ------- - Object of type list[:class:`type`] - """ diff --git a/unittests/unittests/application.py b/unittests/unittests/application.py index 5ce02a46..c39b11fa 100644 --- a/unittests/unittests/application.py +++ b/unittests/unittests/application.py @@ -2,7 +2,7 @@ import unittest from cpl.application import ApplicationABC from cpl.core.configuration import ConfigurationABC -from cpl.dependency import ServiceProviderABC +from cpl.dependency import ServiceProvider from unittests_cli.cli_test_suite import CLITestSuite from unittests_core.core_test_suite import CoreTestSuite from unittests_query.query_test_suite import QueryTestSuite @@ -10,7 +10,7 @@ from unittests_translation.translation_test_suite import TranslationTestSuite class Application(ApplicationABC): - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + def __init__(self, config: ConfigurationABC, services: ServiceProvider): ApplicationABC.__init__(self, config, services) def configure(self): ... diff --git a/unittests/unittests_core/di/service_collection_test_case.py b/unittests/unittests_core/di/service_collection_test_case.py index b9f6453c..6cb287f1 100644 --- a/unittests/unittests_core/di/service_collection_test_case.py +++ b/unittests/unittests_core/di/service_collection_test_case.py @@ -2,7 +2,7 @@ import unittest from unittest.mock import Mock from cpl.core.configuration import Configuration -from cpl.dependency import ServiceCollection, ServiceLifetimeEnum, ServiceProviderABC +from cpl.dependency import ServiceCollection, ServiceLifetimeEnum, ServiceProvider class ServiceCollectionTestCase(unittest.TestCase): @@ -51,6 +51,6 @@ class ServiceCollectionTestCase(unittest.TestCase): service = self._sc._service_descriptors[0] self.assertIsNone(service.implementation) sp = self._sc.build() - self.assertTrue(isinstance(sp, ServiceProviderABC)) + self.assertTrue(isinstance(sp, ServiceProvider)) self.assertTrue(isinstance(sp.get_service(Mock), Mock)) self.assertIsNotNone(service.implementation) diff --git a/unittests/unittests_core/di/service_provider_test_case.py b/unittests/unittests_core/di/service_provider_test_case.py index 68dcc443..3cf8ff4f 100644 --- a/unittests/unittests_core/di/service_provider_test_case.py +++ b/unittests/unittests_core/di/service_provider_test_case.py @@ -1,7 +1,7 @@ import unittest from cpl.core.configuration import Configuration -from cpl.dependency import ServiceCollection, ServiceProviderABC +from cpl.dependency import ServiceCollection, ServiceProvider class ServiceCount: @@ -10,21 +10,21 @@ class ServiceCount: class TestService: - def __init__(self, sp: ServiceProviderABC, count: ServiceCount): + def __init__(self, sp: ServiceProvider, count: ServiceCount): count.count += 1 self.sp = sp self.id = count.count class DifferentService: - def __init__(self, sp: ServiceProviderABC, count: ServiceCount): + def __init__(self, sp: ServiceProvider, count: ServiceCount): count.count += 1 self.sp = sp self.id = count.count class MoreDifferentService: - def __init__(self, sp: ServiceProviderABC, count: ServiceCount): + def __init__(self, sp: ServiceProvider, count: ServiceCount): count.count += 1 self.sp = sp self.id = count.count @@ -72,7 +72,7 @@ class ServiceProviderTestCase(unittest.TestCase): singleton = self._services.get_service(TestService) transient = self._services.get_service(DifferentService) with self._services.create_scope() as scope: - sp: ServiceProviderABC = scope.service_provider + sp: ServiceProvider = scope.service_provider self.assertNotEqual(sp, self._services) y = sp.get_service(DifferentService) self.assertIsNotNone(y)