WIP: dev into master #184

Draft
edraft wants to merge 121 commits from dev into master
72 changed files with 261 additions and 185 deletions
Showing only changes of commit b97bc0a3ed - Show all commits

View File

@@ -1,10 +1,9 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import Optional from typing import Optional
from cpl.core.configuration import Configuration from cpl.dependency.service_provider_abc import ServiceProviderABC
from cpl.core.console.console import Console from cpl.core.console.console import Console
from cpl.core.dependency_injection.service_provider_abc import ServiceProviderABC
from cpl.core.environment import Environment
class ApplicationABC(ABC): class ApplicationABC(ABC):
@@ -13,7 +12,7 @@ class ApplicationABC(ABC):
Parameters: Parameters:
config: :class:`cpl.core.configuration.configuration_abc.ConfigurationABC` config: :class:`cpl.core.configuration.configuration_abc.ConfigurationABC`
Contains object loaded from appsettings Contains object loaded from appsettings
services: :class:`cpl.core.dependency_injection.service_provider_abc.ServiceProviderABC` services: :class:`cpl.dependency.service_provider_abc.ServiceProviderABC`
Contains instances of prepared objects Contains instances of prepared objects
""" """
@@ -47,12 +46,12 @@ class ApplicationABC(ABC):
def configure(self): def configure(self):
r"""Configure the application r"""Configure the application
Called by :class:`cpl.core.application.application_abc.ApplicationABC.run` Called by :class:`cpl.application.application_abc.ApplicationABC.run`
""" """
@abstractmethod @abstractmethod
def main(self): def main(self):
r"""Custom entry point r"""Custom entry point
Called by :class:`cpl.core.application.application_abc.ApplicationABC.run` Called by :class:`cpl.application.application_abc.ApplicationABC.run`
""" """

View File

@@ -1,23 +1,23 @@
from typing import Type, Optional, Callable, Union from typing import Type, Optional, Callable, Union
from cpl.core.application.application_abc import ApplicationABC from cpl.application.application_abc import ApplicationABC
from cpl.core.application.application_builder_abc import ApplicationBuilderABC from cpl.application.application_builder_abc import ApplicationBuilderABC
from cpl.core.application.application_extension_abc import ApplicationExtensionABC from cpl.application.application_extension_abc import ApplicationExtensionABC
from cpl.core.application.async_application_extension_abc import AsyncApplicationExtensionABC from cpl.application.async_application_extension_abc import AsyncApplicationExtensionABC
from cpl.core.application.async_startup_abc import AsyncStartupABC from cpl.application.async_startup_abc import AsyncStartupABC
from cpl.core.application.async_startup_extension_abc import AsyncStartupExtensionABC from cpl.application.async_startup_extension_abc import AsyncStartupExtensionABC
from cpl.core.application.startup_abc import StartupABC from cpl.application.startup_abc import StartupABC
from cpl.core.application.startup_extension_abc import StartupExtensionABC from cpl.application.startup_extension_abc import StartupExtensionABC
from cpl.core.configuration.configuration import Configuration from cpl.core.configuration.configuration import Configuration
from cpl.core.dependency_injection.service_collection import ServiceCollection from cpl.dependency.service_collection import ServiceCollection
from cpl.core.environment import Environment from cpl.core.environment import Environment
class ApplicationBuilder(ApplicationBuilderABC): class ApplicationBuilder(ApplicationBuilderABC):
r"""This is class is used to build an object of :class:`cpl.core.application.application_abc.ApplicationABC` r"""This is class is used to build an object of :class:`cpl.application.application_abc.ApplicationABC`
Parameter: Parameter:
app: Type[:class:`cpl.core.application.application_abc.ApplicationABC`] app: Type[:class:`cpl.application.application_abc.ApplicationABC`]
Application to build Application to build
""" """

View File

@@ -1,12 +1,12 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from typing import Type from typing import Type
from cpl.core.application.application_abc import ApplicationABC from cpl.application.application_abc import ApplicationABC
from cpl.core.application.startup_abc import StartupABC from cpl.application.startup_abc import StartupABC
class ApplicationBuilderABC(ABC): class ApplicationBuilderABC(ABC):
r"""ABC for the :class:`cpl.core.application.application_builder.ApplicationBuilder`""" r"""ABC for the :class:`cpl.application.application_builder.ApplicationBuilder`"""
@abstractmethod @abstractmethod
def __init__(self, *args): def __init__(self, *args):
@@ -17,7 +17,7 @@ class ApplicationBuilderABC(ABC):
r"""Sets the custom startup class to use r"""Sets the custom startup class to use
Parameter: Parameter:
startup: Type[:class:`cpl.core.application.startup_abc.StartupABC`] startup: Type[:class:`cpl.application.startup_abc.StartupABC`]
Startup class to use Startup class to use
""" """
@@ -26,7 +26,7 @@ class ApplicationBuilderABC(ABC):
r"""Sets the custom startup class to use async r"""Sets the custom startup class to use async
Parameter: Parameter:
startup: Type[:class:`cpl.core.application.startup_abc.StartupABC`] startup: Type[:class:`cpl.application.startup_abc.StartupABC`]
Startup class to use Startup class to use
""" """
@@ -35,7 +35,7 @@ class ApplicationBuilderABC(ABC):
r"""Creates custom application object r"""Creates custom application object
Returns: Returns:
Object of :class:`cpl.core.application.application_abc.ApplicationABC` Object of :class:`cpl.application.application_abc.ApplicationABC`
""" """
@abstractmethod @abstractmethod
@@ -43,5 +43,5 @@ class ApplicationBuilderABC(ABC):
r"""Creates custom application object async r"""Creates custom application object async
Returns: Returns:
Object of :class:`cpl.core.application.application_abc.ApplicationABC` Object of :class:`cpl.application.application_abc.ApplicationABC`
""" """

View File

@@ -1,7 +1,7 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from cpl.core.configuration.configuration import Configuration from cpl.core.configuration.configuration import Configuration
from cpl.core.dependency_injection import ServiceProviderABC from cpl.dependency import ServiceProviderABC
class ApplicationExtensionABC(ABC): class ApplicationExtensionABC(ABC):

View File

@@ -1,7 +1,7 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from cpl.core.configuration.configuration import Configuration from cpl.core.configuration.configuration import Configuration
from cpl.core.dependency_injection import ServiceProviderABC from cpl.dependency import ServiceProviderABC
class AsyncApplicationExtensionABC(ABC): class AsyncApplicationExtensionABC(ABC):

View File

@@ -1,6 +1,6 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from cpl.core.dependency_injection.service_collection_abc import ServiceCollectionABC from cpl.dependency.service_collection_abc import ServiceCollectionABC
class AsyncStartupABC(ABC): class AsyncStartupABC(ABC):
@@ -19,5 +19,5 @@ class AsyncStartupABC(ABC):
r"""Creates service provider r"""Creates service provider
Parameter: Parameter:
services: :class:`cpl.core.dependency_injection.service_collection_abc` services: :class:`cpl.dependency.service_collection_abc`
""" """

View File

@@ -1,7 +1,7 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from cpl.core.configuration.configuration import Configuration from cpl.core.configuration.configuration import Configuration
from cpl.core.dependency_injection.service_collection_abc import ServiceCollectionABC from cpl.dependency.service_collection_abc import ServiceCollectionABC
from cpl.core.environment.environment import Environment from cpl.core.environment.environment import Environment
@@ -26,6 +26,6 @@ class AsyncStartupExtensionABC(ABC):
r"""Creates service provider r"""Creates service provider
Parameter: Parameter:
services: :class:`cpl.core.dependency_injection.service_collection_abc` services: :class:`cpl.dependency.service_collection_abc`
env: :class:`cpl.core.environment.application_environment_abc` env: :class:`cpl.core.environment.application_environment_abc`
""" """

View File

@@ -1,7 +1,7 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from cpl.core.configuration import Configuration from cpl.core.configuration import Configuration
from cpl.core.dependency_injection.service_collection_abc import ServiceCollectionABC from cpl.dependency.service_collection_abc import ServiceCollectionABC
from cpl.core.environment import Environment from cpl.core.environment import Environment
@@ -26,6 +26,6 @@ class StartupABC(ABC):
r"""Creates service provider r"""Creates service provider
Parameter: Parameter:
services: :class:`cpl.core.dependency_injection.service_collection_abc` services: :class:`cpl.dependency.service_collection_abc`
env: :class:`cpl.core.environment.application_environment_abc` env: :class:`cpl.core.environment.application_environment_abc`
""" """

View File

@@ -2,7 +2,7 @@ from abc import ABC, abstractmethod
from cpl.core.configuration import Configuration from cpl.core.configuration import Configuration
from cpl.core.dependency_injection.service_collection_abc import ServiceCollectionABC from cpl.dependency.service_collection_abc import ServiceCollectionABC
from cpl.core.environment.environment import Environment from cpl.core.environment.environment import Environment
@@ -28,6 +28,6 @@ class StartupExtensionABC(ABC):
r"""Creates service provider r"""Creates service provider
Parameter: Parameter:
services: :class:`cpl.core.dependency_injection.service_collection_abc` services: :class:`cpl.dependency.service_collection_abc`
env: :class:`cpl.core.environment.application_environment_abc` env: :class:`cpl.core.environment.application_environment_abc`
""" """

View File

@@ -0,0 +1,30 @@
[build-system]
requires = ["setuptools>=70.1.0", "wheel>=0.43.0"]
build-backend = "setuptools.build_meta"
[project]
name = "cpl-application"
version = "2024.7.0"
description = "CPL application"
readme ="CPL application package"
requires-python = ">=3.12"
license = { text = "MIT" }
authors = [
{ name = "Sven Heidemann", email = "sven.heidemann@sh-edraft.de" }
]
keywords = ["cpl", "application", "backend", "shared", "library"]
dynamic = ["dependencies", "optional-dependencies"]
[project.urls]
Homepage = "https://www.sh-edraft.de"
[tool.setuptools.packages.find]
where = ["."]
include = ["cpl*"]
[tool.setuptools.dynamic]
dependencies = { file = ["requirements.txt"] }
optional-dependencies.dev = { file = ["requirements.dev.txt"] }

View File

@@ -0,0 +1 @@
black==25.1.0

View File

@@ -0,0 +1,2 @@
cpl-core
cpl-dependency

View File

@@ -1,18 +0,0 @@
from cpl.core.dependency_injection.scope import Scope
from cpl.core.dependency_injection.scope_abc import ScopeABC
from cpl.core.dependency_injection.service_provider_abc import ServiceProviderABC
class ScopeBuilder:
r"""Class to build :class:`cpl.core.dependency_injection.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.core.dependency_injection.scope.Scope`
"""
return Scope(self._service_provider)

View File

@@ -4,8 +4,8 @@ import mysql.connector as sql
from mysql.connector.abstracts import MySQLConnectionAbstract from mysql.connector.abstracts import MySQLConnectionAbstract
from mysql.connector.cursor import MySQLCursorBuffered from mysql.connector.cursor import MySQLCursorBuffered
from cpl.core.database.connection.database_connection_abc import DatabaseConnectionABC from cpl.database.connection.database_connection_abc import DatabaseConnectionABC
from cpl.core.database.database_settings import DatabaseSettings from cpl.database.database_settings import DatabaseSettings
from cpl.core.utils.credential_manager import CredentialManager from cpl.core.utils.credential_manager import CredentialManager

View File

@@ -1,12 +1,12 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from cpl.core.database.database_settings import DatabaseSettings from cpl.database.database_settings import DatabaseSettings
from mysql.connector.abstracts import MySQLConnectionAbstract from mysql.connector.abstracts import MySQLConnectionAbstract
from mysql.connector.cursor import MySQLCursorBuffered from mysql.connector.cursor import MySQLCursorBuffered
class DatabaseConnectionABC(ABC): class DatabaseConnectionABC(ABC):
r"""ABC for the :class:`cpl.core.database.connection.database_connection.DatabaseConnection`""" r"""ABC for the :class:`cpl.database.connection.database_connection.DatabaseConnection`"""
@abstractmethod @abstractmethod
def __init__(self): def __init__(self):

View File

@@ -1,10 +1,10 @@
from typing import Optional from typing import Optional
from cpl.core.database.connection.database_connection import DatabaseConnection from cpl.database.connection.database_connection import DatabaseConnection
from cpl.core.database.connection.database_connection_abc import DatabaseConnectionABC from cpl.database.connection.database_connection_abc import DatabaseConnectionABC
from cpl.core.database.context.database_context_abc import DatabaseContextABC from cpl.database.context.database_context_abc import DatabaseContextABC
from cpl.core.database.database_settings import DatabaseSettings from cpl.database.database_settings import DatabaseSettings
from mysql.connector.cursor import MySQLCursorBuffered from mysql.connector.cursor import MySQLCursorBuffered
@@ -12,7 +12,7 @@ class DatabaseContext(DatabaseContextABC):
r"""Representation of the database context r"""Representation of the database context
Parameter: Parameter:
database_settings: :class:`cpl.core.database.database_settings.DatabaseSettings` database_settings: :class:`cpl.database.database_settings.DatabaseSettings`
""" """
def __init__(self): def __init__(self):

View File

@@ -1,11 +1,11 @@
from abc import ABC, abstractmethod from abc import ABC, abstractmethod
from cpl.core.database.database_settings import DatabaseSettings from cpl.database.database_settings import DatabaseSettings
from mysql.connector.cursor import MySQLCursorBuffered from mysql.connector.cursor import MySQLCursorBuffered
class DatabaseContextABC(ABC): class DatabaseContextABC(ABC):
r"""ABC for the :class:`cpl.core.database.context.database_context.DatabaseContext`""" r"""ABC for the :class:`cpl.database.context.database_context.DatabaseContext`"""
@abstractmethod @abstractmethod
def __init__(self, *args): def __init__(self, *args):
@@ -21,7 +21,7 @@ class DatabaseContextABC(ABC):
r"""Connects to a database by connection settings r"""Connects to a database by connection settings
Parameter: Parameter:
database_settings :class:`cpl.core.database.database_settings.DatabaseSettings` database_settings :class:`cpl.database.database_settings.DatabaseSettings`
""" """
@abstractmethod @abstractmethod

View File

@@ -0,0 +1,30 @@
[build-system]
requires = ["setuptools>=70.1.0", "wheel>=0.43.0"]
build-backend = "setuptools.build_meta"
[project]
name = "cpl-database"
version = "2024.7.0"
description = "CPL database"
readme ="CPL database package"
requires-python = ">=3.12"
license = { text = "MIT" }
authors = [
{ name = "Sven Heidemann", email = "sven.heidemann@sh-edraft.de" }
]
keywords = ["cpl", "database", "backend", "shared", "library"]
dynamic = ["dependencies", "optional-dependencies"]
[project.urls]
Homepage = "https://www.sh-edraft.de"
[tool.setuptools.packages.find]
where = ["."]
include = ["cpl*"]
[tool.setuptools.dynamic]
dependencies = { file = ["requirements.txt"] }
optional-dependencies.dev = { file = ["requirements.dev.txt"] }

View File

@@ -0,0 +1 @@
black==25.1.0

View File

@@ -0,0 +1,2 @@
cpl-core
cpl-dependency

View File

@@ -1,5 +1,5 @@
from cpl.core.dependency_injection.scope_abc import ScopeABC from cpl.dependency.scope_abc import ScopeABC
from cpl.core.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.dependency.service_provider_abc import ServiceProviderABC
class Scope(ScopeABC): class Scope(ScopeABC):

View File

@@ -2,7 +2,7 @@ from abc import ABC, abstractmethod
class ScopeABC(ABC): class ScopeABC(ABC):
r"""ABC for the class :class:`cpl.core.dependency_injection.scope.Scope`""" r"""ABC for the class :class:`cpl.dependency.scope.Scope`"""
def __init__(self): def __init__(self):
pass pass
@@ -13,7 +13,7 @@ class ScopeABC(ABC):
r"""Returns to service provider of scope r"""Returns to service provider of scope
Returns: Returns:
Object of type :class:`cpl.core.dependency_injection.service_provider_abc.ServiceProviderABC` Object of type :class:`cpl.dependency.service_provider_abc.ServiceProviderABC`
""" """
@abstractmethod @abstractmethod

View File

@@ -0,0 +1,18 @@
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)

View File

@@ -1,12 +1,12 @@
from typing import Union, Type, Callable, Optional from typing import Union, Type, Callable, Optional
from cpl.core.database.context.database_context_abc import DatabaseContextABC from cpl.database.context.database_context_abc import DatabaseContextABC
from cpl.core.database.database_settings import DatabaseSettings from cpl.database.database_settings import DatabaseSettings
from cpl.core.dependency_injection.service_collection_abc import ServiceCollectionABC from cpl.dependency.service_collection_abc import ServiceCollectionABC
from cpl.core.dependency_injection.service_descriptor import ServiceDescriptor from cpl.dependency.service_descriptor import ServiceDescriptor
from cpl.core.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum from cpl.dependency.service_lifetime_enum import ServiceLifetimeEnum
from cpl.core.dependency_injection.service_provider import ServiceProvider from cpl.dependency.service_provider import ServiceProvider
from cpl.core.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.dependency.service_provider_abc import ServiceProviderABC
from cpl.core.log.logger import Logger from cpl.core.log.logger import Logger
from cpl.core.log.logger_abc import LoggerABC from cpl.core.log.logger_abc import LoggerABC
from cpl.core.pipes.pipe_abc import PipeABC from cpl.core.pipes.pipe_abc import PipeABC

View File

@@ -1,14 +1,14 @@
from abc import abstractmethod, ABC from abc import abstractmethod, ABC
from typing import Type from typing import Type
from cpl.core.database.context.database_context_abc import DatabaseContextABC from cpl.database.context.database_context_abc import DatabaseContextABC
from cpl.core.database.database_settings import DatabaseSettings from cpl.database.database_settings import DatabaseSettings
from cpl.core.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.dependency.service_provider_abc import ServiceProviderABC
from cpl.core.typing import T, Source from cpl.core.typing import T, Source
class ServiceCollectionABC(ABC): class ServiceCollectionABC(ABC):
r"""ABC for the class :class:`cpl.core.dependency_injection.service_collection.ServiceCollection`""" r"""ABC for the class :class:`cpl.dependency.service_collection.ServiceCollection`"""
@abstractmethod @abstractmethod
def __init__(self): def __init__(self):
@@ -19,7 +19,7 @@ class ServiceCollectionABC(ABC):
r"""Adds database context r"""Adds database context
Parameter: Parameter:
db_context: Type[:class:`cpl.core.database.context.database_context_abc.DatabaseContextABC`] db_context: Type[:class:`cpl.database.context.database_context_abc.DatabaseContextABC`]
Database context Database context
""" """
@@ -50,7 +50,7 @@ class ServiceCollectionABC(ABC):
Object of the service Object of the service
Returns: Returns:
self: :class:`cpl.core.dependency_injection.service_collection_abc.ServiceCollectionABC` self: :class:`cpl.dependency.service_collection_abc.ServiceCollectionABC`
""" """
@abstractmethod @abstractmethod
@@ -64,7 +64,7 @@ class ServiceCollectionABC(ABC):
Object of the service Object of the service
Returns: Returns:
self: :class:`cpl.core.dependency_injection.service_collection_abc.ServiceCollectionABC` self: :class:`cpl.dependency.service_collection_abc.ServiceCollectionABC`
""" """
@abstractmethod @abstractmethod
@@ -78,7 +78,7 @@ class ServiceCollectionABC(ABC):
Object of the service Object of the service
Returns: Returns:
self: :class:`cpl.core.dependency_injection.service_collection_abc.ServiceCollectionABC` self: :class:`cpl.dependency.service_collection_abc.ServiceCollectionABC`
""" """
@abstractmethod @abstractmethod
@@ -86,5 +86,5 @@ class ServiceCollectionABC(ABC):
r"""Creates instance of the service provider r"""Creates instance of the service provider
Returns: Returns:
Object of type :class:`cpl.core.dependency_injection.service_provider_abc.ServiceProviderABC` Object of type :class:`cpl.dependency.service_provider_abc.ServiceProviderABC`
""" """

View File

@@ -1,6 +1,6 @@
from typing import Union, Optional from typing import Union, Optional
from cpl.core.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum from cpl.dependency.service_lifetime_enum import ServiceLifetimeEnum
class ServiceDescriptor: class ServiceDescriptor:
@@ -9,7 +9,7 @@ class ServiceDescriptor:
Parameter: Parameter:
implementation: Union[:class:`type`, Optional[:class:`object`]] implementation: Union[:class:`type`, Optional[:class:`object`]]
Object or type of service Object or type of service
lifetime: :class:`cpl.core.dependency_injection.service_lifetime_enum.ServiceLifetimeEnum` lifetime: :class:`cpl.dependency.service_lifetime_enum.ServiceLifetimeEnum`
Lifetime of the service Lifetime of the service
""" """

View File

@@ -5,14 +5,14 @@ from typing import Optional
from cpl.core.configuration import Configuration from cpl.core.configuration import Configuration
from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC
from cpl.core.database.context.database_context_abc import DatabaseContextABC from cpl.database.context.database_context_abc import DatabaseContextABC
from cpl.core.dependency_injection.scope_abc import ScopeABC
from cpl.core.dependency_injection.scope_builder import ScopeBuilder
from cpl.core.dependency_injection.service_descriptor import ServiceDescriptor
from cpl.core.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum
from cpl.core.dependency_injection.service_provider_abc import ServiceProviderABC
from cpl.core.environment import Environment from cpl.core.environment import Environment
from cpl.core.typing import T, R, Source 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
class ServiceProvider(ServiceProviderABC): class ServiceProvider(ServiceProviderABC):
@@ -20,11 +20,11 @@ class ServiceProvider(ServiceProviderABC):
Parameter Parameter
--------- ---------
service_descriptors: list[:class:`cpl.core.dependency_injection.service_descriptor.ServiceDescriptor`] service_descriptors: list[:class:`cpl.dependency.service_descriptor.ServiceDescriptor`]
Descriptor of the service Descriptor of the service
config: :class:`cpl.core.configuration.configuration_abc.ConfigurationABC` config: :class:`cpl.core.configuration.configuration_abc.ConfigurationABC`
CPL Configuration CPL Configuration
db_context: Optional[:class:`cpl.core.database.context.database_context_abc.DatabaseContextABC`] db_context: Optional[:class:`cpl.database.context.database_context_abc.DatabaseContextABC`]
Database representation Database representation
""" """

View File

@@ -3,12 +3,12 @@ from abc import abstractmethod, ABC
from inspect import Signature, signature from inspect import Signature, signature
from typing import Optional from typing import Optional
from cpl.core.dependency_injection.scope_abc import ScopeABC from cpl.dependency.scope_abc import ScopeABC
from cpl.core.typing import T, R from cpl.core.typing import T, R
class ServiceProviderABC(ABC): class ServiceProviderABC(ABC):
r"""ABC for the class :class:`cpl.core.dependency_injection.service_provider.ServiceProvider`""" r"""ABC for the class :class:`cpl.dependency.service_provider.ServiceProvider`"""
_provider: Optional["ServiceProviderABC"] = None _provider: Optional["ServiceProviderABC"] = None
@@ -44,7 +44,7 @@ class ServiceProviderABC(ABC):
Parameter Parameter
--------- ---------
Object of type :class:`cpl.core.dependency_injection.scope_abc.ScopeABC` Object of type :class:`cpl.dependency.scope_abc.ScopeABC`
Service scope Service scope
""" """
@@ -54,7 +54,7 @@ class ServiceProviderABC(ABC):
Returns Returns
------- -------
Object of type :class:`cpl.core.dependency_injection.scope_abc.ScopeABC` Object of type :class:`cpl.dependency.scope_abc.ScopeABC`
""" """
@abstractmethod @abstractmethod

View File

@@ -0,0 +1,30 @@
[build-system]
requires = ["setuptools>=70.1.0", "wheel>=0.43.0"]
build-backend = "setuptools.build_meta"
[project]
name = "cpl-dependency"
version = "2024.7.0"
description = "CPL dependency"
readme ="CPL dependency package"
requires-python = ">=3.12"
license = { text = "MIT" }
authors = [
{ name = "Sven Heidemann", email = "sven.heidemann@sh-edraft.de" }
]
keywords = ["cpl", "dependency", "backend", "shared", "library"]
dynamic = ["dependencies", "optional-dependencies"]
[project.urls]
Homepage = "https://www.sh-edraft.de"
[tool.setuptools.packages.find]
where = ["."]
include = ["cpl*"]
[tool.setuptools.dynamic]
dependencies = { file = ["requirements.txt"] }
optional-dependencies.dev = { file = ["requirements.dev.txt"] }

View File

@@ -0,0 +1 @@
black==25.1.0

View File

@@ -0,0 +1 @@
cpl-core

View File

@@ -18,7 +18,7 @@ def add_mail(self):
def init(): def init():
from cpl.core.dependency_injection import ServiceCollection from cpl.dependency import ServiceCollection
ServiceCollection.add_mail = add_mail ServiceCollection.add_mail = add_mail

View File

@@ -19,7 +19,7 @@ def add_translation(self):
def init(): def init():
from cpl.core.dependency_injection import ServiceCollection from cpl.dependency import ServiceCollection
ServiceCollection.add_translation = add_translation ServiceCollection.add_translation = add_translation

View File

@@ -1,7 +1,7 @@
from cpl.core.application import ApplicationABC from cpl.application import ApplicationABC
from cpl.core.configuration import ConfigurationABC from cpl.core.configuration import ConfigurationABC
from cpl.core.console import Console from cpl.core.console import Console
from cpl.core.dependency_injection import ServiceProviderABC from cpl.dependency import ServiceProviderABC
class Application(ApplicationABC): class Application(ApplicationABC):

View File

@@ -1,5 +1,5 @@
import asyncio import asyncio
from cpl.core.application import ApplicationBuilder from cpl.application import ApplicationBuilder
from application import Application from application import Application
from startup import Startup from startup import Startup

View File

@@ -1,6 +1,6 @@
from cpl.core.application.async_startup_abc import AsyncStartupABC from cpl.application.async_startup_abc import AsyncStartupABC
from cpl.core.configuration import ConfigurationABC from cpl.core.configuration import ConfigurationABC
from cpl.core.dependency_injection import ServiceProviderABC, ServiceCollectionABC from cpl.dependency import ServiceProviderABC, ServiceCollectionABC
from cpl.core.environment import Environment from cpl.core.environment import Environment
@@ -13,7 +13,5 @@ class Startup(AsyncStartupABC):
) -> ConfigurationABC: ) -> ConfigurationABC:
return configuration return configuration
async def configure_services( async def configure_services(self, services: ServiceCollectionABC, environment: Environment) -> ServiceProviderABC:
self, services: ServiceCollectionABC, environment: Environment
) -> ServiceProviderABC:
return services.build_service_provider() return services.build_service_provider()

View File

@@ -1,17 +1,18 @@
from typing import Optional from typing import Optional
from cpl.core.application import ApplicationABC from cpl.application import ApplicationABC
from cpl.core.configuration import ConfigurationABC from cpl.core.configuration import Configuration
from cpl.core.console import Console from cpl.core.console import Console
from cpl.core.dependency_injection import ServiceProviderABC from cpl.core.environment import Environment
from cpl.dependency import ServiceProviderABC
from cpl.core.log import LoggerABC from cpl.core.log import LoggerABC
from model.user_repo_abc import UserRepoABC from model.user_repo_abc import UserRepoABC
from model.user_repo import UserRepo from model.user_repo import UserRepo
class Application(ApplicationABC): class Application(ApplicationABC):
def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): def __init__(self, services: ServiceProviderABC):
ApplicationABC.__init__(self, config, services) ApplicationABC.__init__(self, services)
self._logger: Optional[LoggerABC] = None self._logger: Optional[LoggerABC] = None
@@ -19,10 +20,8 @@ class Application(ApplicationABC):
self._logger = self._services.get_service(LoggerABC) self._logger = self._services.get_service(LoggerABC)
def main(self): def main(self):
self._logger.header(f"{self._configuration.environment.application_name}:") self._logger.debug(f"Host: {Environment.get_host_name()}")
self._logger.debug(f"Host: {self._configuration.environment.host_name}") self._logger.debug(f"Environment: {Environment.get_environment()}")
self._logger.debug(f"Environment: {self._configuration.environment.environment_name}")
self._logger.debug(f"Customer: {self._configuration.environment.customer}")
user_repo: UserRepo = self._services.get_service(UserRepoABC) user_repo: UserRepo = self._services.get_service(UserRepoABC)
if len(user_repo.get_users()) == 0: if len(user_repo.get_users()) == 0:

View File

@@ -1,4 +1,4 @@
from cpl.core.application import ApplicationBuilder from cpl.application import ApplicationBuilder
from application import Application from application import Application
from startup import Startup from startup import Startup

View File

@@ -1,4 +1,4 @@
from cpl.core.database import TableABC from cpl.database import TableABC
class CityModel(TableABC): class CityModel(TableABC):

View File

@@ -1,5 +1,5 @@
from cpl.core.database import DatabaseSettings from cpl.database import DatabaseSettings
from cpl.core.database.context import DatabaseContext from cpl.database.context import DatabaseContext
class DBContext(DatabaseContext): class DBContext(DatabaseContext):

View File

@@ -1,4 +1,4 @@
from cpl.core.database import TableABC from cpl.database import TableABC
from .city_model import CityModel from .city_model import CityModel

View File

@@ -1,5 +1,5 @@
from cpl.core.console import Console from cpl.core.console import Console
from cpl.core.database.context import DatabaseContextABC from cpl.database.context import DatabaseContextABC
from .city_model import CityModel from .city_model import CityModel
from .user_model import UserModel from .user_model import UserModel

View File

@@ -1,8 +1,8 @@
from cpl.core.application import StartupABC from cpl.application import StartupABC
from cpl.core.configuration import ConfigurationABC from cpl.core.configuration import Configuration
from cpl.core.database import DatabaseSettings from cpl.database import DatabaseSettings
from cpl.core.dependency_injection import ServiceCollectionABC, ServiceProviderABC from cpl.dependency import ServiceCollectionABC, ServiceProviderABC
from cpl.core.environment import EnvironmentABC from cpl.core.environment import Environment
from cpl.core.log import Logger, LoggerABC from cpl.core.log import Logger, LoggerABC
from model.db_context import DBContext from model.db_context import DBContext
@@ -16,28 +16,18 @@ class Startup(StartupABC):
self._configuration = None self._configuration = None
def configure_configuration( def configure_configuration(self, configuration: Configuration, environment: Environment):
self, configuration: ConfigurationABC, environment: EnvironmentABC
) -> ConfigurationABC:
configuration.add_environment_variables("PYTHON_")
configuration.add_environment_variables("CPL_")
configuration.add_json_file(f"appsettings.json") configuration.add_json_file(f"appsettings.json")
configuration.add_json_file(f"appsettings.{configuration.environment.environment_name}.json") configuration.add_json_file(f"appsettings.{environment.get_environment()}.json")
configuration.add_json_file(f"appsettings.{configuration.environment.host_name}.json", optional=True) configuration.add_json_file(f"appsettings.{environment.get_host_name()}.json", optional=True)
self._configuration = configuration self._configuration = configuration
return configuration def configure_services(self, services: ServiceCollectionABC, environment: Environment):
def configure_services(
self, services: ServiceCollectionABC, environment: EnvironmentABC
) -> ServiceProviderABC:
# Create and connect to database # Create and connect to database
self._configuration.parse_console_arguments(services) db_settings: DatabaseSettings = self._configuration.get(DatabaseSettings)
db_settings: DatabaseSettings = self._configuration.get_configuration(DatabaseSettings)
services.add_db_context(DBContext, db_settings) services.add_db_context(DBContext, db_settings)
services.add_singleton(UserRepoABC, UserRepo) services.add_singleton(UserRepoABC, UserRepo)
services.add_singleton(LoggerABC, Logger) services.add_singleton(LoggerABC, Logger)
return services.build_service_provider()

View File

@@ -1,8 +1,8 @@
from cpl.core.application import ApplicationABC from cpl.application import ApplicationABC
from cpl.core.configuration import ConfigurationABC from cpl.core.configuration import ConfigurationABC
from cpl.core.console.console import Console from cpl.core.console.console import Console
from cpl.core.dependency_injection import ServiceProviderABC from cpl.dependency import ServiceProviderABC
from cpl.core.dependency_injection.scope import Scope from cpl.dependency.scope import Scope
from di.static_test import StaticTest from di.static_test import StaticTest
from di.test_abc import TestABC from di.test_abc import TestABC
from di.test_service import TestService from di.test_service import TestService

View File

@@ -1,4 +1,4 @@
from cpl.core.application import ApplicationBuilder from cpl.application import ApplicationBuilder
from di.application import Application from di.application import Application
from di.startup import Startup from di.startup import Startup

View File

@@ -1,6 +1,6 @@
from cpl.core.application import StartupABC from cpl.application import StartupABC
from cpl.core.configuration import ConfigurationABC from cpl.core.configuration import ConfigurationABC
from cpl.core.dependency_injection import ServiceProviderABC, ServiceCollectionABC from cpl.dependency import ServiceProviderABC, ServiceCollectionABC
from cpl.core.environment import Environment from cpl.core.environment import Environment
from di.test1_service import Test1Service from di.test1_service import Test1Service
from di.test2_service import Test2Service from di.test2_service import Test2Service
@@ -14,14 +14,10 @@ class Startup(StartupABC):
def __init__(self): def __init__(self):
StartupABC.__init__(self) StartupABC.__init__(self)
def configure_configuration( def configure_configuration(self, configuration: ConfigurationABC, environment: Environment) -> ConfigurationABC:
self, configuration: ConfigurationABC, environment: Environment
) -> ConfigurationABC:
return configuration return configuration
def configure_services( def configure_services(self, services: ServiceCollectionABC, environment: Environment) -> ServiceProviderABC:
self, services: ServiceCollectionABC, environment: Environment
) -> ServiceProviderABC:
services.add_scoped(TestService) services.add_scoped(TestService)
services.add_scoped(DITesterService) services.add_scoped(DITesterService)

View File

@@ -1,5 +1,5 @@
from cpl.core.configuration import ConfigurationABC from cpl.core.configuration import ConfigurationABC
from cpl.core.dependency_injection import ServiceProvider, ServiceProviderABC from cpl.dependency import ServiceProvider, ServiceProviderABC
from di.test_service import TestService from di.test_service import TestService

View File

@@ -1,10 +1,10 @@
import time import time
from typing import Optional from typing import Optional
from cpl.core.application.application_abc import ApplicationABC from cpl.application.application_abc import ApplicationABC
from cpl.core.configuration import Configuration from cpl.core.configuration import Configuration
from cpl.core.console import Console from cpl.core.console import Console
from cpl.core.dependency_injection import ServiceProviderABC from cpl.dependency import ServiceProviderABC
from cpl.core.environment import Environment from cpl.core.environment import Environment
from cpl.core.log import LoggerABC from cpl.core.log import LoggerABC
from cpl.core.pipes import IPAddressPipe from cpl.core.pipes import IPAddressPipe

View File

@@ -1,5 +1,5 @@
from application import Application from application import Application
from cpl.core.application import ApplicationBuilder from cpl.application import ApplicationBuilder
from test_extension import TestExtension from test_extension import TestExtension
from startup import Startup from startup import Startup
from test_startup_extension import TestStartupExtension from test_startup_extension import TestStartupExtension

View File

@@ -1,6 +1,6 @@
from cpl.core.application import StartupABC from cpl.application import StartupABC
from cpl.core.configuration import Configuration from cpl.core.configuration import Configuration
from cpl.core.dependency_injection import ServiceCollectionABC, ServiceProviderABC from cpl.dependency import ServiceCollectionABC, ServiceProviderABC
from cpl.core.environment import Environment from cpl.core.environment import Environment
from cpl.core.pipes import IPAddressPipe from cpl.core.pipes import IPAddressPipe
from test_service import TestService from test_service import TestService

View File

@@ -1,7 +1,7 @@
from cpl.core.application import ApplicationExtensionABC from cpl.application import ApplicationExtensionABC
from cpl.core.configuration import Configuration from cpl.core.configuration import Configuration
from cpl.core.console import Console from cpl.core.console import Console
from cpl.core.dependency_injection import ServiceProviderABC from cpl.dependency import ServiceProviderABC
class TestExtension(ApplicationExtensionABC): class TestExtension(ApplicationExtensionABC):

View File

@@ -1,5 +1,5 @@
from cpl.core.console.console import Console from cpl.core.console.console import Console
from cpl.core.dependency_injection import ServiceProviderABC from cpl.dependency import ServiceProviderABC
from cpl.core.pipes.ip_address_pipe import IPAddressPipe from cpl.core.pipes.ip_address_pipe import IPAddressPipe

View File

@@ -1,7 +1,7 @@
from cpl.core.application import StartupExtensionABC from cpl.application import StartupExtensionABC
from cpl.core.configuration import Configuration from cpl.core.configuration import Configuration
from cpl.core.console import Console from cpl.core.console import Console
from cpl.core.dependency_injection import ServiceCollectionABC from cpl.dependency import ServiceCollectionABC
from cpl.core.environment import Environment from cpl.core.environment import Environment

View File

@@ -1,7 +1,7 @@
from cpl.core.application import ApplicationABC from cpl.application import ApplicationABC
from cpl.core.configuration import ConfigurationABC from cpl.core.configuration import ConfigurationABC
from cpl.core.console import Console from cpl.core.console import Console
from cpl.core.dependency_injection import ServiceProviderABC from cpl.dependency import ServiceProviderABC
from cpl.translation.translate_pipe import TranslatePipe from cpl.translation.translate_pipe import TranslatePipe
from cpl.translation.translation_service_abc import TranslationServiceABC from cpl.translation.translation_service_abc import TranslationServiceABC
from cpl.translation.translation_settings import TranslationSettings from cpl.translation.translation_settings import TranslationSettings

View File

@@ -1,4 +1,4 @@
from cpl.core.application import ApplicationBuilder from cpl.application import ApplicationBuilder
from translation.application import Application from translation.application import Application
from translation.startup import Startup from translation.startup import Startup

View File

@@ -1,6 +1,6 @@
from cpl.core.application import StartupABC from cpl.application import StartupABC
from cpl.core.configuration import ConfigurationABC from cpl.core.configuration import ConfigurationABC
from cpl.core.dependency_injection import ServiceProviderABC, ServiceCollectionABC from cpl.dependency import ServiceProviderABC, ServiceCollectionABC
from cpl.core.environment import Environment from cpl.core.environment import Environment
@@ -8,14 +8,10 @@ class Startup(StartupABC):
def __init__(self): def __init__(self):
StartupABC.__init__(self) StartupABC.__init__(self)
def configure_configuration( def configure_configuration(self, configuration: ConfigurationABC, environment: Environment) -> ConfigurationABC:
self, configuration: ConfigurationABC, environment: Environment
) -> ConfigurationABC:
configuration.add_json_file("appsettings.json") configuration.add_json_file("appsettings.json")
return configuration return configuration
def configure_services( def configure_services(self, services: ServiceCollectionABC, environment: Environment) -> ServiceProviderABC:
self, services: ServiceCollectionABC, environment: Environment
) -> ServiceProviderABC:
services.add_translation() services.add_translation()
return services.build_service_provider() return services.build_service_provider()

View File

@@ -1,8 +1,8 @@
import unittest import unittest
from cpl.core.application import ApplicationABC from cpl.application import ApplicationABC
from cpl.core.configuration import ConfigurationABC from cpl.core.configuration import ConfigurationABC
from cpl.core.dependency_injection import ServiceProviderABC from cpl.dependency import ServiceProviderABC
from unittests_cli.cli_test_suite import CLITestSuite from unittests_cli.cli_test_suite import CLITestSuite
from unittests_core.core_test_suite import CoreTestSuite from unittests_core.core_test_suite import CoreTestSuite
from unittests_query.query_test_suite import QueryTestSuite from unittests_query.query_test_suite import QueryTestSuite

View File

@@ -1,4 +1,4 @@
from cpl.core.application import ApplicationBuilder from cpl.application import ApplicationBuilder
from unittests.application import Application from unittests.application import Application

View File

@@ -4,8 +4,8 @@ import unittest
from unittest.mock import Mock, MagicMock from unittest.mock import Mock, MagicMock
from cpl.core.configuration import Configuration, ArgumentTypeEnum from cpl.core.configuration import Configuration, ArgumentTypeEnum
from cpl.core.database import DatabaseSettings from cpl.database import DatabaseSettings
from cpl.core.dependency_injection import ServiceProvider, ServiceCollection from cpl.dependency import ServiceProvider, ServiceCollection
from cpl.mail import EMailClientSettings from cpl.mail import EMailClientSettings

View File

@@ -3,7 +3,7 @@ import unittest
from unittest.mock import Mock, MagicMock from unittest.mock import Mock, MagicMock
from cpl.core.configuration import Configuration, ArgumentTypeEnum from cpl.core.configuration import Configuration, ArgumentTypeEnum
from cpl.core.dependency_injection import ServiceCollection from cpl.dependency import ServiceCollection
class ConsoleArgumentsTestCase(unittest.TestCase): class ConsoleArgumentsTestCase(unittest.TestCase):

View File

@@ -2,7 +2,7 @@ import unittest
from unittest.mock import Mock from unittest.mock import Mock
from cpl.core.configuration import Configuration from cpl.core.configuration import Configuration
from cpl.core.dependency_injection import ServiceCollection, ServiceLifetimeEnum, ServiceProviderABC from cpl.dependency import ServiceCollection, ServiceLifetimeEnum, ServiceProviderABC
class ServiceCollectionTestCase(unittest.TestCase): class ServiceCollectionTestCase(unittest.TestCase):

View File

@@ -1,7 +1,7 @@
import unittest import unittest
from cpl.core.configuration import Configuration from cpl.core.configuration import Configuration
from cpl.core.dependency_injection import ServiceCollection, ServiceProviderABC from cpl.dependency import ServiceCollection, ServiceProviderABC
class ServiceCount: class ServiceCount: