From c3fdb7a0491450844077c52e24733908b0751020 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 21 Mar 2021 20:05:51 +0100 Subject: [PATCH 01/22] Changed version --- cpl.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cpl.json b/cpl.json index 1fb0881b..ae5f889b 100644 --- a/cpl.json +++ b/cpl.json @@ -4,7 +4,7 @@ "Version": { "Major": "2021", "Minor": "04", - "Micro": "01-15" + "Micro": "02" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", From 99091a2540fbebe4646023e48235fcb0b39a3080 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sun, 21 Mar 2021 20:22:04 +0100 Subject: [PATCH 02/22] Publish for 2021.4.2 --- src/cpl/__init__.py | 4 ++-- src/cpl/application/__init__.py | 4 ++-- src/cpl/configuration/__init__.py | 4 ++-- src/cpl/console/__init__.py | 4 ++-- src/cpl/database/__init__.py | 4 ++-- src/cpl/database/connection/__init__.py | 4 ++-- src/cpl/database/context/__init__.py | 4 ++-- src/cpl/dependency_injection/__init__.py | 4 ++-- src/cpl/environment/__init__.py | 4 ++-- src/cpl/logging/__init__.py | 4 ++-- src/cpl/mailing/__init__.py | 4 ++-- src/cpl/time/__init__.py | 4 ++-- src/cpl/utils/__init__.py | 4 ++-- src/cpl_cli/__init__.py | 4 ++-- src/cpl_cli/command/__init__.py | 4 ++-- src/cpl_cli/configuration/__init__.py | 4 ++-- src/cpl_cli/live_server/__init__.py | 4 ++-- src/cpl_cli/publish/__init__.py | 4 ++-- src/cpl_cli/templates/__init__.py | 4 ++-- src/cpl_cli/templates/build/__init__.py | 4 ++-- src/cpl_cli/templates/generate/__init__.py | 4 ++-- src/cpl_cli/templates/new/__init__.py | 4 ++-- src/cpl_cli/templates/new/console/__init__.py | 4 ++-- src/cpl_cli/templates/new/console/src/__init__.py | 4 ++-- src/cpl_cli/templates/new/console/src/tests/__init__.py | 4 ++-- src/cpl_cli/templates/publish/__init__.py | 4 ++-- 26 files changed, 52 insertions(+), 52 deletions(-) diff --git a/src/cpl/__init__.py b/src/cpl/__init__.py index c86c7437..008e5a56 100644 --- a/src/cpl/__init__.py +++ b/src/cpl/__init__.py @@ -15,11 +15,11 @@ __title__ = 'sh_cpl.cpl' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/application/__init__.py b/src/cpl/application/__init__.py index f37fa280..028256d1 100644 --- a/src/cpl/application/__init__.py +++ b/src/cpl/application/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.application' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -28,4 +28,4 @@ from .application_runtime_abc import ApplicationRuntimeABC from .startup_abc import StartupABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/configuration/__init__.py b/src/cpl/configuration/__init__.py index 3d031a83..f374e0d5 100644 --- a/src/cpl/configuration/__init__.py +++ b/src/cpl/configuration/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.configuration' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -27,4 +27,4 @@ from .configuration_variable_name_enum import ConfigurationVariableNameEnum from .console_argument import ConsoleArgument VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/console/__init__.py b/src/cpl/console/__init__.py index 0a83ce01..1e9a8e92 100644 --- a/src/cpl/console/__init__.py +++ b/src/cpl/console/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.console' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -27,4 +27,4 @@ from .foreground_color_enum import ForegroundColorEnum from .spinner_thread import SpinnerThread VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/database/__init__.py b/src/cpl/database/__init__.py index a3b8a5e2..7605162f 100644 --- a/src/cpl/database/__init__.py +++ b/src/cpl/database/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.database' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -25,4 +25,4 @@ from .database_settings import DatabaseSettings from .database_settings_name_enum import DatabaseSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/database/connection/__init__.py b/src/cpl/database/connection/__init__.py index 1af2dd6d..3ae7b65d 100644 --- a/src/cpl/database/connection/__init__.py +++ b/src/cpl/database/connection/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.database.connection' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -24,4 +24,4 @@ from .database_connection import DatabaseConnection from .database_connection_abc import DatabaseConnectionABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/database/context/__init__.py b/src/cpl/database/context/__init__.py index 0ffba50d..66a4a5bc 100644 --- a/src/cpl/database/context/__init__.py +++ b/src/cpl/database/context/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.database.context' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -24,4 +24,4 @@ from .database_context import DatabaseContext from .database_context_abc import DatabaseContextABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/dependency_injection/__init__.py b/src/cpl/dependency_injection/__init__.py index aa9dfe5b..60cfb412 100644 --- a/src/cpl/dependency_injection/__init__.py +++ b/src/cpl/dependency_injection/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.dependency_injection' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -25,4 +25,4 @@ from .service_provider import ServiceProvider from .service_provider_abc import ServiceProviderABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/environment/__init__.py b/src/cpl/environment/__init__.py index 2bddf43c..520e4adc 100644 --- a/src/cpl/environment/__init__.py +++ b/src/cpl/environment/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.environment' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -25,4 +25,4 @@ from .environment_name_enum import EnvironmentNameEnum from .application_environment import ApplicationEnvironment VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/logging/__init__.py b/src/cpl/logging/__init__.py index ec78a74d..49f70e66 100644 --- a/src/cpl/logging/__init__.py +++ b/src/cpl/logging/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.logging' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -27,4 +27,4 @@ from .logging_settings import LoggingSettings from .logging_settings_name_enum import LoggingSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/mailing/__init__.py b/src/cpl/mailing/__init__.py index c6b2341d..c6ed9193 100644 --- a/src/cpl/mailing/__init__.py +++ b/src/cpl/mailing/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.mailing' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -27,4 +27,4 @@ from .email_client_settings import EMailClientSettings from .email_client_settings_name_enum import EMailClientSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/time/__init__.py b/src/cpl/time/__init__.py index f5553ae9..c5145d81 100644 --- a/src/cpl/time/__init__.py +++ b/src/cpl/time/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.time' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -24,4 +24,4 @@ from .time_format_settings import TimeFormatSettings from .time_format_settings_names_enum import TimeFormatSettingsNamesEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/utils/__init__.py b/src/cpl/utils/__init__.py index f90663f1..009cebf8 100644 --- a/src/cpl/utils/__init__.py +++ b/src/cpl/utils/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.utils' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -25,4 +25,4 @@ from .string import String from .pip import Pip VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/__init__.py b/src/cpl_cli/__init__.py index b81c0779..f7c22826 100644 --- a/src/cpl_cli/__init__.py +++ b/src/cpl_cli/__init__.py @@ -15,7 +15,7 @@ __title__ = 'sh_cpl.cpl_cli' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -29,4 +29,4 @@ from .main import main from .startup import Startup VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/command/__init__.py b/src/cpl_cli/command/__init__.py index fb1e1266..95d6aa56 100644 --- a/src/cpl_cli/command/__init__.py +++ b/src/cpl_cli/command/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_cli.command' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -28,4 +28,4 @@ from .publish_service import PublishService from .version_service import VersionService VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/configuration/__init__.py b/src/cpl_cli/configuration/__init__.py index 1637f3b1..5a53289c 100644 --- a/src/cpl_cli/configuration/__init__.py +++ b/src/cpl_cli/configuration/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_cli.configuration' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -28,4 +28,4 @@ from .version_settings import VersionSettings from .version_settings_name_enum import VersionSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/live_server/__init__.py b/src/cpl_cli/live_server/__init__.py index d5489d99..d826d0f0 100644 --- a/src/cpl_cli/live_server/__init__.py +++ b/src/cpl_cli/live_server/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.live_server' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/publish/__init__.py b/src/cpl_cli/publish/__init__.py index 04f86622..2f324b45 100644 --- a/src/cpl_cli/publish/__init__.py +++ b/src/cpl_cli/publish/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_cli.publish' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple @@ -24,4 +24,4 @@ from .publisher_abc import PublisherABC from .publisher_service import PublisherService VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/__init__.py b/src/cpl_cli/templates/__init__.py index 8d10051c..cd80bf44 100644 --- a/src/cpl_cli/templates/__init__.py +++ b/src/cpl_cli/templates/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/build/__init__.py b/src/cpl_cli/templates/build/__init__.py index 3cbc2977..a8ef97fc 100644 --- a/src/cpl_cli/templates/build/__init__.py +++ b/src/cpl_cli/templates/build/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.build' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/generate/__init__.py b/src/cpl_cli/templates/generate/__init__.py index 683eeb70..f0e04313 100644 --- a/src/cpl_cli/templates/generate/__init__.py +++ b/src/cpl_cli/templates/generate/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.generate' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/new/__init__.py b/src/cpl_cli/templates/new/__init__.py index 8094ff06..67aa1aa9 100644 --- a/src/cpl_cli/templates/new/__init__.py +++ b/src/cpl_cli/templates/new/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/new/console/__init__.py b/src/cpl_cli/templates/new/console/__init__.py index 47c64a53..214acb2f 100644 --- a/src/cpl_cli/templates/new/console/__init__.py +++ b/src/cpl_cli/templates/new/console/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new.console' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/new/console/src/__init__.py b/src/cpl_cli/templates/new/console/src/__init__.py index d79923a0..93766c79 100644 --- a/src/cpl_cli/templates/new/console/src/__init__.py +++ b/src/cpl_cli/templates/new/console/src/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new.console.src' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/new/console/src/tests/__init__.py b/src/cpl_cli/templates/new/console/src/tests/__init__.py index 537f57c6..3c8f9b00 100644 --- a/src/cpl_cli/templates/new/console/src/tests/__init__.py +++ b/src/cpl_cli/templates/new/console/src/tests/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new.console.src.tests' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/publish/__init__.py b/src/cpl_cli/templates/publish/__init__.py index f7569f54..81138751 100644 --- a/src/cpl_cli/templates/publish/__init__.py +++ b/src/cpl_cli/templates/publish/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.publish' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.1.post15' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='01-15') +version_info = VersionInfo(major='2021', minor='04', micro='02') From 252f2b55fe9341ed6d84655408bb80d85f0bc86d Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Tue, 23 Mar 2021 17:29:13 +0100 Subject: [PATCH 03/22] Bugfixes in templates --- src/cpl_cli/templates/new/console/src/application.py | 9 ++++----- src/cpl_cli/templates/new/console/src/main.py | 6 +++--- src/cpl_cli/templates/new/console/src/startup.py | 7 +++---- 3 files changed, 10 insertions(+), 12 deletions(-) diff --git a/src/cpl_cli/templates/new/console/src/application.py b/src/cpl_cli/templates/new/console/src/application.py index d86c1c59..3d22124d 100644 --- a/src/cpl_cli/templates/new/console/src/application.py +++ b/src/cpl_cli/templates/new/console/src/application.py @@ -11,11 +11,10 @@ class ApplicationTemplate(TemplateFileABC): self._name = 'application.py' self._path = 'src/' self._value = textwrap.dedent("""\ - from cpl.application.application_abc import ApplicationABC - from cpl.application.application_runtime_abc import ApplicationRuntimeABC - from cpl.configuration.configuration_abc import ConfigurationABC - from cpl.console.console import Console - from cpl.dependency_injection.service_provider_abc import ServiceProviderABC + from cpl.application import ApplicationABC, ApplicationRuntimeABC + from cpl.configuration import ConfigurationABC + from cpl.console import Console + from cpl.dependency_injection import ServiceProviderABC class Application(ApplicationABC): diff --git a/src/cpl_cli/templates/new/console/src/main.py b/src/cpl_cli/templates/new/console/src/main.py index 36902b91..76d8c8c6 100644 --- a/src/cpl_cli/templates/new/console/src/main.py +++ b/src/cpl_cli/templates/new/console/src/main.py @@ -11,7 +11,7 @@ class MainWithApplicationHostAndStartupTemplate(TemplateFileABC): self._name = 'main.py' self._path = 'src/' self._value = textwrap.dedent("""\ - from cpl.application.application_builder import ApplicationBuilder + from cpl.application import ApplicationBuilder from application import Application from startup import Startup @@ -48,7 +48,7 @@ class MainWithApplicationHostTemplate(TemplateFileABC): self._name = 'main.py' self._path = 'src/' self._value = textwrap.dedent("""\ - from cpl.application.application_builder import ApplicationBuilder + from cpl.application import ApplicationBuilder from application import Application @@ -83,7 +83,7 @@ class MainWithoutApplicationHostTemplate(TemplateFileABC): self._name = 'main.py' self._path = 'src/' self._value = textwrap.dedent("""\ - from cpl.console.console import Console + from cpl.console import Console def main(): diff --git a/src/cpl_cli/templates/new/console/src/startup.py b/src/cpl_cli/templates/new/console/src/startup.py index 3ae387cf..2e770d9c 100644 --- a/src/cpl_cli/templates/new/console/src/startup.py +++ b/src/cpl_cli/templates/new/console/src/startup.py @@ -11,10 +11,9 @@ class StartupTemplate(TemplateFileABC): self._name = 'startup.py' self._path = 'src/' self._value = textwrap.dedent("""\ - from cpl.application.application_runtime_abc import ApplicationRuntimeABC - from cpl.application.startup_abc import StartupABC - from cpl.configuration.configuration_abc import ConfigurationABC - from cpl.dependency_injection.service_provider_abc import ServiceProviderABC + from cpl.application import ApplicationRuntimeABC, StartupABC + from cpl.configuration import ConfigurationABC + from cpl.dependency_injection import ServiceProviderABC class Startup(StartupABC): From 36dfedf918e92a3ca73cbac37794e54fbc6bb1ee Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Tue, 23 Mar 2021 17:31:24 +0100 Subject: [PATCH 04/22] Bugfixes cpl cli output --- src/cpl_cli/command/build_service.py | 2 -- src/cpl_cli/command/generate_service.py | 2 -- src/cpl_cli/command/help_service.py | 2 -- src/cpl_cli/command/install_service.py | 2 -- src/cpl_cli/command/new_service.py | 5 ++--- src/cpl_cli/command/publish_service.py | 1 - src/cpl_cli/command/update_service.py | 2 -- src/cpl_cli/command_handler_service.py | 2 ++ 8 files changed, 4 insertions(+), 14 deletions(-) diff --git a/src/cpl_cli/command/build_service.py b/src/cpl_cli/command/build_service.py index dd8899d4..18ce4dbd 100644 --- a/src/cpl_cli/command/build_service.py +++ b/src/cpl_cli/command/build_service.py @@ -1,4 +1,3 @@ -from cpl.console.console import Console from cpl_cli.command_abc import CommandABC from cpl_cli.publish.publisher_abc import PublisherABC @@ -21,4 +20,3 @@ class BuildService(CommandABC): :return: """ self._publisher.build() - Console.write('\n') diff --git a/src/cpl_cli/command/generate_service.py b/src/cpl_cli/command/generate_service.py index b8ef2d11..a83d2f1f 100644 --- a/src/cpl_cli/command/generate_service.py +++ b/src/cpl_cli/command/generate_service.py @@ -148,5 +148,3 @@ class GenerateService(CommandABC): else: self._help('Usage: cpl generate [options]') exit() - - Console.write('\n') diff --git a/src/cpl_cli/command/help_service.py b/src/cpl_cli/command/help_service.py index 6c101838..647640f5 100644 --- a/src/cpl_cli/command/help_service.py +++ b/src/cpl_cli/command/help_service.py @@ -35,5 +35,3 @@ class HelpService(CommandABC): Console.write(f'\n\t{name} ') Console.set_foreground_color(ForegroundColorEnum.default) Console.write(f'{description}') - - Console.write('\n') diff --git a/src/cpl_cli/command/install_service.py b/src/cpl_cli/command/install_service.py index 35a8f9e3..bc392077 100644 --- a/src/cpl_cli/command/install_service.py +++ b/src/cpl_cli/command/install_service.py @@ -163,5 +163,3 @@ class InstallService(CommandABC): self._install_project() else: self._install_package(args[0]) - - Console.write('\n') diff --git a/src/cpl_cli/command/new_service.py b/src/cpl_cli/command/new_service.py index e8cf1bfb..2f46c390 100644 --- a/src/cpl_cli/command/new_service.py +++ b/src/cpl_cli/command/new_service.py @@ -20,7 +20,8 @@ from cpl_cli.configuration.version_settings_name_enum import VersionSettingsName from cpl_cli.templates.new.console.license import LicenseTemplate from cpl_cli.templates.new.console.readme_py import ReadmeTemplate from cpl_cli.templates.new.console.src.application import ApplicationTemplate -from cpl_cli.templates.new.console.src.main import MainWithApplicationHostAndStartupTemplate, MainWithoutApplicationHostTemplate, MainWithApplicationHostTemplate +from cpl_cli.templates.new.console.src.main import MainWithApplicationHostAndStartupTemplate, \ + MainWithoutApplicationHostTemplate, MainWithApplicationHostTemplate from cpl_cli.templates.new.console.src.startup import StartupTemplate from cpl_cli.templates.new.console.src.tests.init import TestsInitTemplate from cpl_cli.templates.template_file_abc import TemplateFileABC @@ -249,5 +250,3 @@ class NewService(CommandABC): else: self._help('Usage: cpl new [options]') exit() - - Console.write('\n') diff --git a/src/cpl_cli/command/publish_service.py b/src/cpl_cli/command/publish_service.py index 4975a7e1..7f459ea9 100644 --- a/src/cpl_cli/command/publish_service.py +++ b/src/cpl_cli/command/publish_service.py @@ -21,4 +21,3 @@ class PublishService(CommandABC): :return: """ self._publisher.publish() - Console.write('\n') diff --git a/src/cpl_cli/command/update_service.py b/src/cpl_cli/command/update_service.py index ddbe611a..0ff14d08 100644 --- a/src/cpl_cli/command/update_service.py +++ b/src/cpl_cli/command/update_service.py @@ -131,5 +131,3 @@ class UpdateService(CommandABC): self._check_project_dependencies() self._check_outdated() Pip.reset_executable() - - Console.write('\n') diff --git a/src/cpl_cli/command_handler_service.py b/src/cpl_cli/command_handler_service.py index ea602a99..63278ca7 100644 --- a/src/cpl_cli/command_handler_service.py +++ b/src/cpl_cli/command_handler_service.py @@ -2,6 +2,7 @@ import os from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.configuration.configuration_abc import ConfigurationABC +from cpl.console.console import Console from cpl.dependency_injection.service_abc import ServiceABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl_cli.error import Error @@ -51,3 +52,4 @@ class CommandHandler(ServiceABC): self._config.add_json_file('cpl.json', optional=True, output=False) self._services.get_service(command.command).run(args) + Console.write('\n') From c650e874439e8c75258ff52e7d04d861f50003b9 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Tue, 23 Mar 2021 20:21:24 +0100 Subject: [PATCH 05/22] [WIP] Added first changes for the DI --- src/cpl/application/application_builder.py | 5 +- src/cpl/dependency_injection/__init__.py | 2 +- .../service_collection.py | 67 +++++++++ .../service_collection_abc.py | 62 +++++++++ .../service_descriptor.py | 33 +++++ .../dependency_injection/service_factory.py | 27 ++++ .../service_factory_abc.py | 23 ++++ .../service_lifetime_enum.py | 8 ++ .../dependency_injection/service_provider.py | 129 +++--------------- .../service_provider_abc.py | 57 -------- .../service_provider_old.py | 122 +++++++++++++++++ src/tests/custom/general/startup.py | 13 +- 12 files changed, 375 insertions(+), 173 deletions(-) create mode 100644 src/cpl/dependency_injection/service_collection.py create mode 100644 src/cpl/dependency_injection/service_collection_abc.py create mode 100644 src/cpl/dependency_injection/service_descriptor.py create mode 100644 src/cpl/dependency_injection/service_factory.py create mode 100644 src/cpl/dependency_injection/service_factory_abc.py create mode 100644 src/cpl/dependency_injection/service_lifetime_enum.py create mode 100644 src/cpl/dependency_injection/service_provider_old.py diff --git a/src/cpl/application/application_builder.py b/src/cpl/application/application_builder.py index 6922cfd3..ef9947b8 100644 --- a/src/cpl/application/application_builder.py +++ b/src/cpl/application/application_builder.py @@ -6,6 +6,7 @@ from cpl.application.application_runtime import ApplicationRuntime from cpl.application.startup_abc import StartupABC from cpl.configuration import Configuration from cpl.dependency_injection import ServiceProvider +from cpl.dependency_injection.service_collection import ServiceCollection class ApplicationBuilder(ApplicationBuilderABC): @@ -20,7 +21,7 @@ class ApplicationBuilder(ApplicationBuilderABC): self._configuration = Configuration() self._runtime = ApplicationRuntime() - self._services = ServiceProvider(self._configuration, self._runtime) + self._services = ServiceCollection(self._configuration, self._runtime) def use_startup(self, startup: Type[StartupABC]): """ @@ -39,4 +40,4 @@ class ApplicationBuilder(ApplicationBuilderABC): self._startup.configure_configuration() self._startup.configure_services() - return self._app(self._configuration, self._runtime, self._services) + return self._app(self._configuration, self._runtime, self._services.build_service_provider()) diff --git a/src/cpl/dependency_injection/__init__.py b/src/cpl/dependency_injection/__init__.py index 60cfb412..0091a8a4 100644 --- a/src/cpl/dependency_injection/__init__.py +++ b/src/cpl/dependency_injection/__init__.py @@ -21,7 +21,7 @@ from collections import namedtuple # imports: from .service_abc import ServiceABC -from .service_provider import ServiceProvider +from .service_provider_old import ServiceProvider from .service_provider_abc import ServiceProviderABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') diff --git a/src/cpl/dependency_injection/service_collection.py b/src/cpl/dependency_injection/service_collection.py new file mode 100644 index 00000000..64214ac4 --- /dev/null +++ b/src/cpl/dependency_injection/service_collection.py @@ -0,0 +1,67 @@ +from typing import Union, Type, Callable, Optional + +from cpl.application.application_runtime_abc import ApplicationRuntimeABC +from cpl.configuration.configuration_abc import ConfigurationABC +from cpl.database.context import DatabaseContextABC +from cpl.dependency_injection.service_factory import ServiceFactory +from cpl.dependency_injection.service_provider_abc import ServiceProviderABC +from cpl.dependency_injection.service_collection_abc import ServiceCollectionABC +from cpl.dependency_injection.service_descriptor import ServiceDescriptor +from cpl.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum +from cpl.dependency_injection.service_provider import ServiceProvider + + +class ServiceCollection(ServiceCollectionABC): + + def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC): + ServiceCollectionABC.__init__(self) + self._configuration: ConfigurationABC = config + self._runtime: ApplicationRuntimeABC = runtime + + self._database_context: Optional[DatabaseContextABC] = None + self._service_descriptors: list[ServiceDescriptor] = [] + + def _add_descriptor(self, service: Union[type, object], lifetime: ServiceLifetimeEnum): + found = False + for descriptor in self._service_descriptors: + if not isinstance(service, type): + service = type(service) + + if descriptor.service_type == service: + found = True + + if found: + service_type = service + if not isinstance(service, type): + service_type = type(service) + + raise Exception(f'Service of type {service_type} already exists') + + self._service_descriptors.append(ServiceDescriptor(service, lifetime)) + + def add_db_context(self, db_context: Type[DatabaseContextABC]): + pass + + def add_singleton(self, service_type: Union[type, object], service: Union[type, object] = None): + if service is not None: + if isinstance(service, type): + service = service() + + self._add_descriptor(service, ServiceLifetimeEnum.singleton) + else: + if isinstance(service_type, type): + service_type = service_type() + + self._add_descriptor(service_type, ServiceLifetimeEnum.singleton) + + def add_scoped(self, service_type: Type, service: Callable = None): + pass + + def add_transient(self, service_type: Union[type], service: Union[type] = None): + if service is not None: + self._add_descriptor(service, ServiceLifetimeEnum.transient) + else: + self._add_descriptor(service_type, ServiceLifetimeEnum.transient) + + def build_service_provider(self) -> ServiceProviderABC: + return ServiceProvider(ServiceFactory(self._service_descriptors, self._configuration, self._runtime)) diff --git a/src/cpl/dependency_injection/service_collection_abc.py b/src/cpl/dependency_injection/service_collection_abc.py new file mode 100644 index 00000000..281497bc --- /dev/null +++ b/src/cpl/dependency_injection/service_collection_abc.py @@ -0,0 +1,62 @@ +from abc import abstractmethod, ABC +from collections import Callable +from typing import Type + +from cpl.database.context.database_context_abc import DatabaseContextABC +from cpl.dependency_injection.service_provider_abc import ServiceProviderABC + + +class ServiceCollectionABC(ABC): + + @abstractmethod + def __init__(self): + """ + ABC for service providing + """ + pass + + @abstractmethod + def add_db_context(self, db_context: Type[DatabaseContextABC]): + """ + Adds database context + :param db_context: + :return: + """ + pass + + @abstractmethod + def add_transient(self, service_type: Type, service: Callable = None): + """ + Adds a service with transient lifetime + :param service_type: + :param service: + :return: + """ + pass + + @abstractmethod + def add_scoped(self, service_type: Type, service: Callable = None): + """ + Adds a service with scoped lifetime + :param service_type: + :param service: + :return: + """ + pass + + @abstractmethod + def add_singleton(self, service_type: Type, service: Callable = None): + """ + Adds a service with singleton lifetime + :param service_type: + :param service: + :return: + """ + pass + + @abstractmethod + def build_service_provider(self) -> ServiceProviderABC: + """ + Creates instance of the service provider + """ + pass diff --git a/src/cpl/dependency_injection/service_descriptor.py b/src/cpl/dependency_injection/service_descriptor.py new file mode 100644 index 00000000..845089ac --- /dev/null +++ b/src/cpl/dependency_injection/service_descriptor.py @@ -0,0 +1,33 @@ +from typing import Union, Optional + +from cpl.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum + + +class ServiceDescriptor: + + def __init__(self, implementation: Union[type, Optional[object]], lifetime: ServiceLifetimeEnum): + + self._service_type = implementation + self._implementation = implementation + self._lifetime = lifetime + + if not isinstance(implementation, type): + self._service_type = type(implementation) + else: + self._implementation = None + + @property + def service_type(self) -> type: + return self._service_type + + @property + def implementation(self) -> Union[type, Optional[object]]: + return self._implementation + + @implementation.setter + def implementation(self, implementation: Union[type, Optional[object]]): + self._implementation = implementation + + @property + def lifetime(self) -> ServiceLifetimeEnum: + return self._lifetime diff --git a/src/cpl/dependency_injection/service_factory.py b/src/cpl/dependency_injection/service_factory.py new file mode 100644 index 00000000..7ffa7b9c --- /dev/null +++ b/src/cpl/dependency_injection/service_factory.py @@ -0,0 +1,27 @@ +from cpl.application.application_runtime_abc import ApplicationRuntimeABC +from cpl.configuration.configuration_abc import ConfigurationABC +from cpl.dependency_injection.service_descriptor import ServiceDescriptor +from cpl.dependency_injection.service_factory_abc import ServiceFactoryABC + + +class ServiceFactory(ServiceFactoryABC): + + def __init__(self, service_descriptors: list[ServiceDescriptor], config: ConfigurationABC, + runtime: ApplicationRuntimeABC): + ServiceFactoryABC.__init__(self) + + self._service_descriptors: list[ServiceDescriptor] = service_descriptors + self._configuration: ConfigurationABC = config + self._runtime: ApplicationRuntimeABC = runtime + + @property + def service_descriptors(self) -> list[ServiceDescriptor]: + return self._service_descriptors + + @property + def configuration(self) -> ConfigurationABC: + return self._configuration + + @property + def runtime(self) -> ApplicationRuntimeABC: + return self._runtime diff --git a/src/cpl/dependency_injection/service_factory_abc.py b/src/cpl/dependency_injection/service_factory_abc.py new file mode 100644 index 00000000..8892afae --- /dev/null +++ b/src/cpl/dependency_injection/service_factory_abc.py @@ -0,0 +1,23 @@ +from abc import ABC, abstractmethod + +from cpl.application.application_runtime_abc import ApplicationRuntimeABC +from cpl.configuration.configuration_abc import ConfigurationABC +from cpl.dependency_injection.service_descriptor import ServiceDescriptor + + +class ServiceFactoryABC(ABC): + + @abstractmethod + def __init__(self): pass + + @property + @abstractmethod + def service_descriptors(self) -> list[ServiceDescriptor]: pass + + @property + @abstractmethod + def configuration(self) -> ConfigurationABC: pass + + @property + @abstractmethod + def runtime(self) -> ApplicationRuntimeABC: pass diff --git a/src/cpl/dependency_injection/service_lifetime_enum.py b/src/cpl/dependency_injection/service_lifetime_enum.py new file mode 100644 index 00000000..c2057ba8 --- /dev/null +++ b/src/cpl/dependency_injection/service_lifetime_enum.py @@ -0,0 +1,8 @@ +from enum import Enum + + +class ServiceLifetimeEnum(Enum): + + singleton = 0 + scoped = 1 # not supported yet + transient = 2 diff --git a/src/cpl/dependency_injection/service_provider.py b/src/cpl/dependency_injection/service_provider.py index 0a657450..ceefabf7 100644 --- a/src/cpl/dependency_injection/service_provider.py +++ b/src/cpl/dependency_injection/service_provider.py @@ -1,122 +1,37 @@ from collections import Callable -from inspect import signature, Parameter -from typing import Type, Optional, Union +from typing import Optional -from cpl.application.application_runtime_abc import ApplicationRuntimeABC -from cpl.configuration.configuration_abc import ConfigurationABC -from cpl.configuration.configuration_model_abc import ConfigurationModelABC -from cpl.database.context.database_context_abc import DatabaseContextABC -from cpl.dependency_injection.service_abc import ServiceABC -from cpl.dependency_injection.service_provider_abc import ServiceProviderABC -from cpl.environment.environment_abc import ApplicationEnvironmentABC +from cpl.dependency_injection import ServiceProviderABC +from cpl.dependency_injection.service_descriptor import ServiceDescriptor +from cpl.dependency_injection.service_factory_abc import ServiceFactoryABC +from cpl.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum class ServiceProvider(ServiceProviderABC): - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC): - """ - Service for service providing - :param runtime: - """ + def __init__(self, service_factory: ServiceFactoryABC): ServiceProviderABC.__init__(self) - self._configuration: ConfigurationABC = config - self._runtime: ApplicationRuntimeABC = runtime - self._database_context: Optional[DatabaseContextABC] = None - self._transient_services: dict[Type[ServiceABC], Callable[ServiceABC]] = {} - self._scoped_services: dict[Type[ServiceABC], Callable[ServiceABC]] = {} - self._singleton_services: dict[Type[ServiceABC], Callable[ServiceABC], ServiceABC] = {} + self._service_factory = service_factory - def _create_instance(self, service: Union[Callable[ServiceABC], ServiceABC]) -> Callable[ServiceABC]: - """ - Creates an instance of given type - :param service: - :return: - """ - sig = signature(service.__init__) - params = [] - for param in sig.parameters.items(): - parameter = param[1] - if parameter.name != 'self' and parameter.annotation != Parameter.empty: - if issubclass(parameter.annotation, ApplicationRuntimeABC): - params.append(self._runtime) + def _find_service(self, service_type: type) -> [ServiceDescriptor]: + for descriptor in self._service_factory.service_descriptors: + if descriptor.service_type == service_type or issubclass(descriptor.service_type, service_type): + return descriptor - elif issubclass(parameter.annotation, ApplicationEnvironmentABC): - params.append(self._configuration.environment) + return None - elif issubclass(parameter.annotation, DatabaseContextABC): - params.append(self._database_context) + def get_service(self, service_type: type) -> Optional[Callable[object]]: + result = self._find_service(service_type) - elif issubclass(parameter.annotation, ConfigurationModelABC): - params.append(self._configuration.get_configuration(parameter.annotation)) + if result is None: + return None - elif issubclass(parameter.annotation, ConfigurationABC): - params.append(self._configuration) + if result.implementation is not None: + return result.implementation - elif issubclass(parameter.annotation, ServiceProviderABC): - params.append(self) + implementation = result.service_type() + if result.lifetime == ServiceLifetimeEnum.singleton: + result.implementation = implementation - else: - params.append(self.get_service(parameter.annotation)) - - return service(*params) - - def add_db_context(self, db_context: Type[DatabaseContextABC]): - self._database_context = self._create_instance(db_context) - - def get_db_context(self) -> Callable[DatabaseContextABC]: - return self._database_context - - def add_transient(self, service_type: Type[ServiceABC], service: Callable[ServiceABC] = None): - if service is None: - self._transient_services[service_type] = service_type - else: - self._transient_services[service_type] = service - - def add_scoped(self, service_type: Type[ServiceABC], service: Callable[ServiceABC] = None): - if service is None: - self._scoped_services[service_type] = service_type - else: - self._scoped_services[service_type] = service - - def add_singleton(self, service_type: Type[ServiceABC], service: Callable[ServiceABC] = None): - for known_service in self._singleton_services: - if type(known_service) == service_type: - raise Exception(f'Service with type {service_type} already exists') - - if service is None: - self._singleton_services[service_type] = self._create_instance(service_type) - else: - self._singleton_services[service_type] = self._create_instance(service) - - def get_service(self, instance_type: Type) -> Callable[ServiceABC]: - if issubclass(instance_type, ServiceProviderABC): - return self - - for service in self._transient_services: - if service == instance_type and isinstance(self._transient_services[service], type(instance_type)): - return self._create_instance(self._transient_services[service]) - - for service in self._scoped_services: - if service == instance_type and isinstance(self._scoped_services[service], type(instance_type)): - return self._create_instance(self._scoped_services[service]) - - for service in self._singleton_services: - if service == instance_type and isinstance(self._singleton_services[service], instance_type): - return self._singleton_services[service] - - def remove_service(self, instance_type: Type[ServiceABC]): - for service in self._transient_services: - if service == instance_type and isinstance(self._transient_services[service], type(instance_type)): - del self._transient_services[service] - return - - for service in self._scoped_services: - if service == instance_type and isinstance(self._scoped_services[service], type(instance_type)): - del self._scoped_services[service] - return - - for service in self._singleton_services: - if service == instance_type and isinstance(self._singleton_services[service], instance_type): - del self._singleton_services[service] - return + return implementation diff --git a/src/cpl/dependency_injection/service_provider_abc.py b/src/cpl/dependency_injection/service_provider_abc.py index 6ab46110..b5ea1a93 100644 --- a/src/cpl/dependency_injection/service_provider_abc.py +++ b/src/cpl/dependency_injection/service_provider_abc.py @@ -2,7 +2,6 @@ from abc import abstractmethod, ABC from collections import Callable from typing import Type -from cpl.database.context.database_context_abc import DatabaseContextABC from cpl.dependency_injection.service_abc import ServiceABC @@ -15,53 +14,6 @@ class ServiceProviderABC(ABC): """ pass - @abstractmethod - def add_db_context(self, db_context: Type[DatabaseContextABC]): - """ - Adds database context - :param db_context: - :return: - """ - pass - - @abstractmethod - def get_db_context(self) -> Callable[DatabaseContextABC]: - """" - Returns database context - :return Callable[DatabaseContextABC]: - """ - pass - - @abstractmethod - def add_transient(self, service_type: Type, service: Callable = None): - """ - Adds a service with transient lifetime - :param service_type: - :param service: - :return: - """ - pass - - @abstractmethod - def add_scoped(self, service_type: Type, service: Callable = None): - """ - Adds a service with scoped lifetime - :param service_type: - :param service: - :return: - """ - pass - - @abstractmethod - def add_singleton(self, service_type: Type, service: Callable = None): - """ - Adds a service with singleton lifetime - :param service_type: - :param service: - :return: - """ - pass - @abstractmethod def get_service(self, instance_type: Type) -> Callable[ServiceABC]: """ @@ -70,12 +22,3 @@ class ServiceProviderABC(ABC): :return: """ pass - - @abstractmethod - def remove_service(self, instance_type: type): - """ - Removes service - :param instance_type: - :return: - """ - pass diff --git a/src/cpl/dependency_injection/service_provider_old.py b/src/cpl/dependency_injection/service_provider_old.py new file mode 100644 index 00000000..0a657450 --- /dev/null +++ b/src/cpl/dependency_injection/service_provider_old.py @@ -0,0 +1,122 @@ +from collections import Callable +from inspect import signature, Parameter +from typing import Type, Optional, Union + +from cpl.application.application_runtime_abc import ApplicationRuntimeABC +from cpl.configuration.configuration_abc import ConfigurationABC +from cpl.configuration.configuration_model_abc import ConfigurationModelABC +from cpl.database.context.database_context_abc import DatabaseContextABC +from cpl.dependency_injection.service_abc import ServiceABC +from cpl.dependency_injection.service_provider_abc import ServiceProviderABC +from cpl.environment.environment_abc import ApplicationEnvironmentABC + + +class ServiceProvider(ServiceProviderABC): + + def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC): + """ + Service for service providing + :param runtime: + """ + ServiceProviderABC.__init__(self) + self._configuration: ConfigurationABC = config + self._runtime: ApplicationRuntimeABC = runtime + self._database_context: Optional[DatabaseContextABC] = None + + self._transient_services: dict[Type[ServiceABC], Callable[ServiceABC]] = {} + self._scoped_services: dict[Type[ServiceABC], Callable[ServiceABC]] = {} + self._singleton_services: dict[Type[ServiceABC], Callable[ServiceABC], ServiceABC] = {} + + def _create_instance(self, service: Union[Callable[ServiceABC], ServiceABC]) -> Callable[ServiceABC]: + """ + Creates an instance of given type + :param service: + :return: + """ + sig = signature(service.__init__) + params = [] + for param in sig.parameters.items(): + parameter = param[1] + if parameter.name != 'self' and parameter.annotation != Parameter.empty: + if issubclass(parameter.annotation, ApplicationRuntimeABC): + params.append(self._runtime) + + elif issubclass(parameter.annotation, ApplicationEnvironmentABC): + params.append(self._configuration.environment) + + elif issubclass(parameter.annotation, DatabaseContextABC): + params.append(self._database_context) + + elif issubclass(parameter.annotation, ConfigurationModelABC): + params.append(self._configuration.get_configuration(parameter.annotation)) + + elif issubclass(parameter.annotation, ConfigurationABC): + params.append(self._configuration) + + elif issubclass(parameter.annotation, ServiceProviderABC): + params.append(self) + + else: + params.append(self.get_service(parameter.annotation)) + + return service(*params) + + def add_db_context(self, db_context: Type[DatabaseContextABC]): + self._database_context = self._create_instance(db_context) + + def get_db_context(self) -> Callable[DatabaseContextABC]: + return self._database_context + + def add_transient(self, service_type: Type[ServiceABC], service: Callable[ServiceABC] = None): + if service is None: + self._transient_services[service_type] = service_type + else: + self._transient_services[service_type] = service + + def add_scoped(self, service_type: Type[ServiceABC], service: Callable[ServiceABC] = None): + if service is None: + self._scoped_services[service_type] = service_type + else: + self._scoped_services[service_type] = service + + def add_singleton(self, service_type: Type[ServiceABC], service: Callable[ServiceABC] = None): + for known_service in self._singleton_services: + if type(known_service) == service_type: + raise Exception(f'Service with type {service_type} already exists') + + if service is None: + self._singleton_services[service_type] = self._create_instance(service_type) + else: + self._singleton_services[service_type] = self._create_instance(service) + + def get_service(self, instance_type: Type) -> Callable[ServiceABC]: + if issubclass(instance_type, ServiceProviderABC): + return self + + for service in self._transient_services: + if service == instance_type and isinstance(self._transient_services[service], type(instance_type)): + return self._create_instance(self._transient_services[service]) + + for service in self._scoped_services: + if service == instance_type and isinstance(self._scoped_services[service], type(instance_type)): + return self._create_instance(self._scoped_services[service]) + + for service in self._singleton_services: + if service == instance_type and isinstance(self._singleton_services[service], instance_type): + return self._singleton_services[service] + + def remove_service(self, instance_type: Type[ServiceABC]): + for service in self._transient_services: + if service == instance_type and isinstance(self._transient_services[service], type(instance_type)): + del self._transient_services[service] + return + + for service in self._scoped_services: + if service == instance_type and isinstance(self._scoped_services[service], type(instance_type)): + del self._scoped_services[service] + return + + for service in self._singleton_services: + if service == instance_type and isinstance(self._singleton_services[service], instance_type): + del self._singleton_services[service] + return diff --git a/src/tests/custom/general/startup.py b/src/tests/custom/general/startup.py index 56829dd3..0cf9a2ca 100644 --- a/src/tests/custom/general/startup.py +++ b/src/tests/custom/general/startup.py @@ -3,6 +3,7 @@ from cpl.application.startup_abc import StartupABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.database.context.database_context import DatabaseContext from cpl.database.database_settings import DatabaseSettings +from cpl.dependency_injection.service_collection_abc import ServiceCollectionABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.logging.logger_service import Logger from cpl.logging.logger_abc import LoggerABC @@ -13,12 +14,13 @@ from cpl.utils.credential_manager import CredentialManager class Startup(StartupABC): - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC, services: ServiceProviderABC): + def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC, services: ServiceCollectionABC): StartupABC.__init__(self) self._configuration = config self._application_runtime = runtime self._services = services + print(self._services) def configure_configuration(self) -> ConfigurationABC: self._configuration.add_environment_variables('PYTHON_') @@ -32,12 +34,11 @@ class Startup(StartupABC): def configure_services(self) -> ServiceProviderABC: # Create and connect to database - db_settings: DatabaseSettings = self._configuration.get_configuration(DatabaseSettings) - self._services.add_db_context(DatabaseContext) - db: DatabaseContext = self._services.get_db_context() - db.connect(CredentialManager.build_string(db_settings.connection_string, db_settings.credentials)) + # db_settings: DatabaseSettings = self._configuration.get_configuration(DatabaseSettings) + # self._services.add_db_context(DatabaseContext) + # db.connect(CredentialManager.build_string(db_settings.connection_string, db_settings.credentials)) self._services.add_singleton(LoggerABC, Logger) self._services.add_singleton(EMailClientABC, EMailClient) - return self._services + return self._services.build_service_provider() From a683b70c5f261de3372380d2922d501bd280ce1f Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Tue, 23 Mar 2021 20:23:30 +0100 Subject: [PATCH 06/22] [WIP] Improved service collection --- src/cpl/dependency_injection/service_collection.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/cpl/dependency_injection/service_collection.py b/src/cpl/dependency_injection/service_collection.py index 64214ac4..0b26ac71 100644 --- a/src/cpl/dependency_injection/service_collection.py +++ b/src/cpl/dependency_injection/service_collection.py @@ -4,6 +4,7 @@ from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.database.context import DatabaseContextABC from cpl.dependency_injection.service_factory import ServiceFactory +from cpl.dependency_injection.service_factory_abc import ServiceFactoryABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.dependency_injection.service_collection_abc import ServiceCollectionABC from cpl.dependency_injection.service_descriptor import ServiceDescriptor @@ -63,5 +64,8 @@ class ServiceCollection(ServiceCollectionABC): else: self._add_descriptor(service_type, ServiceLifetimeEnum.transient) + def build_service_factory(self) -> ServiceFactoryABC: + return ServiceFactory(self._service_descriptors, self._configuration, self._runtime) + def build_service_provider(self) -> ServiceProviderABC: - return ServiceProvider(ServiceFactory(self._service_descriptors, self._configuration, self._runtime)) + return ServiceProvider(self.build_service_factory()) From ca51f88d2b9dff4724379c9f2ebd3d606f6ce8e7 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Tue, 23 Mar 2021 21:39:29 +0100 Subject: [PATCH 07/22] Improved service provider --- src/cpl/configuration/configuration.py | 2 +- src/cpl/configuration/configuration_abc.py | 2 +- .../service_collection.py | 11 +- .../dependency_injection/service_factory.py | 27 ---- .../service_factory_abc.py | 23 ---- .../dependency_injection/service_provider.py | 68 +++++++++- .../service_provider_abc.py | 3 + .../service_provider_old.py | 122 ------------------ src/cpl/environment/__init__.py | 2 +- .../environment/application_environment.py | 2 +- ..._abc.py => application_environment_abc.py} | 0 src/cpl/mailing/email_client_service.py | 2 +- src/tests/custom/general/application.py | 7 +- src/tests/custom/general/startup.py | 3 +- src/tests/custom/general/test_service.py | 13 ++ 15 files changed, 93 insertions(+), 194 deletions(-) delete mode 100644 src/cpl/dependency_injection/service_factory.py delete mode 100644 src/cpl/dependency_injection/service_factory_abc.py delete mode 100644 src/cpl/dependency_injection/service_provider_old.py rename src/cpl/environment/{environment_abc.py => application_environment_abc.py} (100%) create mode 100644 src/tests/custom/general/test_service.py diff --git a/src/cpl/configuration/configuration.py b/src/cpl/configuration/configuration.py index d10f4056..55e35a4f 100644 --- a/src/cpl/configuration/configuration.py +++ b/src/cpl/configuration/configuration.py @@ -11,7 +11,7 @@ from cpl.configuration.console_argument import ConsoleArgument from cpl.console.console import Console from cpl.console.foreground_color_enum import ForegroundColorEnum from cpl.environment.application_environment import ApplicationEnvironment -from cpl.environment.environment_abc import ApplicationEnvironmentABC +from cpl.environment.application_environment_abc import ApplicationEnvironmentABC from cpl.environment.environment_name_enum import EnvironmentNameEnum diff --git a/src/cpl/configuration/configuration_abc.py b/src/cpl/configuration/configuration_abc.py index 821c76ab..ef8e1af1 100644 --- a/src/cpl/configuration/configuration_abc.py +++ b/src/cpl/configuration/configuration_abc.py @@ -4,7 +4,7 @@ from typing import Type, Union, Optional from cpl.configuration.console_argument import ConsoleArgument from cpl.configuration.configuration_model_abc import ConfigurationModelABC -from cpl.environment.environment_abc import ApplicationEnvironmentABC +from cpl.environment.application_environment_abc import ApplicationEnvironmentABC class ConfigurationABC(ABC): diff --git a/src/cpl/dependency_injection/service_collection.py b/src/cpl/dependency_injection/service_collection.py index 0b26ac71..24fcd17b 100644 --- a/src/cpl/dependency_injection/service_collection.py +++ b/src/cpl/dependency_injection/service_collection.py @@ -3,8 +3,6 @@ from typing import Union, Type, Callable, Optional from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.database.context import DatabaseContextABC -from cpl.dependency_injection.service_factory import ServiceFactory -from cpl.dependency_injection.service_factory_abc import ServiceFactoryABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.dependency_injection.service_collection_abc import ServiceCollectionABC from cpl.dependency_injection.service_descriptor import ServiceDescriptor @@ -46,12 +44,12 @@ class ServiceCollection(ServiceCollectionABC): def add_singleton(self, service_type: Union[type, object], service: Union[type, object] = None): if service is not None: if isinstance(service, type): - service = service() + service = self.build_service_provider().build_service(service) self._add_descriptor(service, ServiceLifetimeEnum.singleton) else: if isinstance(service_type, type): - service_type = service_type() + service_type = self.build_service_provider().build_service(service_type) self._add_descriptor(service_type, ServiceLifetimeEnum.singleton) @@ -64,8 +62,5 @@ class ServiceCollection(ServiceCollectionABC): else: self._add_descriptor(service_type, ServiceLifetimeEnum.transient) - def build_service_factory(self) -> ServiceFactoryABC: - return ServiceFactory(self._service_descriptors, self._configuration, self._runtime) - def build_service_provider(self) -> ServiceProviderABC: - return ServiceProvider(self.build_service_factory()) + return ServiceProvider(self._service_descriptors, self._configuration, self._runtime) diff --git a/src/cpl/dependency_injection/service_factory.py b/src/cpl/dependency_injection/service_factory.py deleted file mode 100644 index 7ffa7b9c..00000000 --- a/src/cpl/dependency_injection/service_factory.py +++ /dev/null @@ -1,27 +0,0 @@ -from cpl.application.application_runtime_abc import ApplicationRuntimeABC -from cpl.configuration.configuration_abc import ConfigurationABC -from cpl.dependency_injection.service_descriptor import ServiceDescriptor -from cpl.dependency_injection.service_factory_abc import ServiceFactoryABC - - -class ServiceFactory(ServiceFactoryABC): - - def __init__(self, service_descriptors: list[ServiceDescriptor], config: ConfigurationABC, - runtime: ApplicationRuntimeABC): - ServiceFactoryABC.__init__(self) - - self._service_descriptors: list[ServiceDescriptor] = service_descriptors - self._configuration: ConfigurationABC = config - self._runtime: ApplicationRuntimeABC = runtime - - @property - def service_descriptors(self) -> list[ServiceDescriptor]: - return self._service_descriptors - - @property - def configuration(self) -> ConfigurationABC: - return self._configuration - - @property - def runtime(self) -> ApplicationRuntimeABC: - return self._runtime diff --git a/src/cpl/dependency_injection/service_factory_abc.py b/src/cpl/dependency_injection/service_factory_abc.py deleted file mode 100644 index 8892afae..00000000 --- a/src/cpl/dependency_injection/service_factory_abc.py +++ /dev/null @@ -1,23 +0,0 @@ -from abc import ABC, abstractmethod - -from cpl.application.application_runtime_abc import ApplicationRuntimeABC -from cpl.configuration.configuration_abc import ConfigurationABC -from cpl.dependency_injection.service_descriptor import ServiceDescriptor - - -class ServiceFactoryABC(ABC): - - @abstractmethod - def __init__(self): pass - - @property - @abstractmethod - def service_descriptors(self) -> list[ServiceDescriptor]: pass - - @property - @abstractmethod - def configuration(self) -> ConfigurationABC: pass - - @property - @abstractmethod - def runtime(self) -> ApplicationRuntimeABC: pass diff --git a/src/cpl/dependency_injection/service_provider.py b/src/cpl/dependency_injection/service_provider.py index ceefabf7..a167bea2 100644 --- a/src/cpl/dependency_injection/service_provider.py +++ b/src/cpl/dependency_injection/service_provider.py @@ -1,26 +1,82 @@ from collections import Callable +from inspect import signature, Parameter from typing import Optional -from cpl.dependency_injection import ServiceProviderABC +from cpl.application.application_runtime_abc import ApplicationRuntimeABC +from cpl.configuration.configuration_abc import ConfigurationABC +from cpl.configuration.configuration_model_abc import ConfigurationModelABC +from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.dependency_injection.service_descriptor import ServiceDescriptor -from cpl.dependency_injection.service_factory_abc import ServiceFactoryABC from cpl.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum +from cpl.environment.application_environment_abc import ApplicationEnvironmentABC class ServiceProvider(ServiceProviderABC): - def __init__(self, service_factory: ServiceFactoryABC): + def __init__(self, service_descriptors: list[ServiceDescriptor], config: ConfigurationABC, + runtime: ApplicationRuntimeABC): ServiceProviderABC.__init__(self) - self._service_factory = service_factory + self._service_descriptors: list[ServiceDescriptor] = service_descriptors + self._configuration: ConfigurationABC = config + self._runtime: ApplicationRuntimeABC = runtime def _find_service(self, service_type: type) -> [ServiceDescriptor]: - for descriptor in self._service_factory.service_descriptors: + for descriptor in self._service_descriptors: if descriptor.service_type == service_type or issubclass(descriptor.service_type, service_type): return descriptor return None + def _get_service(self, service_type: type, parameter: Parameter) -> object: + for descriptor in self._service_descriptors: + if descriptor.service_type == parameter.annotation or issubclass(descriptor.service_type, + parameter.annotation): + if descriptor.implementation is not None: + return descriptor.implementation + + implementation = self.build_service(service_type) + if descriptor.lifetime == ServiceLifetimeEnum.singleton: + descriptor.implementation = implementation + + return descriptor.implementation + + def build_service(self, service_type: type) -> object: + for descriptor in self._service_descriptors: + if descriptor.service_type == service_type or issubclass(descriptor.service_type, service_type): + if descriptor.implementation is not None: + service_type = type(descriptor.implementation) + else: + service_type = descriptor.service_type + + sig = signature(service_type.__init__) + params = [] + for param in sig.parameters.items(): + parameter = param[1] + if parameter.name != 'self' and parameter.annotation != Parameter.empty: + if issubclass(parameter.annotation, ServiceProviderABC): + params.append(self) + + elif issubclass(parameter.annotation, ApplicationRuntimeABC): + params.append(self._runtime) + + elif issubclass(parameter.annotation, ApplicationEnvironmentABC): + params.append(self._configuration.environment) + + # elif issubclass(parameter.annotation, DatabaseContextABC): + # params.append(self._database_context) + + elif issubclass(parameter.annotation, ConfigurationModelABC): + params.append(self._configuration.get_configuration(parameter.annotation)) + + elif issubclass(parameter.annotation, ConfigurationABC): + params.append(self._configuration) + + else: + params.append(self._get_service(service_type, parameter)) + + return service_type(*params) + def get_service(self, service_type: type) -> Optional[Callable[object]]: result = self._find_service(service_type) @@ -30,7 +86,7 @@ class ServiceProvider(ServiceProviderABC): if result.implementation is not None: return result.implementation - implementation = result.service_type() + implementation = self.build_service(service_type) if result.lifetime == ServiceLifetimeEnum.singleton: result.implementation = implementation diff --git a/src/cpl/dependency_injection/service_provider_abc.py b/src/cpl/dependency_injection/service_provider_abc.py index b5ea1a93..af222b81 100644 --- a/src/cpl/dependency_injection/service_provider_abc.py +++ b/src/cpl/dependency_injection/service_provider_abc.py @@ -14,6 +14,9 @@ class ServiceProviderABC(ABC): """ pass + @abstractmethod + def build_service(self, service_type: type) -> object: pass + @abstractmethod def get_service(self, instance_type: Type) -> Callable[ServiceABC]: """ diff --git a/src/cpl/dependency_injection/service_provider_old.py b/src/cpl/dependency_injection/service_provider_old.py deleted file mode 100644 index 0a657450..00000000 --- a/src/cpl/dependency_injection/service_provider_old.py +++ /dev/null @@ -1,122 +0,0 @@ -from collections import Callable -from inspect import signature, Parameter -from typing import Type, Optional, Union - -from cpl.application.application_runtime_abc import ApplicationRuntimeABC -from cpl.configuration.configuration_abc import ConfigurationABC -from cpl.configuration.configuration_model_abc import ConfigurationModelABC -from cpl.database.context.database_context_abc import DatabaseContextABC -from cpl.dependency_injection.service_abc import ServiceABC -from cpl.dependency_injection.service_provider_abc import ServiceProviderABC -from cpl.environment.environment_abc import ApplicationEnvironmentABC - - -class ServiceProvider(ServiceProviderABC): - - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC): - """ - Service for service providing - :param runtime: - """ - ServiceProviderABC.__init__(self) - self._configuration: ConfigurationABC = config - self._runtime: ApplicationRuntimeABC = runtime - self._database_context: Optional[DatabaseContextABC] = None - - self._transient_services: dict[Type[ServiceABC], Callable[ServiceABC]] = {} - self._scoped_services: dict[Type[ServiceABC], Callable[ServiceABC]] = {} - self._singleton_services: dict[Type[ServiceABC], Callable[ServiceABC], ServiceABC] = {} - - def _create_instance(self, service: Union[Callable[ServiceABC], ServiceABC]) -> Callable[ServiceABC]: - """ - Creates an instance of given type - :param service: - :return: - """ - sig = signature(service.__init__) - params = [] - for param in sig.parameters.items(): - parameter = param[1] - if parameter.name != 'self' and parameter.annotation != Parameter.empty: - if issubclass(parameter.annotation, ApplicationRuntimeABC): - params.append(self._runtime) - - elif issubclass(parameter.annotation, ApplicationEnvironmentABC): - params.append(self._configuration.environment) - - elif issubclass(parameter.annotation, DatabaseContextABC): - params.append(self._database_context) - - elif issubclass(parameter.annotation, ConfigurationModelABC): - params.append(self._configuration.get_configuration(parameter.annotation)) - - elif issubclass(parameter.annotation, ConfigurationABC): - params.append(self._configuration) - - elif issubclass(parameter.annotation, ServiceProviderABC): - params.append(self) - - else: - params.append(self.get_service(parameter.annotation)) - - return service(*params) - - def add_db_context(self, db_context: Type[DatabaseContextABC]): - self._database_context = self._create_instance(db_context) - - def get_db_context(self) -> Callable[DatabaseContextABC]: - return self._database_context - - def add_transient(self, service_type: Type[ServiceABC], service: Callable[ServiceABC] = None): - if service is None: - self._transient_services[service_type] = service_type - else: - self._transient_services[service_type] = service - - def add_scoped(self, service_type: Type[ServiceABC], service: Callable[ServiceABC] = None): - if service is None: - self._scoped_services[service_type] = service_type - else: - self._scoped_services[service_type] = service - - def add_singleton(self, service_type: Type[ServiceABC], service: Callable[ServiceABC] = None): - for known_service in self._singleton_services: - if type(known_service) == service_type: - raise Exception(f'Service with type {service_type} already exists') - - if service is None: - self._singleton_services[service_type] = self._create_instance(service_type) - else: - self._singleton_services[service_type] = self._create_instance(service) - - def get_service(self, instance_type: Type) -> Callable[ServiceABC]: - if issubclass(instance_type, ServiceProviderABC): - return self - - for service in self._transient_services: - if service == instance_type and isinstance(self._transient_services[service], type(instance_type)): - return self._create_instance(self._transient_services[service]) - - for service in self._scoped_services: - if service == instance_type and isinstance(self._scoped_services[service], type(instance_type)): - return self._create_instance(self._scoped_services[service]) - - for service in self._singleton_services: - if service == instance_type and isinstance(self._singleton_services[service], instance_type): - return self._singleton_services[service] - - def remove_service(self, instance_type: Type[ServiceABC]): - for service in self._transient_services: - if service == instance_type and isinstance(self._transient_services[service], type(instance_type)): - del self._transient_services[service] - return - - for service in self._scoped_services: - if service == instance_type and isinstance(self._scoped_services[service], type(instance_type)): - del self._scoped_services[service] - return - - for service in self._singleton_services: - if service == instance_type and isinstance(self._singleton_services[service], instance_type): - del self._singleton_services[service] - return diff --git a/src/cpl/environment/__init__.py b/src/cpl/environment/__init__.py index 520e4adc..b719647c 100644 --- a/src/cpl/environment/__init__.py +++ b/src/cpl/environment/__init__.py @@ -20,7 +20,7 @@ __version__ = '2021.4.2' from collections import namedtuple # imports: -from .environment_abc import ApplicationEnvironmentABC +from .application_environment_abc import ApplicationEnvironmentABC from .environment_name_enum import EnvironmentNameEnum from .application_environment import ApplicationEnvironment diff --git a/src/cpl/environment/application_environment.py b/src/cpl/environment/application_environment.py index 47191b17..210f321b 100644 --- a/src/cpl/environment/application_environment.py +++ b/src/cpl/environment/application_environment.py @@ -1,7 +1,7 @@ from socket import gethostname from typing import Optional -from cpl.environment.environment_abc import ApplicationEnvironmentABC +from cpl.environment.application_environment_abc import ApplicationEnvironmentABC from cpl.environment.environment_name_enum import EnvironmentNameEnum diff --git a/src/cpl/environment/environment_abc.py b/src/cpl/environment/application_environment_abc.py similarity index 100% rename from src/cpl/environment/environment_abc.py rename to src/cpl/environment/application_environment_abc.py diff --git a/src/cpl/mailing/email_client_service.py b/src/cpl/mailing/email_client_service.py index e7886bda..170489ff 100644 --- a/src/cpl/mailing/email_client_service.py +++ b/src/cpl/mailing/email_client_service.py @@ -2,7 +2,7 @@ import ssl from smtplib import SMTP from typing import Optional -from cpl.environment.environment_abc import ApplicationEnvironmentABC +from cpl.environment.application_environment_abc import ApplicationEnvironmentABC from cpl.logging.logger_abc import LoggerABC from cpl.mailing.email import EMail from cpl.mailing.email_client_abc import EMailClientABC diff --git a/src/tests/custom/general/application.py b/src/tests/custom/general/application.py index d9d63caf..b59a9771 100644 --- a/src/tests/custom/general/application.py +++ b/src/tests/custom/general/application.py @@ -9,6 +9,7 @@ from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.logging.logger_abc import LoggerABC from cpl.mailing.email import EMail from cpl.mailing.email_client_abc import EMailClientABC +from tests.custom.general.test_service import TestService class Application(ApplicationABC): @@ -23,7 +24,7 @@ class Application(ApplicationABC): mail.add_header('Mime-Version: 1.0') mail.add_header('Content-Type: text/plain; charset=utf-8') mail.add_header('Content-Transfer-Encoding: quoted-printable') - mail.add_receiver(' sven.heidemann@sh-edraft.de') + mail.add_receiver('sven.heidemann@sh-edraft.de') mail.subject = f'Test - {self._configuration.environment.host_name}' mail.body = 'Dies ist ein Test :D' self._mailer.send_mail(mail) @@ -50,6 +51,8 @@ class Application(ApplicationABC): self._logger.debug(__name__, f'Host: {self._configuration.environment.host_name}') self._logger.debug(__name__, f'Environment: {self._configuration.environment.environment_name}') self._logger.debug(__name__, f'Customer: {self._configuration.environment.customer}') - Console.spinner('Test', self._wait, 20, spinner_foreground_color='red') + Console.spinner('Test', self._wait, 2, spinner_foreground_color='red') + test: TestService = self._services.get_service(TestService) + test.run() # self.test_send_mail() # self.test_console() diff --git a/src/tests/custom/general/startup.py b/src/tests/custom/general/startup.py index 0cf9a2ca..2e3688b7 100644 --- a/src/tests/custom/general/startup.py +++ b/src/tests/custom/general/startup.py @@ -10,6 +10,7 @@ from cpl.logging.logger_abc import LoggerABC from cpl.mailing.email_client_service import EMailClient from cpl.mailing.email_client_abc import EMailClientABC from cpl.utils.credential_manager import CredentialManager +from tests.custom.general.test_service import TestService class Startup(StartupABC): @@ -20,7 +21,6 @@ class Startup(StartupABC): self._configuration = config self._application_runtime = runtime self._services = services - print(self._services) def configure_configuration(self) -> ConfigurationABC: self._configuration.add_environment_variables('PYTHON_') @@ -40,5 +40,6 @@ class Startup(StartupABC): self._services.add_singleton(LoggerABC, Logger) self._services.add_singleton(EMailClientABC, EMailClient) + self._services.add_singleton(TestService) return self._services.build_service_provider() diff --git a/src/tests/custom/general/test_service.py b/src/tests/custom/general/test_service.py new file mode 100644 index 00000000..c96dfb74 --- /dev/null +++ b/src/tests/custom/general/test_service.py @@ -0,0 +1,13 @@ +from cpl.console.console import Console +from cpl.dependency_injection import ServiceABC, ServiceProviderABC + + +class TestService(ServiceABC): + + def __init__(self, provider: ServiceProviderABC): + ServiceABC.__init__(self) + + self._provider = provider + + def run(self): + Console.write_line('Hello World!', self._provider) From afb91c8f1f9d24b55edf4fc5d4a8148bdb394714 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Tue, 23 Mar 2021 21:42:08 +0100 Subject: [PATCH 08/22] Improved service provider --- src/cpl/dependency_injection/service_provider_abc.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cpl/dependency_injection/service_provider_abc.py b/src/cpl/dependency_injection/service_provider_abc.py index af222b81..3e86a0e1 100644 --- a/src/cpl/dependency_injection/service_provider_abc.py +++ b/src/cpl/dependency_injection/service_provider_abc.py @@ -15,7 +15,13 @@ class ServiceProviderABC(ABC): pass @abstractmethod - def build_service(self, service_type: type) -> object: pass + def build_service(self, service_type: type) -> object: + """ + Creates instance of given type + :param service_type: + :return: + """ + pass @abstractmethod def get_service(self, instance_type: Type) -> Callable[ServiceABC]: From 3c0dd00a99babf6280f5c6baaf11ae879cc55c3e Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Fri, 26 Mar 2021 13:16:40 +0100 Subject: [PATCH 09/22] Bugfixes --- docs/todo.txt | 2 ++ src/cpl/dependency_injection/__init__.py | 6 +++++- src/cpl/dependency_injection/service_provider.py | 2 ++ src/cpl_cli/startup.py | 5 +++-- 4 files changed, 12 insertions(+), 3 deletions(-) diff --git a/docs/todo.txt b/docs/todo.txt index e69de29b..0accc4e2 100644 --- a/docs/todo.txt +++ b/docs/todo.txt @@ -0,0 +1,2 @@ +- dbContext!!! +- templates for better Di using! \ No newline at end of file diff --git a/src/cpl/dependency_injection/__init__.py b/src/cpl/dependency_injection/__init__.py index 0091a8a4..d5df833a 100644 --- a/src/cpl/dependency_injection/__init__.py +++ b/src/cpl/dependency_injection/__init__.py @@ -21,7 +21,11 @@ from collections import namedtuple # imports: from .service_abc import ServiceABC -from .service_provider_old import ServiceProvider +from .service_collection import ServiceCollection +from .service_collection_abc import ServiceCollectionABC +from .service_descriptor import ServiceDescriptor +from .service_lifetime_enum import ServiceLifetimeEnum +from .service_provider import ServiceProvider from .service_provider_abc import ServiceProviderABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') diff --git a/src/cpl/dependency_injection/service_provider.py b/src/cpl/dependency_injection/service_provider.py index a167bea2..7f93477c 100644 --- a/src/cpl/dependency_injection/service_provider.py +++ b/src/cpl/dependency_injection/service_provider.py @@ -49,6 +49,8 @@ class ServiceProvider(ServiceProviderABC): else: service_type = descriptor.service_type + break + sig = signature(service_type.__init__) params = [] for param in sig.parameters.items(): diff --git a/src/cpl_cli/startup.py b/src/cpl_cli/startup.py index b936e3ce..5d250cf3 100644 --- a/src/cpl_cli/startup.py +++ b/src/cpl_cli/startup.py @@ -2,6 +2,7 @@ from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.application.startup_abc import StartupABC from cpl.configuration.console_argument import ConsoleArgument from cpl.configuration.configuration_abc import ConfigurationABC +from cpl.dependency_injection.service_collection_abc import ServiceCollectionABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl_cli.command.build_service import BuildService from cpl_cli.command.generate_service import GenerateService @@ -22,7 +23,7 @@ from cpl_cli.publish.publisher_abc import PublisherABC class Startup(StartupABC): - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC, services: ServiceProviderABC): + def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC, services: ServiceCollectionABC): StartupABC.__init__(self) self._configuration = config @@ -80,4 +81,4 @@ class Startup(StartupABC): self._services.add_transient(UpdateService) self._services.add_transient(VersionService) - return self._services + return self._services.build_service_provider() From 069e44bee6eb6656214670bf84cd19fa8b7ec087 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Sat, 27 Mar 2021 08:41:33 +0100 Subject: [PATCH 10/22] Code refactoring p.1 --- docs/todo.txt | 3 ++- src/cpl/application/application_builder.py | 1 - src/cpl/configuration/configuration_abc.py | 3 +-- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/docs/todo.txt b/docs/todo.txt index 0accc4e2..7260f7e1 100644 --- a/docs/todo.txt +++ b/docs/todo.txt @@ -1,2 +1,3 @@ - dbContext!!! -- templates for better Di using! \ No newline at end of file +- templates for better Di using! +- app-runtime -> app-env \ No newline at end of file diff --git a/src/cpl/application/application_builder.py b/src/cpl/application/application_builder.py index ef9947b8..b3e3f777 100644 --- a/src/cpl/application/application_builder.py +++ b/src/cpl/application/application_builder.py @@ -5,7 +5,6 @@ from cpl.application.application_builder_abc import ApplicationBuilderABC from cpl.application.application_runtime import ApplicationRuntime from cpl.application.startup_abc import StartupABC from cpl.configuration import Configuration -from cpl.dependency_injection import ServiceProvider from cpl.dependency_injection.service_collection import ServiceCollection diff --git a/src/cpl/configuration/configuration_abc.py b/src/cpl/configuration/configuration_abc.py index ef8e1af1..2fc03bb5 100644 --- a/src/cpl/configuration/configuration_abc.py +++ b/src/cpl/configuration/configuration_abc.py @@ -82,8 +82,7 @@ class ConfigurationABC(ABC): pass @abstractmethod - def get_configuration(self, search_type: Union[str, Type[ConfigurationModelABC]]) -> Union[ - str, Callable[ConfigurationModelABC]]: + def get_configuration(self, search_type: Union[str, Type[ConfigurationModelABC]]) -> Union[str, Callable[ConfigurationModelABC]]: """ Returns value in configuration by given type :param search_type: From 7af7f866c150765f6045dec4d9779b270966e4c0 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 08:56:18 +0200 Subject: [PATCH 11/22] Removed application runtime | Code refactoring p.2 --- src/cpl/application/__init__.py | 2 - src/cpl/application/application_abc.py | 6 +-- src/cpl/application/application_builder.py | 9 ++-- src/cpl/application/application_runtime.py | 52 ------------------- .../application/application_runtime_abc.py | 49 ----------------- .../service_collection.py | 6 +-- .../dependency_injection/service_provider.py | 8 +-- .../environment/application_environment.py | 41 +++++++++++++++ .../application_environment_abc.py | 38 ++++++++++++++ src/cpl/logging/logger_service.py | 10 ++-- src/cpl_cli/cli.py | 5 +- src/cpl_cli/command/install_service.py | 10 ++-- src/cpl_cli/command/new_service.py | 8 ++- src/cpl_cli/command/uninstall_service.py | 10 ++-- src/cpl_cli/command/update_service.py | 10 ++-- src/cpl_cli/command_handler_service.py | 9 ++-- .../live_server/live_server_service.py | 10 ++-- src/cpl_cli/publish/publisher_service.py | 12 ++--- src/cpl_cli/startup.py | 9 ++-- src/tests/custom/general/application.py | 5 +- src/tests/custom/general/startup.py | 4 +- 21 files changed, 136 insertions(+), 177 deletions(-) delete mode 100644 src/cpl/application/application_runtime.py delete mode 100644 src/cpl/application/application_runtime_abc.py diff --git a/src/cpl/application/__init__.py b/src/cpl/application/__init__.py index 028256d1..87eca6e5 100644 --- a/src/cpl/application/__init__.py +++ b/src/cpl/application/__init__.py @@ -23,8 +23,6 @@ from collections import namedtuple from .application_abc import ApplicationABC from .application_builder import ApplicationBuilder from .application_builder_abc import ApplicationBuilderABC -from .application_runtime import ApplicationRuntime -from .application_runtime_abc import ApplicationRuntimeABC from .startup_abc import StartupABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') diff --git a/src/cpl/application/application_abc.py b/src/cpl/application/application_abc.py index 66be8c74..4c0e07d8 100644 --- a/src/cpl/application/application_abc.py +++ b/src/cpl/application/application_abc.py @@ -1,21 +1,21 @@ from abc import ABC, abstractmethod from typing import Optional -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.console.console import Console from cpl.dependency_injection.service_provider_abc import ServiceProviderABC +from cpl.environment import ApplicationEnvironmentABC class ApplicationABC(ABC): @abstractmethod - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC, services: ServiceProviderABC): + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): """ ABC of application """ self._configuration: Optional[ConfigurationABC] = config - self._runtime: Optional[ApplicationRuntimeABC] = runtime + self._environment: Optional[ApplicationEnvironmentABC] = self._configuration.environment self._services: Optional[ServiceProviderABC] = services def run(self): diff --git a/src/cpl/application/application_builder.py b/src/cpl/application/application_builder.py index b3e3f777..067bda82 100644 --- a/src/cpl/application/application_builder.py +++ b/src/cpl/application/application_builder.py @@ -2,7 +2,6 @@ from typing import Type, Optional from cpl.application.application_abc import ApplicationABC from cpl.application.application_builder_abc import ApplicationBuilderABC -from cpl.application.application_runtime import ApplicationRuntime from cpl.application.startup_abc import StartupABC from cpl.configuration import Configuration from cpl.dependency_injection.service_collection import ServiceCollection @@ -19,8 +18,8 @@ class ApplicationBuilder(ApplicationBuilderABC): self._startup: Optional[StartupABC] = None self._configuration = Configuration() - self._runtime = ApplicationRuntime() - self._services = ServiceCollection(self._configuration, self._runtime) + self._environment = self._configuration.environment + self._services = ServiceCollection(self._configuration) def use_startup(self, startup: Type[StartupABC]): """ @@ -28,7 +27,7 @@ class ApplicationBuilder(ApplicationBuilderABC): :param startup: :return: """ - self._startup = startup(self._configuration, self._runtime, self._services) + self._startup = startup(self._configuration, self._services) def build(self) -> ApplicationABC: """ @@ -39,4 +38,4 @@ class ApplicationBuilder(ApplicationBuilderABC): self._startup.configure_configuration() self._startup.configure_services() - return self._app(self._configuration, self._runtime, self._services.build_service_provider()) + return self._app(self._configuration, self._services.build_service_provider()) diff --git a/src/cpl/application/application_runtime.py b/src/cpl/application/application_runtime.py deleted file mode 100644 index 3403574c..00000000 --- a/src/cpl/application/application_runtime.py +++ /dev/null @@ -1,52 +0,0 @@ -import pathlib -from datetime import datetime - -from cpl.application.application_runtime_abc import ApplicationRuntimeABC - - -class ApplicationRuntime(ApplicationRuntimeABC): - - def __init__(self): - """ - Representation of the application runtime - """ - ApplicationRuntimeABC.__init__(self) - - self._start_time: datetime = datetime.now() - self._end_time: datetime = datetime.now() - self._working_directory = pathlib.Path().absolute() - self._runtime_directory = pathlib.Path(__file__).parent.absolute() - - @property - def start_time(self) -> datetime: - return self._start_time - - @property - def end_time(self) -> datetime: - return self._end_time - - @end_time.setter - def end_time(self, end_time: datetime): - self._end_time = end_time - - @property - def date_time_now(self) -> datetime: - return datetime.now() - - @property - def working_directory(self) -> str: - return self._working_directory - - def set_working_directory(self, path: str = ''): - if path != '': - self._working_directory = path - return - - self._working_directory = pathlib.Path().absolute() - - @property - def runtime_directory(self) -> str: - return self._runtime_directory - - def set_runtime_directory(self, file: str): - self._runtime_directory = pathlib.Path(file).parent.absolute() diff --git a/src/cpl/application/application_runtime_abc.py b/src/cpl/application/application_runtime_abc.py deleted file mode 100644 index 55716954..00000000 --- a/src/cpl/application/application_runtime_abc.py +++ /dev/null @@ -1,49 +0,0 @@ -from abc import ABC, abstractmethod -from datetime import datetime - - -class ApplicationRuntimeABC(ABC): - - @abstractmethod - def __init__(self): - """ - ABC for application runtime - """ - pass - - @property - @abstractmethod - def start_time(self) -> datetime: pass - - @start_time.setter - @abstractmethod - def start_time(self, start_time: datetime): pass - - @property - @abstractmethod - def end_time(self): pass - - @end_time.setter - @abstractmethod - def end_time(self, end_time: datetime): pass - - @property - @abstractmethod - def date_time_now(self) -> datetime: pass - - @property - @abstractmethod - def working_directory(self) -> str: pass - - @property - @abstractmethod - def runtime_directory(self) -> str: pass - - @abstractmethod - def set_runtime_directory(self, runtime_directory: str): - """ - Sets the current runtime directory - :param runtime_directory: - :return: - """ - pass diff --git a/src/cpl/dependency_injection/service_collection.py b/src/cpl/dependency_injection/service_collection.py index 24fcd17b..d3bb4be1 100644 --- a/src/cpl/dependency_injection/service_collection.py +++ b/src/cpl/dependency_injection/service_collection.py @@ -1,6 +1,5 @@ from typing import Union, Type, Callable, Optional -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.database.context import DatabaseContextABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC @@ -12,10 +11,9 @@ from cpl.dependency_injection.service_provider import ServiceProvider class ServiceCollection(ServiceCollectionABC): - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC): + def __init__(self, config: ConfigurationABC): ServiceCollectionABC.__init__(self) self._configuration: ConfigurationABC = config - self._runtime: ApplicationRuntimeABC = runtime self._database_context: Optional[DatabaseContextABC] = None self._service_descriptors: list[ServiceDescriptor] = [] @@ -63,4 +61,4 @@ class ServiceCollection(ServiceCollectionABC): self._add_descriptor(service_type, ServiceLifetimeEnum.transient) def build_service_provider(self) -> ServiceProviderABC: - return ServiceProvider(self._service_descriptors, self._configuration, self._runtime) + return ServiceProvider(self._service_descriptors, self._configuration) diff --git a/src/cpl/dependency_injection/service_provider.py b/src/cpl/dependency_injection/service_provider.py index 7f93477c..86d0b478 100644 --- a/src/cpl/dependency_injection/service_provider.py +++ b/src/cpl/dependency_injection/service_provider.py @@ -2,7 +2,6 @@ from collections import Callable from inspect import signature, Parameter from typing import Optional -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.configuration.configuration_model_abc import ConfigurationModelABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC @@ -13,13 +12,11 @@ from cpl.environment.application_environment_abc import ApplicationEnvironmentAB class ServiceProvider(ServiceProviderABC): - def __init__(self, service_descriptors: list[ServiceDescriptor], config: ConfigurationABC, - runtime: ApplicationRuntimeABC): + def __init__(self, service_descriptors: list[ServiceDescriptor], config: ConfigurationABC): ServiceProviderABC.__init__(self) self._service_descriptors: list[ServiceDescriptor] = service_descriptors self._configuration: ConfigurationABC = config - self._runtime: ApplicationRuntimeABC = runtime def _find_service(self, service_type: type) -> [ServiceDescriptor]: for descriptor in self._service_descriptors: @@ -59,9 +56,6 @@ class ServiceProvider(ServiceProviderABC): if issubclass(parameter.annotation, ServiceProviderABC): params.append(self) - elif issubclass(parameter.annotation, ApplicationRuntimeABC): - params.append(self._runtime) - elif issubclass(parameter.annotation, ApplicationEnvironmentABC): params.append(self._configuration.environment) diff --git a/src/cpl/environment/application_environment.py b/src/cpl/environment/application_environment.py index 210f321b..7bb76f13 100644 --- a/src/cpl/environment/application_environment.py +++ b/src/cpl/environment/application_environment.py @@ -1,3 +1,5 @@ +import pathlib +from datetime import datetime from socket import gethostname from typing import Optional @@ -20,6 +22,11 @@ class ApplicationEnvironment(ApplicationEnvironmentABC): self._customer: Optional[str] = None self._content_root_path: Optional[str] = crp + self._start_time: datetime = datetime.now() + self._end_time: datetime = datetime.now() + self._working_directory = pathlib.Path().absolute() + self._runtime_directory = pathlib.Path(__file__).parent.absolute() + @property def environment_name(self) -> str: return str(self._environment_name.value) @@ -55,3 +62,37 @@ class ApplicationEnvironment(ApplicationEnvironmentABC): @property def host_name(self): return gethostname() + + @property + def start_time(self) -> datetime: + return self._start_time + + @property + def end_time(self) -> datetime: + return self._end_time + + @end_time.setter + def end_time(self, end_time: datetime): + self._end_time = end_time + + @property + def date_time_now(self) -> datetime: + return datetime.now() + + @property + def working_directory(self) -> str: + return self._working_directory + + def set_working_directory(self, path: str = ''): + if path != '': + self._working_directory = path + return + + self._working_directory = pathlib.Path().absolute() + + @property + def runtime_directory(self) -> str: + return self._runtime_directory + + def set_runtime_directory(self, file: str): + self._runtime_directory = pathlib.Path(file).parent.absolute() diff --git a/src/cpl/environment/application_environment_abc.py b/src/cpl/environment/application_environment_abc.py index 861a4144..c306f53f 100644 --- a/src/cpl/environment/application_environment_abc.py +++ b/src/cpl/environment/application_environment_abc.py @@ -1,4 +1,5 @@ from abc import ABC, abstractmethod +from datetime import datetime class ApplicationEnvironmentABC(ABC): @@ -45,3 +46,40 @@ class ApplicationEnvironmentABC(ABC): @property @abstractmethod def host_name(self) -> str: pass + + @property + @abstractmethod + def start_time(self) -> datetime: pass + + @start_time.setter + @abstractmethod + def start_time(self, start_time: datetime): pass + + @property + @abstractmethod + def end_time(self): pass + + @end_time.setter + @abstractmethod + def end_time(self, end_time: datetime): pass + + @property + @abstractmethod + def date_time_now(self) -> datetime: pass + + @property + @abstractmethod + def working_directory(self) -> str: pass + + @property + @abstractmethod + def runtime_directory(self) -> str: pass + + @abstractmethod + def set_runtime_directory(self, runtime_directory: str): + """ + Sets the current runtime directory + :param runtime_directory: + :return: + """ + pass diff --git a/src/cpl/logging/logger_service.py b/src/cpl/logging/logger_service.py index 6390797c..4c04a5d2 100644 --- a/src/cpl/logging/logger_service.py +++ b/src/cpl/logging/logger_service.py @@ -3,9 +3,9 @@ import os import traceback from string import Template -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.console.console import Console from cpl.console.foreground_color_enum import ForegroundColorEnum +from cpl.environment.application_environment_abc import ApplicationEnvironmentABC from cpl.logging.logger_abc import LoggerABC from cpl.logging.logging_level_enum import LoggingLevelEnum from cpl.logging.logging_settings import LoggingSettings @@ -14,7 +14,7 @@ from cpl.time.time_format_settings import TimeFormatSettings class Logger(LoggerABC): - def __init__(self, logging_settings: LoggingSettings, time_format: TimeFormatSettings, app_runtime: ApplicationRuntimeABC): + def __init__(self, logging_settings: LoggingSettings, time_format: TimeFormatSettings, env: ApplicationEnvironmentABC): """ Service for logging :param logging_settings: @@ -23,13 +23,13 @@ class Logger(LoggerABC): """ LoggerABC.__init__(self) - self._app_runtime = app_runtime + self._env = env self._log_settings: LoggingSettings = logging_settings self._time_format_settings: TimeFormatSettings = time_format self._log = Template(self._log_settings.filename).substitute( - date_time_now=self._app_runtime.date_time_now.strftime(self._time_format_settings.date_time_format), - start_time=self._app_runtime.start_time.strftime(self._time_format_settings.date_time_log_format) + date_time_now=self._env.date_time_now.strftime(self._time_format_settings.date_time_format), + start_time=self._env.start_time.strftime(self._time_format_settings.date_time_log_format) ) self._path = self._log_settings.path self._level = self._log_settings.level diff --git a/src/cpl_cli/cli.py b/src/cpl_cli/cli.py index 14f5a230..8547844e 100644 --- a/src/cpl_cli/cli.py +++ b/src/cpl_cli/cli.py @@ -1,7 +1,6 @@ from typing import Optional from cpl.application.application_abc import ApplicationABC -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.console.console import Console from cpl.dependency_injection import ServiceProviderABC @@ -22,11 +21,11 @@ from cpl_cli.command.version_service import VersionService class CLI(ApplicationABC): - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC, services: ServiceProviderABC): + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): """ CPL CLI """ - ApplicationABC.__init__(self, config, runtime, services) + ApplicationABC.__init__(self, config, services) self._command_handler: Optional[CommandHandler] = None diff --git a/src/cpl_cli/command/install_service.py b/src/cpl_cli/command/install_service.py index bc392077..494bb823 100644 --- a/src/cpl_cli/command/install_service.py +++ b/src/cpl_cli/command/install_service.py @@ -4,9 +4,9 @@ import subprocess from packaging import version -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.console.console import Console from cpl.console.foreground_color_enum import ForegroundColorEnum +from cpl.environment.application_environment_abc import ApplicationEnvironmentABC from cpl.utils.pip import Pip from cpl_cli.cli_settings import CLISettings from cpl_cli.command_abc import CommandABC @@ -18,18 +18,18 @@ from cpl_cli.error import Error class InstallService(CommandABC): - def __init__(self, runtime: ApplicationRuntimeABC, build_settings: BuildSettings, project_settings: ProjectSettings, + def __init__(self, env: ApplicationEnvironmentABC, build_settings: BuildSettings, project_settings: ProjectSettings, cli_settings: CLISettings): """ Service for the CLI command install - :param runtime: + :param env: :param build_settings: :param project_settings: :param cli_settings: """ CommandABC.__init__(self) - self._runtime = runtime + self._env = env self._build_settings = build_settings self._project_settings = project_settings self._cli_settings = cli_settings @@ -147,7 +147,7 @@ class InstallService(CommandABC): BuildSettings.__name__: SettingsHelper.get_build_settings_dict(self._build_settings) } - with open(os.path.join(self._runtime.working_directory, 'cpl.json'), 'w') as project_file: + with open(os.path.join(self._env.working_directory, 'cpl.json'), 'w') as project_file: project_file.write(json.dumps(config, indent=2)) project_file.close() diff --git a/src/cpl_cli/command/new_service.py b/src/cpl_cli/command/new_service.py index 2f46c390..565cc1c9 100644 --- a/src/cpl_cli/command/new_service.py +++ b/src/cpl_cli/command/new_service.py @@ -7,7 +7,6 @@ from packaging import version import cpl -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.console.foreground_color_enum import ForegroundColorEnum from cpl.console.console import Console @@ -29,16 +28,15 @@ from cpl_cli.templates.template_file_abc import TemplateFileABC class NewService(CommandABC): - def __init__(self, configuration: ConfigurationABC, runtime: ApplicationRuntimeABC): + def __init__(self, configuration: ConfigurationABC): """ Service for the CLI command new :param configuration: - :param runtime: """ CommandABC.__init__(self) self._config = configuration - self._runtime = runtime + self._env = self._config.environment self._project: ProjectSettings = ProjectSettings() self._project_dict = {} @@ -128,7 +126,7 @@ class NewService(CommandABC): Gets project path :return: """ - project_path = os.path.join(self._runtime.working_directory, self._project.name) + project_path = os.path.join(self._env.working_directory, self._project.name) if os.path.isdir(project_path) and len(os.listdir(project_path)) > 0: Console.error('Project path is not empty\n') return None diff --git a/src/cpl_cli/command/uninstall_service.py b/src/cpl_cli/command/uninstall_service.py index cdd86de4..da7ea3ca 100644 --- a/src/cpl_cli/command/uninstall_service.py +++ b/src/cpl_cli/command/uninstall_service.py @@ -2,9 +2,9 @@ import json import os import subprocess -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.console.console import Console from cpl.console.foreground_color_enum import ForegroundColorEnum +from cpl.environment.application_environment_abc import ApplicationEnvironmentABC from cpl.utils.pip import Pip from cpl_cli.command_abc import CommandABC from cpl_cli.configuration.build_settings import BuildSettings @@ -14,17 +14,17 @@ from cpl_cli.configuration.settings_helper import SettingsHelper class UninstallService(CommandABC): - def __init__(self, runtime: ApplicationRuntimeABC, build_settings: BuildSettings, + def __init__(self, env: ApplicationEnvironmentABC, build_settings: BuildSettings, project_settings: ProjectSettings): """ Service for the CLI command uninstall - :param runtime: + :param env: :param build_settings: :param project_settings: """ CommandABC.__init__(self) - self._runtime = runtime + self._env = env self._build_settings = build_settings self._project_settings = project_settings @@ -74,7 +74,7 @@ class UninstallService(CommandABC): ProjectSettings.__name__: SettingsHelper.get_project_settings_dict(self._project_settings), BuildSettings.__name__: SettingsHelper.get_build_settings_dict(self._build_settings) } - with open(os.path.join(self._runtime.working_directory, 'cpl.json'), 'w') as project_file: + with open(os.path.join(self._env.working_directory, 'cpl.json'), 'w') as project_file: project_file.write(json.dumps(config, indent=2)) project_file.close() diff --git a/src/cpl_cli/command/update_service.py b/src/cpl_cli/command/update_service.py index 0ff14d08..50951532 100644 --- a/src/cpl_cli/command/update_service.py +++ b/src/cpl_cli/command/update_service.py @@ -2,9 +2,9 @@ import json import os import subprocess -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.console.console import Console from cpl.console.foreground_color_enum import ForegroundColorEnum +from cpl.environment.application_environment_abc import ApplicationEnvironmentABC from cpl.utils.pip import Pip from cpl_cli.cli_settings import CLISettings from cpl_cli.command_abc import CommandABC @@ -16,20 +16,20 @@ from cpl_cli.configuration.settings_helper import SettingsHelper class UpdateService(CommandABC): def __init__(self, - runtime: ApplicationRuntimeABC, + env: ApplicationEnvironmentABC, build_settings: BuildSettings, project_settings: ProjectSettings, cli_settings: CLISettings): """ Service for the CLI command update - :param runtime: + :param env: :param build_settings: :param project_settings: :param cli_settings: """ CommandABC.__init__(self) - self._runtime = runtime + self._env = env self._build_settings = build_settings self._project_settings = project_settings self._cli_settings = cli_settings @@ -117,7 +117,7 @@ class UpdateService(CommandABC): BuildSettings.__name__: SettingsHelper.get_build_settings_dict(self._build_settings) } - with open(os.path.join(self._runtime.working_directory, 'cpl.json'), 'w') as project: + with open(os.path.join(self._env.working_directory, 'cpl.json'), 'w') as project: project.write(json.dumps(config, indent=2)) project.close() diff --git a/src/cpl_cli/command_handler_service.py b/src/cpl_cli/command_handler_service.py index 63278ca7..7b8b4f2d 100644 --- a/src/cpl_cli/command_handler_service.py +++ b/src/cpl_cli/command_handler_service.py @@ -1,6 +1,5 @@ import os -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.console.console import Console from cpl.dependency_injection.service_abc import ServiceABC @@ -11,16 +10,16 @@ from cpl_cli.command_model import CommandModel class CommandHandler(ServiceABC): - def __init__(self, runtime: ApplicationRuntimeABC, config: ConfigurationABC, services: ServiceProviderABC): + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): """ Service to handle incoming commands and args - :param runtime: + :param config: :param services: """ ServiceABC.__init__(self) - self._runtime = runtime self._config = config + self._env = self._config.environment self._services = services self._commands: list[CommandModel] = [] @@ -44,7 +43,7 @@ class CommandHandler(ServiceABC): """ for command in self._commands: if cmd == command.name or cmd in command.aliases: - if command.is_project_needed and not os.path.isfile(os.path.join(self._runtime.working_directory, 'cpl.json')): + if command.is_project_needed and not os.path.isfile(os.path.join(self._env.working_directory, 'cpl.json')): Error.error('The command requires to be run in an CPL project, but a project could not be found.') return diff --git a/src/cpl_cli/live_server/live_server_service.py b/src/cpl_cli/live_server/live_server_service.py index 9e052805..c556f20b 100644 --- a/src/cpl_cli/live_server/live_server_service.py +++ b/src/cpl_cli/live_server/live_server_service.py @@ -6,28 +6,28 @@ import psutil as psutil from watchdog.events import FileSystemEventHandler from watchdog.observers import Observer -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.console.console import Console from cpl.dependency_injection.service_abc import ServiceABC +from cpl.environment.application_environment_abc import ApplicationEnvironmentABC from cpl_cli.configuration.build_settings import BuildSettings from cpl_cli.live_server.live_server_thread import LiveServerThread class LiveServerService(ServiceABC, FileSystemEventHandler): - def __init__(self, runtime: ApplicationRuntimeABC, build_settings: BuildSettings): + def __init__(self, env: ApplicationEnvironmentABC, build_settings: BuildSettings): """ Service for the live development server - :param runtime: + :param env: :param build_settings: """ ServiceABC.__init__(self) FileSystemEventHandler.__init__(self) - self._runtime = runtime + self._env = env self._build_settings = build_settings - self._src_dir = os.path.join(self._runtime.working_directory, self._build_settings.source_path) + self._src_dir = os.path.join(self._env.working_directory, self._build_settings.source_path) self._ls_thread = None self._observer = None diff --git a/src/cpl_cli/publish/publisher_service.py b/src/cpl_cli/publish/publisher_service.py index 255cb054..964ab092 100644 --- a/src/cpl_cli/publish/publisher_service.py +++ b/src/cpl_cli/publish/publisher_service.py @@ -7,9 +7,9 @@ import setuptools from packaging import version from setuptools import sandbox -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.console.foreground_color_enum import ForegroundColorEnum from cpl.console.console import Console +from cpl.environment.application_environment_abc import ApplicationEnvironmentABC from cpl_cli.configuration.build_settings import BuildSettings from cpl_cli.configuration.project_settings import ProjectSettings from cpl_cli.publish.publisher_abc import PublisherABC @@ -19,21 +19,21 @@ from cpl_cli.templates.publish.setup_template import SetupTemplate class PublisherService(PublisherABC): - def __init__(self, runtime: ApplicationRuntimeABC, project: ProjectSettings, build: BuildSettings): + def __init__(self, env: ApplicationEnvironmentABC, project: ProjectSettings, build: BuildSettings): """ Service to build or publish files for distribution - :param runtime: + :param env: :param project: :param build: """ PublisherABC.__init__(self) - self._runtime = runtime + self._env = env self._project_settings = project self._build_settings = build - self._source_path = os.path.join(self._runtime.working_directory, self._build_settings.source_path) - self._output_path = os.path.join(self._runtime.working_directory, self._build_settings.output_path) + self._source_path = os.path.join(self._env.working_directory, self._build_settings.source_path) + self._output_path = os.path.join(self._env.working_directory, self._build_settings.output_path) self._included_files: list[str] = [] self._included_dirs: list[str] = [] diff --git a/src/cpl_cli/startup.py b/src/cpl_cli/startup.py index 5d250cf3..1d54bc32 100644 --- a/src/cpl_cli/startup.py +++ b/src/cpl_cli/startup.py @@ -1,4 +1,3 @@ -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.application.startup_abc import StartupABC from cpl.configuration.console_argument import ConsoleArgument from cpl.configuration.configuration_abc import ConfigurationABC @@ -23,21 +22,21 @@ from cpl_cli.publish.publisher_abc import PublisherABC class Startup(StartupABC): - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC, services: ServiceCollectionABC): + def __init__(self, config: ConfigurationABC, services: ServiceCollectionABC): StartupABC.__init__(self) self._configuration = config - self._application_runtime = runtime + self._env = self._configuration.environment self._services = services - self._application_runtime.set_runtime_directory(__file__) + self._env.set_runtime_directory(__file__) def configure_configuration(self) -> ConfigurationABC: self._configuration.argument_error_function = Error.error self._configuration.add_environment_variables('PYTHON_') self._configuration.add_environment_variables('CPL_') - self._configuration.add_json_file('appsettings.json', path=self._application_runtime.runtime_directory, + self._configuration.add_json_file('appsettings.json', path=self._env.runtime_directory, optional=False, output=False) self._configuration.add_console_argument(ConsoleArgument('', 'build', ['b', 'B'], '')) self._configuration.add_console_argument(ConsoleArgument('', 'generate', ['g', 'G'], '', console_arguments=[ diff --git a/src/tests/custom/general/application.py b/src/tests/custom/general/application.py index b59a9771..ff1140ca 100644 --- a/src/tests/custom/general/application.py +++ b/src/tests/custom/general/application.py @@ -2,7 +2,6 @@ import time from typing import Optional from cpl.application.application_abc import ApplicationABC -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.console.console import Console from cpl.dependency_injection.service_provider_abc import ServiceProviderABC @@ -14,8 +13,8 @@ from tests.custom.general.test_service import TestService class Application(ApplicationABC): - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC, services: ServiceProviderABC): - ApplicationABC.__init__(self, config, runtime, services) + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + ApplicationABC.__init__(self, config, services) self._logger: Optional[LoggerABC] = None self._mailer: Optional[EMailClientABC] = None diff --git a/src/tests/custom/general/startup.py b/src/tests/custom/general/startup.py index 2e3688b7..3630004e 100644 --- a/src/tests/custom/general/startup.py +++ b/src/tests/custom/general/startup.py @@ -1,4 +1,3 @@ -from cpl.application.application_runtime_abc import ApplicationRuntimeABC from cpl.application.startup_abc import StartupABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.database.context.database_context import DatabaseContext @@ -15,11 +14,10 @@ from tests.custom.general.test_service import TestService class Startup(StartupABC): - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC, services: ServiceCollectionABC): + def __init__(self, config: ConfigurationABC, services: ServiceCollectionABC): StartupABC.__init__(self) self._configuration = config - self._application_runtime = runtime self._services = services def configure_configuration(self) -> ConfigurationABC: From 05b9fd801b64e521673718168a9a89d0ca64b11a Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 09:21:58 +0200 Subject: [PATCH 12/22] Bugfixes --- src/cpl/dependency_injection/service_provider.py | 11 +++++------ src/cpl_cli/command/generate_service.py | 12 +++++------- 2 files changed, 10 insertions(+), 13 deletions(-) diff --git a/src/cpl/dependency_injection/service_provider.py b/src/cpl/dependency_injection/service_provider.py index 86d0b478..e0de3984 100644 --- a/src/cpl/dependency_injection/service_provider.py +++ b/src/cpl/dependency_injection/service_provider.py @@ -25,18 +25,17 @@ class ServiceProvider(ServiceProviderABC): return None - def _get_service(self, service_type: type, parameter: Parameter) -> object: + def _get_service(self, parameter: Parameter) -> object: for descriptor in self._service_descriptors: - if descriptor.service_type == parameter.annotation or issubclass(descriptor.service_type, - parameter.annotation): + if descriptor.service_type == parameter.annotation or issubclass(descriptor.service_type, parameter.annotation): if descriptor.implementation is not None: return descriptor.implementation - implementation = self.build_service(service_type) + implementation = self.build_service(descriptor.service_type) if descriptor.lifetime == ServiceLifetimeEnum.singleton: descriptor.implementation = implementation - return descriptor.implementation + return implementation def build_service(self, service_type: type) -> object: for descriptor in self._service_descriptors: @@ -69,7 +68,7 @@ class ServiceProvider(ServiceProviderABC): params.append(self._configuration) else: - params.append(self._get_service(service_type, parameter)) + params.append(self._get_service(parameter)) return service_type(*params) diff --git a/src/cpl_cli/command/generate_service.py b/src/cpl_cli/command/generate_service.py index a83d2f1f..21c8b61a 100644 --- a/src/cpl_cli/command/generate_service.py +++ b/src/cpl_cli/command/generate_service.py @@ -1,7 +1,6 @@ import os from collections import Callable -from cpl.application.application_abc import ApplicationRuntimeABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.console.foreground_color_enum import ForegroundColorEnum from cpl.console.console import Console @@ -18,11 +17,10 @@ from cpl_cli.templates.template_file_abc import TemplateFileABC class GenerateService(CommandABC): - def __init__(self, configuration: ConfigurationABC, runtime: ApplicationRuntimeABC): + def __init__(self, configuration: ConfigurationABC): """ Service for the CLI command generate :param configuration: - :param runtime: """ CommandABC.__init__(self) @@ -54,7 +52,7 @@ class GenerateService(CommandABC): } self._config = configuration - self._runtime = runtime + self._env = self._config.environment @staticmethod def _help(message: str): @@ -105,7 +103,7 @@ class GenerateService(CommandABC): template = template(class_name, schematic, self._schematics[schematic]["Upper"], rel_path) - file_path = os.path.join(self._runtime.working_directory, template.path, template.name) + file_path = os.path.join(self._env.working_directory, template.path, template.name) if not os.path.isdir(os.path.dirname(file_path)): os.makedirs(os.path.dirname(file_path)) @@ -113,9 +111,9 @@ class GenerateService(CommandABC): Console.error(f'{String.first_to_upper(schematic)} already exists!') exit() - message = f'Creating {self._runtime.working_directory}/{template.path}/{template.name}' + message = f'Creating {self._env.working_directory}/{template.path}/{template.name}' if template.path == '': - message = f'Creating {self._runtime.working_directory}/{template.name}' + message = f'Creating {self._env.working_directory}/{template.name}' Console.spinner( message, From bc69476bb205d242a7bcb9791e70a1944f9a2eae Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 11:47:49 +0200 Subject: [PATCH 13/22] Improved new project templates & publish 2021.4.2.dev1 --- cpl.json | 2 +- src/cpl/__init__.py | 4 +- src/cpl/application/__init__.py | 4 +- src/cpl/configuration/__init__.py | 4 +- src/cpl/console/__init__.py | 4 +- src/cpl/database/__init__.py | 4 +- src/cpl/database/connection/__init__.py | 4 +- src/cpl/database/context/__init__.py | 4 +- src/cpl/dependency_injection/__init__.py | 4 +- src/cpl/environment/__init__.py | 4 +- src/cpl/logging/__init__.py | 4 +- src/cpl/mailing/__init__.py | 4 +- src/cpl/time/__init__.py | 4 +- src/cpl/utils/__init__.py | 4 +- src/cpl_cli/__init__.py | 4 +- src/cpl_cli/command/__init__.py | 4 +- src/cpl_cli/command/new_service.py | 36 +++++++------ src/cpl_cli/configuration/__init__.py | 4 +- src/cpl_cli/live_server/__init__.py | 4 +- src/cpl_cli/publish/__init__.py | 4 +- src/cpl_cli/templates/__init__.py | 4 +- src/cpl_cli/templates/build/__init__.py | 4 +- src/cpl_cli/templates/generate/__init__.py | 4 +- src/cpl_cli/templates/new/__init__.py | 4 +- src/cpl_cli/templates/new/console/__init__.py | 4 +- .../templates/new/console/src/__init__.py | 4 +- .../templates/new/console/src/application.py | 6 +-- src/cpl_cli/templates/new/console/src/main.py | 50 ++++++++++++++++++- .../templates/new/console/src/startup.py | 6 +-- .../new/console/src/tests/__init__.py | 4 +- src/cpl_cli/templates/publish/__init__.py | 4 +- src/tests/custom/cpl-test/src/main.py | 13 ----- .../custom/cpl-test/src/model/test_model.py | 22 -------- .../cpl-test => generated/simple-app}/LICENSE | 0 .../simple-app}/README.md | 0 .../simple-app}/cpl.json | 12 +++-- .../generated/simple-app/src/application.py | 16 ++++++ src/tests/generated/simple-app/src/main.py | 12 +++++ .../simple-app}/src/tests/__init__.py | 0 .../simple-console/LICENSE} | 0 src/tests/generated/simple-console/README.md | 0 src/tests/generated/simple-console/cpl.json | 41 +++++++++++++++ .../generated/simple-console/src/main.py | 9 ++++ .../simple-console/src/tests/__init__.py | 1 + src/tests/generated/startup-app/LICENSE | 0 src/tests/generated/startup-app/README.md | 0 src/tests/generated/startup-app/cpl.json | 41 +++++++++++++++ .../generated/startup-app/src/application.py | 16 ++++++ src/tests/generated/startup-app/src/main.py | 14 ++++++ .../generated/startup-app/src/startup.py | 20 ++++++++ .../startup-app/src/tests/__init__.py | 1 + 51 files changed, 305 insertions(+), 117 deletions(-) delete mode 100644 src/tests/custom/cpl-test/src/main.py delete mode 100644 src/tests/custom/cpl-test/src/model/test_model.py rename src/tests/{custom/cpl-test => generated/simple-app}/LICENSE (100%) rename src/tests/{custom/cpl-test => generated/simple-app}/README.md (100%) rename src/tests/{custom/cpl-test => generated/simple-app}/cpl.json (69%) create mode 100644 src/tests/generated/simple-app/src/application.py create mode 100644 src/tests/generated/simple-app/src/main.py rename src/tests/{custom/cpl-test => generated/simple-app}/src/tests/__init__.py (100%) rename src/tests/{custom/cpl-test/src/model/__init__.py => generated/simple-console/LICENSE} (100%) create mode 100644 src/tests/generated/simple-console/README.md create mode 100644 src/tests/generated/simple-console/cpl.json create mode 100644 src/tests/generated/simple-console/src/main.py create mode 100644 src/tests/generated/simple-console/src/tests/__init__.py create mode 100644 src/tests/generated/startup-app/LICENSE create mode 100644 src/tests/generated/startup-app/README.md create mode 100644 src/tests/generated/startup-app/cpl.json create mode 100644 src/tests/generated/startup-app/src/application.py create mode 100644 src/tests/generated/startup-app/src/main.py create mode 100644 src/tests/generated/startup-app/src/startup.py create mode 100644 src/tests/generated/startup-app/src/tests/__init__.py diff --git a/cpl.json b/cpl.json index ae5f889b..744a8115 100644 --- a/cpl.json +++ b/cpl.json @@ -4,7 +4,7 @@ "Version": { "Major": "2021", "Minor": "04", - "Micro": "02" + "Micro": "02.dev1" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/src/cpl/__init__.py b/src/cpl/__init__.py index 008e5a56..f804633e 100644 --- a/src/cpl/__init__.py +++ b/src/cpl/__init__.py @@ -15,11 +15,11 @@ __title__ = 'sh_cpl.cpl' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/application/__init__.py b/src/cpl/application/__init__.py index 87eca6e5..e40a2baa 100644 --- a/src/cpl/application/__init__.py +++ b/src/cpl/application/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.application' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -26,4 +26,4 @@ from .application_builder_abc import ApplicationBuilderABC from .startup_abc import StartupABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/configuration/__init__.py b/src/cpl/configuration/__init__.py index f374e0d5..41c6a31b 100644 --- a/src/cpl/configuration/__init__.py +++ b/src/cpl/configuration/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.configuration' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -27,4 +27,4 @@ from .configuration_variable_name_enum import ConfigurationVariableNameEnum from .console_argument import ConsoleArgument VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/console/__init__.py b/src/cpl/console/__init__.py index 1e9a8e92..e75ea363 100644 --- a/src/cpl/console/__init__.py +++ b/src/cpl/console/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.console' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -27,4 +27,4 @@ from .foreground_color_enum import ForegroundColorEnum from .spinner_thread import SpinnerThread VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/database/__init__.py b/src/cpl/database/__init__.py index 7605162f..ce33ca70 100644 --- a/src/cpl/database/__init__.py +++ b/src/cpl/database/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.database' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -25,4 +25,4 @@ from .database_settings import DatabaseSettings from .database_settings_name_enum import DatabaseSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/database/connection/__init__.py b/src/cpl/database/connection/__init__.py index 3ae7b65d..2e962b51 100644 --- a/src/cpl/database/connection/__init__.py +++ b/src/cpl/database/connection/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.database.connection' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -24,4 +24,4 @@ from .database_connection import DatabaseConnection from .database_connection_abc import DatabaseConnectionABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/database/context/__init__.py b/src/cpl/database/context/__init__.py index 66a4a5bc..c4d4e74a 100644 --- a/src/cpl/database/context/__init__.py +++ b/src/cpl/database/context/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.database.context' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -24,4 +24,4 @@ from .database_context import DatabaseContext from .database_context_abc import DatabaseContextABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/dependency_injection/__init__.py b/src/cpl/dependency_injection/__init__.py index d5df833a..73436d6e 100644 --- a/src/cpl/dependency_injection/__init__.py +++ b/src/cpl/dependency_injection/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.dependency_injection' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -29,4 +29,4 @@ from .service_provider import ServiceProvider from .service_provider_abc import ServiceProviderABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/environment/__init__.py b/src/cpl/environment/__init__.py index b719647c..a753f129 100644 --- a/src/cpl/environment/__init__.py +++ b/src/cpl/environment/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.environment' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -25,4 +25,4 @@ from .environment_name_enum import EnvironmentNameEnum from .application_environment import ApplicationEnvironment VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/logging/__init__.py b/src/cpl/logging/__init__.py index 49f70e66..2e6ced30 100644 --- a/src/cpl/logging/__init__.py +++ b/src/cpl/logging/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.logging' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -27,4 +27,4 @@ from .logging_settings import LoggingSettings from .logging_settings_name_enum import LoggingSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/mailing/__init__.py b/src/cpl/mailing/__init__.py index c6ed9193..726f559d 100644 --- a/src/cpl/mailing/__init__.py +++ b/src/cpl/mailing/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.mailing' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -27,4 +27,4 @@ from .email_client_settings import EMailClientSettings from .email_client_settings_name_enum import EMailClientSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/time/__init__.py b/src/cpl/time/__init__.py index c5145d81..b53d88b3 100644 --- a/src/cpl/time/__init__.py +++ b/src/cpl/time/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.time' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -24,4 +24,4 @@ from .time_format_settings import TimeFormatSettings from .time_format_settings_names_enum import TimeFormatSettingsNamesEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl/utils/__init__.py b/src/cpl/utils/__init__.py index 009cebf8..83743a08 100644 --- a/src/cpl/utils/__init__.py +++ b/src/cpl/utils/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.utils' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -25,4 +25,4 @@ from .string import String from .pip import Pip VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/__init__.py b/src/cpl_cli/__init__.py index f7c22826..d464193a 100644 --- a/src/cpl_cli/__init__.py +++ b/src/cpl_cli/__init__.py @@ -15,7 +15,7 @@ __title__ = 'sh_cpl.cpl_cli' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -29,4 +29,4 @@ from .main import main from .startup import Startup VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/command/__init__.py b/src/cpl_cli/command/__init__.py index 95d6aa56..8f0ce1f1 100644 --- a/src/cpl_cli/command/__init__.py +++ b/src/cpl_cli/command/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_cli.command' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -28,4 +28,4 @@ from .publish_service import PublishService from .version_service import VersionService VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/command/new_service.py b/src/cpl_cli/command/new_service.py index 565cc1c9..34e4fc83 100644 --- a/src/cpl_cli/command/new_service.py +++ b/src/cpl_cli/command/new_service.py @@ -20,7 +20,7 @@ from cpl_cli.templates.new.console.license import LicenseTemplate from cpl_cli.templates.new.console.readme_py import ReadmeTemplate from cpl_cli.templates.new.console.src.application import ApplicationTemplate from cpl_cli.templates.new.console.src.main import MainWithApplicationHostAndStartupTemplate, \ - MainWithoutApplicationHostTemplate, MainWithApplicationHostTemplate + MainWithoutApplicationBaseTemplate, MainWithApplicationBaseTemplate, MainWithDependencyInjection from cpl_cli.templates.new.console.src.startup import StartupTemplate from cpl_cli.templates.new.console.src.tests.init import TestsInitTemplate from cpl_cli.templates.template_file_abc import TemplateFileABC @@ -133,27 +133,26 @@ class NewService(CommandABC): return project_path - def _get_project_informations(self): + def _get_project_information(self): """ - Gets project informations from user + Gets project information's from user :return: """ - result = Console.read('Do you want to use application host? (y/n) ') + result = Console.read('Do you want to use application base? (y/n) ') if result.lower() == 'y': self._use_application_api = True - if self._use_application_api: - result = Console.read('Do you want to use startup? (y/n) ') - if result.lower() == 'y': - self._use_startup = True + result = Console.read('Do you want to use service providing? (y/n) ') + if result.lower() == 'y': + self._use_service_providing = True + + if self._use_application_api: + result = Console.read('Do you want to use startup? (y/n) ') + if result.lower() == 'y': + self._use_startup = True Console.set_foreground_color(ForegroundColorEnum.default) - # else: - # result = Console.read('Do you want to use service providing? (y/n) ') - # if result.lower() == 'y': - # self._use_service_providing = True - def _build_project_dir(self, project_path: str): """ Builds the project files @@ -172,15 +171,20 @@ class NewService(CommandABC): ReadmeTemplate(), TestsInitTemplate() ] + if self._use_application_api: templates.append(ApplicationTemplate()) + if self._use_startup: templates.append(StartupTemplate()) templates.append(MainWithApplicationHostAndStartupTemplate()) else: - templates.append(MainWithApplicationHostTemplate()) + templates.append(MainWithApplicationBaseTemplate()) else: - templates.append(MainWithoutApplicationHostTemplate()) + if self._use_service_providing: + templates.append(MainWithDependencyInjection()) + else: + templates.append(MainWithoutApplicationBaseTemplate()) for template in templates: Console.spinner( @@ -225,7 +229,7 @@ class NewService(CommandABC): if path is None: return - self._get_project_informations() + self._get_project_information() try: self._build_project_dir(path) except Exception as e: diff --git a/src/cpl_cli/configuration/__init__.py b/src/cpl_cli/configuration/__init__.py index 5a53289c..b620df12 100644 --- a/src/cpl_cli/configuration/__init__.py +++ b/src/cpl_cli/configuration/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_cli.configuration' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -28,4 +28,4 @@ from .version_settings import VersionSettings from .version_settings_name_enum import VersionSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/live_server/__init__.py b/src/cpl_cli/live_server/__init__.py index d826d0f0..3f825f5b 100644 --- a/src/cpl_cli/live_server/__init__.py +++ b/src/cpl_cli/live_server/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.live_server' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/publish/__init__.py b/src/cpl_cli/publish/__init__.py index 2f324b45..58828771 100644 --- a/src/cpl_cli/publish/__init__.py +++ b/src/cpl_cli/publish/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_cli.publish' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple @@ -24,4 +24,4 @@ from .publisher_abc import PublisherABC from .publisher_service import PublisherService VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/templates/__init__.py b/src/cpl_cli/templates/__init__.py index cd80bf44..528d43ac 100644 --- a/src/cpl_cli/templates/__init__.py +++ b/src/cpl_cli/templates/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/templates/build/__init__.py b/src/cpl_cli/templates/build/__init__.py index a8ef97fc..d43eaa61 100644 --- a/src/cpl_cli/templates/build/__init__.py +++ b/src/cpl_cli/templates/build/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.build' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/templates/generate/__init__.py b/src/cpl_cli/templates/generate/__init__.py index f0e04313..dbb44826 100644 --- a/src/cpl_cli/templates/generate/__init__.py +++ b/src/cpl_cli/templates/generate/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.generate' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/templates/new/__init__.py b/src/cpl_cli/templates/new/__init__.py index 67aa1aa9..2f4a904b 100644 --- a/src/cpl_cli/templates/new/__init__.py +++ b/src/cpl_cli/templates/new/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/templates/new/console/__init__.py b/src/cpl_cli/templates/new/console/__init__.py index 214acb2f..10025b60 100644 --- a/src/cpl_cli/templates/new/console/__init__.py +++ b/src/cpl_cli/templates/new/console/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new.console' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/templates/new/console/src/__init__.py b/src/cpl_cli/templates/new/console/src/__init__.py index 93766c79..85d458de 100644 --- a/src/cpl_cli/templates/new/console/src/__init__.py +++ b/src/cpl_cli/templates/new/console/src/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new.console.src' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/templates/new/console/src/application.py b/src/cpl_cli/templates/new/console/src/application.py index 3d22124d..65c33d12 100644 --- a/src/cpl_cli/templates/new/console/src/application.py +++ b/src/cpl_cli/templates/new/console/src/application.py @@ -11,7 +11,7 @@ class ApplicationTemplate(TemplateFileABC): self._name = 'application.py' self._path = 'src/' self._value = textwrap.dedent("""\ - from cpl.application import ApplicationABC, ApplicationRuntimeABC + from cpl.application import ApplicationABC from cpl.configuration import ConfigurationABC from cpl.console import Console from cpl.dependency_injection import ServiceProviderABC @@ -19,8 +19,8 @@ class ApplicationTemplate(TemplateFileABC): class Application(ApplicationABC): - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC, services: ServiceProviderABC): - ApplicationABC.__init__(self, config, runtime, services) + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + ApplicationABC.__init__(self, config, services) def configure(self): pass diff --git a/src/cpl_cli/templates/new/console/src/main.py b/src/cpl_cli/templates/new/console/src/main.py index 76d8c8c6..9ed2afa1 100644 --- a/src/cpl_cli/templates/new/console/src/main.py +++ b/src/cpl_cli/templates/new/console/src/main.py @@ -40,7 +40,7 @@ class MainWithApplicationHostAndStartupTemplate(TemplateFileABC): return self._value -class MainWithApplicationHostTemplate(TemplateFileABC): +class MainWithApplicationBaseTemplate(TemplateFileABC): def __init__(self): TemplateFileABC.__init__(self) @@ -75,7 +75,7 @@ class MainWithApplicationHostTemplate(TemplateFileABC): return self._value -class MainWithoutApplicationHostTemplate(TemplateFileABC): +class MainWithoutApplicationBaseTemplate(TemplateFileABC): def __init__(self): TemplateFileABC.__init__(self) @@ -105,3 +105,49 @@ class MainWithoutApplicationHostTemplate(TemplateFileABC): @property def value(self) -> str: return self._value + + +class MainWithDependencyInjection(TemplateFileABC): + + def __init__(self): + TemplateFileABC.__init__(self) + + self._name = 'main.py' + self._path = 'src/' + self._value = textwrap.dedent("""\ + from cpl.configuration import Configuration, ConfigurationABC + from cpl.console import Console + from cpl.dependency_injection import ServiceCollection, ServiceProviderABC + + + def configure_configuration() -> ConfigurationABC: + config = Configuration() + return config + + + def configure_services(config: ConfigurationABC) -> ServiceProviderABC: + services = ServiceCollection(config) + return services.build_service_provider() + + + def main(): + config = configure_configuration() + provider = configure_services(config) + Console.write_line('Hello World') + + + if __name__ == '__main__': + main() + """) + + @property + def name(self) -> str: + return self._name + + @property + def path(self) -> str: + return self._path + + @property + def value(self) -> str: + return self._value diff --git a/src/cpl_cli/templates/new/console/src/startup.py b/src/cpl_cli/templates/new/console/src/startup.py index 2e770d9c..b7b44e0e 100644 --- a/src/cpl_cli/templates/new/console/src/startup.py +++ b/src/cpl_cli/templates/new/console/src/startup.py @@ -11,18 +11,18 @@ class StartupTemplate(TemplateFileABC): self._name = 'startup.py' self._path = 'src/' self._value = textwrap.dedent("""\ - from cpl.application import ApplicationRuntimeABC, StartupABC + from cpl.application import StartupABC from cpl.configuration import ConfigurationABC from cpl.dependency_injection import ServiceProviderABC class Startup(StartupABC): - def __init__(self, config: ConfigurationABC, runtime: ApplicationRuntimeABC, services: ServiceProviderABC): + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): StartupABC.__init__(self) self._configuration = config - self._application_runtime = runtime + self._environment = self._configuration.environment self._services = services def configure_configuration(self) -> ConfigurationABC: diff --git a/src/cpl_cli/templates/new/console/src/tests/__init__.py b/src/cpl_cli/templates/new/console/src/tests/__init__.py index 3c8f9b00..63fc1bba 100644 --- a/src/cpl_cli/templates/new/console/src/tests/__init__.py +++ b/src/cpl_cli/templates/new/console/src/tests/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new.console.src.tests' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/cpl_cli/templates/publish/__init__.py b/src/cpl_cli/templates/publish/__init__.py index 81138751..0afdd047 100644 --- a/src/cpl_cli/templates/publish/__init__.py +++ b/src/cpl_cli/templates/publish/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.publish' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2' +__version__ = '2021.4.2.dev1' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02') +version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') diff --git a/src/tests/custom/cpl-test/src/main.py b/src/tests/custom/cpl-test/src/main.py deleted file mode 100644 index f104c661..00000000 --- a/src/tests/custom/cpl-test/src/main.py +++ /dev/null @@ -1,13 +0,0 @@ -from cpl.console.console import Console - -from model.test_model import TestModel - - -def main(): - Console.write_line('Hello World') - Console.write_line('Dies ist ein test') - test = TestModel() - - -if __name__ == '__main__': - main() diff --git a/src/tests/custom/cpl-test/src/model/test_model.py b/src/tests/custom/cpl-test/src/model/test_model.py deleted file mode 100644 index 86fecae0..00000000 --- a/src/tests/custom/cpl-test/src/model/test_model.py +++ /dev/null @@ -1,22 +0,0 @@ -import time - -from cpl.console import Console - - -class TestModel: - - def __init__(self): - Console.spinner('Waiting: ', self._wait, 10) - option = Console.select('->', 'Select option: ', [ - 'Option 1', - 'Option 2', - 'Option 3', - 'Option 4', - 'Option 5', - 'Option 6' - ]) - Console.write_line('You selected', option) - - @staticmethod - def _wait(count: int): - time.sleep(count) diff --git a/src/tests/custom/cpl-test/LICENSE b/src/tests/generated/simple-app/LICENSE similarity index 100% rename from src/tests/custom/cpl-test/LICENSE rename to src/tests/generated/simple-app/LICENSE diff --git a/src/tests/custom/cpl-test/README.md b/src/tests/generated/simple-app/README.md similarity index 100% rename from src/tests/custom/cpl-test/README.md rename to src/tests/generated/simple-app/README.md diff --git a/src/tests/custom/cpl-test/cpl.json b/src/tests/generated/simple-app/cpl.json similarity index 69% rename from src/tests/custom/cpl-test/cpl.json rename to src/tests/generated/simple-app/cpl.json index 88718a04..24144f52 100644 --- a/src/tests/custom/cpl-test/cpl.json +++ b/src/tests/generated/simple-app/cpl.json @@ -1,6 +1,6 @@ { "ProjectSettings": { - "Name": "cpl-test", + "Name": "simple-app", "Version": { "Major": "0", "Minor": "0", @@ -16,18 +16,20 @@ "LicenseName": "", "LicenseDescription": "", "Dependencies": [ - "sh_cpl==2021.4.1.post13" + "sh_cpl==2021.4.2" ], "PythonVersion": ">=3.9.2", - "PythonPath": "/home/sven/Nextcloud_Sven/Schreibtisch/git_sh-edraft_de/sh_common_py_lib/src/tests/custom/general/../../../../cpl-env/bin/python3.9", + "PythonPath": { + "linux": "" + }, "Classifiers": [] }, "BuildSettings": { "SourcePath": "src", "OutputPath": "dist", "Main": "main", - "EntryPoint": "cpl-test", - "IncludePackageData": true, + "EntryPoint": "simple-app", + "IncludePackageData": false, "Included": [], "Excluded": [ "*/__pycache__", diff --git a/src/tests/generated/simple-app/src/application.py b/src/tests/generated/simple-app/src/application.py new file mode 100644 index 00000000..0a98353b --- /dev/null +++ b/src/tests/generated/simple-app/src/application.py @@ -0,0 +1,16 @@ +from cpl.application import ApplicationABC +from cpl.configuration import ConfigurationABC +from cpl.console import Console +from cpl.dependency_injection import ServiceProviderABC + + +class Application(ApplicationABC): + + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + ApplicationABC.__init__(self, config, services) + + def configure(self): + pass + + def main(self): + Console.write_line('Hello World') diff --git a/src/tests/generated/simple-app/src/main.py b/src/tests/generated/simple-app/src/main.py new file mode 100644 index 00000000..3d3e7eba --- /dev/null +++ b/src/tests/generated/simple-app/src/main.py @@ -0,0 +1,12 @@ +from cpl.application import ApplicationBuilder + +from application import Application + + +def main(): + app_builder = ApplicationBuilder(Application) + app_builder.build().run() + + +if __name__ == '__main__': + main() diff --git a/src/tests/custom/cpl-test/src/tests/__init__.py b/src/tests/generated/simple-app/src/tests/__init__.py similarity index 100% rename from src/tests/custom/cpl-test/src/tests/__init__.py rename to src/tests/generated/simple-app/src/tests/__init__.py diff --git a/src/tests/custom/cpl-test/src/model/__init__.py b/src/tests/generated/simple-console/LICENSE similarity index 100% rename from src/tests/custom/cpl-test/src/model/__init__.py rename to src/tests/generated/simple-console/LICENSE diff --git a/src/tests/generated/simple-console/README.md b/src/tests/generated/simple-console/README.md new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/generated/simple-console/cpl.json b/src/tests/generated/simple-console/cpl.json new file mode 100644 index 00000000..9e82f06d --- /dev/null +++ b/src/tests/generated/simple-console/cpl.json @@ -0,0 +1,41 @@ +{ + "ProjectSettings": { + "Name": "simple-console", + "Version": { + "Major": "0", + "Minor": "0", + "Micro": "0" + }, + "Author": "", + "AuthorEmail": "", + "Description": "", + "LongDescription": "", + "URL": "", + "CopyrightDate": "", + "CopyrightName": "", + "LicenseName": "", + "LicenseDescription": "", + "Dependencies": [ + "sh_cpl==2021.4.2" + ], + "PythonVersion": ">=3.9.2", + "PythonPath": { + "linux": "" + }, + "Classifiers": [] + }, + "BuildSettings": { + "SourcePath": "src", + "OutputPath": "dist", + "Main": "main", + "EntryPoint": "simple-console", + "IncludePackageData": false, + "Included": [], + "Excluded": [ + "*/__pycache__", + "*/logs", + "*/tests" + ], + "PackageData": {} + } +} \ No newline at end of file diff --git a/src/tests/generated/simple-console/src/main.py b/src/tests/generated/simple-console/src/main.py new file mode 100644 index 00000000..42e34771 --- /dev/null +++ b/src/tests/generated/simple-console/src/main.py @@ -0,0 +1,9 @@ +from cpl.console import Console + + +def main(): + Console.write_line('Hello World') + + +if __name__ == '__main__': + main() diff --git a/src/tests/generated/simple-console/src/tests/__init__.py b/src/tests/generated/simple-console/src/tests/__init__.py new file mode 100644 index 00000000..ad5eca30 --- /dev/null +++ b/src/tests/generated/simple-console/src/tests/__init__.py @@ -0,0 +1 @@ +# imports: diff --git a/src/tests/generated/startup-app/LICENSE b/src/tests/generated/startup-app/LICENSE new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/generated/startup-app/README.md b/src/tests/generated/startup-app/README.md new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/generated/startup-app/cpl.json b/src/tests/generated/startup-app/cpl.json new file mode 100644 index 00000000..ecbc7ef4 --- /dev/null +++ b/src/tests/generated/startup-app/cpl.json @@ -0,0 +1,41 @@ +{ + "ProjectSettings": { + "Name": "startup-app", + "Version": { + "Major": "0", + "Minor": "0", + "Micro": "0" + }, + "Author": "", + "AuthorEmail": "", + "Description": "", + "LongDescription": "", + "URL": "", + "CopyrightDate": "", + "CopyrightName": "", + "LicenseName": "", + "LicenseDescription": "", + "Dependencies": [ + "sh_cpl==2021.4.2" + ], + "PythonVersion": ">=3.9.2", + "PythonPath": { + "linux": "" + }, + "Classifiers": [] + }, + "BuildSettings": { + "SourcePath": "src", + "OutputPath": "dist", + "Main": "main", + "EntryPoint": "startup-app", + "IncludePackageData": false, + "Included": [], + "Excluded": [ + "*/__pycache__", + "*/logs", + "*/tests" + ], + "PackageData": {} + } +} \ No newline at end of file diff --git a/src/tests/generated/startup-app/src/application.py b/src/tests/generated/startup-app/src/application.py new file mode 100644 index 00000000..0a98353b --- /dev/null +++ b/src/tests/generated/startup-app/src/application.py @@ -0,0 +1,16 @@ +from cpl.application import ApplicationABC +from cpl.configuration import ConfigurationABC +from cpl.console import Console +from cpl.dependency_injection import ServiceProviderABC + + +class Application(ApplicationABC): + + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + ApplicationABC.__init__(self, config, services) + + def configure(self): + pass + + def main(self): + Console.write_line('Hello World') diff --git a/src/tests/generated/startup-app/src/main.py b/src/tests/generated/startup-app/src/main.py new file mode 100644 index 00000000..6e678925 --- /dev/null +++ b/src/tests/generated/startup-app/src/main.py @@ -0,0 +1,14 @@ +from cpl.application import ApplicationBuilder + +from application import Application +from startup import Startup + + +def main(): + app_builder = ApplicationBuilder(Application) + app_builder.use_startup(Startup) + app_builder.build().run() + + +if __name__ == '__main__': + main() diff --git a/src/tests/generated/startup-app/src/startup.py b/src/tests/generated/startup-app/src/startup.py new file mode 100644 index 00000000..5b8ef5af --- /dev/null +++ b/src/tests/generated/startup-app/src/startup.py @@ -0,0 +1,20 @@ +from cpl.application import StartupABC +from cpl.configuration import ConfigurationABC +from cpl.dependency_injection import ServiceProviderABC + + +class Startup(StartupABC): + + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + StartupABC.__init__(self) + + self._configuration = config + self._environment = self._configuration.environment + self._services = services + + def configure_configuration(self) -> ConfigurationABC: + return self._configuration + + def configure_services(self) -> ServiceProviderABC: + return self._services + diff --git a/src/tests/generated/startup-app/src/tests/__init__.py b/src/tests/generated/startup-app/src/tests/__init__.py new file mode 100644 index 00000000..ad5eca30 --- /dev/null +++ b/src/tests/generated/startup-app/src/tests/__init__.py @@ -0,0 +1 @@ +# imports: From 30ef74dd1895447f7389da53f9660e03a66c311b Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 11:48:25 +0200 Subject: [PATCH 14/22] Added generated simple di test app --- src/tests/generated/simple-di/LICENSE | 0 src/tests/generated/simple-di/README.md | 0 src/tests/generated/simple-di/cpl.json | 41 +++++++++++++++++++ src/tests/generated/simple-di/src/main.py | 23 +++++++++++ .../generated/simple-di/src/tests/__init__.py | 1 + 5 files changed, 65 insertions(+) create mode 100644 src/tests/generated/simple-di/LICENSE create mode 100644 src/tests/generated/simple-di/README.md create mode 100644 src/tests/generated/simple-di/cpl.json create mode 100644 src/tests/generated/simple-di/src/main.py create mode 100644 src/tests/generated/simple-di/src/tests/__init__.py diff --git a/src/tests/generated/simple-di/LICENSE b/src/tests/generated/simple-di/LICENSE new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/generated/simple-di/README.md b/src/tests/generated/simple-di/README.md new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/generated/simple-di/cpl.json b/src/tests/generated/simple-di/cpl.json new file mode 100644 index 00000000..443c00da --- /dev/null +++ b/src/tests/generated/simple-di/cpl.json @@ -0,0 +1,41 @@ +{ + "ProjectSettings": { + "Name": "simple-di", + "Version": { + "Major": "0", + "Minor": "0", + "Micro": "0" + }, + "Author": "", + "AuthorEmail": "", + "Description": "", + "LongDescription": "", + "URL": "", + "CopyrightDate": "", + "CopyrightName": "", + "LicenseName": "", + "LicenseDescription": "", + "Dependencies": [ + "sh_cpl==2021.4.2.dev1" + ], + "PythonVersion": ">=3.9.2", + "PythonPath": { + "linux": "" + }, + "Classifiers": [] + }, + "BuildSettings": { + "SourcePath": "src", + "OutputPath": "dist", + "Main": "main", + "EntryPoint": "simple-di", + "IncludePackageData": false, + "Included": [], + "Excluded": [ + "*/__pycache__", + "*/logs", + "*/tests" + ], + "PackageData": {} + } +} \ No newline at end of file diff --git a/src/tests/generated/simple-di/src/main.py b/src/tests/generated/simple-di/src/main.py new file mode 100644 index 00000000..a6bd96ec --- /dev/null +++ b/src/tests/generated/simple-di/src/main.py @@ -0,0 +1,23 @@ +from cpl.configuration import Configuration, ConfigurationABC +from cpl.console import Console +from cpl.dependency_injection import ServiceCollection, ServiceProviderABC + + +def configure_configuration() -> ConfigurationABC: + config = Configuration() + return config + + +def configure_services(config: ConfigurationABC) -> ServiceProviderABC: + services = ServiceCollection(config) + return services.build_service_provider() + + +def main(): + config = configure_configuration() + provider = configure_services(config) + Console.write_line('Hello World') + + +if __name__ == '__main__': + main() diff --git a/src/tests/generated/simple-di/src/tests/__init__.py b/src/tests/generated/simple-di/src/tests/__init__.py new file mode 100644 index 00000000..ad5eca30 --- /dev/null +++ b/src/tests/generated/simple-di/src/tests/__init__.py @@ -0,0 +1 @@ +# imports: From 41ddc8696147118d44a91aa16d4327ee28858d40 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 12:16:12 +0200 Subject: [PATCH 15/22] Bugfixes --- src/cpl_cli/templates/new/console/src/startup.py | 9 ++++----- src/tests/generated/startup-app/src/startup.py | 6 +++--- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/src/cpl_cli/templates/new/console/src/startup.py b/src/cpl_cli/templates/new/console/src/startup.py index b7b44e0e..89a1cf40 100644 --- a/src/cpl_cli/templates/new/console/src/startup.py +++ b/src/cpl_cli/templates/new/console/src/startup.py @@ -13,14 +13,14 @@ class StartupTemplate(TemplateFileABC): self._value = textwrap.dedent("""\ from cpl.application import StartupABC from cpl.configuration import ConfigurationABC - from cpl.dependency_injection import ServiceProviderABC + from cpl.dependency_injection import ServiceProviderABC, ServiceCollectionABC class Startup(StartupABC): - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + def __init__(self, config: ConfigurationABC, services: ServiceCollectionABC): StartupABC.__init__(self) - + self._configuration = config self._environment = self._configuration.environment self._services = services @@ -29,8 +29,7 @@ class StartupTemplate(TemplateFileABC): return self._configuration def configure_services(self) -> ServiceProviderABC: - return self._services - + return self._services.build_service_provider() """) @property diff --git a/src/tests/generated/startup-app/src/startup.py b/src/tests/generated/startup-app/src/startup.py index 5b8ef5af..07f5dece 100644 --- a/src/tests/generated/startup-app/src/startup.py +++ b/src/tests/generated/startup-app/src/startup.py @@ -1,11 +1,11 @@ from cpl.application import StartupABC from cpl.configuration import ConfigurationABC -from cpl.dependency_injection import ServiceProviderABC +from cpl.dependency_injection import ServiceProviderABC, ServiceCollectionABC class Startup(StartupABC): - def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + def __init__(self, config: ConfigurationABC, services: ServiceCollectionABC): StartupABC.__init__(self) self._configuration = config @@ -16,5 +16,5 @@ class Startup(StartupABC): return self._configuration def configure_services(self) -> ServiceProviderABC: - return self._services + return self._services.build_service_provider() From 31793fb290c70f8d622e1ec0e6f1ad1d34c68528 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 13:25:15 +0200 Subject: [PATCH 16/22] Added db context handling --- docs/todo.txt | 4 +- .../database/context/database_context_abc.py | 4 ++ .../service_collection.py | 9 ++-- .../service_collection_abc.py | 4 +- src/tests/custom/console/main.py | 10 +++++ src/tests/custom/database/LICENSE | 0 src/tests/custom/database/README.md | 0 src/tests/custom/database/__init__.py | 0 .../database/appsettings.development.json | 8 ++++ .../database/appsettings.edrafts-lapi.json | 22 ++++++++++ .../database/appsettings.edrafts-pc.json | 22 ++++++++++ src/tests/custom/database/appsettings.json | 15 +++++++ src/tests/custom/database/cpl.json | 41 +++++++++++++++++++ src/tests/custom/database/src/__init__.py | 0 src/tests/custom/database/src/application.py | 24 +++++++++++ src/tests/custom/database/src/main.py | 14 +++++++ .../custom/database/src/model/__init__.py | 0 src/tests/custom/database/src/startup.py | 35 ++++++++++++++++ .../custom/database/src/tests/__init__.py | 1 + src/tests/custom/general/application.py | 10 ----- src/tests/custom/general/startup.py | 8 ---- 21 files changed, 206 insertions(+), 25 deletions(-) create mode 100644 src/tests/custom/database/LICENSE create mode 100644 src/tests/custom/database/README.md create mode 100644 src/tests/custom/database/__init__.py create mode 100644 src/tests/custom/database/appsettings.development.json create mode 100644 src/tests/custom/database/appsettings.edrafts-lapi.json create mode 100644 src/tests/custom/database/appsettings.edrafts-pc.json create mode 100644 src/tests/custom/database/appsettings.json create mode 100644 src/tests/custom/database/cpl.json create mode 100644 src/tests/custom/database/src/__init__.py create mode 100644 src/tests/custom/database/src/application.py create mode 100644 src/tests/custom/database/src/main.py create mode 100644 src/tests/custom/database/src/model/__init__.py create mode 100644 src/tests/custom/database/src/startup.py create mode 100644 src/tests/custom/database/src/tests/__init__.py diff --git a/docs/todo.txt b/docs/todo.txt index 7260f7e1..66c7d178 100644 --- a/docs/todo.txt +++ b/docs/todo.txt @@ -1,3 +1 @@ -- dbContext!!! -- templates for better Di using! -- app-runtime -> app-env \ No newline at end of file +- dbContext!!! \ No newline at end of file diff --git a/src/cpl/database/context/database_context_abc.py b/src/cpl/database/context/database_context_abc.py index 4c4d5dca..0bbf3dd5 100644 --- a/src/cpl/database/context/database_context_abc.py +++ b/src/cpl/database/context/database_context_abc.py @@ -6,6 +6,10 @@ from sqlalchemy.orm import Session class DatabaseContextABC(ABC): + @abstractmethod + def __init__(self, *args): + pass + @property @abstractmethod def engine(self) -> engine: pass diff --git a/src/cpl/dependency_injection/service_collection.py b/src/cpl/dependency_injection/service_collection.py index d3bb4be1..4be8ed7b 100644 --- a/src/cpl/dependency_injection/service_collection.py +++ b/src/cpl/dependency_injection/service_collection.py @@ -1,12 +1,14 @@ from typing import Union, Type, Callable, Optional from cpl.configuration.configuration_abc import ConfigurationABC -from cpl.database.context import DatabaseContextABC +from cpl.database.database_settings import DatabaseSettings +from cpl.database.context.database_context_abc import DatabaseContextABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.dependency_injection.service_collection_abc import ServiceCollectionABC from cpl.dependency_injection.service_descriptor import ServiceDescriptor from cpl.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum from cpl.dependency_injection.service_provider import ServiceProvider +from cpl.utils.credential_manager import CredentialManager class ServiceCollection(ServiceCollectionABC): @@ -36,8 +38,9 @@ class ServiceCollection(ServiceCollectionABC): self._service_descriptors.append(ServiceDescriptor(service, lifetime)) - def add_db_context(self, db_context: Type[DatabaseContextABC]): - pass + def add_db_context(self, db_context_type: Type[DatabaseContextABC], db_settings: DatabaseSettings): + db_context = db_context_type(db_settings) + db_context.connect(CredentialManager.build_string(db_settings.connection_string, db_settings.credentials)) def add_singleton(self, service_type: Union[type, object], service: Union[type, object] = None): if service is not None: diff --git a/src/cpl/dependency_injection/service_collection_abc.py b/src/cpl/dependency_injection/service_collection_abc.py index 281497bc..d3e33b5a 100644 --- a/src/cpl/dependency_injection/service_collection_abc.py +++ b/src/cpl/dependency_injection/service_collection_abc.py @@ -2,6 +2,7 @@ from abc import abstractmethod, ABC from collections import Callable from typing import Type +from cpl.database.database_settings import DatabaseSettings from cpl.database.context.database_context_abc import DatabaseContextABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC @@ -16,10 +17,11 @@ class ServiceCollectionABC(ABC): pass @abstractmethod - def add_db_context(self, db_context: Type[DatabaseContextABC]): + def add_db_context(self, db_context: Type[DatabaseContextABC], db_settings: DatabaseSettings): """ Adds database context :param db_context: + :param db_settings: :return: """ pass diff --git a/src/tests/custom/console/main.py b/src/tests/custom/console/main.py index 97882af2..6dfe9a9c 100644 --- a/src/tests/custom/console/main.py +++ b/src/tests/custom/console/main.py @@ -6,6 +6,15 @@ def test_spinner(): time.sleep(2) +def test_console(): + Console.write_line('Hello World') + Console.write('\nName: ') + Console.write_line(' Hello', Console.read_line()) + Console.clear() + Console.write_at(5, 5, 'at 5, 5') + Console.write_at(10, 10, 'at 10, 10') + + if __name__ == '__main__': Console.write_line('Hello World\n') Console.spinner('Test:', test_spinner, spinner_foreground_color=ForegroundColorEnum.cyan, @@ -25,5 +34,6 @@ if __name__ == '__main__': # cursor_foreground_color=ForegroundColorEnum.red # ) # Console.write_line(f'You selected: {selected}') + # test_console() Console.write_line() diff --git a/src/tests/custom/database/LICENSE b/src/tests/custom/database/LICENSE new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/custom/database/README.md b/src/tests/custom/database/README.md new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/custom/database/__init__.py b/src/tests/custom/database/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/custom/database/appsettings.development.json b/src/tests/custom/database/appsettings.development.json new file mode 100644 index 00000000..62ec6c61 --- /dev/null +++ b/src/tests/custom/database/appsettings.development.json @@ -0,0 +1,8 @@ +{ + "LoggingSettings": { + "Path": "logs/", + "Filename": "log_$start_time.log", + "ConsoleLogLevel": "TRACE", + "FileLogLevel": "TRACE" + } +} \ No newline at end of file diff --git a/src/tests/custom/database/appsettings.edrafts-lapi.json b/src/tests/custom/database/appsettings.edrafts-lapi.json new file mode 100644 index 00000000..c78e3458 --- /dev/null +++ b/src/tests/custom/database/appsettings.edrafts-lapi.json @@ -0,0 +1,22 @@ +{ + "TimeFormatSettings": { + "DateFormat": "%Y-%m-%d", + "TimeFormat": "%H:%M:%S", + "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", + "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" + }, + + "LoggingSettings": { + "Path": "logs/", + "Filename": "log_$start_time.log", + "ConsoleLogLevel": "TRACE", + "FileLogLevel": "TRACE" + }, + + "DatabaseSettings": { + "AuthPlugin": "mysql_native_password", + "ConnectionString": "mysql+mysqlconnector://sh_cpl:$credentials@localhost/sh_cpl", + "Credentials": "MHZhc0Y2bjhKc1VUMWV0Qw==", + "Encoding": "utf8mb4" + } +} \ No newline at end of file diff --git a/src/tests/custom/database/appsettings.edrafts-pc.json b/src/tests/custom/database/appsettings.edrafts-pc.json new file mode 100644 index 00000000..c78e3458 --- /dev/null +++ b/src/tests/custom/database/appsettings.edrafts-pc.json @@ -0,0 +1,22 @@ +{ + "TimeFormatSettings": { + "DateFormat": "%Y-%m-%d", + "TimeFormat": "%H:%M:%S", + "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", + "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" + }, + + "LoggingSettings": { + "Path": "logs/", + "Filename": "log_$start_time.log", + "ConsoleLogLevel": "TRACE", + "FileLogLevel": "TRACE" + }, + + "DatabaseSettings": { + "AuthPlugin": "mysql_native_password", + "ConnectionString": "mysql+mysqlconnector://sh_cpl:$credentials@localhost/sh_cpl", + "Credentials": "MHZhc0Y2bjhKc1VUMWV0Qw==", + "Encoding": "utf8mb4" + } +} \ No newline at end of file diff --git a/src/tests/custom/database/appsettings.json b/src/tests/custom/database/appsettings.json new file mode 100644 index 00000000..fd8ddf6c --- /dev/null +++ b/src/tests/custom/database/appsettings.json @@ -0,0 +1,15 @@ +{ + "TimeFormatSettings": { + "DateFormat": "%Y-%m-%d", + "TimeFormat": "%H:%M:%S", + "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", + "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" + }, + + "LoggingSettings": { + "Path": "logs/", + "Filename": "log_$start_time.log", + "ConsoleLogLevel": "ERROR", + "FileLogLevel": "WARN" + } +} \ No newline at end of file diff --git a/src/tests/custom/database/cpl.json b/src/tests/custom/database/cpl.json new file mode 100644 index 00000000..17d75984 --- /dev/null +++ b/src/tests/custom/database/cpl.json @@ -0,0 +1,41 @@ +{ + "ProjectSettings": { + "Name": "database", + "Version": { + "Major": "0", + "Minor": "0", + "Micro": "0" + }, + "Author": "", + "AuthorEmail": "", + "Description": "", + "LongDescription": "", + "URL": "", + "CopyrightDate": "", + "CopyrightName": "", + "LicenseName": "", + "LicenseDescription": "", + "Dependencies": [ + "sh_cpl==2021.4.2.dev1" + ], + "PythonVersion": ">=3.9.2", + "PythonPath": { + "linux": "" + }, + "Classifiers": [] + }, + "BuildSettings": { + "SourcePath": "src", + "OutputPath": "dist", + "Main": "main", + "EntryPoint": "database", + "IncludePackageData": false, + "Included": [], + "Excluded": [ + "*/__pycache__", + "*/logs", + "*/tests" + ], + "PackageData": {} + } +} \ No newline at end of file diff --git a/src/tests/custom/database/src/__init__.py b/src/tests/custom/database/src/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/custom/database/src/application.py b/src/tests/custom/database/src/application.py new file mode 100644 index 00000000..85b5505c --- /dev/null +++ b/src/tests/custom/database/src/application.py @@ -0,0 +1,24 @@ +from typing import Optional + +from cpl.application import ApplicationABC +from cpl.configuration import ConfigurationABC +from cpl.console import Console +from cpl.dependency_injection import ServiceProviderABC +from cpl.logging import LoggerABC + + +class Application(ApplicationABC): + + def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): + ApplicationABC.__init__(self, config, services) + + self._logger: Optional[LoggerABC] = None + + def configure(self): + self._logger = self._services.get_service(LoggerABC) + + def main(self): + self._logger.header(f'{self._configuration.environment.application_name}:') + self._logger.debug(__name__, f'Host: {self._configuration.environment.host_name}') + self._logger.debug(__name__, f'Environment: {self._configuration.environment.environment_name}') + self._logger.debug(__name__, f'Customer: {self._configuration.environment.customer}') diff --git a/src/tests/custom/database/src/main.py b/src/tests/custom/database/src/main.py new file mode 100644 index 00000000..6e678925 --- /dev/null +++ b/src/tests/custom/database/src/main.py @@ -0,0 +1,14 @@ +from cpl.application import ApplicationBuilder + +from application import Application +from startup import Startup + + +def main(): + app_builder = ApplicationBuilder(Application) + app_builder.use_startup(Startup) + app_builder.build().run() + + +if __name__ == '__main__': + main() diff --git a/src/tests/custom/database/src/model/__init__.py b/src/tests/custom/database/src/model/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/src/tests/custom/database/src/startup.py b/src/tests/custom/database/src/startup.py new file mode 100644 index 00000000..f4a37129 --- /dev/null +++ b/src/tests/custom/database/src/startup.py @@ -0,0 +1,35 @@ +from cpl.application import StartupABC +from cpl.configuration import ConfigurationABC +from cpl.database import DatabaseSettings +from cpl.dependency_injection import ServiceProviderABC, ServiceCollectionABC +from cpl.logging import LoggerABC, Logger +from model.db_context import DBContext + + +class Startup(StartupABC): + + def __init__(self, config: ConfigurationABC, services: ServiceCollectionABC): + StartupABC.__init__(self) + + self._configuration = config + self._environment = self._configuration.environment + self._services = services + + def configure_configuration(self) -> ConfigurationABC: + self._configuration.add_environment_variables('PYTHON_') + self._configuration.add_environment_variables('CPL_') + self._configuration.add_console_arguments() + self._configuration.add_json_file(f'appsettings.json') + self._configuration.add_json_file(f'appsettings.{self._configuration.environment.environment_name}.json') + self._configuration.add_json_file(f'appsettings.{self._configuration.environment.host_name}.json', optional=True) + + return self._configuration + + def configure_services(self) -> ServiceProviderABC: + # Create and connect to database + db_settings: DatabaseSettings = self._configuration.get_configuration(DatabaseSettings) + self._services.add_db_context(DBContext, db_settings) + + self._services.add_singleton(LoggerABC, Logger) + return self._services.build_service_provider() + diff --git a/src/tests/custom/database/src/tests/__init__.py b/src/tests/custom/database/src/tests/__init__.py new file mode 100644 index 00000000..ad5eca30 --- /dev/null +++ b/src/tests/custom/database/src/tests/__init__.py @@ -0,0 +1 @@ +# imports: diff --git a/src/tests/custom/general/application.py b/src/tests/custom/general/application.py index ff1140ca..f7af31b0 100644 --- a/src/tests/custom/general/application.py +++ b/src/tests/custom/general/application.py @@ -28,15 +28,6 @@ class Application(ApplicationABC): mail.body = 'Dies ist ein Test :D' self._mailer.send_mail(mail) - def test_console(self): - self._logger.debug(__name__, 'Started console_old model') - Console.write_line('Hello World') - Console.write('\nName: ') - Console.write_line(' Hello', Console.read_line()) - Console.clear() - Console.write_at(5, 5, 'at 5, 5') - Console.write_at(10, 10, 'at 10, 10') - @staticmethod def _wait(time_ms: int): time.sleep(time_ms) @@ -54,4 +45,3 @@ class Application(ApplicationABC): test: TestService = self._services.get_service(TestService) test.run() # self.test_send_mail() - # self.test_console() diff --git a/src/tests/custom/general/startup.py b/src/tests/custom/general/startup.py index 3630004e..d0370bff 100644 --- a/src/tests/custom/general/startup.py +++ b/src/tests/custom/general/startup.py @@ -1,14 +1,11 @@ from cpl.application.startup_abc import StartupABC from cpl.configuration.configuration_abc import ConfigurationABC -from cpl.database.context.database_context import DatabaseContext -from cpl.database.database_settings import DatabaseSettings from cpl.dependency_injection.service_collection_abc import ServiceCollectionABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.logging.logger_service import Logger from cpl.logging.logger_abc import LoggerABC from cpl.mailing.email_client_service import EMailClient from cpl.mailing.email_client_abc import EMailClientABC -from cpl.utils.credential_manager import CredentialManager from tests.custom.general.test_service import TestService @@ -31,11 +28,6 @@ class Startup(StartupABC): return self._configuration def configure_services(self) -> ServiceProviderABC: - # Create and connect to database - # db_settings: DatabaseSettings = self._configuration.get_configuration(DatabaseSettings) - # self._services.add_db_context(DatabaseContext) - # db.connect(CredentialManager.build_string(db_settings.connection_string, db_settings.credentials)) - self._services.add_singleton(LoggerABC, Logger) self._services.add_singleton(EMailClientABC, EMailClient) self._services.add_singleton(TestService) From d0e3e1792fe24cfc7d2e8e44f029222fe0a9cbe9 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 13:25:25 +0200 Subject: [PATCH 17/22] Added db context handling --- src/tests/custom/database/src/model/db_context.py | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/tests/custom/database/src/model/db_context.py diff --git a/src/tests/custom/database/src/model/db_context.py b/src/tests/custom/database/src/model/db_context.py new file mode 100644 index 00000000..160ed8b4 --- /dev/null +++ b/src/tests/custom/database/src/model/db_context.py @@ -0,0 +1,8 @@ +from cpl.database import DatabaseSettings +from cpl.database.context import DatabaseContext + + +class DBContext(DatabaseContext): + + def __init__(self, db_settings: DatabaseSettings): + DatabaseContext.__init__(self, db_settings) From f3be92744076c249c5c2163c17e76271a63a0f60 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 13:29:26 +0200 Subject: [PATCH 18/22] Removed service abc --- src/cpl/dependency_injection/__init__.py | 1 - src/cpl/dependency_injection/service_abc.py | 11 ----------- src/cpl/dependency_injection/service_provider_abc.py | 6 ++---- src/cpl/logging/logger_abc.py | 8 +++----- src/cpl/mailing/email_client_abc.py | 7 +++---- src/cpl_cli/command_abc.py | 8 +++----- src/cpl_cli/command_handler_service.py | 6 +++--- src/cpl_cli/live_server/live_server_service.py | 6 +++--- src/cpl_cli/publish/publisher_abc.py | 8 +++----- src/tests/custom/general/test_service.py | 8 +++++--- 10 files changed, 25 insertions(+), 44 deletions(-) delete mode 100644 src/cpl/dependency_injection/service_abc.py diff --git a/src/cpl/dependency_injection/__init__.py b/src/cpl/dependency_injection/__init__.py index 73436d6e..c94105ba 100644 --- a/src/cpl/dependency_injection/__init__.py +++ b/src/cpl/dependency_injection/__init__.py @@ -20,7 +20,6 @@ __version__ = '2021.4.2.dev1' from collections import namedtuple # imports: -from .service_abc import ServiceABC from .service_collection import ServiceCollection from .service_collection_abc import ServiceCollectionABC from .service_descriptor import ServiceDescriptor diff --git a/src/cpl/dependency_injection/service_abc.py b/src/cpl/dependency_injection/service_abc.py deleted file mode 100644 index a0da1277..00000000 --- a/src/cpl/dependency_injection/service_abc.py +++ /dev/null @@ -1,11 +0,0 @@ -from abc import ABC, abstractmethod - - -class ServiceABC(ABC): - - @abstractmethod - def __init__(self): - """ - ABC to represent a service - """ - pass diff --git a/src/cpl/dependency_injection/service_provider_abc.py b/src/cpl/dependency_injection/service_provider_abc.py index 3e86a0e1..042b0355 100644 --- a/src/cpl/dependency_injection/service_provider_abc.py +++ b/src/cpl/dependency_injection/service_provider_abc.py @@ -1,8 +1,6 @@ from abc import abstractmethod, ABC from collections import Callable -from typing import Type - -from cpl.dependency_injection.service_abc import ServiceABC +from typing import Type, Optional class ServiceProviderABC(ABC): @@ -24,7 +22,7 @@ class ServiceProviderABC(ABC): pass @abstractmethod - def get_service(self, instance_type: Type) -> Callable[ServiceABC]: + def get_service(self, instance_type: Type) -> Optional[Callable[object]]: """ Returns instance of given type :param instance_type: diff --git a/src/cpl/logging/logger_abc.py b/src/cpl/logging/logger_abc.py index 77d28522..98ef4eb9 100644 --- a/src/cpl/logging/logger_abc.py +++ b/src/cpl/logging/logger_abc.py @@ -1,16 +1,14 @@ -from abc import abstractmethod - -from cpl.dependency_injection.service_abc import ServiceABC +from abc import abstractmethod, ABC -class LoggerABC(ServiceABC): +class LoggerABC(ABC): @abstractmethod def __init__(self): """ ABC for logging """ - ServiceABC.__init__(self) + ABC.__init__(self) @abstractmethod def header(self, string: str): diff --git a/src/cpl/mailing/email_client_abc.py b/src/cpl/mailing/email_client_abc.py index 59041782..29690394 100644 --- a/src/cpl/mailing/email_client_abc.py +++ b/src/cpl/mailing/email_client_abc.py @@ -1,17 +1,16 @@ -from abc import abstractmethod +from abc import abstractmethod, ABC -from cpl.dependency_injection.service_abc import ServiceABC from cpl.mailing.email import EMail -class EMailClientABC(ServiceABC): +class EMailClientABC(ABC): @abstractmethod def __init__(self): """ ABC to send emails """ - ServiceABC.__init__(self) + ABC.__init__(self) @abstractmethod def connect(self): diff --git a/src/cpl_cli/command_abc.py b/src/cpl_cli/command_abc.py index 99a7e571..6ac6376f 100644 --- a/src/cpl_cli/command_abc.py +++ b/src/cpl_cli/command_abc.py @@ -1,13 +1,11 @@ -from abc import abstractmethod - -from cpl.dependency_injection.service_abc import ServiceABC +from abc import abstractmethod, ABC -class CommandABC(ServiceABC): +class CommandABC(ABC): @abstractmethod def __init__(self): - ServiceABC.__init__(self) + ABC.__init__(self) @abstractmethod def run(self, args: list[str]): pass diff --git a/src/cpl_cli/command_handler_service.py b/src/cpl_cli/command_handler_service.py index 7b8b4f2d..75bcdced 100644 --- a/src/cpl_cli/command_handler_service.py +++ b/src/cpl_cli/command_handler_service.py @@ -1,14 +1,14 @@ import os +from abc import ABC from cpl.configuration.configuration_abc import ConfigurationABC from cpl.console.console import Console -from cpl.dependency_injection.service_abc import ServiceABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl_cli.error import Error from cpl_cli.command_model import CommandModel -class CommandHandler(ServiceABC): +class CommandHandler(ABC): def __init__(self, config: ConfigurationABC, services: ServiceProviderABC): """ @@ -16,7 +16,7 @@ class CommandHandler(ServiceABC): :param config: :param services: """ - ServiceABC.__init__(self) + ABC.__init__(self) self._config = config self._env = self._config.environment diff --git a/src/cpl_cli/live_server/live_server_service.py b/src/cpl_cli/live_server/live_server_service.py index c556f20b..defd24b8 100644 --- a/src/cpl_cli/live_server/live_server_service.py +++ b/src/cpl_cli/live_server/live_server_service.py @@ -1,5 +1,6 @@ import os import time +from abc import ABC from contextlib import suppress import psutil as psutil @@ -7,13 +8,12 @@ from watchdog.events import FileSystemEventHandler from watchdog.observers import Observer from cpl.console.console import Console -from cpl.dependency_injection.service_abc import ServiceABC from cpl.environment.application_environment_abc import ApplicationEnvironmentABC from cpl_cli.configuration.build_settings import BuildSettings from cpl_cli.live_server.live_server_thread import LiveServerThread -class LiveServerService(ServiceABC, FileSystemEventHandler): +class LiveServerService(ABC, FileSystemEventHandler): def __init__(self, env: ApplicationEnvironmentABC, build_settings: BuildSettings): """ @@ -21,7 +21,7 @@ class LiveServerService(ServiceABC, FileSystemEventHandler): :param env: :param build_settings: """ - ServiceABC.__init__(self) + ABC.__init__(self) FileSystemEventHandler.__init__(self) self._env = env diff --git a/src/cpl_cli/publish/publisher_abc.py b/src/cpl_cli/publish/publisher_abc.py index 48aaaaa1..c33ed644 100644 --- a/src/cpl_cli/publish/publisher_abc.py +++ b/src/cpl_cli/publish/publisher_abc.py @@ -1,13 +1,11 @@ -from abc import abstractmethod - -from cpl.dependency_injection.service_abc import ServiceABC +from abc import abstractmethod, ABC -class PublisherABC(ServiceABC): +class PublisherABC(ABC): @abstractmethod def __init__(self): - ServiceABC.__init__(self) + ABC.__init__(self) @property @abstractmethod diff --git a/src/tests/custom/general/test_service.py b/src/tests/custom/general/test_service.py index c96dfb74..376707c1 100644 --- a/src/tests/custom/general/test_service.py +++ b/src/tests/custom/general/test_service.py @@ -1,11 +1,13 @@ +from abc import ABC + from cpl.console.console import Console -from cpl.dependency_injection import ServiceABC, ServiceProviderABC +from cpl.dependency_injection import ServiceProviderABC -class TestService(ServiceABC): +class TestService(ABC): def __init__(self, provider: ServiceProviderABC): - ServiceABC.__init__(self) + ABC.__init__(self) self._provider = provider From 4d5368e5fcfaad8100c97b920ad0d556f29fd6b6 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 14:18:58 +0200 Subject: [PATCH 19/22] Bugfixes & improved database context handling --- .../service_collection.py | 22 ++++++++---------- .../dependency_injection/service_provider.py | 8 ++++--- src/tests/custom/database/__init__.py | 0 src/tests/custom/database/src/__init__.py | 0 src/tests/custom/database/src/application.py | 2 ++ .../custom/database/src/model/city_model.py | 14 +++++++++++ .../custom/database/src/model/user_model.py | 18 +++++++++++++++ .../custom/database/src/model/user_repo.py | 23 +++++++++++++++++++ .../database/src/model/user_repo_abc.py | 7 ++++++ src/tests/custom/database/src/startup.py | 4 ++++ 10 files changed, 83 insertions(+), 15 deletions(-) delete mode 100644 src/tests/custom/database/__init__.py delete mode 100644 src/tests/custom/database/src/__init__.py create mode 100644 src/tests/custom/database/src/model/city_model.py create mode 100644 src/tests/custom/database/src/model/user_model.py create mode 100644 src/tests/custom/database/src/model/user_repo.py create mode 100644 src/tests/custom/database/src/model/user_repo_abc.py diff --git a/src/cpl/dependency_injection/service_collection.py b/src/cpl/dependency_injection/service_collection.py index 4be8ed7b..be97fb41 100644 --- a/src/cpl/dependency_injection/service_collection.py +++ b/src/cpl/dependency_injection/service_collection.py @@ -23,10 +23,7 @@ class ServiceCollection(ServiceCollectionABC): def _add_descriptor(self, service: Union[type, object], lifetime: ServiceLifetimeEnum): found = False for descriptor in self._service_descriptors: - if not isinstance(service, type): - service = type(service) - - if descriptor.service_type == service: + if isinstance(service, descriptor.service_type): found = True if found: @@ -39,23 +36,24 @@ class ServiceCollection(ServiceCollectionABC): self._service_descriptors.append(ServiceDescriptor(service, lifetime)) def add_db_context(self, db_context_type: Type[DatabaseContextABC], db_settings: DatabaseSettings): - db_context = db_context_type(db_settings) - db_context.connect(CredentialManager.build_string(db_settings.connection_string, db_settings.credentials)) + self._database_context = db_context_type(db_settings) + self._database_context.connect(CredentialManager.build_string(db_settings.connection_string, db_settings.credentials)) def add_singleton(self, service_type: Union[type, object], service: Union[type, object] = None): + impl = None if service is not None: if isinstance(service, type): - service = self.build_service_provider().build_service(service) + impl = self.build_service_provider().build_service(service) - self._add_descriptor(service, ServiceLifetimeEnum.singleton) + self._add_descriptor(impl, ServiceLifetimeEnum.singleton) else: if isinstance(service_type, type): - service_type = self.build_service_provider().build_service(service_type) + impl = self.build_service_provider().build_service(service_type) - self._add_descriptor(service_type, ServiceLifetimeEnum.singleton) + self._add_descriptor(impl, ServiceLifetimeEnum.singleton) def add_scoped(self, service_type: Type, service: Callable = None): - pass + raise Exception('Not implemented') def add_transient(self, service_type: Union[type], service: Union[type] = None): if service is not None: @@ -64,4 +62,4 @@ class ServiceCollection(ServiceCollectionABC): self._add_descriptor(service_type, ServiceLifetimeEnum.transient) def build_service_provider(self) -> ServiceProviderABC: - return ServiceProvider(self._service_descriptors, self._configuration) + return ServiceProvider(self._service_descriptors, self._configuration, self._database_context) diff --git a/src/cpl/dependency_injection/service_provider.py b/src/cpl/dependency_injection/service_provider.py index e0de3984..c4c8b2df 100644 --- a/src/cpl/dependency_injection/service_provider.py +++ b/src/cpl/dependency_injection/service_provider.py @@ -4,6 +4,7 @@ from typing import Optional from cpl.configuration.configuration_abc import ConfigurationABC from cpl.configuration.configuration_model_abc import ConfigurationModelABC +from cpl.database.context.database_context_abc import DatabaseContextABC from cpl.dependency_injection.service_provider_abc import ServiceProviderABC from cpl.dependency_injection.service_descriptor import ServiceDescriptor from cpl.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum @@ -12,11 +13,12 @@ from cpl.environment.application_environment_abc import ApplicationEnvironmentAB class ServiceProvider(ServiceProviderABC): - def __init__(self, service_descriptors: list[ServiceDescriptor], config: ConfigurationABC): + def __init__(self, service_descriptors: list[ServiceDescriptor], config: ConfigurationABC, db_context: Optional[DatabaseContextABC]): ServiceProviderABC.__init__(self) self._service_descriptors: list[ServiceDescriptor] = service_descriptors self._configuration: ConfigurationABC = config + self._database_context = db_context def _find_service(self, service_type: type) -> [ServiceDescriptor]: for descriptor in self._service_descriptors: @@ -58,8 +60,8 @@ class ServiceProvider(ServiceProviderABC): elif issubclass(parameter.annotation, ApplicationEnvironmentABC): params.append(self._configuration.environment) - # elif issubclass(parameter.annotation, DatabaseContextABC): - # params.append(self._database_context) + elif issubclass(parameter.annotation, DatabaseContextABC): + params.append(self._database_context) elif issubclass(parameter.annotation, ConfigurationModelABC): params.append(self._configuration.get_configuration(parameter.annotation)) diff --git a/src/tests/custom/database/__init__.py b/src/tests/custom/database/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/tests/custom/database/src/__init__.py b/src/tests/custom/database/src/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/src/tests/custom/database/src/application.py b/src/tests/custom/database/src/application.py index 85b5505c..1f58eb76 100644 --- a/src/tests/custom/database/src/application.py +++ b/src/tests/custom/database/src/application.py @@ -5,6 +5,7 @@ from cpl.configuration import ConfigurationABC from cpl.console import Console from cpl.dependency_injection import ServiceProviderABC from cpl.logging import LoggerABC +from model.user_repo_abc import UserRepoABC class Application(ApplicationABC): @@ -22,3 +23,4 @@ class Application(ApplicationABC): self._logger.debug(__name__, f'Host: {self._configuration.environment.host_name}') self._logger.debug(__name__, f'Environment: {self._configuration.environment.environment_name}') self._logger.debug(__name__, f'Customer: {self._configuration.environment.customer}') + self._services.get_service(UserRepoABC).add_test_user() diff --git a/src/tests/custom/database/src/model/city_model.py b/src/tests/custom/database/src/model/city_model.py new file mode 100644 index 00000000..98523169 --- /dev/null +++ b/src/tests/custom/database/src/model/city_model.py @@ -0,0 +1,14 @@ +from sqlalchemy import Column, Integer, String + +from cpl.database import DatabaseModel + + +class CityModel(DatabaseModel): + __tablename__ = 'Cities' + Id = Column(Integer, primary_key=True, nullable=False, autoincrement=True) + Name = Column(String(64), nullable=False) + ZIP = Column(String(5), nullable=False) + + def __init__(self, name: str, zip_code: str): + self.Name = name + self.ZIP = zip_code diff --git a/src/tests/custom/database/src/model/user_model.py b/src/tests/custom/database/src/model/user_model.py new file mode 100644 index 00000000..bce0ed69 --- /dev/null +++ b/src/tests/custom/database/src/model/user_model.py @@ -0,0 +1,18 @@ +from sqlalchemy import Column, Integer, String, ForeignKey +from sqlalchemy.orm import relationship + +from cpl.database import DatabaseModel +from .city_model import CityModel + + +class UserModel(DatabaseModel): + __tablename__ = 'Users' + Id = Column(Integer, primary_key=True, nullable=False, autoincrement=True) + Name = Column(String(64), nullable=False) + City_Id = Column(Integer, ForeignKey('Cities.Id'), nullable=False) + City = relationship("CityModel") + + def __init__(self, name: str, city: CityModel): + self.Name = name + self.City_Id = city.Id + self.City = city diff --git a/src/tests/custom/database/src/model/user_repo.py b/src/tests/custom/database/src/model/user_repo.py new file mode 100644 index 00000000..414a7638 --- /dev/null +++ b/src/tests/custom/database/src/model/user_repo.py @@ -0,0 +1,23 @@ +from cpl.database.context import DatabaseContextABC +from .city_model import CityModel +from .user_model import UserModel +from .user_repo_abc import UserRepoABC + + +class UserRepo(UserRepoABC): + + def __init__(self, db_context: DatabaseContextABC): + UserRepoABC.__init__(self) + + self._session = db_context.session + self._user_query = db_context.session.query(UserModel) + + def create(self): pass + + def add_test_user(self): + city = CityModel('Haren', '49733') + city2 = CityModel('Meppen', '49716') + self._session.add(city2) + user = UserModel('TestUser', city) + self._session.add(user) + self._session.commit() diff --git a/src/tests/custom/database/src/model/user_repo_abc.py b/src/tests/custom/database/src/model/user_repo_abc.py new file mode 100644 index 00000000..dc0ce31f --- /dev/null +++ b/src/tests/custom/database/src/model/user_repo_abc.py @@ -0,0 +1,7 @@ +from abc import ABC, abstractmethod + + +class UserRepoABC(ABC): + + @abstractmethod + def __init__(self): pass diff --git a/src/tests/custom/database/src/startup.py b/src/tests/custom/database/src/startup.py index f4a37129..27417a3b 100644 --- a/src/tests/custom/database/src/startup.py +++ b/src/tests/custom/database/src/startup.py @@ -4,6 +4,8 @@ from cpl.database import DatabaseSettings from cpl.dependency_injection import ServiceProviderABC, ServiceCollectionABC from cpl.logging import LoggerABC, Logger from model.db_context import DBContext +from model.user_repo import UserRepo +from model.user_repo_abc import UserRepoABC class Startup(StartupABC): @@ -30,6 +32,8 @@ class Startup(StartupABC): db_settings: DatabaseSettings = self._configuration.get_configuration(DatabaseSettings) self._services.add_db_context(DBContext, db_settings) + self._services.add_singleton(UserRepoABC, UserRepo) + self._services.add_singleton(LoggerABC, Logger) return self._services.build_service_provider() From d0812bcf5c5b7bf48cccbff492c7732f5c1fb670 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 14:29:17 +0200 Subject: [PATCH 20/22] Added database table test --- src/tests/custom/database/src/application.py | 12 +++++++++++- src/tests/custom/database/src/model/user_repo.py | 6 ++++++ src/tests/custom/database/src/model/user_repo_abc.py | 5 +++++ 3 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/tests/custom/database/src/application.py b/src/tests/custom/database/src/application.py index 1f58eb76..4ac5352c 100644 --- a/src/tests/custom/database/src/application.py +++ b/src/tests/custom/database/src/application.py @@ -6,6 +6,7 @@ from cpl.console import Console from cpl.dependency_injection import ServiceProviderABC from cpl.logging import LoggerABC from model.user_repo_abc import UserRepoABC +from model.user_repo import UserRepo class Application(ApplicationABC): @@ -23,4 +24,13 @@ class Application(ApplicationABC): self._logger.debug(__name__, f'Host: {self._configuration.environment.host_name}') self._logger.debug(__name__, f'Environment: {self._configuration.environment.environment_name}') self._logger.debug(__name__, f'Customer: {self._configuration.environment.customer}') - self._services.get_service(UserRepoABC).add_test_user() + + user_repo: UserRepo = self._services.get_service(UserRepoABC) + user_repo.add_test_user() + Console.write_line('Users:') + for user in user_repo.get_users(): + Console.write_line(user.Id, user.Name, user.City_Id, user.City.Id, user.City.Name, user.City.ZIP) + + Console.write_line('Cities:') + for city in user_repo.get_cities(): + Console.write_line(city.Id, city.Name, city.ZIP) diff --git a/src/tests/custom/database/src/model/user_repo.py b/src/tests/custom/database/src/model/user_repo.py index 414a7638..111605b3 100644 --- a/src/tests/custom/database/src/model/user_repo.py +++ b/src/tests/custom/database/src/model/user_repo.py @@ -21,3 +21,9 @@ class UserRepo(UserRepoABC): user = UserModel('TestUser', city) self._session.add(user) self._session.commit() + + def get_users(self) -> list[UserModel]: + return self._session.query(UserModel).all() + + def get_cities(self) -> list[CityModel]: + return self._session.query(CityModel).all() diff --git a/src/tests/custom/database/src/model/user_repo_abc.py b/src/tests/custom/database/src/model/user_repo_abc.py index dc0ce31f..f19a2a3e 100644 --- a/src/tests/custom/database/src/model/user_repo_abc.py +++ b/src/tests/custom/database/src/model/user_repo_abc.py @@ -1,7 +1,12 @@ from abc import ABC, abstractmethod +from .user_model import UserModel + class UserRepoABC(ABC): @abstractmethod def __init__(self): pass + + @abstractmethod + def get_users(self) -> list[UserModel]: pass From 1789e2671a19ec6845fee3a2421782954df76179 Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 15:26:45 +0200 Subject: [PATCH 21/22] Publish 2021.4.2 --- cpl.json | 2 +- src/cpl/__init__.py | 4 ++-- src/cpl/application/__init__.py | 4 ++-- src/cpl/configuration/__init__.py | 4 ++-- src/cpl/console/__init__.py | 4 ++-- src/cpl/database/__init__.py | 4 ++-- src/cpl/database/connection/__init__.py | 4 ++-- src/cpl/database/context/__init__.py | 4 ++-- src/cpl/dependency_injection/__init__.py | 4 ++-- src/cpl/environment/__init__.py | 4 ++-- src/cpl/logging/__init__.py | 4 ++-- src/cpl/mailing/__init__.py | 4 ++-- src/cpl/time/__init__.py | 4 ++-- src/cpl/utils/__init__.py | 4 ++-- src/cpl_cli/__init__.py | 4 ++-- src/cpl_cli/command/__init__.py | 4 ++-- src/cpl_cli/configuration/__init__.py | 4 ++-- src/cpl_cli/live_server/__init__.py | 4 ++-- src/cpl_cli/publish/__init__.py | 4 ++-- src/cpl_cli/templates/__init__.py | 4 ++-- src/cpl_cli/templates/build/__init__.py | 4 ++-- src/cpl_cli/templates/generate/__init__.py | 4 ++-- src/cpl_cli/templates/new/__init__.py | 4 ++-- src/cpl_cli/templates/new/console/__init__.py | 4 ++-- src/cpl_cli/templates/new/console/src/__init__.py | 4 ++-- src/cpl_cli/templates/new/console/src/tests/__init__.py | 4 ++-- src/cpl_cli/templates/publish/__init__.py | 4 ++-- 27 files changed, 53 insertions(+), 53 deletions(-) diff --git a/cpl.json b/cpl.json index 744a8115..ae5f889b 100644 --- a/cpl.json +++ b/cpl.json @@ -4,7 +4,7 @@ "Version": { "Major": "2021", "Minor": "04", - "Micro": "02.dev1" + "Micro": "02" }, "Author": "Sven Heidemann", "AuthorEmail": "sven.heidemann@sh-edraft.de", diff --git a/src/cpl/__init__.py b/src/cpl/__init__.py index f804633e..008e5a56 100644 --- a/src/cpl/__init__.py +++ b/src/cpl/__init__.py @@ -15,11 +15,11 @@ __title__ = 'sh_cpl.cpl' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/application/__init__.py b/src/cpl/application/__init__.py index e40a2baa..87eca6e5 100644 --- a/src/cpl/application/__init__.py +++ b/src/cpl/application/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.application' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -26,4 +26,4 @@ from .application_builder_abc import ApplicationBuilderABC from .startup_abc import StartupABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/configuration/__init__.py b/src/cpl/configuration/__init__.py index 41c6a31b..f374e0d5 100644 --- a/src/cpl/configuration/__init__.py +++ b/src/cpl/configuration/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.configuration' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -27,4 +27,4 @@ from .configuration_variable_name_enum import ConfigurationVariableNameEnum from .console_argument import ConsoleArgument VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/console/__init__.py b/src/cpl/console/__init__.py index e75ea363..1e9a8e92 100644 --- a/src/cpl/console/__init__.py +++ b/src/cpl/console/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.console' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -27,4 +27,4 @@ from .foreground_color_enum import ForegroundColorEnum from .spinner_thread import SpinnerThread VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/database/__init__.py b/src/cpl/database/__init__.py index ce33ca70..7605162f 100644 --- a/src/cpl/database/__init__.py +++ b/src/cpl/database/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.database' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -25,4 +25,4 @@ from .database_settings import DatabaseSettings from .database_settings_name_enum import DatabaseSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/database/connection/__init__.py b/src/cpl/database/connection/__init__.py index 2e962b51..3ae7b65d 100644 --- a/src/cpl/database/connection/__init__.py +++ b/src/cpl/database/connection/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.database.connection' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -24,4 +24,4 @@ from .database_connection import DatabaseConnection from .database_connection_abc import DatabaseConnectionABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/database/context/__init__.py b/src/cpl/database/context/__init__.py index c4d4e74a..66a4a5bc 100644 --- a/src/cpl/database/context/__init__.py +++ b/src/cpl/database/context/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.database.context' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -24,4 +24,4 @@ from .database_context import DatabaseContext from .database_context_abc import DatabaseContextABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/dependency_injection/__init__.py b/src/cpl/dependency_injection/__init__.py index c94105ba..ea467526 100644 --- a/src/cpl/dependency_injection/__init__.py +++ b/src/cpl/dependency_injection/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.dependency_injection' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -28,4 +28,4 @@ from .service_provider import ServiceProvider from .service_provider_abc import ServiceProviderABC VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/environment/__init__.py b/src/cpl/environment/__init__.py index a753f129..b719647c 100644 --- a/src/cpl/environment/__init__.py +++ b/src/cpl/environment/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.environment' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -25,4 +25,4 @@ from .environment_name_enum import EnvironmentNameEnum from .application_environment import ApplicationEnvironment VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/logging/__init__.py b/src/cpl/logging/__init__.py index 2e6ced30..49f70e66 100644 --- a/src/cpl/logging/__init__.py +++ b/src/cpl/logging/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.logging' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -27,4 +27,4 @@ from .logging_settings import LoggingSettings from .logging_settings_name_enum import LoggingSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/mailing/__init__.py b/src/cpl/mailing/__init__.py index 726f559d..c6ed9193 100644 --- a/src/cpl/mailing/__init__.py +++ b/src/cpl/mailing/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.mailing' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -27,4 +27,4 @@ from .email_client_settings import EMailClientSettings from .email_client_settings_name_enum import EMailClientSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/time/__init__.py b/src/cpl/time/__init__.py index b53d88b3..c5145d81 100644 --- a/src/cpl/time/__init__.py +++ b/src/cpl/time/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.time' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -24,4 +24,4 @@ from .time_format_settings import TimeFormatSettings from .time_format_settings_names_enum import TimeFormatSettingsNamesEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl/utils/__init__.py b/src/cpl/utils/__init__.py index 83743a08..009cebf8 100644 --- a/src/cpl/utils/__init__.py +++ b/src/cpl/utils/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl.utils' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -25,4 +25,4 @@ from .string import String from .pip import Pip VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/__init__.py b/src/cpl_cli/__init__.py index d464193a..f7c22826 100644 --- a/src/cpl_cli/__init__.py +++ b/src/cpl_cli/__init__.py @@ -15,7 +15,7 @@ __title__ = 'sh_cpl.cpl_cli' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -29,4 +29,4 @@ from .main import main from .startup import Startup VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/command/__init__.py b/src/cpl_cli/command/__init__.py index 8f0ce1f1..95d6aa56 100644 --- a/src/cpl_cli/command/__init__.py +++ b/src/cpl_cli/command/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_cli.command' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -28,4 +28,4 @@ from .publish_service import PublishService from .version_service import VersionService VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/configuration/__init__.py b/src/cpl_cli/configuration/__init__.py index b620df12..5a53289c 100644 --- a/src/cpl_cli/configuration/__init__.py +++ b/src/cpl_cli/configuration/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_cli.configuration' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -28,4 +28,4 @@ from .version_settings import VersionSettings from .version_settings_name_enum import VersionSettingsNameEnum VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/live_server/__init__.py b/src/cpl_cli/live_server/__init__.py index 3f825f5b..d826d0f0 100644 --- a/src/cpl_cli/live_server/__init__.py +++ b/src/cpl_cli/live_server/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.live_server' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/publish/__init__.py b/src/cpl_cli/publish/__init__.py index 58828771..2f324b45 100644 --- a/src/cpl_cli/publish/__init__.py +++ b/src/cpl_cli/publish/__init__.py @@ -15,7 +15,7 @@ __title__ = 'cpl_cli.publish' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple @@ -24,4 +24,4 @@ from .publisher_abc import PublisherABC from .publisher_service import PublisherService VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/__init__.py b/src/cpl_cli/templates/__init__.py index 528d43ac..cd80bf44 100644 --- a/src/cpl_cli/templates/__init__.py +++ b/src/cpl_cli/templates/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/build/__init__.py b/src/cpl_cli/templates/build/__init__.py index d43eaa61..a8ef97fc 100644 --- a/src/cpl_cli/templates/build/__init__.py +++ b/src/cpl_cli/templates/build/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.build' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/generate/__init__.py b/src/cpl_cli/templates/generate/__init__.py index dbb44826..f0e04313 100644 --- a/src/cpl_cli/templates/generate/__init__.py +++ b/src/cpl_cli/templates/generate/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.generate' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/new/__init__.py b/src/cpl_cli/templates/new/__init__.py index 2f4a904b..67aa1aa9 100644 --- a/src/cpl_cli/templates/new/__init__.py +++ b/src/cpl_cli/templates/new/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/new/console/__init__.py b/src/cpl_cli/templates/new/console/__init__.py index 10025b60..214acb2f 100644 --- a/src/cpl_cli/templates/new/console/__init__.py +++ b/src/cpl_cli/templates/new/console/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new.console' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/new/console/src/__init__.py b/src/cpl_cli/templates/new/console/src/__init__.py index 85d458de..93766c79 100644 --- a/src/cpl_cli/templates/new/console/src/__init__.py +++ b/src/cpl_cli/templates/new/console/src/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new.console.src' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/new/console/src/tests/__init__.py b/src/cpl_cli/templates/new/console/src/tests/__init__.py index 63fc1bba..3c8f9b00 100644 --- a/src/cpl_cli/templates/new/console/src/tests/__init__.py +++ b/src/cpl_cli/templates/new/console/src/tests/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.new.console.src.tests' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') diff --git a/src/cpl_cli/templates/publish/__init__.py b/src/cpl_cli/templates/publish/__init__.py index 0afdd047..81138751 100644 --- a/src/cpl_cli/templates/publish/__init__.py +++ b/src/cpl_cli/templates/publish/__init__.py @@ -15,11 +15,11 @@ __title__ = 'cpl_cli.templates.publish' __author__ = 'Sven Heidemann' __license__ = 'MIT' __copyright__ = 'Copyright (c) 2020 - 2021 sh-edraft.de' -__version__ = '2021.4.2.dev1' +__version__ = '2021.4.2' from collections import namedtuple # imports: VersionInfo = namedtuple('VersionInfo', 'major minor micro') -version_info = VersionInfo(major='2021', minor='04', micro='02.dev1') +version_info = VersionInfo(major='2021', minor='04', micro='02') From c223524d1be425b4f37528626b359825334a444d Mon Sep 17 00:00:00 2001 From: Sven Heidemann Date: Mon, 29 Mar 2021 15:47:41 +0200 Subject: [PATCH 22/22] Removed direct import --- docs/todo.txt | 1 - src/cpl/application/application_builder.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/todo.txt b/docs/todo.txt index 66c7d178..e69de29b 100644 --- a/docs/todo.txt +++ b/docs/todo.txt @@ -1 +0,0 @@ -- dbContext!!! \ No newline at end of file diff --git a/src/cpl/application/application_builder.py b/src/cpl/application/application_builder.py index 067bda82..1dd7355d 100644 --- a/src/cpl/application/application_builder.py +++ b/src/cpl/application/application_builder.py @@ -3,7 +3,7 @@ from typing import Type, Optional from cpl.application.application_abc import ApplicationABC from cpl.application.application_builder_abc import ApplicationBuilderABC from cpl.application.startup_abc import StartupABC -from cpl.configuration import Configuration +from cpl.configuration.configuration import Configuration from cpl.dependency_injection.service_collection import ServiceCollection