Compare commits
	
		
			51 Commits
		
	
	
		
			75fde0f444
			...
			master
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| c1e65bf0dc | |||
| 688381b106 | |||
| c3e3367264 | |||
| c3d51e29fc | |||
| cae2e6d92e | |||
| 347418bdc5 | |||
| 153fc8922e | |||
| cdbfaeb013 | |||
| 4062a6ebe4 | |||
| 46ef6b3938 | |||
| c1b9c0fb4a | |||
| 8ede2998fe | |||
| 41f974fe6e | |||
| e7af5ce322 | |||
| 7881294554 | |||
| b3fd122fcd | |||
| 1dd48899d7 | |||
| f357e97ce5 | |||
| 2d8ecd424a | |||
| affbbc822d | |||
| 43ea732c5f | |||
| 708918464f | |||
| ed2377c288 | |||
| b819eb439c | |||
| b3ed7101fc | |||
| a3504af376 | |||
| 81c2f1cba9 | |||
| bea5b22251 | |||
| e04d0beb68 | |||
| 08ba097aaa | |||
| ea968d94e4 | |||
| 8e12c72b07 | |||
| 8dee4d8f70 | |||
| 315b8e631a | |||
| cbb1860f25 | |||
| 9839bcaa14 | |||
| da54337221 | |||
| a6a1e764d1 | |||
| eb6aa08c10 | |||
| 14a190a67f | |||
| cf5ae89884 | |||
| 558dfb8ced | |||
| 2ec8fc22b3 | |||
| c94700495b | |||
| 69a3bc5e31 | |||
| d189f49418 | |||
| 60fb416b67 | |||
| 792429d19d | |||
| 106975015e | |||
| 1117735f2e | |||
| 0378f8944a | 
@@ -87,7 +87,7 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
Install the CPL package
 | 
					Install the CPL package
 | 
				
			||||||
```sh
 | 
					```sh
 | 
				
			||||||
pip install cpl --extra-index-url https://pip.sh-edraft.de
 | 
					pip install cpl-core --extra-index-url https://pip.sh-edraft.de
 | 
				
			||||||
```
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Install the CPL CLI
 | 
					Install the CPL CLI
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli"
 | 
					__title__ = "cpl_cli"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli"
 | 
					__title__ = "cpl_cli"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,4 +28,4 @@ from .main import main
 | 
				
			|||||||
from .startup import Startup
 | 
					from .startup import Startup
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli._templates"
 | 
					__title__ = "cpl_cli._templates"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli._templates.build"
 | 
					__title__ = "cpl_cli._templates.build"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,19 +19,19 @@ class InitTemplate:
 | 
				
			|||||||
            
 | 
					            
 | 
				
			||||||
            \"\"\"
 | 
					            \"\"\"
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            __title__ = '$Title'
 | 
					            __title__ = "$Title"
 | 
				
			||||||
            __author__ = '$Author'
 | 
					            __author__ = "$Author"
 | 
				
			||||||
            __license__ = '$LicenseName'
 | 
					            __license__ = "$LicenseName"
 | 
				
			||||||
            __copyright__ = 'Copyright (c) $CopyrightDate $CopyrightName'
 | 
					            __copyright__ = "Copyright (c) $CopyrightDate $CopyrightName"
 | 
				
			||||||
            __version__ = '$Version'
 | 
					            __version__ = "$Version"
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            from collections import namedtuple
 | 
					            from collections import namedtuple
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            $Imports
 | 
					            $Imports
 | 
				
			||||||
            
 | 
					            
 | 
				
			||||||
            VersionInfo = namedtuple('VersionInfo', 'major minor micro')
 | 
					            VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
            version_info = VersionInfo(major='$Major', minor='$Minor', micro='$Micro')
 | 
					            version_info = VersionInfo(major="$Major", minor="$Minor", micro="$Micro")
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli._templates.publish"
 | 
					__title__ = "cpl_cli._templates.publish"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli.abc"
 | 
					__title__ = "cpl_cli.abc"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,9 +1,6 @@
 | 
				
			|||||||
import traceback
 | 
					 | 
				
			||||||
from typing import Optional
 | 
					from typing import Optional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC
 | 
					from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC
 | 
				
			||||||
from cpl_core.console.console import Console
 | 
					 | 
				
			||||||
from cpl_cli.cli_settings_name_enum import CLISettingsNameEnum
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CLISettings(ConfigurationModelABC):
 | 
					class CLISettings(ConfigurationModelABC):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli.command"
 | 
					__title__ = "cpl_cli.command"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -29,4 +29,4 @@ from .publish_service import PublishService
 | 
				
			|||||||
from .version_service import VersionService
 | 
					from .version_service import VersionService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -154,6 +154,24 @@ class UpdateService(CommandABC):
 | 
				
			|||||||
            Console.write_line(f"\tUpdate with {Pip.get_executable()} -m pip install --upgrade <package>")
 | 
					            Console.write_line(f"\tUpdate with {Pip.get_executable()} -m pip install --upgrade <package>")
 | 
				
			||||||
            Console.set_foreground_color(ForegroundColorEnum.default)
 | 
					            Console.set_foreground_color(ForegroundColorEnum.default)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def _save_formatted_package_name_to_deps_collection(self, deps: [str], old_package: str, new_package: str):
 | 
				
			||||||
 | 
					        if old_package not in deps:
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        initial_package = new_package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if "/" in new_package:
 | 
				
			||||||
 | 
					            new_package = new_package.split("/")[0]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if "\r" in new_package:
 | 
				
			||||||
 | 
					            new_package = new_package.replace("\r", "")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if new_package == old_package:
 | 
				
			||||||
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        index = deps.index(old_package)
 | 
				
			||||||
 | 
					        deps[index] = new_package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def _project_json_update_dependency(self, old_package: str, new_package: str):
 | 
					    def _project_json_update_dependency(self, old_package: str, new_package: str):
 | 
				
			||||||
        """
 | 
					        """
 | 
				
			||||||
        Writes new package version to project.json
 | 
					        Writes new package version to project.json
 | 
				
			||||||
@@ -164,15 +182,12 @@ class UpdateService(CommandABC):
 | 
				
			|||||||
        if self._is_simulation:
 | 
					        if self._is_simulation:
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if old_package in self._project_settings.dependencies:
 | 
					        self._save_formatted_package_name_to_deps_collection(
 | 
				
			||||||
            index = self._project_settings.dependencies.index(old_package)
 | 
					            self._project_settings.dependencies, old_package, new_package
 | 
				
			||||||
            if "/" in new_package:
 | 
					        )
 | 
				
			||||||
                new_package = new_package.split("/")[0]
 | 
					        self._save_formatted_package_name_to_deps_collection(
 | 
				
			||||||
 | 
					            self._project_settings.dev_dependencies, old_package, new_package
 | 
				
			||||||
            if "\r" in new_package:
 | 
					        )
 | 
				
			||||||
                new_package = new_package.replace("\r", "")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            self._project_settings.dependencies[index] = new_package
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config = {
 | 
					        config = {
 | 
				
			||||||
            ProjectSettings.__name__: SettingsHelper.get_project_settings_dict(self._project_settings),
 | 
					            ProjectSettings.__name__: SettingsHelper.get_project_settings_dict(self._project_settings),
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli.configuration"
 | 
					__title__ = "cpl_cli.configuration"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -31,4 +31,4 @@ from .workspace_settings import WorkspaceSettings
 | 
				
			|||||||
from .workspace_settings_name_enum import WorkspaceSettingsNameEnum
 | 
					from .workspace_settings_name_enum import WorkspaceSettingsNameEnum
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -18,10 +18,10 @@ class BuildSettings(ConfigurationModelABC):
 | 
				
			|||||||
        main: str = None,
 | 
					        main: str = None,
 | 
				
			||||||
        entry_point: str = None,
 | 
					        entry_point: str = None,
 | 
				
			||||||
        include_package_data: bool = None,
 | 
					        include_package_data: bool = None,
 | 
				
			||||||
        included: list[str] = None,
 | 
					        included: list = None,
 | 
				
			||||||
        excluded: list[str] = None,
 | 
					        excluded: list = None,
 | 
				
			||||||
        package_data: dict[str, list[str]] = None,
 | 
					        package_data: dict = None,
 | 
				
			||||||
        project_references: list[str] = None,
 | 
					        project_references: list = None,
 | 
				
			||||||
    ):
 | 
					    ):
 | 
				
			||||||
        ConfigurationModelABC.__init__(self)
 | 
					        ConfigurationModelABC.__init__(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -49,7 +49,7 @@ class ProjectSettings(ConfigurationModelABC):
 | 
				
			|||||||
        self._python_executable: Optional[str] = python_executable
 | 
					        self._python_executable: Optional[str] = python_executable
 | 
				
			||||||
        self._classifiers: Optional[list[str]] = [] if classifiers is None else classifiers
 | 
					        self._classifiers: Optional[list[str]] = [] if classifiers is None else classifiers
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if python_path is not None:
 | 
					        if python_path is not None and sys.platform in python_path:
 | 
				
			||||||
            path = f"{python_path[sys.platform]}"
 | 
					            path = f"{python_path[sys.platform]}"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if path == "" or path is None:
 | 
					            if path == "" or path is None:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,8 @@
 | 
				
			|||||||
  "ProjectSettings": {
 | 
					  "ProjectSettings": {
 | 
				
			||||||
    "Name": "cpl-cli",
 | 
					    "Name": "cpl-cli",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "2023",
 | 
					      "Major": "2024",
 | 
				
			||||||
      "Minor": "4",
 | 
					      "Minor": "7",
 | 
				
			||||||
      "Micro": "0"
 | 
					      "Micro": "0"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "Sven Heidemann",
 | 
					    "Author": "Sven Heidemann",
 | 
				
			||||||
@@ -11,15 +11,15 @@
 | 
				
			|||||||
    "Description": "CPL CLI",
 | 
					    "Description": "CPL CLI",
 | 
				
			||||||
    "LongDescription": "CPL Command Line Interface",
 | 
					    "LongDescription": "CPL Command Line Interface",
 | 
				
			||||||
    "URL": "https://www.sh-edraft.de",
 | 
					    "URL": "https://www.sh-edraft.de",
 | 
				
			||||||
    "CopyrightDate": "2020 - 2023",
 | 
					    "CopyrightDate": "2020 - 2024",
 | 
				
			||||||
    "CopyrightName": "sh-edraft.de",
 | 
					    "CopyrightName": "sh-edraft.de",
 | 
				
			||||||
    "LicenseName": "MIT",
 | 
					    "LicenseName": "MIT",
 | 
				
			||||||
    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
					    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
				
			||||||
    "Dependencies": [
 | 
					    "Dependencies": [
 | 
				
			||||||
      "cpl-core>=2023.4.0"
 | 
					      "cpl-core>=2024.6.2024.07.0"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "DevDependencies": [],
 | 
					    "DevDependencies": [],
 | 
				
			||||||
    "PythonVersion": ">=3.10",
 | 
					    "PythonVersion": ">=3.12",
 | 
				
			||||||
    "PythonPath": {
 | 
					    "PythonPath": {
 | 
				
			||||||
      "linux": "../../venv"
 | 
					      "linux": "../../venv"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli.helper"
 | 
					__title__ = "cpl_cli.helper"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli.live_server"
 | 
					__title__ = "cpl_cli.live_server"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,7 +1,6 @@
 | 
				
			|||||||
 | 
					import importlib.metadata
 | 
				
			||||||
from typing import Type
 | 
					from typing import Type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import pkg_resources
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from cpl_cli.cli import CLI
 | 
					from cpl_cli.cli import CLI
 | 
				
			||||||
from cpl_cli.startup import Startup
 | 
					from cpl_cli.startup import Startup
 | 
				
			||||||
from cpl_cli.startup_argument_extension import StartupArgumentExtension
 | 
					from cpl_cli.startup_argument_extension import StartupArgumentExtension
 | 
				
			||||||
@@ -16,13 +15,12 @@ def get_startup_extensions() -> list[Type[StartupExtensionABC]]:
 | 
				
			|||||||
    blacklisted_packages = ["cpl-cli"]
 | 
					    blacklisted_packages = ["cpl-cli"]
 | 
				
			||||||
    startup_extensions = []
 | 
					    startup_extensions = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    installed_packages = pkg_resources.working_set
 | 
					    installed_packages = importlib.metadata.distributions()
 | 
				
			||||||
    for p in installed_packages:
 | 
					    for p in installed_packages:
 | 
				
			||||||
        package = str(p).split(" ")[0]
 | 
					        if not p.name.startswith("cpl-") or p.name in blacklisted_packages:
 | 
				
			||||||
        if not package.startswith("cpl-") or package in blacklisted_packages:
 | 
					 | 
				
			||||||
            continue
 | 
					            continue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        package = package.replace("-", "_")
 | 
					        package = p.name.replace("-", "_")
 | 
				
			||||||
        loaded_package = __import__(package)
 | 
					        loaded_package = __import__(package)
 | 
				
			||||||
        if "__cli_startup_extension__" not in dir(loaded_package):
 | 
					        if "__cli_startup_extension__" not in dir(loaded_package):
 | 
				
			||||||
            continue
 | 
					            continue
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli.migrations"
 | 
					__title__ = "cpl_cli.migrations"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports
 | 
					# imports
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli.migrations.base"
 | 
					__title__ = "cpl_cli.migrations.base"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli.migrations.service"
 | 
					__title__ = "cpl_cli.migrations.service"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli.publish"
 | 
					__title__ = "cpl_cli.publish"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,4 +25,4 @@ from .publisher_abc import PublisherABC
 | 
				
			|||||||
from .publisher_service import PublisherService
 | 
					from .publisher_service import PublisherService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli.source_creator"
 | 
					__title__ = "cpl_cli.source_creator"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,10 +28,13 @@ class StartupArgumentExtension(StartupExtensionABC):
 | 
				
			|||||||
        config.create_console_argument(
 | 
					        config.create_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Executable, "", "add", ["a", "A"], AddService, True, validators=[WorkspaceValidator]
 | 
					            ArgumentTypeEnum.Executable, "", "add", ["a", "A"], AddService, True, validators=[WorkspaceValidator]
 | 
				
			||||||
        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"])
 | 
					        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.create_console_argument(
 | 
					        config.create_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Executable, "", "build", ["b", "B"], BuildService, True, validators=[ProjectValidator]
 | 
					            ArgumentTypeEnum.Executable, "", "build", ["b", "B"], BuildService, True, validators=[ProjectValidator]
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.create_console_argument(ArgumentTypeEnum.Executable, "", "generate", ["g", "G"], GenerateService, True)
 | 
					        config.create_console_argument(ArgumentTypeEnum.Executable, "", "generate", ["g", "G"], GenerateService, True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.create_console_argument(
 | 
					        config.create_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Executable, "", "install", ["i", "I"], InstallService, True, validators=[ProjectValidator]
 | 
					            ArgumentTypeEnum.Executable, "", "install", ["i", "I"], InstallService, True, validators=[ProjectValidator]
 | 
				
			||||||
        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "dev", ["d", "D"]).add_console_argument(
 | 
					        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "dev", ["d", "D"]).add_console_argument(
 | 
				
			||||||
@@ -45,6 +48,7 @@ class StartupArgumentExtension(StartupExtensionABC):
 | 
				
			|||||||
        ).add_console_argument(
 | 
					        ).add_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Flag, "--", "cpl-dev", ["cd", "CD"]
 | 
					            ArgumentTypeEnum.Flag, "--", "cpl-dev", ["cd", "CD"]
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.create_console_argument(
 | 
					        config.create_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Executable, "", "new", ["n", "N"], NewService, True
 | 
					            ArgumentTypeEnum.Executable, "", "new", ["n", "N"], NewService, True
 | 
				
			||||||
        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "async", ["a", "A"]).add_console_argument(
 | 
					        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "async", ["a", "A"]).add_console_argument(
 | 
				
			||||||
@@ -60,18 +64,23 @@ class StartupArgumentExtension(StartupExtensionABC):
 | 
				
			|||||||
        ).add_console_argument(
 | 
					        ).add_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Flag, "--", "base", ["b", "B"]
 | 
					            ArgumentTypeEnum.Flag, "--", "base", ["b", "B"]
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.create_console_argument(
 | 
					        config.create_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Executable, "", "publish", ["p", "P"], PublishService, True, validators=[ProjectValidator]
 | 
					            ArgumentTypeEnum.Executable, "", "publish", ["p", "P"], PublishService, True, validators=[ProjectValidator]
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.create_console_argument(
 | 
					        config.create_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Executable, "", "remove", ["r", "R"], RemoveService, True, validators=[WorkspaceValidator]
 | 
					            ArgumentTypeEnum.Executable, "", "remove", ["r", "R"], RemoveService, True, validators=[WorkspaceValidator]
 | 
				
			||||||
        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"])
 | 
					        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.create_console_argument(
 | 
					        config.create_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Executable, "", "run", [], RunService, True, validators=[ProjectValidator]
 | 
					            ArgumentTypeEnum.Executable, "", "run", [], RunService, True, validators=[ProjectValidator]
 | 
				
			||||||
        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "dev", ["d", "D"])
 | 
					        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "dev", ["d", "D"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.create_console_argument(
 | 
					        config.create_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Executable, "", "start", ["s", "S"], StartService, True, validators=[ProjectValidator]
 | 
					            ArgumentTypeEnum.Executable, "", "start", ["s", "S"], StartService, True, validators=[ProjectValidator]
 | 
				
			||||||
        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "dev", ["d", "D"])
 | 
					        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "dev", ["d", "D"])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.create_console_argument(
 | 
					        config.create_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Executable,
 | 
					            ArgumentTypeEnum.Executable,
 | 
				
			||||||
            "",
 | 
					            "",
 | 
				
			||||||
@@ -85,6 +94,7 @@ class StartupArgumentExtension(StartupExtensionABC):
 | 
				
			|||||||
        ).add_console_argument(
 | 
					        ).add_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"]
 | 
					            ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"]
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.create_console_argument(
 | 
					        config.create_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Executable, "", "update", ["u", "U"], UpdateService, True, validators=[ProjectValidator]
 | 
					            ArgumentTypeEnum.Executable, "", "update", ["u", "U"], UpdateService, True, validators=[ProjectValidator]
 | 
				
			||||||
        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"]).add_console_argument(
 | 
					        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "simulate", ["s", "S"]).add_console_argument(
 | 
				
			||||||
@@ -94,6 +104,7 @@ class StartupArgumentExtension(StartupExtensionABC):
 | 
				
			|||||||
        ).add_console_argument(
 | 
					        ).add_console_argument(
 | 
				
			||||||
            ArgumentTypeEnum.Flag, "--", "cpl-dev", ["cd", "CD"]
 | 
					            ArgumentTypeEnum.Flag, "--", "cpl-dev", ["cd", "CD"]
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.create_console_argument(ArgumentTypeEnum.Executable, "", "version", ["v", "V"], VersionService, True)
 | 
					        config.create_console_argument(ArgumentTypeEnum.Executable, "", "version", ["v", "V"], VersionService, True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        config.for_each_argument(lambda a: a.add_console_argument(ArgumentTypeEnum.Flag, "--", "help", ["h", "H"]))
 | 
					        config.for_each_argument(lambda a: a.add_console_argument(ArgumentTypeEnum.Flag, "--", "help", ["h", "H"]))
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-cli CPL CLI
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL Command Line Interface
 | 
					CPL Command Line Interface
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL Command Line Interface
 | 
				
			|||||||
__title__ = "cpl_cli.validators"
 | 
					__title__ = "cpl_cli.validators"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core"
 | 
					__title__ = "cpl_core"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.application"
 | 
					__title__ = "cpl_core.application"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -29,4 +29,4 @@ from .startup_abc import StartupABC
 | 
				
			|||||||
from .startup_extension_abc import StartupExtensionABC
 | 
					from .startup_extension_abc import StartupExtensionABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.configuration"
 | 
					__title__ = "cpl_core.configuration"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -35,4 +35,4 @@ from .validator_abc import ValidatorABC
 | 
				
			|||||||
from .variable_argument import VariableArgument
 | 
					from .variable_argument import VariableArgument
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -24,7 +24,7 @@ from cpl_core.dependency_injection.service_provider_abc import ServiceProviderAB
 | 
				
			|||||||
from cpl_core.environment.application_environment import ApplicationEnvironment
 | 
					from cpl_core.environment.application_environment import ApplicationEnvironment
 | 
				
			||||||
from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC
 | 
					from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC
 | 
				
			||||||
from cpl_core.environment.environment_name_enum import EnvironmentNameEnum
 | 
					from cpl_core.environment.environment_name_enum import EnvironmentNameEnum
 | 
				
			||||||
from cpl_core.type import T
 | 
					from cpl_core.type import T, R
 | 
				
			||||||
from cpl_core.utils.json_processor import JSONProcessor
 | 
					from cpl_core.utils.json_processor import JSONProcessor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -278,21 +278,23 @@ class Configuration(ConfigurationABC):
 | 
				
			|||||||
        config_from_file = self._load_json_file(file_path, output)
 | 
					        config_from_file = self._load_json_file(file_path, output)
 | 
				
			||||||
        for sub in ConfigurationModelABC.__subclasses__():
 | 
					        for sub in ConfigurationModelABC.__subclasses__():
 | 
				
			||||||
            for key, value in config_from_file.items():
 | 
					            for key, value in config_from_file.items():
 | 
				
			||||||
                if sub.__name__ == key or sub.__name__.replace("Settings", "") == key:
 | 
					                if sub.__name__ != key and sub.__name__.replace("Settings", "") != key:
 | 
				
			||||||
                    configuration = sub()
 | 
					                    continue
 | 
				
			||||||
                    from_dict = getattr(configuration, "from_dict", None)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    if from_dict is not None and not hasattr(from_dict, "is_base_func"):
 | 
					                configuration = sub()
 | 
				
			||||||
                        Console.set_foreground_color(ForegroundColorEnum.yellow)
 | 
					                from_dict = getattr(configuration, "from_dict", None)
 | 
				
			||||||
                        Console.write_line(
 | 
					 | 
				
			||||||
                            f"{sub.__name__}.from_dict is deprecated. Instead, set attributes as typed arguments in __init__. They can be None by default!"
 | 
					 | 
				
			||||||
                        )
 | 
					 | 
				
			||||||
                        Console.color_reset()
 | 
					 | 
				
			||||||
                        configuration.from_dict(value)
 | 
					 | 
				
			||||||
                    else:
 | 
					 | 
				
			||||||
                        configuration = JSONProcessor.process(sub, value)
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
                    self.add_configuration(sub, configuration)
 | 
					                if from_dict is not None and not hasattr(from_dict, "is_base_func"):
 | 
				
			||||||
 | 
					                    Console.set_foreground_color(ForegroundColorEnum.yellow)
 | 
				
			||||||
 | 
					                    Console.write_line(
 | 
				
			||||||
 | 
					                        f"{sub.__name__}.from_dict is deprecated. Instead, set attributes as typed arguments in __init__. They can be None by default!"
 | 
				
			||||||
 | 
					                    )
 | 
				
			||||||
 | 
					                    Console.color_reset()
 | 
				
			||||||
 | 
					                    configuration.from_dict(value)
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    configuration = JSONProcessor.process(sub, value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                self.add_configuration(sub, configuration)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def add_configuration(self, key_type: T, value: any):
 | 
					    def add_configuration(self, key_type: T, value: any):
 | 
				
			||||||
        self._config[key_type] = value
 | 
					        self._config[key_type] = value
 | 
				
			||||||
@@ -314,7 +316,7 @@ class Configuration(ConfigurationABC):
 | 
				
			|||||||
        for arg in self._argument_types:
 | 
					        for arg in self._argument_types:
 | 
				
			||||||
            call(arg)
 | 
					            call(arg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_configuration(self, search_type: Type[T]) -> Optional[T]:
 | 
					    def get_configuration(self, search_type: T) -> Optional[R]:
 | 
				
			||||||
        if type(search_type) is str:
 | 
					        if type(search_type) is str:
 | 
				
			||||||
            if search_type == ConfigurationVariableNameEnum.environment.value:
 | 
					            if search_type == ConfigurationVariableNameEnum.environment.value:
 | 
				
			||||||
                return self._application_environment.environment_name
 | 
					                return self._application_environment.environment_name
 | 
				
			||||||
@@ -343,7 +345,7 @@ class Configuration(ConfigurationABC):
 | 
				
			|||||||
            executables: list[ExecutableArgument] = []
 | 
					            executables: list[ExecutableArgument] = []
 | 
				
			||||||
            self._parse_arguments(executables, arg_list, self._argument_types)
 | 
					            self._parse_arguments(executables, arg_list, self._argument_types)
 | 
				
			||||||
        except Exception as e:
 | 
					        except Exception as e:
 | 
				
			||||||
            Console.error("An error occurred while parsing arguments.")
 | 
					            Console.error("An error occurred while parsing arguments.", traceback.format_exc())
 | 
				
			||||||
            sys.exit()
 | 
					            sys.exit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
@@ -355,7 +357,7 @@ class Configuration(ConfigurationABC):
 | 
				
			|||||||
                if exe.validators is not None:
 | 
					                if exe.validators is not None:
 | 
				
			||||||
                    abort = False
 | 
					                    abort = False
 | 
				
			||||||
                    for validator_type in exe.validators:
 | 
					                    for validator_type in exe.validators:
 | 
				
			||||||
                        validator: ValidatorABC = services.get_service(validator_type)
 | 
					                        validator = services.get_service(validator_type)
 | 
				
			||||||
                        result = validator.validate()
 | 
					                        result = validator.validate()
 | 
				
			||||||
                        abort = not result
 | 
					                        abort = not result
 | 
				
			||||||
                        if abort:
 | 
					                        if abort:
 | 
				
			||||||
@@ -364,7 +366,7 @@ class Configuration(ConfigurationABC):
 | 
				
			|||||||
                    if abort:
 | 
					                    if abort:
 | 
				
			||||||
                        sys.exit()
 | 
					                        sys.exit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                cmd: ArgumentExecutableABC = services.get_service(exe.executable_type)
 | 
					                cmd = services.get_service(exe.executable_type)
 | 
				
			||||||
                self._handle_pre_or_post_executables(True, exe, services)
 | 
					                self._handle_pre_or_post_executables(True, exe, services)
 | 
				
			||||||
                self._set_variable("ACTIVE_EXECUTABLE", exe.name)
 | 
					                self._set_variable("ACTIVE_EXECUTABLE", exe.name)
 | 
				
			||||||
                args = self.get_configuration("ARGS")
 | 
					                args = self.get_configuration("ARGS")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ from cpl_core.configuration.configuration_model_abc import ConfigurationModelABC
 | 
				
			|||||||
from cpl_core.configuration.argument_abc import ArgumentABC
 | 
					from cpl_core.configuration.argument_abc import ArgumentABC
 | 
				
			||||||
from cpl_core.configuration.argument_type_enum import ArgumentTypeEnum
 | 
					from cpl_core.configuration.argument_type_enum import ArgumentTypeEnum
 | 
				
			||||||
from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC
 | 
					from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC
 | 
				
			||||||
from cpl_core.type import T
 | 
					from cpl_core.type import T, R
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ConfigurationABC(ABC):
 | 
					class ConfigurationABC(ABC):
 | 
				
			||||||
@@ -81,7 +81,7 @@ class ConfigurationABC(ABC):
 | 
				
			|||||||
        r"""Add configuration object
 | 
					        r"""Add configuration object
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Parameter:
 | 
					        Parameter:
 | 
				
			||||||
            key_type: Union[:class:`str`, :class:`type`]
 | 
					            key_type: :class:`cpl_core.type.T`
 | 
				
			||||||
                Type of the value
 | 
					                Type of the value
 | 
				
			||||||
            value: any
 | 
					            value: any
 | 
				
			||||||
                Object of the value
 | 
					                Object of the value
 | 
				
			||||||
@@ -124,11 +124,11 @@ class ConfigurationABC(ABC):
 | 
				
			|||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @abstractmethod
 | 
					    @abstractmethod
 | 
				
			||||||
    def get_configuration(self, search_type: Type[T]) -> Optional[T]:
 | 
					    def get_configuration(self, search_type: T) -> Optional[R]:
 | 
				
			||||||
        r"""Returns value from configuration by given type
 | 
					        r"""Returns value from configuration by given type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Parameter:
 | 
					        Parameter:
 | 
				
			||||||
            search_type: Union[:class:`str`, Type[:class:`cpl_core.configuration.configuration_model_abc.ConfigurationModelABC`]]
 | 
					            search_type: :class:`cpl_core.type.T`
 | 
				
			||||||
                Type to search for
 | 
					                Type to search for
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Returns:
 | 
					        Returns:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.console"
 | 
					__title__ = "cpl_core.console"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,4 +28,4 @@ from .foreground_color_enum import ForegroundColorEnum
 | 
				
			|||||||
from .spinner_thread import SpinnerThread
 | 
					from .spinner_thread import SpinnerThread
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,8 @@
 | 
				
			|||||||
  "ProjectSettings": {
 | 
					  "ProjectSettings": {
 | 
				
			||||||
    "Name": "cpl-core",
 | 
					    "Name": "cpl-core",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "2023",
 | 
					      "Major": "2024",
 | 
				
			||||||
      "Minor": "4",
 | 
					      "Minor": "7",
 | 
				
			||||||
      "Micro": "0"
 | 
					      "Micro": "0"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "Sven Heidemann",
 | 
					    "Author": "Sven Heidemann",
 | 
				
			||||||
@@ -11,22 +11,22 @@
 | 
				
			|||||||
    "Description": "CPL core",
 | 
					    "Description": "CPL core",
 | 
				
			||||||
    "LongDescription": "CPL core package",
 | 
					    "LongDescription": "CPL core package",
 | 
				
			||||||
    "URL": "https://www.sh-edraft.de",
 | 
					    "URL": "https://www.sh-edraft.de",
 | 
				
			||||||
    "CopyrightDate": "2020 - 2023",
 | 
					    "CopyrightDate": "2020 - 2024",
 | 
				
			||||||
    "CopyrightName": "sh-edraft.de",
 | 
					    "CopyrightName": "sh-edraft.de",
 | 
				
			||||||
    "LicenseName": "MIT",
 | 
					    "LicenseName": "MIT",
 | 
				
			||||||
    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
					    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
				
			||||||
    "Dependencies": [
 | 
					    "Dependencies": [
 | 
				
			||||||
      "art==5.9",
 | 
					      "art>=6.2",
 | 
				
			||||||
      "colorama==0.4.6",
 | 
					      "colorama>=0.4.6",
 | 
				
			||||||
      "mysql-connector==2.2.9",
 | 
					      "psutil>=6.0.0",
 | 
				
			||||||
      "psutil==5.9.4",
 | 
					      "packaging>=24.1",
 | 
				
			||||||
      "packaging==23.0",
 | 
					      "pynput>=1.7.6",
 | 
				
			||||||
      "pynput==1.7.6",
 | 
					      "setuptools>=70.1.0",
 | 
				
			||||||
      "setuptools==67.6.1",
 | 
					      "tabulate>=0.9.0",
 | 
				
			||||||
      "tabulate==0.9.0",
 | 
					      "termcolor>=2.4.0",
 | 
				
			||||||
      "termcolor==2.2.0",
 | 
					      "watchdog>=4.0.1",
 | 
				
			||||||
      "watchdog==3.0.0",
 | 
					      "wheel>=0.43.0",
 | 
				
			||||||
      "wheel==0.40.0"
 | 
					      "mysql-connector-python>=8.4.0"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "DevDependencies": [
 | 
					    "DevDependencies": [
 | 
				
			||||||
      "Sphinx==5.0.2",
 | 
					      "Sphinx==5.0.2",
 | 
				
			||||||
@@ -36,7 +36,7 @@
 | 
				
			|||||||
      "sphinx-markdown-builder==0.5.5",
 | 
					      "sphinx-markdown-builder==0.5.5",
 | 
				
			||||||
      "pygount==1.5.1"
 | 
					      "pygount==1.5.1"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "PythonVersion": ">=3.11",
 | 
					    "PythonVersion": ">=3.12",
 | 
				
			||||||
    "PythonPath": {},
 | 
					    "PythonPath": {},
 | 
				
			||||||
    "Classifiers": []
 | 
					    "Classifiers": []
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.database"
 | 
					__title__ = "cpl_core.database"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -26,4 +26,4 @@ from .database_settings import DatabaseSettings
 | 
				
			|||||||
from .table_abc import TableABC
 | 
					from .table_abc import TableABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.database.connection"
 | 
					__title__ = "cpl_core.database.connection"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,4 +25,4 @@ from .database_connection import DatabaseConnection
 | 
				
			|||||||
from .database_connection_abc import DatabaseConnectionABC
 | 
					from .database_connection_abc import DatabaseConnectionABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,12 @@
 | 
				
			|||||||
from typing import Optional
 | 
					from typing import Optional
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import mysql.connector as sql
 | 
					import mysql.connector as sql
 | 
				
			||||||
 | 
					from mysql.connector.abstracts import MySQLConnectionAbstract
 | 
				
			||||||
 | 
					from mysql.connector.cursor import MySQLCursorBuffered
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cpl_core.database.connection.database_connection_abc import DatabaseConnectionABC
 | 
					from cpl_core.database.connection.database_connection_abc import DatabaseConnectionABC
 | 
				
			||||||
from cpl_core.database.database_settings import DatabaseSettings
 | 
					from cpl_core.database.database_settings import DatabaseSettings
 | 
				
			||||||
from cpl_core.utils.credential_manager import CredentialManager
 | 
					from cpl_core.utils.credential_manager import CredentialManager
 | 
				
			||||||
from mysql.connector.abstracts import MySQLConnectionAbstract
 | 
					 | 
				
			||||||
from mysql.connector.cursor import MySQLCursorBuffered
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DatabaseConnection(DatabaseConnectionABC):
 | 
					class DatabaseConnection(DatabaseConnectionABC):
 | 
				
			||||||
@@ -25,27 +26,29 @@ class DatabaseConnection(DatabaseConnectionABC):
 | 
				
			|||||||
    def cursor(self) -> MySQLCursorBuffered:
 | 
					    def cursor(self) -> MySQLCursorBuffered:
 | 
				
			||||||
        return self._cursor
 | 
					        return self._cursor
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def connect(self, database_settings: DatabaseSettings):
 | 
					    def connect(self, settings: DatabaseSettings):
 | 
				
			||||||
        connection = sql.connect(
 | 
					        connection = sql.connect(
 | 
				
			||||||
            host=database_settings.host,
 | 
					            host=settings.host,
 | 
				
			||||||
            port=database_settings.port,
 | 
					            port=settings.port,
 | 
				
			||||||
            user=database_settings.user,
 | 
					            user=settings.user,
 | 
				
			||||||
            passwd=CredentialManager.decrypt(database_settings.password),
 | 
					            passwd=CredentialManager.decrypt(settings.password),
 | 
				
			||||||
            charset=database_settings.charset,
 | 
					            charset=settings.charset,
 | 
				
			||||||
            use_unicode=database_settings.use_unicode,
 | 
					            use_unicode=settings.use_unicode,
 | 
				
			||||||
            buffered=database_settings.buffered,
 | 
					            buffered=settings.buffered,
 | 
				
			||||||
            auth_plugin=database_settings.auth_plugin,
 | 
					            auth_plugin=settings.auth_plugin,
 | 
				
			||||||
 | 
					            ssl_disabled=settings.ssl_disabled,
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        connection.cursor().execute(f"CREATE DATABASE IF NOT EXISTS `{database_settings.database}`;")
 | 
					        connection.cursor().execute(f"CREATE DATABASE IF NOT EXISTS `{settings.database}`;")
 | 
				
			||||||
        self._database = sql.connect(
 | 
					        self._database = sql.connect(
 | 
				
			||||||
            host=database_settings.host,
 | 
					            host=settings.host,
 | 
				
			||||||
            port=database_settings.port,
 | 
					            port=settings.port,
 | 
				
			||||||
            user=database_settings.user,
 | 
					            user=settings.user,
 | 
				
			||||||
            passwd=CredentialManager.decrypt(database_settings.password),
 | 
					            passwd=CredentialManager.decrypt(settings.password),
 | 
				
			||||||
            db=database_settings.database,
 | 
					            db=settings.database,
 | 
				
			||||||
            charset=database_settings.charset,
 | 
					            charset=settings.charset,
 | 
				
			||||||
            use_unicode=database_settings.use_unicode,
 | 
					            use_unicode=settings.use_unicode,
 | 
				
			||||||
            buffered=database_settings.buffered,
 | 
					            buffered=settings.buffered,
 | 
				
			||||||
            auth_plugin=database_settings.auth_plugin,
 | 
					            auth_plugin=settings.auth_plugin,
 | 
				
			||||||
 | 
					            ssl_disabled=settings.ssl_disabled,
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
        self._cursor = self._database.cursor()
 | 
					        self._cursor = self._database.cursor()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.database.context"
 | 
					__title__ = "cpl_core.database.context"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,4 +25,4 @@ from .database_context import DatabaseContext
 | 
				
			|||||||
from .database_context_abc import DatabaseContextABC
 | 
					from .database_context_abc import DatabaseContextABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,6 @@ class DatabaseContext(DatabaseContextABC):
 | 
				
			|||||||
        DatabaseContextABC.__init__(self)
 | 
					        DatabaseContextABC.__init__(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._db: DatabaseConnectionABC = DatabaseConnection()
 | 
					        self._db: DatabaseConnectionABC = DatabaseConnection()
 | 
				
			||||||
        self._tables: list[TableABC] = TableABC.__subclasses__()
 | 
					 | 
				
			||||||
        self._settings: Optional[DatabaseSettings] = None
 | 
					        self._settings: Optional[DatabaseSettings] = None
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
@@ -32,7 +31,7 @@ class DatabaseContext(DatabaseContextABC):
 | 
				
			|||||||
    def _ping_and_reconnect(self):
 | 
					    def _ping_and_reconnect(self):
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            self._db.server.ping(reconnect=True, attempts=3, delay=5)
 | 
					            self._db.server.ping(reconnect=True, attempts=3, delay=5)
 | 
				
			||||||
        except mysql.connector.Error as err:
 | 
					        except Exception as err:
 | 
				
			||||||
            # reconnect your cursor as you did in __init__ or wherever
 | 
					            # reconnect your cursor as you did in __init__ or wherever
 | 
				
			||||||
            if self._settings is None:
 | 
					            if self._settings is None:
 | 
				
			||||||
                raise Exception("Call DatabaseContext.connect first")
 | 
					                raise Exception("Call DatabaseContext.connect first")
 | 
				
			||||||
@@ -42,8 +41,6 @@ class DatabaseContext(DatabaseContextABC):
 | 
				
			|||||||
        if self._settings is None:
 | 
					        if self._settings is None:
 | 
				
			||||||
            self._settings = database_settings
 | 
					            self._settings = database_settings
 | 
				
			||||||
        self._db.connect(database_settings)
 | 
					        self._db.connect(database_settings)
 | 
				
			||||||
        for table in self._tables:
 | 
					 | 
				
			||||||
            self._db.cursor.execute(table.get_create_string())
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.save_changes()
 | 
					        self.save_changes()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,14 +9,15 @@ class DatabaseSettings(ConfigurationModelABC):
 | 
				
			|||||||
    def __init__(
 | 
					    def __init__(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        host: str = None,
 | 
					        host: str = None,
 | 
				
			||||||
        port: int = None,
 | 
					        port: int = 3306,
 | 
				
			||||||
        user: str = None,
 | 
					        user: str = None,
 | 
				
			||||||
        password: str = None,
 | 
					        password: str = None,
 | 
				
			||||||
        databse: str = None,
 | 
					        database: str = None,
 | 
				
			||||||
        charset: str = None,
 | 
					        charset: str = "utf8mb4",
 | 
				
			||||||
        use_unicode: bool = None,
 | 
					        use_unicode: bool = False,
 | 
				
			||||||
        buffered: bool = None,
 | 
					        buffered: bool = False,
 | 
				
			||||||
        auth_plugin: bool = None,
 | 
					        auth_plugin: str = "caching_sha2_password",
 | 
				
			||||||
 | 
					        ssl_disabled: bool = False,
 | 
				
			||||||
    ):
 | 
					    ):
 | 
				
			||||||
        ConfigurationModelABC.__init__(self)
 | 
					        ConfigurationModelABC.__init__(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,11 +25,12 @@ class DatabaseSettings(ConfigurationModelABC):
 | 
				
			|||||||
        self._port: Optional[int] = port
 | 
					        self._port: Optional[int] = port
 | 
				
			||||||
        self._user: Optional[str] = user
 | 
					        self._user: Optional[str] = user
 | 
				
			||||||
        self._password: Optional[str] = password
 | 
					        self._password: Optional[str] = password
 | 
				
			||||||
        self._databse: Optional[str] = databse
 | 
					        self._database: Optional[str] = database
 | 
				
			||||||
        self._charset: Optional[str] = charset
 | 
					        self._charset: Optional[str] = charset
 | 
				
			||||||
        self._use_unicode: Optional[bool] = use_unicode
 | 
					        self._use_unicode: Optional[bool] = use_unicode
 | 
				
			||||||
        self._buffered: Optional[bool] = buffered
 | 
					        self._buffered: Optional[bool] = buffered
 | 
				
			||||||
        self._auth_plugin: Optional[str] = auth_plugin
 | 
					        self._auth_plugin: Optional[str] = auth_plugin
 | 
				
			||||||
 | 
					        self._ssl_disabled: Optional[bool] = ssl_disabled
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def host(self) -> Optional[str]:
 | 
					    def host(self) -> Optional[str]:
 | 
				
			||||||
@@ -48,7 +50,7 @@ class DatabaseSettings(ConfigurationModelABC):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def database(self) -> Optional[str]:
 | 
					    def database(self) -> Optional[str]:
 | 
				
			||||||
        return self._databse
 | 
					        return self._database
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def charset(self) -> Optional[str]:
 | 
					    def charset(self) -> Optional[str]:
 | 
				
			||||||
@@ -65,3 +67,7 @@ class DatabaseSettings(ConfigurationModelABC):
 | 
				
			|||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def auth_plugin(self) -> Optional[str]:
 | 
					    def auth_plugin(self) -> Optional[str]:
 | 
				
			||||||
        return self._auth_plugin
 | 
					        return self._auth_plugin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @property
 | 
				
			||||||
 | 
					    def ssl_disabled(self) -> Optional[bool]:
 | 
				
			||||||
 | 
					        return self._ssl_disabled
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.dependency_injection"
 | 
					__title__ = "cpl_core.dependency_injection"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -31,4 +31,4 @@ from .service_provider import ServiceProvider
 | 
				
			|||||||
from .service_provider_abc import ServiceProviderABC
 | 
					from .service_provider_abc import ServiceProviderABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -65,7 +65,7 @@ class ServiceCollection(ServiceCollectionABC):
 | 
				
			|||||||
        self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.singleton, service)
 | 
					        self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.singleton, service)
 | 
				
			||||||
        return self
 | 
					        return self
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def add_scoped(self, service_type: T, service: Callable = None):
 | 
					    def add_scoped(self, service_type: T, service: T = None):
 | 
				
			||||||
        self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.scoped, service)
 | 
					        self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.scoped, service)
 | 
				
			||||||
        return self
 | 
					        return self
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -12,7 +12,7 @@ from cpl_core.dependency_injection.service_descriptor import ServiceDescriptor
 | 
				
			|||||||
from cpl_core.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum
 | 
					from cpl_core.dependency_injection.service_lifetime_enum import ServiceLifetimeEnum
 | 
				
			||||||
from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC
 | 
					from cpl_core.dependency_injection.service_provider_abc import ServiceProviderABC
 | 
				
			||||||
from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC
 | 
					from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC
 | 
				
			||||||
from cpl_core.type import T
 | 
					from cpl_core.type import T, R
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ServiceProvider(ServiceProviderABC):
 | 
					class ServiceProvider(ServiceProviderABC):
 | 
				
			||||||
@@ -80,7 +80,7 @@ class ServiceProvider(ServiceProviderABC):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return implementations
 | 
					        return implementations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def build_by_signature(self, sig: Signature) -> list[T]:
 | 
					    def build_by_signature(self, sig: Signature) -> list[R]:
 | 
				
			||||||
        params = []
 | 
					        params = []
 | 
				
			||||||
        for param in sig.parameters.items():
 | 
					        for param in sig.parameters.items():
 | 
				
			||||||
            parameter = param[1]
 | 
					            parameter = param[1]
 | 
				
			||||||
@@ -138,7 +138,7 @@ class ServiceProvider(ServiceProviderABC):
 | 
				
			|||||||
        sb = ScopeBuilder(ServiceProvider(descriptors, self._configuration, self._database_context))
 | 
					        sb = ScopeBuilder(ServiceProvider(descriptors, self._configuration, self._database_context))
 | 
				
			||||||
        return sb.build()
 | 
					        return sb.build()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_service(self, service_type: T, *args, **kwargs) -> Optional[T]:
 | 
					    def get_service(self, service_type: T, *args, **kwargs) -> Optional[R]:
 | 
				
			||||||
        result = self._find_service(service_type)
 | 
					        result = self._find_service(service_type)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if result is None:
 | 
					        if result is None:
 | 
				
			||||||
@@ -157,12 +157,12 @@ class ServiceProvider(ServiceProviderABC):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        return implementation
 | 
					        return implementation
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def get_services(self, service_type: T, *args, **kwargs) -> list[Optional[T]]:
 | 
					    def get_services(self, service_type: T, *args, **kwargs) -> list[Optional[R]]:
 | 
				
			||||||
        implementations = []
 | 
					        implementations = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if typing.get_origin(service_type) != list:
 | 
					        if typing.get_origin(service_type) == list:
 | 
				
			||||||
            raise Exception(f"Invalid type {service_type}! Expected list of type")
 | 
					            raise Exception(f"Invalid type {service_type}! Expected single type not list of type")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        implementations.extend(self._get_services(typing.get_args(service_type)[0]))
 | 
					        implementations.extend(self._get_services(service_type))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return implementations
 | 
					        return implementations
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,10 +1,10 @@
 | 
				
			|||||||
import functools
 | 
					import functools
 | 
				
			||||||
from abc import abstractmethod, ABC
 | 
					from abc import abstractmethod, ABC
 | 
				
			||||||
from inspect import Signature, signature
 | 
					from inspect import Signature, signature
 | 
				
			||||||
from typing import Type, Optional
 | 
					from typing import Optional, Type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cpl_core.dependency_injection.scope_abc import ScopeABC
 | 
					from cpl_core.dependency_injection.scope_abc import ScopeABC
 | 
				
			||||||
from cpl_core.type import T
 | 
					from cpl_core.type import T, R
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class ServiceProviderABC(ABC):
 | 
					class ServiceProviderABC(ABC):
 | 
				
			||||||
@@ -21,7 +21,7 @@ class ServiceProviderABC(ABC):
 | 
				
			|||||||
        cls._provider = provider
 | 
					        cls._provider = provider
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @abstractmethod
 | 
					    @abstractmethod
 | 
				
			||||||
    def build_by_signature(self, sig: Signature) -> list[T]:
 | 
					    def build_by_signature(self, sig: Signature) -> list[R]:
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @abstractmethod
 | 
					    @abstractmethod
 | 
				
			||||||
@@ -61,7 +61,7 @@ class ServiceProviderABC(ABC):
 | 
				
			|||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @abstractmethod
 | 
					    @abstractmethod
 | 
				
			||||||
    def get_service(self, instance_type: T, *args, **kwargs) -> Optional[T]:
 | 
					    def get_service(self, instance_type: T, *args, **kwargs) -> Optional[R]:
 | 
				
			||||||
        r"""Returns instance of given type
 | 
					        r"""Returns instance of given type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Parameter
 | 
					        Parameter
 | 
				
			||||||
@@ -76,12 +76,12 @@ class ServiceProviderABC(ABC):
 | 
				
			|||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @abstractmethod
 | 
					    @abstractmethod
 | 
				
			||||||
    def get_services(self, service_type: T, *args, **kwargs) -> list[Optional[T]]:
 | 
					    def get_services(self, service_type: T, *args, **kwargs) -> list[Optional[R]]:
 | 
				
			||||||
        r"""Returns instance of given type
 | 
					        r"""Returns instance of given type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Parameter
 | 
					        Parameter
 | 
				
			||||||
        ---------
 | 
					        ---------
 | 
				
			||||||
            instance_type: :class:`cpl_core.type.T`
 | 
					            service_type: :class:`cpl_core.type.T`
 | 
				
			||||||
                The type of the searched instance
 | 
					                The type of the searched instance
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        Returns
 | 
					        Returns
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.environment"
 | 
					__title__ = "cpl_core.environment"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -26,4 +26,4 @@ from .environment_name_enum import EnvironmentNameEnum
 | 
				
			|||||||
from .application_environment import ApplicationEnvironment
 | 
					from .application_environment import ApplicationEnvironment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.logging"
 | 
					__title__ = "cpl_core.logging"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,4 +28,4 @@ from .logging_settings import LoggingSettings
 | 
				
			|||||||
from .logging_settings_name_enum import LoggingSettingsNameEnum
 | 
					from .logging_settings_name_enum import LoggingSettingsNameEnum
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.mailing"
 | 
					__title__ = "cpl_core.mailing"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -28,4 +28,4 @@ from .email_client_settings import EMailClientSettings
 | 
				
			|||||||
from .email_client_settings_name_enum import EMailClientSettingsNameEnum
 | 
					from .email_client_settings_name_enum import EMailClientSettingsNameEnum
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,15 +14,16 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.pipes"
 | 
					__title__ = "cpl_core.pipes"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
from .bool_pipe import BoolPipe
 | 
					from .bool_pipe import BoolPipe
 | 
				
			||||||
from .ip_address_pipe import IPAddressPipe
 | 
					from .ip_address_pipe import IPAddressPipe
 | 
				
			||||||
from .pipe_abc import PipeABC
 | 
					from .pipe_abc import PipeABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.time"
 | 
					__title__ = "cpl_core.time"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,4 +25,4 @@ from .time_format_settings import TimeFormatSettings
 | 
				
			|||||||
from .time_format_settings_names_enum import TimeFormatSettingsNamesEnum
 | 
					from .time_format_settings_names_enum import TimeFormatSettingsNamesEnum
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,3 +1,4 @@
 | 
				
			|||||||
from typing import TypeVar
 | 
					from typing import TypeVar
 | 
				
			||||||
 | 
					
 | 
				
			||||||
T = TypeVar("T")
 | 
					T = TypeVar("T")
 | 
				
			||||||
 | 
					R = TypeVar("R")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@ cpl-core CPL core
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
CPL core package
 | 
					CPL core package
 | 
				
			||||||
 | 
					
 | 
				
			||||||
:copyright: (c) 2020 - 2023 sh-edraft.de
 | 
					:copyright: (c) 2020 - 2024 sh-edraft.de
 | 
				
			||||||
:license: MIT, see LICENSE for more details.
 | 
					:license: MIT, see LICENSE for more details.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
"""
 | 
					"""
 | 
				
			||||||
@@ -14,8 +14,8 @@ CPL core package
 | 
				
			|||||||
__title__ = "cpl_core.utils"
 | 
					__title__ = "cpl_core.utils"
 | 
				
			||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2020 - 2024 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2024.6.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -26,4 +26,4 @@ from .string import String
 | 
				
			|||||||
from .pip import Pip
 | 
					from .pip import Pip
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2024", minor="6", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,7 @@ class JSONProcessor:
 | 
				
			|||||||
    @staticmethod
 | 
					    @staticmethod
 | 
				
			||||||
    def process(_t: type, values: dict) -> object:
 | 
					    def process(_t: type, values: dict) -> object:
 | 
				
			||||||
        args = []
 | 
					        args = []
 | 
				
			||||||
 | 
					        kwargs = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        sig = signature(_t.__init__)
 | 
					        sig = signature(_t.__init__)
 | 
				
			||||||
        for param in sig.parameters.items():
 | 
					        for param in sig.parameters.items():
 | 
				
			||||||
@@ -17,12 +18,17 @@ class JSONProcessor:
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
            name = String.first_to_upper(String.convert_to_camel_case(parameter.name))
 | 
					            name = String.first_to_upper(String.convert_to_camel_case(parameter.name))
 | 
				
			||||||
            name_first_lower = String.first_to_lower(name)
 | 
					            name_first_lower = String.first_to_lower(name)
 | 
				
			||||||
            if name in values or name_first_lower in values:
 | 
					            if name in values or name_first_lower in values or name.upper() in values:
 | 
				
			||||||
                value = ""
 | 
					                value = ""
 | 
				
			||||||
                if name in values:
 | 
					                if name in values:
 | 
				
			||||||
                    value = values[name]
 | 
					                    value = values[name]
 | 
				
			||||||
                else:
 | 
					                    values.pop(name)
 | 
				
			||||||
 | 
					                elif name_first_lower in values:
 | 
				
			||||||
                    value = values[name_first_lower]
 | 
					                    value = values[name_first_lower]
 | 
				
			||||||
 | 
					                    values.pop(name_first_lower)
 | 
				
			||||||
 | 
					                else:
 | 
				
			||||||
 | 
					                    value = values[name.upper()]
 | 
				
			||||||
 | 
					                    values.pop(name.upper())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                if isinstance(value, dict) and not issubclass(parameter.annotation, dict):
 | 
					                if isinstance(value, dict) and not issubclass(parameter.annotation, dict):
 | 
				
			||||||
                    value = JSONProcessor.process(parameter.annotation, value)
 | 
					                    value = JSONProcessor.process(parameter.annotation, value)
 | 
				
			||||||
@@ -30,12 +36,18 @@ class JSONProcessor:
 | 
				
			|||||||
                if issubclass(parameter.annotation, enum.Enum):
 | 
					                if issubclass(parameter.annotation, enum.Enum):
 | 
				
			||||||
                    value = parameter.annotation[value]
 | 
					                    value = parameter.annotation[value]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                if type(value) != parameter.annotation:
 | 
				
			||||||
 | 
					                    value = parameter.annotation(value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                args.append(value)
 | 
					                args.append(value)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            elif parameter.name == "kwargs" and parameter.annotation == dict:
 | 
				
			||||||
 | 
					                kwargs = values
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            elif parameter.default != Parameter.empty:
 | 
					            elif parameter.default != Parameter.empty:
 | 
				
			||||||
                args.append(parameter.default)
 | 
					                args.append(parameter.default)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            else:
 | 
					            else:
 | 
				
			||||||
                args.append(None)
 | 
					                args.append(None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        return _t(*args)
 | 
					        return _t(*args, **kwargs)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_discord"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0.post1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0.post1")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_discord"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0.post1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -59,4 +59,4 @@ def get_discord_collection(services: "ServiceCollectionABC") -> "DiscordCollecti
 | 
				
			|||||||
# build-ignore-end
 | 
					# build-ignore-end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0.post1")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_discord.application"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0.post1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,4 +24,4 @@ from collections import namedtuple
 | 
				
			|||||||
from .discord_bot_application_abc import DiscordBotApplicationABC
 | 
					from .discord_bot_application_abc import DiscordBotApplicationABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0.post1")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_discord.command"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0.post1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,4 +25,4 @@ from .discord_command_abc import DiscordCommandABC
 | 
				
			|||||||
from .discord_commands_meta import DiscordCogMeta
 | 
					from .discord_commands_meta import DiscordCogMeta
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0.post1")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_discord.configuration"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0.post1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,4 +24,4 @@ from collections import namedtuple
 | 
				
			|||||||
from .discord_bot_settings import DiscordBotSettings
 | 
					from .discord_bot_settings import DiscordBotSettings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0.post1")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_discord.container"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0.post1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -31,4 +31,4 @@ from .thread import Thread
 | 
				
			|||||||
from .voice_channel import VoiceChannel
 | 
					from .voice_channel import VoiceChannel
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0.post1")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@ from cpl_discord.container.container import Container
 | 
				
			|||||||
from cpl_discord.container.text_channel import TextChannel
 | 
					from cpl_discord.container.text_channel import TextChannel
 | 
				
			||||||
from cpl_discord.container.voice_channel import VoiceChannel
 | 
					from cpl_discord.container.voice_channel import VoiceChannel
 | 
				
			||||||
from cpl_discord.helper.to_containers_converter import ToContainersConverter
 | 
					from cpl_discord.helper.to_containers_converter import ToContainersConverter
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension.list import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class CategoryChannel(discord.CategoryChannel, Container):
 | 
					class CategoryChannel(discord.CategoryChannel, Container):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -7,7 +7,7 @@ from cpl_discord.container.role import Role
 | 
				
			|||||||
from cpl_discord.container.text_channel import TextChannel
 | 
					from cpl_discord.container.text_channel import TextChannel
 | 
				
			||||||
from cpl_discord.container.voice_channel import VoiceChannel
 | 
					from cpl_discord.container.voice_channel import VoiceChannel
 | 
				
			||||||
from cpl_discord.helper.to_containers_converter import ToContainersConverter
 | 
					from cpl_discord.helper.to_containers_converter import ToContainersConverter
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension.list import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Guild(Container, discord.Guild):
 | 
					class Guild(Container, discord.Guild):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,7 +4,7 @@ from cpl_discord.container.container import Container
 | 
				
			|||||||
from cpl_discord.container.member import Member
 | 
					from cpl_discord.container.member import Member
 | 
				
			||||||
from cpl_discord.container.thread import Thread
 | 
					from cpl_discord.container.thread import Thread
 | 
				
			||||||
from cpl_discord.helper.to_containers_converter import ToContainersConverter
 | 
					from cpl_discord.helper.to_containers_converter import ToContainersConverter
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension.list import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class TextChannel(discord.TextChannel, Container):
 | 
					class TextChannel(discord.TextChannel, Container):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ import discord
 | 
				
			|||||||
from cpl_discord.container.container import Container
 | 
					from cpl_discord.container.container import Container
 | 
				
			||||||
from cpl_discord.container.member import Member
 | 
					from cpl_discord.container.member import Member
 | 
				
			||||||
from cpl_discord.helper.to_containers_converter import ToContainersConverter
 | 
					from cpl_discord.helper.to_containers_converter import ToContainersConverter
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension.list import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class Thread(discord.Thread, Container):
 | 
					class Thread(discord.Thread, Container):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@ import discord
 | 
				
			|||||||
from cpl_discord.container.container import Container
 | 
					from cpl_discord.container.container import Container
 | 
				
			||||||
from cpl_discord.container.member import Member
 | 
					from cpl_discord.container.member import Member
 | 
				
			||||||
from cpl_discord.helper.to_containers_converter import ToContainersConverter
 | 
					from cpl_discord.helper.to_containers_converter import ToContainersConverter
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension.list import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class VoiceChannel(discord.VoiceChannel, Container):
 | 
					class VoiceChannel(discord.VoiceChannel, Container):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,8 @@
 | 
				
			|||||||
  "ProjectSettings": {
 | 
					  "ProjectSettings": {
 | 
				
			||||||
    "Name": "cpl-discord",
 | 
					    "Name": "cpl-discord",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "2023",
 | 
					      "Major": "2024",
 | 
				
			||||||
      "Minor": "4",
 | 
					      "Minor": "7",
 | 
				
			||||||
      "Micro": "0"
 | 
					      "Micro": "0"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "Sven Heidemann",
 | 
					    "Author": "Sven Heidemann",
 | 
				
			||||||
@@ -16,12 +16,12 @@
 | 
				
			|||||||
    "LicenseName": "MIT",
 | 
					    "LicenseName": "MIT",
 | 
				
			||||||
    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
					    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
				
			||||||
    "Dependencies": [
 | 
					    "Dependencies": [
 | 
				
			||||||
      "cpl-core>=2023.4.0",
 | 
					      "cpl-core>=2024.6.2024.07.0",
 | 
				
			||||||
      "discord.py>=2.2.2",
 | 
					      "discord.py>=2.3.2",
 | 
				
			||||||
      "cpl-query>=2023.4.0"
 | 
					      "cpl-query>=2024.6.2024.07.0"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "DevDependencies": [
 | 
					    "DevDependencies": [
 | 
				
			||||||
      "cpl-cli>=2023.4.0"
 | 
					      "cpl-cli>=2024.6.2024.07.0"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "PythonVersion": ">=3.10",
 | 
					    "PythonVersion": ">=3.10",
 | 
				
			||||||
    "PythonPath": {},
 | 
					    "PythonPath": {},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_discord.events"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0.post1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -69,4 +69,4 @@ from .on_voice_state_update_abc import OnVoiceStateUpdateABC
 | 
				
			|||||||
from .on_webhooks_update_abc import OnWebhooksUpdateABC
 | 
					from .on_webhooks_update_abc import OnWebhooksUpdateABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0.post1")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_discord.helper"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0.post1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,4 +24,4 @@ from collections import namedtuple
 | 
				
			|||||||
from .to_containers_converter import ToContainersConverter
 | 
					from .to_containers_converter import ToContainersConverter
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0.post1")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_discord.service"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0.post1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -29,4 +29,4 @@ from .discord_service import DiscordService
 | 
				
			|||||||
from .discord_service_abc import DiscordServiceABC
 | 
					from .discord_service_abc import DiscordServiceABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0.post1")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -56,14 +56,13 @@ class DiscordBotService(DiscordBotServiceABC):
 | 
				
			|||||||
        env_token = self._config.get_configuration("TOKEN")
 | 
					        env_token = self._config.get_configuration("TOKEN")
 | 
				
			||||||
        env_prefix = self._config.get_configuration("PREFIX")
 | 
					        env_prefix = self._config.get_configuration("PREFIX")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        new_settings.from_dict(
 | 
					        new_settings = DiscordBotSettings(
 | 
				
			||||||
            {
 | 
					            env_token if token is None or token == "" else token,
 | 
				
			||||||
                "Token": env_token if token is None or token == "" else token,
 | 
					            ("! " if self._is_string_invalid(env_prefix) else env_prefix)
 | 
				
			||||||
                "Prefix": ("! " if self._is_string_invalid(env_prefix) else env_prefix)
 | 
					            if self._is_string_invalid(prefix)
 | 
				
			||||||
                if self._is_string_invalid(prefix)
 | 
					            else prefix,
 | 
				
			||||||
                else prefix,
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if new_settings.token is None or new_settings.token == "":
 | 
					        if new_settings.token is None or new_settings.token == "":
 | 
				
			||||||
            raise Exception("You have to configure discord token by appsettings or environment variables")
 | 
					            raise Exception("You have to configure discord token by appsettings or environment variables")
 | 
				
			||||||
        return new_settings
 | 
					        return new_settings
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,11 +1,11 @@
 | 
				
			|||||||
from typing import Type, Optional
 | 
					from typing import Type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from cpl_core.console import Console, ForegroundColorEnum
 | 
				
			||||||
from cpl_core.dependency_injection import ServiceCollectionABC
 | 
					from cpl_core.dependency_injection import ServiceCollectionABC
 | 
				
			||||||
from cpl_discord.command.discord_command_abc import DiscordCommandABC
 | 
					from cpl_discord.command.discord_command_abc import DiscordCommandABC
 | 
				
			||||||
from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum
 | 
					from cpl_discord.discord_event_types_enum import DiscordEventTypesEnum
 | 
				
			||||||
from cpl_discord.service.command_error_handler_service import CommandErrorHandlerService
 | 
					from cpl_discord.service.command_error_handler_service import CommandErrorHandlerService
 | 
				
			||||||
from cpl_discord.service.discord_collection_abc import DiscordCollectionABC
 | 
					from cpl_discord.service.discord_collection_abc import DiscordCollectionABC
 | 
				
			||||||
from cpl_query.extension import List
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DiscordCollection(DiscordCollectionABC):
 | 
					class DiscordCollection(DiscordCollectionABC):
 | 
				
			||||||
@@ -13,26 +13,21 @@ class DiscordCollection(DiscordCollectionABC):
 | 
				
			|||||||
        DiscordCollectionABC.__init__(self)
 | 
					        DiscordCollectionABC.__init__(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._services = service_collection
 | 
					        self._services = service_collection
 | 
				
			||||||
        self._events: dict[str, List] = {}
 | 
					 | 
				
			||||||
        self._commands = List(type(DiscordCommandABC))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self.add_event(DiscordEventTypesEnum.on_command_error.value, CommandErrorHandlerService)
 | 
					        self._services.add_transient(DiscordEventTypesEnum.on_command_error.value, CommandErrorHandlerService)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def add_command(self, _t: Type[DiscordCommandABC]):
 | 
					    def add_command(self, _t: Type[DiscordCommandABC]):
 | 
				
			||||||
 | 
					        Console.set_foreground_color(ForegroundColorEnum.yellow)
 | 
				
			||||||
 | 
					        Console.write_line(
 | 
				
			||||||
 | 
					            f"{type(self).__name__}.add_command is deprecated. Instead, use ServiceCollection.add_transient directly!"
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        Console.color_reset()
 | 
				
			||||||
        self._services.add_transient(DiscordCommandABC, _t)
 | 
					        self._services.add_transient(DiscordCommandABC, _t)
 | 
				
			||||||
        self._commands.append(_t)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def get_commands(self) -> List[DiscordCommandABC]:
 | 
					 | 
				
			||||||
        return self._commands
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def add_event(self, _t_event: Type, _t: Type):
 | 
					    def add_event(self, _t_event: Type, _t: Type):
 | 
				
			||||||
 | 
					        Console.set_foreground_color(ForegroundColorEnum.yellow)
 | 
				
			||||||
 | 
					        Console.write_line(
 | 
				
			||||||
 | 
					            f"{type(self).__name__}.add_event is deprecated. Instead, use ServiceCollection.add_transient directly!"
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					        Console.color_reset()
 | 
				
			||||||
        self._services.add_transient(_t_event, _t)
 | 
					        self._services.add_transient(_t_event, _t)
 | 
				
			||||||
        if _t_event not in self._events:
 | 
					 | 
				
			||||||
            self._events[_t_event] = List(type(_t_event))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        self._events[_t_event].append(_t)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    def get_events_by_base(self, _t_event: Type) -> Optional[List]:
 | 
					 | 
				
			||||||
        if _t_event not in self._events:
 | 
					 | 
				
			||||||
            return None
 | 
					 | 
				
			||||||
        return self._events[_t_event]
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,7 +2,7 @@ from abc import ABC, abstractmethod
 | 
				
			|||||||
from typing import Type
 | 
					from typing import Type
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cpl_discord.command import DiscordCommandABC
 | 
					from cpl_discord.command import DiscordCommandABC
 | 
				
			||||||
from cpl_query.extension import List
 | 
					from cpl_query.extension.list import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DiscordCollectionABC(ABC):
 | 
					class DiscordCollectionABC(ABC):
 | 
				
			||||||
@@ -13,14 +13,6 @@ class DiscordCollectionABC(ABC):
 | 
				
			|||||||
    def add_command(self, _t: Type[DiscordCommandABC]):
 | 
					    def add_command(self, _t: Type[DiscordCommandABC]):
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @abstractmethod
 | 
					 | 
				
			||||||
    def get_commands(self) -> List[DiscordCommandABC]:
 | 
					 | 
				
			||||||
        pass
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    @abstractmethod
 | 
					    @abstractmethod
 | 
				
			||||||
    def add_event(self, _t_event: Type, _t: Type):
 | 
					    def add_event(self, _t_event: Type, _t: Type):
 | 
				
			||||||
        pass
 | 
					        pass
 | 
				
			||||||
 | 
					 | 
				
			||||||
    @abstractmethod
 | 
					 | 
				
			||||||
    def get_events_by_base(self, _t_event: Type):
 | 
					 | 
				
			||||||
        pass
 | 
					 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,11 +4,12 @@ from typing import Optional, Sequence, Union, Type
 | 
				
			|||||||
import discord
 | 
					import discord
 | 
				
			||||||
from discord import RawReactionActionEvent
 | 
					from discord import RawReactionActionEvent
 | 
				
			||||||
from discord.ext import commands
 | 
					from discord.ext import commands
 | 
				
			||||||
from discord.ext.commands import Context, CommandError, Cog, Command
 | 
					from discord.ext.commands import Context, CommandError, Cog
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from cpl_core.dependency_injection import ServiceProviderABC
 | 
					from cpl_core.dependency_injection import ServiceProviderABC
 | 
				
			||||||
from cpl_core.logging import LoggerABC
 | 
					from cpl_core.logging import LoggerABC
 | 
				
			||||||
from cpl_core.utils import String
 | 
					from cpl_core.utils import String
 | 
				
			||||||
 | 
					from cpl_discord.command import DiscordCommandABC
 | 
				
			||||||
from cpl_discord.command.discord_commands_meta import DiscordCogMeta
 | 
					from cpl_discord.command.discord_commands_meta import DiscordCogMeta
 | 
				
			||||||
from cpl_discord.events.on_bulk_message_delete_abc import OnBulkMessageDeleteABC
 | 
					from cpl_discord.events.on_bulk_message_delete_abc import OnBulkMessageDeleteABC
 | 
				
			||||||
from cpl_discord.events.on_command_abc import OnCommandABC
 | 
					from cpl_discord.events.on_command_abc import OnCommandABC
 | 
				
			||||||
@@ -66,25 +67,17 @@ from cpl_discord.events.on_typing_abc import OnTypingABC
 | 
				
			|||||||
from cpl_discord.events.on_user_update_abc import OnUserUpdateABC
 | 
					from cpl_discord.events.on_user_update_abc import OnUserUpdateABC
 | 
				
			||||||
from cpl_discord.events.on_voice_state_update_abc import OnVoiceStateUpdateABC
 | 
					from cpl_discord.events.on_voice_state_update_abc import OnVoiceStateUpdateABC
 | 
				
			||||||
from cpl_discord.events.on_webhooks_update_abc import OnWebhooksUpdateABC
 | 
					from cpl_discord.events.on_webhooks_update_abc import OnWebhooksUpdateABC
 | 
				
			||||||
from cpl_discord.service.discord_collection_abc import DiscordCollectionABC
 | 
					 | 
				
			||||||
from cpl_discord.service.discord_service_abc import DiscordServiceABC
 | 
					from cpl_discord.service.discord_service_abc import DiscordServiceABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DiscordService(DiscordServiceABC, commands.Cog, metaclass=DiscordCogMeta):
 | 
					class DiscordService(DiscordServiceABC, commands.Cog, metaclass=DiscordCogMeta):
 | 
				
			||||||
    def __init__(self, logger: LoggerABC, dc_collection: DiscordCollectionABC, services: ServiceProviderABC):
 | 
					    def __init__(self, logger: LoggerABC, services: ServiceProviderABC):
 | 
				
			||||||
        DiscordServiceABC.__init__(self)
 | 
					        DiscordServiceABC.__init__(self)
 | 
				
			||||||
        self._logger = logger
 | 
					        self._logger = logger
 | 
				
			||||||
        self._collection = dc_collection
 | 
					 | 
				
			||||||
        self._services = services
 | 
					        self._services = services
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    async def _handle_event(self, event: Type, *args, **kwargs):
 | 
					    async def _handle_event(self, event: Type, *args, **kwargs):
 | 
				
			||||||
        event_collection = self._collection.get_events_by_base(event)
 | 
					        for event_instance in self._services.get_services(event):
 | 
				
			||||||
        if event_collection is None:
 | 
					 | 
				
			||||||
            return
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        for event_type in event_collection:
 | 
					 | 
				
			||||||
            event_instance = self._services.get_service(event_type)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            func_name = event.__name__
 | 
					            func_name = event.__name__
 | 
				
			||||||
            if func_name.endswith("ABC"):
 | 
					            if func_name.endswith("ABC"):
 | 
				
			||||||
                func_name = func_name.replace("ABC", "")
 | 
					                func_name = func_name.replace("ABC", "")
 | 
				
			||||||
@@ -104,11 +97,10 @@ class DiscordService(DiscordServiceABC, commands.Cog, metaclass=DiscordCogMeta):
 | 
				
			|||||||
            self._logger.error(__name__, f"{type(self).__name__} initialization failed", e)
 | 
					            self._logger.error(__name__, f"{type(self).__name__} initialization failed", e)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
            for command_type in self._collection.get_commands():
 | 
					            for command in self._services.get_services(DiscordCommandABC):
 | 
				
			||||||
                self._logger.trace(__name__, f"Register command {command_type.__name__}")
 | 
					                self._logger.trace(__name__, f"Register command {type(command).__name__}")
 | 
				
			||||||
                command: Cog = self._services.get_service(command_type)
 | 
					 | 
				
			||||||
                if command is None:
 | 
					                if command is None:
 | 
				
			||||||
                    self._logger.warn(__name__, f"Instance of {command_type.__name__} not found")
 | 
					                    self._logger.warn(__name__, f"Instance of {type(command).__name__} not found")
 | 
				
			||||||
                    continue
 | 
					                    continue
 | 
				
			||||||
                await bot.add_cog(command)
 | 
					                await bot.add_cog(command)
 | 
				
			||||||
        except Exception as e:
 | 
					        except Exception as e:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_query"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -23,4 +23,4 @@ from collections import namedtuple
 | 
				
			|||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,10 +15,11 @@ __title__ = "cpl_query.base"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# imports:
 | 
					# imports:
 | 
				
			||||||
from .default_lambda import default_lambda
 | 
					from .default_lambda import default_lambda
 | 
				
			||||||
from .ordered_queryable import OrderedQueryable
 | 
					from .ordered_queryable import OrderedQueryable
 | 
				
			||||||
@@ -27,4 +28,4 @@ from .queryable_abc import QueryableABC
 | 
				
			|||||||
from .sequence import Sequence
 | 
					from .sequence import Sequence
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,14 +1,14 @@
 | 
				
			|||||||
from collections.abc import Callable
 | 
					from collections.abc import Callable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from cpl_query.base.queryable_abc import QueryableABC
 | 
				
			||||||
from cpl_query.base.ordered_queryable_abc import OrderedQueryableABC
 | 
					from cpl_query.base.ordered_queryable_abc import OrderedQueryableABC
 | 
				
			||||||
from cpl_query.exceptions import ArgumentNoneException, ExceptionArgument
 | 
					from cpl_query.exceptions import ArgumentNoneException, ExceptionArgument
 | 
				
			||||||
from cpl_query.iterable.iterable import Iterable
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class OrderedQueryable(OrderedQueryableABC):
 | 
					class OrderedQueryable(OrderedQueryableABC):
 | 
				
			||||||
    r"""Implementation of :class: `cpl_query.base.ordered_queryable_abc.OrderedQueryableABC`"""
 | 
					    r"""Implementation of :class: `cpl_query.base.ordered_queryable_abc.OrderedQueryableABC`"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, _t: type, _values: Iterable = None, _func: Callable = None):
 | 
					    def __init__(self, _t: type, _values: QueryableABC = None, _func: Callable = None):
 | 
				
			||||||
        OrderedQueryableABC.__init__(self, _t, _values, _func)
 | 
					        OrderedQueryableABC.__init__(self, _t, _values, _func)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def then_by(self, _func: Callable) -> OrderedQueryableABC:
 | 
					    def then_by(self, _func: Callable) -> OrderedQueryableABC:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,8 @@
 | 
				
			|||||||
  "ProjectSettings": {
 | 
					  "ProjectSettings": {
 | 
				
			||||||
    "Name": "cpl-query",
 | 
					    "Name": "cpl-query",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "2023",
 | 
					      "Major": "2024",
 | 
				
			||||||
      "Minor": "4",
 | 
					      "Minor": "7",
 | 
				
			||||||
      "Micro": "0"
 | 
					      "Micro": "0"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "Sven Heidemann",
 | 
					    "Author": "Sven Heidemann",
 | 
				
			||||||
@@ -17,7 +17,7 @@
 | 
				
			|||||||
    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
					    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
				
			||||||
    "Dependencies": [],
 | 
					    "Dependencies": [],
 | 
				
			||||||
    "DevDependencies": [],
 | 
					    "DevDependencies": [],
 | 
				
			||||||
    "PythonVersion": ">=3.11",
 | 
					    "PythonVersion": ">=3.10",
 | 
				
			||||||
    "PythonPath": {},
 | 
					    "PythonPath": {},
 | 
				
			||||||
    "Classifiers": []
 | 
					    "Classifiers": []
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_query.enumerable"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,4 +25,4 @@ from .enumerable import Enumerable
 | 
				
			|||||||
from .enumerable_abc import EnumerableABC
 | 
					from .enumerable_abc import EnumerableABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_query.extension"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -24,4 +24,4 @@ from collections import namedtuple
 | 
				
			|||||||
from .list import List
 | 
					from .list import List
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,12 +1,10 @@
 | 
				
			|||||||
from typing import Iterator
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
from cpl_query.iterable.iterable import Iterable
 | 
					from cpl_query.iterable.iterable import Iterable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class List(Iterable):
 | 
					class List(Iterable):
 | 
				
			||||||
    r"""Implementation of :class: `cpl_query.extension.iterable.Iterable`"""
 | 
					    r"""Implementation of :class: `cpl_query.extension.iterable.Iterable`"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, t: type = None, values: Iterator = None):
 | 
					    def __init__(self, t: type = None, values: Iterable = None):
 | 
				
			||||||
        Iterable.__init__(self, t, values)
 | 
					        Iterable.__init__(self, t, values)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __getitem__(self, *args):
 | 
					    def __getitem__(self, *args):
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_query.iterable"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.10.0"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -25,4 +25,4 @@ from .iterable_abc import IterableABC
 | 
				
			|||||||
from .iterable import Iterable
 | 
					from .iterable import Iterable
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="10", micro="0")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -15,7 +15,7 @@ __title__ = "cpl_translation"
 | 
				
			|||||||
__author__ = "Sven Heidemann"
 | 
					__author__ = "Sven Heidemann"
 | 
				
			||||||
__license__ = "MIT"
 | 
					__license__ = "MIT"
 | 
				
			||||||
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
					__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
 | 
				
			||||||
__version__ = "2023.4.0"
 | 
					__version__ = "2023.4.0.post1"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
from collections import namedtuple
 | 
					from collections import namedtuple
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -53,4 +53,4 @@ init()
 | 
				
			|||||||
# build-ignore-end
 | 
					# build-ignore-end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
					VersionInfo = namedtuple("VersionInfo", "major minor micro")
 | 
				
			||||||
version_info = VersionInfo(major="2023", minor="4", micro="0")
 | 
					version_info = VersionInfo(major="2023", minor="4", micro="0.post1")
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,8 @@
 | 
				
			|||||||
  "ProjectSettings": {
 | 
					  "ProjectSettings": {
 | 
				
			||||||
    "Name": "cpl-translation",
 | 
					    "Name": "cpl-translation",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "2023",
 | 
					      "Major": "2024",
 | 
				
			||||||
      "Minor": "4",
 | 
					      "Minor": "7",
 | 
				
			||||||
      "Micro": "0"
 | 
					      "Micro": "0"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "Sven Heidemann",
 | 
					    "Author": "Sven Heidemann",
 | 
				
			||||||
@@ -16,10 +16,10 @@
 | 
				
			|||||||
    "LicenseName": "MIT",
 | 
					    "LicenseName": "MIT",
 | 
				
			||||||
    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
					    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
				
			||||||
    "Dependencies": [
 | 
					    "Dependencies": [
 | 
				
			||||||
      "cpl-core>=2023.4.0"
 | 
					      "cpl-core>=2024.6.2024.07.0"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "DevDependencies": [
 | 
					    "DevDependencies": [
 | 
				
			||||||
      "cpl-cli>=2023.4.0"
 | 
					      "cpl-cli>=2024.6.2024.07.0"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "PythonVersion": ">=3.10",
 | 
					    "PythonVersion": ">=3.10",
 | 
				
			||||||
    "PythonPath": {},
 | 
					    "PythonPath": {},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -5,12 +5,12 @@ class TranslationSettings(ConfigurationModelABC):
 | 
				
			|||||||
    def __init__(
 | 
					    def __init__(
 | 
				
			||||||
        self,
 | 
					        self,
 | 
				
			||||||
        languages: list = None,
 | 
					        languages: list = None,
 | 
				
			||||||
        default_lang: str = None,
 | 
					        default_language: str = None,
 | 
				
			||||||
    ):
 | 
					    ):
 | 
				
			||||||
        ConfigurationModelABC.__init__(self)
 | 
					        ConfigurationModelABC.__init__(self)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        self._languages = [] if languages is None else languages
 | 
					        self._languages = [] if languages is None else languages
 | 
				
			||||||
        self._default_lang = default_lang
 | 
					        self._default_lang = default_language
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def languages(self) -> list[str]:
 | 
					    def languages(self) -> list[str]:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,6 @@
 | 
				
			|||||||
    "Database": "sh_cpl",
 | 
					    "Database": "sh_cpl",
 | 
				
			||||||
    "Charset": "utf8mb4",
 | 
					    "Charset": "utf8mb4",
 | 
				
			||||||
    "UseUnicode": "true",
 | 
					    "UseUnicode": "true",
 | 
				
			||||||
    "Buffered": "true",
 | 
					    "Buffered": "true"
 | 
				
			||||||
    "AuthPlugin": "mysql_native_password"
 | 
					 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
@@ -3,5 +3,5 @@ from cpl_core.database.context import DatabaseContext
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class DBContext(DatabaseContext):
 | 
					class DBContext(DatabaseContext):
 | 
				
			||||||
    def __init__(self, db_settings: DatabaseSettings):
 | 
					    def __init__(self):
 | 
				
			||||||
        DatabaseContext.__init__(self, db_settings)
 | 
					        DatabaseContext.__init__(self)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -21,7 +21,6 @@ class Startup(StartupABC):
 | 
				
			|||||||
    ) -> ConfigurationABC:
 | 
					    ) -> ConfigurationABC:
 | 
				
			||||||
        configuration.add_environment_variables("PYTHON_")
 | 
					        configuration.add_environment_variables("PYTHON_")
 | 
				
			||||||
        configuration.add_environment_variables("CPL_")
 | 
					        configuration.add_environment_variables("CPL_")
 | 
				
			||||||
        configuration.parse_console_arguments()
 | 
					 | 
				
			||||||
        configuration.add_json_file(f"appsettings.json")
 | 
					        configuration.add_json_file(f"appsettings.json")
 | 
				
			||||||
        configuration.add_json_file(f"appsettings.{configuration.environment.environment_name}.json")
 | 
					        configuration.add_json_file(f"appsettings.{configuration.environment.environment_name}.json")
 | 
				
			||||||
        configuration.add_json_file(f"appsettings.{configuration.environment.host_name}.json", optional=True)
 | 
					        configuration.add_json_file(f"appsettings.{configuration.environment.host_name}.json", optional=True)
 | 
				
			||||||
@@ -34,6 +33,7 @@ class Startup(StartupABC):
 | 
				
			|||||||
        self, services: ServiceCollectionABC, environment: ApplicationEnvironmentABC
 | 
					        self, services: ServiceCollectionABC, environment: ApplicationEnvironmentABC
 | 
				
			||||||
    ) -> ServiceProviderABC:
 | 
					    ) -> ServiceProviderABC:
 | 
				
			||||||
        # Create and connect to database
 | 
					        # Create and connect to database
 | 
				
			||||||
 | 
					        self._configuration.parse_console_arguments(services)
 | 
				
			||||||
        db_settings: DatabaseSettings = self._configuration.get_configuration(DatabaseSettings)
 | 
					        db_settings: DatabaseSettings = self._configuration.get_configuration(DatabaseSettings)
 | 
				
			||||||
        services.add_db_context(DBContext, db_settings)
 | 
					        services.add_db_context(DBContext, db_settings)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,7 @@ from cpl_core.dependency_injection import ServiceProviderABC
 | 
				
			|||||||
from cpl_core.logging import LoggerABC
 | 
					from cpl_core.logging import LoggerABC
 | 
				
			||||||
from cpl_core.mailing import EMailClientABC, EMail
 | 
					from cpl_core.mailing import EMailClientABC, EMail
 | 
				
			||||||
from cpl_core.pipes import IPAddressPipe
 | 
					from cpl_core.pipes import IPAddressPipe
 | 
				
			||||||
 | 
					from test_settings import TestSettings
 | 
				
			||||||
from test_service import TestService
 | 
					from test_service import TestService
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -57,4 +58,13 @@ class Application(ApplicationABC):
 | 
				
			|||||||
        Console.write_line("scope", scope)
 | 
					        Console.write_line("scope", scope)
 | 
				
			||||||
        with self._services.create_scope() as s:
 | 
					        with self._services.create_scope() as s:
 | 
				
			||||||
            Console.write_line("with scope", s)
 | 
					            Console.write_line("with scope", s)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        test_settings = self._configuration.get_configuration(TestSettings)
 | 
				
			||||||
 | 
					        Console.write_line(test_settings.value)
 | 
				
			||||||
 | 
					        Console.write_line("reload config")
 | 
				
			||||||
 | 
					        self._configuration.add_json_file(f"appsettings.json")
 | 
				
			||||||
 | 
					        self._configuration.add_json_file(f"appsettings.{self._environment.environment_name}.json")
 | 
				
			||||||
 | 
					        self._configuration.add_json_file(f"appsettings.{self._environment.host_name}.json", optional=True)
 | 
				
			||||||
 | 
					        test_settings1 = self._configuration.get_configuration(TestSettings)
 | 
				
			||||||
 | 
					        Console.write_line(test_settings1.value)
 | 
				
			||||||
        # self.test_send_mail()
 | 
					        # self.test_send_mail()
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -29,5 +29,9 @@
 | 
				
			|||||||
    "UseUnicode": "true",
 | 
					    "UseUnicode": "true",
 | 
				
			||||||
    "Buffered": "true",
 | 
					    "Buffered": "true",
 | 
				
			||||||
    "AuthPlugin": "mysql_native_password"
 | 
					    "AuthPlugin": "mysql_native_password"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  "TestSettings": {
 | 
				
			||||||
 | 
					    "Value": 20
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
							
								
								
									
										6
									
								
								tests/custom/general/src/general/test_settings.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								tests/custom/general/src/general/test_settings.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,6 @@
 | 
				
			|||||||
 | 
					from cpl_core.configuration import ConfigurationModelABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestSettings(ConfigurationModelABC):
 | 
				
			||||||
 | 
					    def __init__(self, value: int = None):
 | 
				
			||||||
 | 
					        self.value = value
 | 
				
			||||||
@@ -2,8 +2,8 @@
 | 
				
			|||||||
  "ProjectSettings": {
 | 
					  "ProjectSettings": {
 | 
				
			||||||
    "Name": "set-pip-urls",
 | 
					    "Name": "set-pip-urls",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "2022",
 | 
					      "Major": "2024",
 | 
				
			||||||
      "Minor": "12",
 | 
					      "Minor": "7",
 | 
				
			||||||
      "Micro": "0"
 | 
					      "Micro": "0"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "Sven Heidemann",
 | 
					    "Author": "Sven Heidemann",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,8 @@
 | 
				
			|||||||
  "ProjectSettings": {
 | 
					  "ProjectSettings": {
 | 
				
			||||||
    "Name": "set-version",
 | 
					    "Name": "set-version",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "2022",
 | 
					      "Major": "2024",
 | 
				
			||||||
      "Minor": "12",
 | 
					      "Minor": "7",
 | 
				
			||||||
      "Micro": "0"
 | 
					      "Micro": "0"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "Sven Heidemann",
 | 
					    "Author": "Sven Heidemann",
 | 
				
			||||||
@@ -16,8 +16,8 @@
 | 
				
			|||||||
    "LicenseName": "MIT",
 | 
					    "LicenseName": "MIT",
 | 
				
			||||||
    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
					    "LicenseDescription": "MIT, see LICENSE for more details.",
 | 
				
			||||||
    "Dependencies": [
 | 
					    "Dependencies": [
 | 
				
			||||||
      "cpl-core==2022.12.0",
 | 
					      "cpl-core>=2024.6.2024.07.0",
 | 
				
			||||||
      "GitPython==3.1.29"
 | 
					      "GitPython>=3.1.29"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "DevDependencies": [],
 | 
					    "DevDependencies": [],
 | 
				
			||||||
    "PythonVersion": ">=3.10.4",
 | 
					    "PythonVersion": ">=3.10.4",
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,8 @@
 | 
				
			|||||||
  "ProjectSettings": {
 | 
					  "ProjectSettings": {
 | 
				
			||||||
    "Name": "unittests",
 | 
					    "Name": "unittests",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "2023",
 | 
					      "Major": "2024",
 | 
				
			||||||
      "Minor": "2",
 | 
					      "Minor": "7",
 | 
				
			||||||
      "Micro": "0"
 | 
					      "Micro": "0"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "",
 | 
					    "Author": "",
 | 
				
			||||||
@@ -16,7 +16,7 @@
 | 
				
			|||||||
    "LicenseName": "",
 | 
					    "LicenseName": "",
 | 
				
			||||||
    "LicenseDescription": "",
 | 
					    "LicenseDescription": "",
 | 
				
			||||||
    "Dependencies": [
 | 
					    "Dependencies": [
 | 
				
			||||||
      "cpl-core>=2023.2.0"
 | 
					      "cpl-core>=2024.6.2024.07.0"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "PythonVersion": ">=3.10.4",
 | 
					    "PythonVersion": ">=3.10.4",
 | 
				
			||||||
    "PythonPath": {},
 | 
					    "PythonPath": {},
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -8,6 +8,7 @@ from unittests_cli.constants import PLAYGROUND_PATH
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
class CommandTestCase(unittest.TestCase):
 | 
					class CommandTestCase(unittest.TestCase):
 | 
				
			||||||
    _skip_tear_down = False
 | 
					    _skip_tear_down = False
 | 
				
			||||||
 | 
					    _cwd = os.getcwd()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __init__(self, method_name: str):
 | 
					    def __init__(self, method_name: str):
 | 
				
			||||||
        unittest.TestCase.__init__(self, method_name)
 | 
					        unittest.TestCase.__init__(self, method_name)
 | 
				
			||||||
@@ -32,6 +33,7 @@ class CommandTestCase(unittest.TestCase):
 | 
				
			|||||||
        if cls._skip_tear_down:
 | 
					        if cls._skip_tear_down:
 | 
				
			||||||
            return
 | 
					            return
 | 
				
			||||||
        try:
 | 
					        try:
 | 
				
			||||||
 | 
					            os.chdir(cls._cwd)
 | 
				
			||||||
            if os.path.exists(PLAYGROUND_PATH):
 | 
					            if os.path.exists(PLAYGROUND_PATH):
 | 
				
			||||||
                shutil.rmtree(os.path.abspath(os.path.join(PLAYGROUND_PATH)))
 | 
					                shutil.rmtree(os.path.abspath(os.path.join(PLAYGROUND_PATH)))
 | 
				
			||||||
        except Exception as e:
 | 
					        except Exception as e:
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -2,8 +2,8 @@
 | 
				
			|||||||
  "ProjectSettings": {
 | 
					  "ProjectSettings": {
 | 
				
			||||||
    "Name": "unittest_cli",
 | 
					    "Name": "unittest_cli",
 | 
				
			||||||
    "Version": {
 | 
					    "Version": {
 | 
				
			||||||
      "Major": "2023",
 | 
					      "Major": "2024",
 | 
				
			||||||
      "Minor": "2",
 | 
					      "Minor": "7",
 | 
				
			||||||
      "Micro": "0"
 | 
					      "Micro": "0"
 | 
				
			||||||
    },
 | 
					    },
 | 
				
			||||||
    "Author": "",
 | 
					    "Author": "",
 | 
				
			||||||
@@ -16,8 +16,8 @@
 | 
				
			|||||||
    "LicenseName": "",
 | 
					    "LicenseName": "",
 | 
				
			||||||
    "LicenseDescription": "",
 | 
					    "LicenseDescription": "",
 | 
				
			||||||
    "Dependencies": [
 | 
					    "Dependencies": [
 | 
				
			||||||
      "cpl-core>=2023.2.0",
 | 
					      "cpl-core>=2024.6.2024.07.0",
 | 
				
			||||||
      "cpl-cli>=2023.2.0"
 | 
					      "cpl-cli>=2024.6.2024.07.0"
 | 
				
			||||||
    ],
 | 
					    ],
 | 
				
			||||||
    "PythonVersion": ">=3.10.4",
 | 
					    "PythonVersion": ">=3.10.4",
 | 
				
			||||||
    "PythonPath": {},
 | 
					    "PythonPath": {},
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										0
									
								
								unittests/unittests_core/configuration/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								unittests/unittests_core/configuration/__init__.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,68 @@
 | 
				
			|||||||
 | 
					import os
 | 
				
			||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					from unittest.mock import Mock, MagicMock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from cpl_core.configuration import Configuration, ArgumentTypeEnum
 | 
				
			||||||
 | 
					from cpl_core.database import DatabaseSettings
 | 
				
			||||||
 | 
					from cpl_core.dependency_injection import ServiceProvider, ServiceCollection
 | 
				
			||||||
 | 
					from cpl_core.mailing import EMailClientSettings
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ConfigurationTestCase(unittest.TestCase):
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self._config = Configuration()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_env_vars(self):
 | 
				
			||||||
 | 
					        os.environ["CPLT_TESTVAR"] = "Hello World"
 | 
				
			||||||
 | 
					        os.environ["CPL_NOT_EXISTING"] = "Hello World"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.add_environment_variables("CPLT_")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(self._config.get_configuration("TESTVAR"), "Hello World")
 | 
				
			||||||
 | 
					        self.assertEqual(self._config.get_configuration("TESTVAR"), "Hello World")
 | 
				
			||||||
 | 
					        self.assertEqual(self._config.get_configuration("NOT_EXISTING"), None)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_add_json_file(self):
 | 
				
			||||||
 | 
					        self._config.add_json_file("unittests_core/configuration/test-settings.json")
 | 
				
			||||||
 | 
					        db = self._config.get_configuration(DatabaseSettings)
 | 
				
			||||||
 | 
					        self.assertIsNotNone(db)
 | 
				
			||||||
 | 
					        self.assertEqual("localhost", db.host)
 | 
				
			||||||
 | 
					        self.assertEqual("local", db.user)
 | 
				
			||||||
 | 
					        self.assertEqual("bG9jYWw=", db.password)
 | 
				
			||||||
 | 
					        self.assertEqual("local", db.database)
 | 
				
			||||||
 | 
					        self.assertEqual(int, type(db.port))
 | 
				
			||||||
 | 
					        self.assertEqual(3306, db.port)
 | 
				
			||||||
 | 
					        self.assertEqual("utf8mb4", db.charset)
 | 
				
			||||||
 | 
					        self.assertTrue(db.use_unicode)
 | 
				
			||||||
 | 
					        self.assertTrue(db.buffered)
 | 
				
			||||||
 | 
					        self.assertEqual("mysql_native_password", db.auth_plugin)
 | 
				
			||||||
 | 
					        self.assertIsNone(self._config.get_configuration(EMailClientSettings))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_add_config(self):
 | 
				
			||||||
 | 
					        self.assertIsNone(self._config.get_configuration("Test"))
 | 
				
			||||||
 | 
					        self._config.add_configuration("Test", "Hello World")
 | 
				
			||||||
 | 
					        self.assertIsNotNone(self._config.get_configuration("Test"))
 | 
				
			||||||
 | 
					        self.assertEqual("Hello World", self._config.get_configuration("Test"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_console_argument(self):
 | 
				
			||||||
 | 
					        sc = ServiceCollection(self._config)
 | 
				
			||||||
 | 
					        self.assertEqual([], sys.argv[1:])
 | 
				
			||||||
 | 
					        sys.argv.append("flag")
 | 
				
			||||||
 | 
					        sys.argv.append("exec")
 | 
				
			||||||
 | 
					        sys.argv.append("var=test")
 | 
				
			||||||
 | 
					        self.assertNotEqual([], sys.argv[1:])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.create_console_argument(ArgumentTypeEnum.Flag, "", "flag", [])
 | 
				
			||||||
 | 
					        mocked_exec = Mock()
 | 
				
			||||||
 | 
					        mocked_exec.run = MagicMock()
 | 
				
			||||||
 | 
					        sc.add_transient(mocked_exec)
 | 
				
			||||||
 | 
					        self._config.create_console_argument(ArgumentTypeEnum.Executable, "", "exec", [], Mock)
 | 
				
			||||||
 | 
					        self._config.create_console_argument(ArgumentTypeEnum.Variable, "", "var", [], "=")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsNone(self._config.get_configuration("var"))
 | 
				
			||||||
 | 
					        self._config.parse_console_arguments(sc.build_service_provider())
 | 
				
			||||||
 | 
					        mocked_exec.run.assert_called()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual("test", self._config.get_configuration("var"))
 | 
				
			||||||
 | 
					        self.assertIn("flag", self._config.additional_arguments)
 | 
				
			||||||
@@ -0,0 +1,75 @@
 | 
				
			|||||||
 | 
					import sys
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					from unittest.mock import Mock, MagicMock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from cpl_core.configuration import Configuration, ArgumentTypeEnum
 | 
				
			||||||
 | 
					from cpl_core.dependency_injection import ServiceCollection
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ConsoleArgumentsTestCase(unittest.TestCase):
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self._config = Configuration()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.create_console_argument(ArgumentTypeEnum.Flag, "", "flag", [])
 | 
				
			||||||
 | 
					        self._config.create_console_argument(ArgumentTypeEnum.Variable, "", "var", [], "=")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.create_console_argument(ArgumentTypeEnum.Executable, "", "exec", [], Mock).add_console_argument(
 | 
				
			||||||
 | 
					            ArgumentTypeEnum.Flag, "--", "dev", ["d", "D"]
 | 
				
			||||||
 | 
					        ).add_console_argument(ArgumentTypeEnum.Flag, "--", "virtual", ["v", "V"]).add_console_argument(
 | 
				
			||||||
 | 
					            ArgumentTypeEnum.Variable, "", "var1", [], "="
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.for_each_argument(
 | 
				
			||||||
 | 
					            lambda a: a.add_console_argument(ArgumentTypeEnum.Flag, "--", "help", ["h", "H"])
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._sc = ServiceCollection(self._config)
 | 
				
			||||||
 | 
					        self._mocked_exec = Mock()
 | 
				
			||||||
 | 
					        self._mocked_exec.run = MagicMock()
 | 
				
			||||||
 | 
					        self._sc.add_transient(self._mocked_exec)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_flag(self):
 | 
				
			||||||
 | 
					        sys.argv.append("flag")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.parse_console_arguments(self._sc.build_service_provider())
 | 
				
			||||||
 | 
					        self.assertIn("flag", self._config.additional_arguments)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_var(self):
 | 
				
			||||||
 | 
					        sys.argv.append("var=1")
 | 
				
			||||||
 | 
					        sys.argv.append("var2=1")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.parse_console_arguments(self._sc.build_service_provider())
 | 
				
			||||||
 | 
					        self.assertEqual("1", self._config.get_configuration("var"))
 | 
				
			||||||
 | 
					        self.assertIsNone(self._config.get_configuration("var1"))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_exec(self):
 | 
				
			||||||
 | 
					        sys.argv.append("exec")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.parse_console_arguments(self._sc.build_service_provider())
 | 
				
			||||||
 | 
					        self._mocked_exec.run.assert_called()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_exec_with_one_flag(self):
 | 
				
			||||||
 | 
					        sys.argv.append("exec")
 | 
				
			||||||
 | 
					        sys.argv.append("--dev")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.parse_console_arguments(self._sc.build_service_provider())
 | 
				
			||||||
 | 
					        self._mocked_exec.run.assert_called()
 | 
				
			||||||
 | 
					        self.assertIn("dev", self._config.additional_arguments)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_exec_with_one_flag_alias(self):
 | 
				
			||||||
 | 
					        sys.argv.append("exec")
 | 
				
			||||||
 | 
					        sys.argv.append("--d")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.parse_console_arguments(self._sc.build_service_provider())
 | 
				
			||||||
 | 
					        self._mocked_exec.run.assert_called()
 | 
				
			||||||
 | 
					        self.assertIn("dev", self._config.additional_arguments)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_exec_with_two_flags(self):
 | 
				
			||||||
 | 
					        sys.argv.append("exec")
 | 
				
			||||||
 | 
					        sys.argv.append("--dev")
 | 
				
			||||||
 | 
					        sys.argv.append("--virtual")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.parse_console_arguments(self._sc.build_service_provider())
 | 
				
			||||||
 | 
					        self._mocked_exec.run.assert_called()
 | 
				
			||||||
 | 
					        self.assertIn("dev", self._config.additional_arguments)
 | 
				
			||||||
 | 
					        self.assertIn("virtual", self._config.additional_arguments)
 | 
				
			||||||
@@ -0,0 +1,52 @@
 | 
				
			|||||||
 | 
					import os
 | 
				
			||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					from _socket import gethostname
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from cpl_core.configuration import Configuration
 | 
				
			||||||
 | 
					from cpl_core.environment import ApplicationEnvironment, ApplicationEnvironmentABC
 | 
				
			||||||
 | 
					from cpl_core.environment import application_environment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class EnvironmentTestCase(unittest.TestCase):
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self._config = Configuration()
 | 
				
			||||||
 | 
					        self._env = self._config.environment
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_app_env_created(self):
 | 
				
			||||||
 | 
					        self.assertTrue(isinstance(self._env, ApplicationEnvironment))
 | 
				
			||||||
 | 
					        self.assertTrue(issubclass(type(self._env), ApplicationEnvironmentABC))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_app_env_values_correct_when_default(self):
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.environment_name, "production")
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.application_name, "")
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.customer, "")
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.host_name, gethostname())
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.working_directory, os.getcwd())
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            self._env.runtime_directory,
 | 
				
			||||||
 | 
					            os.path.dirname(os.path.dirname(os.path.abspath(application_environment.__file__))),
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_app_env_values_correct_when_read_from_env(self):
 | 
				
			||||||
 | 
					        os.environ["CPLT_ENVIRONMENT"] = "development"
 | 
				
			||||||
 | 
					        os.environ["CPLT_NAME"] = "Core Tests"
 | 
				
			||||||
 | 
					        os.environ["CPLT_CUSTOMER"] = "sh-edraft.de"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self._config.add_environment_variables("CPLT_")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.environment_name, "development")
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.application_name, "Core Tests")
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.customer, "sh-edraft.de")
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.host_name, gethostname())
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.working_directory, os.getcwd())
 | 
				
			||||||
 | 
					        self.assertEqual(
 | 
				
			||||||
 | 
					            self._env.runtime_directory,
 | 
				
			||||||
 | 
					            os.path.dirname(os.path.dirname(os.path.abspath(application_environment.__file__))),
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_app_env_set_dirs(self):
 | 
				
			||||||
 | 
					        new_cwd = os.path.join(os.getcwd(), "../")
 | 
				
			||||||
 | 
					        self._env.set_working_directory(new_cwd)
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.working_directory, new_cwd)
 | 
				
			||||||
 | 
					        self._env.set_runtime_directory(new_cwd)
 | 
				
			||||||
 | 
					        self.assertEqual(self._env.runtime_directory, new_cwd)
 | 
				
			||||||
							
								
								
									
										25
									
								
								unittests/unittests_core/configuration/test-settings.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								unittests/unittests_core/configuration/test-settings.json
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,25 @@
 | 
				
			|||||||
 | 
					{
 | 
				
			||||||
 | 
					  "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/$date_now/",
 | 
				
			||||||
 | 
					    "Filename": "bot.log",
 | 
				
			||||||
 | 
					    "ConsoleLogLevel": "TRACE",
 | 
				
			||||||
 | 
					    "FileLogLevel": "TRACE"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					  "DatabaseSettings": {
 | 
				
			||||||
 | 
					    "Host": "localhost",
 | 
				
			||||||
 | 
					    "User": "local",
 | 
				
			||||||
 | 
					    "Password": "bG9jYWw=",
 | 
				
			||||||
 | 
					    "Database": "local",
 | 
				
			||||||
 | 
					    "Port": "3306",
 | 
				
			||||||
 | 
					    "Charset": "utf8mb4",
 | 
				
			||||||
 | 
					    "UseUnicode": "true",
 | 
				
			||||||
 | 
					    "Buffered": "true",
 | 
				
			||||||
 | 
					    "AuthPlugin": "mysql_native_password"
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,5 +1,10 @@
 | 
				
			|||||||
import unittest
 | 
					import unittest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from unittests_core.configuration.console_arguments_test_case import ConsoleArgumentsTestCase
 | 
				
			||||||
 | 
					from unittests_core.configuration.configuration_test_case import ConfigurationTestCase
 | 
				
			||||||
 | 
					from unittests_core.configuration.environment_test_case import EnvironmentTestCase
 | 
				
			||||||
 | 
					from unittests_core.di.service_collection_test_case import ServiceCollectionTestCase
 | 
				
			||||||
 | 
					from unittests_core.di.service_provider_test_case import ServiceProviderTestCase
 | 
				
			||||||
from unittests_core.pipes.bool_pipe_test_case import BoolPipeTestCase
 | 
					from unittests_core.pipes.bool_pipe_test_case import BoolPipeTestCase
 | 
				
			||||||
from unittests_core.pipes.ip_address_pipe_test_case import IPAddressTestCase
 | 
					from unittests_core.pipes.ip_address_pipe_test_case import IPAddressTestCase
 | 
				
			||||||
from unittests_core.pipes.version_pipe_test_case import VersionPipeTestCase
 | 
					from unittests_core.pipes.version_pipe_test_case import VersionPipeTestCase
 | 
				
			||||||
@@ -14,6 +19,13 @@ class CoreTestSuite(unittest.TestSuite):
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        loader = unittest.TestLoader()
 | 
					        loader = unittest.TestLoader()
 | 
				
			||||||
        tests = [
 | 
					        tests = [
 | 
				
			||||||
 | 
					            # config
 | 
				
			||||||
 | 
					            ConfigurationTestCase,
 | 
				
			||||||
 | 
					            ConsoleArgumentsTestCase,
 | 
				
			||||||
 | 
					            EnvironmentTestCase,
 | 
				
			||||||
 | 
					            # di
 | 
				
			||||||
 | 
					            ServiceCollectionTestCase,
 | 
				
			||||||
 | 
					            ServiceProviderTestCase,
 | 
				
			||||||
            # pipes
 | 
					            # pipes
 | 
				
			||||||
            BoolPipeTestCase,
 | 
					            BoolPipeTestCase,
 | 
				
			||||||
            IPAddressTestCase,
 | 
					            IPAddressTestCase,
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										0
									
								
								unittests/unittests_core/di/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								unittests/unittests_core/di/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										56
									
								
								unittests/unittests_core/di/service_collection_test_case.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								unittests/unittests_core/di/service_collection_test_case.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,56 @@
 | 
				
			|||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					from unittest.mock import Mock
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from cpl_core.configuration import Configuration
 | 
				
			||||||
 | 
					from cpl_core.dependency_injection import ServiceCollection, ServiceLifetimeEnum, ServiceProviderABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ServiceCollectionTestCase(unittest.TestCase):
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self._sc = ServiceCollection(Configuration())
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_add_singleton_type(self):
 | 
				
			||||||
 | 
					        self._sc.add_singleton(Mock)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        service = self._sc._service_descriptors[0]
 | 
				
			||||||
 | 
					        self.assertEqual(ServiceLifetimeEnum.singleton, service.lifetime)
 | 
				
			||||||
 | 
					        self.assertEqual(Mock, service.service_type)
 | 
				
			||||||
 | 
					        self.assertEqual(Mock, service.base_type)
 | 
				
			||||||
 | 
					        self.assertIsNone(service.implementation)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_add_singleton_instance(self):
 | 
				
			||||||
 | 
					        mock = Mock()
 | 
				
			||||||
 | 
					        self._sc.add_singleton(mock)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        service = self._sc._service_descriptors[0]
 | 
				
			||||||
 | 
					        self.assertEqual(ServiceLifetimeEnum.singleton, service.lifetime)
 | 
				
			||||||
 | 
					        self.assertEqual(type(mock), service.service_type)
 | 
				
			||||||
 | 
					        self.assertEqual(type(mock), service.base_type)
 | 
				
			||||||
 | 
					        self.assertIsNotNone(service.implementation)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_add_transient_type(self):
 | 
				
			||||||
 | 
					        self._sc.add_transient(Mock)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        service = self._sc._service_descriptors[0]
 | 
				
			||||||
 | 
					        self.assertEqual(ServiceLifetimeEnum.transient, service.lifetime)
 | 
				
			||||||
 | 
					        self.assertEqual(Mock, service.service_type)
 | 
				
			||||||
 | 
					        self.assertEqual(Mock, service.base_type)
 | 
				
			||||||
 | 
					        self.assertIsNone(service.implementation)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_add_scoped_type(self):
 | 
				
			||||||
 | 
					        self._sc.add_scoped(Mock)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        service = self._sc._service_descriptors[0]
 | 
				
			||||||
 | 
					        self.assertEqual(ServiceLifetimeEnum.scoped, service.lifetime)
 | 
				
			||||||
 | 
					        self.assertEqual(Mock, service.service_type)
 | 
				
			||||||
 | 
					        self.assertEqual(Mock, service.base_type)
 | 
				
			||||||
 | 
					        self.assertIsNone(service.implementation)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_build_service_provider(self):
 | 
				
			||||||
 | 
					        self._sc.add_singleton(Mock)
 | 
				
			||||||
 | 
					        service = self._sc._service_descriptors[0]
 | 
				
			||||||
 | 
					        self.assertIsNone(service.implementation)
 | 
				
			||||||
 | 
					        sp = self._sc.build_service_provider()
 | 
				
			||||||
 | 
					        self.assertTrue(isinstance(sp, ServiceProviderABC))
 | 
				
			||||||
 | 
					        self.assertTrue(isinstance(sp.get_service(Mock), Mock))
 | 
				
			||||||
 | 
					        self.assertIsNotNone(service.implementation)
 | 
				
			||||||
							
								
								
									
										98
									
								
								unittests/unittests_core/di/service_provider_test_case.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										98
									
								
								unittests/unittests_core/di/service_provider_test_case.py
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,98 @@
 | 
				
			|||||||
 | 
					import unittest
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					from cpl_core.configuration import Configuration
 | 
				
			||||||
 | 
					from cpl_core.dependency_injection import ServiceCollection, ServiceProviderABC
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ServiceCount:
 | 
				
			||||||
 | 
					    def __init__(self):
 | 
				
			||||||
 | 
					        self.count = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TestService:
 | 
				
			||||||
 | 
					    def __init__(self, sp: ServiceProviderABC, count: ServiceCount):
 | 
				
			||||||
 | 
					        count.count += 1
 | 
				
			||||||
 | 
					        self.sp = sp
 | 
				
			||||||
 | 
					        self.id = count.count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DifferentService:
 | 
				
			||||||
 | 
					    def __init__(self, sp: ServiceProviderABC, count: ServiceCount):
 | 
				
			||||||
 | 
					        count.count += 1
 | 
				
			||||||
 | 
					        self.sp = sp
 | 
				
			||||||
 | 
					        self.id = count.count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class MoreDifferentService:
 | 
				
			||||||
 | 
					    def __init__(self, sp: ServiceProviderABC, count: ServiceCount):
 | 
				
			||||||
 | 
					        count.count += 1
 | 
				
			||||||
 | 
					        self.sp = sp
 | 
				
			||||||
 | 
					        self.id = count.count
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class ServiceProviderTestCase(unittest.TestCase):
 | 
				
			||||||
 | 
					    def setUp(self):
 | 
				
			||||||
 | 
					        self._services = (
 | 
				
			||||||
 | 
					            ServiceCollection(Configuration())
 | 
				
			||||||
 | 
					            .add_singleton(ServiceCount)
 | 
				
			||||||
 | 
					            .add_singleton(TestService)
 | 
				
			||||||
 | 
					            .add_singleton(TestService)
 | 
				
			||||||
 | 
					            .add_transient(DifferentService)
 | 
				
			||||||
 | 
					            .add_scoped(MoreDifferentService)
 | 
				
			||||||
 | 
					            .build_service_provider()
 | 
				
			||||||
 | 
					        )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        count = self._services.get_service(ServiceCount)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_singleton(self):
 | 
				
			||||||
 | 
					        x = self._services.get_service(TestService)
 | 
				
			||||||
 | 
					        self.assertIsNotNone(x)
 | 
				
			||||||
 | 
					        self.assertEqual(1, x.id)
 | 
				
			||||||
 | 
					        self.assertEqual(x, self._services.get_service(TestService))
 | 
				
			||||||
 | 
					        self.assertEqual(x, self._services.get_service(TestService))
 | 
				
			||||||
 | 
					        self.assertEqual(x, self._services.get_service(TestService))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_singletons(self):
 | 
				
			||||||
 | 
					        x = self._services.get_services(list[TestService])
 | 
				
			||||||
 | 
					        self.assertEqual(2, len(x))
 | 
				
			||||||
 | 
					        self.assertEqual(1, x[0].id)
 | 
				
			||||||
 | 
					        self.assertEqual(2, x[1].id)
 | 
				
			||||||
 | 
					        self.assertNotEqual(x[0], x[1])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_get_transient(self):
 | 
				
			||||||
 | 
					        x = self._services.get_service(DifferentService)
 | 
				
			||||||
 | 
					        self.assertIsNotNone(x)
 | 
				
			||||||
 | 
					        self.assertEqual(1, x.id)
 | 
				
			||||||
 | 
					        self.assertNotEqual(x, self._services.get_service(DifferentService))
 | 
				
			||||||
 | 
					        self.assertNotEqual(x, self._services.get_service(DifferentService))
 | 
				
			||||||
 | 
					        self.assertNotEqual(x, self._services.get_service(DifferentService))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    def test_scoped(self):
 | 
				
			||||||
 | 
					        scoped_id = 0
 | 
				
			||||||
 | 
					        singleton = self._services.get_service(TestService)
 | 
				
			||||||
 | 
					        transient = self._services.get_service(DifferentService)
 | 
				
			||||||
 | 
					        with self._services.create_scope() as scope:
 | 
				
			||||||
 | 
					            sp: ServiceProviderABC = scope.service_provider
 | 
				
			||||||
 | 
					            self.assertNotEqual(sp, self._services)
 | 
				
			||||||
 | 
					            y = sp.get_service(DifferentService)
 | 
				
			||||||
 | 
					            self.assertIsNotNone(y)
 | 
				
			||||||
 | 
					            self.assertEqual(3, y.id)
 | 
				
			||||||
 | 
					            x = sp.get_service(MoreDifferentService)
 | 
				
			||||||
 | 
					            self.assertIsNotNone(x)
 | 
				
			||||||
 | 
					            self.assertEqual(4, x.id)
 | 
				
			||||||
 | 
					            scoped_id = 4
 | 
				
			||||||
 | 
					            self.assertEqual(singleton.sp, self._services)
 | 
				
			||||||
 | 
					            self.assertEqual(transient.sp, self._services)
 | 
				
			||||||
 | 
					            self.assertEqual(x.sp, sp)
 | 
				
			||||||
 | 
					            self.assertNotEqual(x.sp, singleton.sp)
 | 
				
			||||||
 | 
					            transient_in_scope = sp.get_service(DifferentService)
 | 
				
			||||||
 | 
					            self.assertEqual(transient_in_scope.sp, sp)
 | 
				
			||||||
 | 
					            self.assertNotEqual(transient.sp, transient_in_scope.sp)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            self.assertEqual(x.id, sp.get_service(MoreDifferentService).id)
 | 
				
			||||||
 | 
					            self.assertEqual(x.id, sp.get_service(MoreDifferentService).id)
 | 
				
			||||||
 | 
					            self.assertNotEqual(x, self._services.get_service(MoreDifferentService))
 | 
				
			||||||
 | 
					            self.assertEqual(singleton, self._services.get_service(TestService))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        self.assertIsNone(scope.service_provider)
 | 
				
			||||||
 | 
					        self.assertNotEqual(scoped_id, self._services.get_service(MoreDifferentService).id)
 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
		Reference in New Issue
	
	Block a user