35 Commits

Author SHA1 Message Date
ed2377c288 Updated discord.py 2023-06-13 16:22:54 +02:00
b819eb439c Fixed translaiton settings 2023-06-13 16:14:38 +02:00
b3ed7101fc Fixed update command 2023-06-13 15:56:46 +02:00
a3504af376 Fixed update command 2023-06-13 15:47:44 +02:00
81c2f1cba9 Fixed discord service config loading 2023-06-13 15:38:04 +02:00
bea5b22251 Fixed db settings default port 2023-06-13 15:08:04 +02:00
e04d0beb68 Fixed circular import from query package 2023-06-13 13:27:37 +02:00
08ba097aaa Merge pull request '#173' (#174) from #173 into master
Reviewed-on: #174
2023-06-12 20:48:34 +02:00
ea968d94e4 Build app 2023-06-12 20:47:14 +02:00
8e12c72b07 Fixed cpl update dev deps bug #170 2023-06-12 20:47:13 +02:00
8dee4d8f70 Fixed config type 2023-04-15 11:47:31 +02:00
315b8e631a Merge pull request '2023.4' (#168) from 2023.4 into master
Reviewed-on: #168
2023-04-12 13:57:50 +02:00
cbb1860f25 Fixed internal settings 2023-04-12 13:47:38 +02:00
9839bcaa14 Removed unused imports 2023-04-12 13:34:43 +02:00
da54337221 Fixed ProjectSettings 2023-04-12 13:31:59 +02:00
a6a1e764d1 Updated deps 2023-04-12 13:30:13 +02:00
eb6aa08c10 Updated deps 2023-04-12 12:57:58 +02:00
14a190a67f Merge pull request '#166' (#167) from #166 into 2023.4
Reviewed-on: #167
Closes #166
2023-04-11 14:49:21 +02:00
cf5ae89884 Fixed start test 2023-04-11 14:26:17 +02:00
558dfb8ced Deactivated test output 2023-04-11 12:51:49 +02:00
2ec8fc22b3 Improved generic type hints 2023-04-11 12:50:05 +02:00
c94700495b Merge pull request '#157' (#165) from #157 into 2023.4
Reviewed-on: #165
Closes #157
2023-04-11 11:48:48 +02:00
69a3bc5e31 Fixed cwd handling 2023-04-10 15:10:39 +02:00
d189f49418 Improved service_provider_tests 2023-04-10 14:53:59 +02:00
60fb416b67 Added service_provider_tests 2023-04-10 14:47:25 +02:00
792429d19d Added console argument tests 2023-04-10 13:35:11 +02:00
106975015e Improved config tests 2023-04-09 12:51:57 +02:00
1117735f2e Added configuration tests & improved json parsing by converting into target types 2023-04-09 12:31:31 +02:00
0378f8944a Added AppEnv tests 2023-04-09 12:05:05 +02:00
75fde0f444 Added pipe tests 2023-04-07 14:52:17 +02:00
04f610c799 Removed obsolete pipes 2023-04-07 14:41:11 +02:00
3178b59147 Added JSONProcessorTestCase 2023-04-07 14:40:03 +02:00
9c7008e179 Improved core test suite 2023-04-07 14:08:06 +02:00
7ff7dbc56b Added core test suite 2023-04-07 14:04:39 +02:00
823d524a81 Added core.utils.string tests & fixed some functions 2023-04-07 14:03:45 +02:00
102 changed files with 801 additions and 294 deletions

View File

@@ -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

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="2023", minor="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -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):

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="2023", minor="4", micro="0.post3")

View File

@@ -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),

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="2023", minor="4", micro="0.post3")

View File

@@ -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)

View File

@@ -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:

View File

@@ -4,7 +4,7 @@
"Version": { "Version": {
"Major": "2023", "Major": "2023",
"Minor": "4", "Minor": "4",
"Micro": "0" "Micro": "0.post3"
}, },
"Author": "Sven Heidemann", "Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de", "AuthorEmail": "sven.heidemann@sh-edraft.de",

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="2023", minor="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post3"
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="4", micro="0.post3")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="4", micro="0.post2")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -294,7 +294,7 @@ class Configuration(ConfigurationABC):
self.add_configuration(sub, configuration) self.add_configuration(sub, configuration)
def add_configuration(self, key_type: T, value: any): def add_configuration(self, key_type: Type[T], value: any):
self._config[key_type] = value self._config[key_type] = value
def create_console_argument( def create_console_argument(
@@ -314,7 +314,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[T]:
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

View File

@@ -77,7 +77,7 @@ class ConfigurationABC(ABC):
pass pass
@abstractmethod @abstractmethod
def add_configuration(self, key_type: T, value: any): def add_configuration(self, key_type: Type[T], value: any):
r"""Add configuration object r"""Add configuration object
Parameter: Parameter:

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -4,7 +4,7 @@
"Version": { "Version": {
"Major": "2023", "Major": "2023",
"Minor": "4", "Minor": "4",
"Micro": "0" "Micro": "0.post2"
}, },
"Author": "Sven Heidemann", "Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de", "AuthorEmail": "sven.heidemann@sh-edraft.de",
@@ -16,17 +16,17 @@
"LicenseName": "MIT", "LicenseName": "MIT",
"LicenseDescription": "MIT, see LICENSE for more details.", "LicenseDescription": "MIT, see LICENSE for more details.",
"Dependencies": [ "Dependencies": [
"art==5.9", "art>=5.9",
"colorama==0.4.6", "colorama>=0.4.6",
"mysql-connector==2.2.9", "mysql-connector>=2.2.9",
"psutil==5.9.4", "psutil>=5.9.4",
"packaging==23.0", "packaging>=23.0",
"pynput==1.7.6", "pynput>=1.7.6",
"setuptools==67.6.1", "setuptools>=67.6.1",
"tabulate==0.9.0", "tabulate>=0.9.0",
"termcolor==2.2.0", "termcolor>=2.2.0",
"watchdog==3.0.0", "watchdog>=3.0.0",
"wheel==0.40.0" "wheel>=0.40.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.10",
"PythonPath": {}, "PythonPath": {},
"Classifiers": [] "Classifiers": []
}, },

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -9,14 +9,14 @@ 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 = None,
use_unicode: bool = None, use_unicode: bool = None,
buffered: bool = None, buffered: bool = None,
auth_plugin: bool = None, auth_plugin: str = None,
): ):
ConfigurationModelABC.__init__(self) ConfigurationModelABC.__init__(self)
@@ -24,7 +24,7 @@ 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._databse: 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

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -61,15 +61,15 @@ class ServiceCollection(ServiceCollectionABC):
self.add_transient(PipeABC, pipe) self.add_transient(PipeABC, pipe)
return self return self
def add_singleton(self, service_type: T, service: T = None): def add_singleton(self, service_type: Type[T], service: T = None):
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: Type[T], service: Callable = 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
def add_transient(self, service_type: T, service: T = None): def add_transient(self, service_type: Type[T], service: T = None):
self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.transient, service) self._add_descriptor_by_lifetime(service_type, ServiceLifetimeEnum.transient, service)
return self return self

View File

@@ -46,7 +46,7 @@ class ServiceCollectionABC(ABC):
pass pass
@abstractmethod @abstractmethod
def add_transient(self, service_type: T, service: T = None) -> "ServiceCollectionABC": def add_transient(self, service_type: Type[T], service: T = None) -> "ServiceCollectionABC":
r"""Adds a service with transient lifetime r"""Adds a service with transient lifetime
Parameter: Parameter:
@@ -61,7 +61,7 @@ class ServiceCollectionABC(ABC):
pass pass
@abstractmethod @abstractmethod
def add_scoped(self, service_type: T, service: T = None) -> "ServiceCollectionABC": def add_scoped(self, service_type: Type[T], service: T = None) -> "ServiceCollectionABC":
r"""Adds a service with scoped lifetime r"""Adds a service with scoped lifetime
Parameter: Parameter:
@@ -76,7 +76,7 @@ class ServiceCollectionABC(ABC):
pass pass
@abstractmethod @abstractmethod
def add_singleton(self, service_type: T, service: T = None) -> "ServiceCollectionABC": def add_singleton(self, service_type: Type[T], service: T = None) -> "ServiceCollectionABC":
r"""Adds a service with singleton lifetime r"""Adds a service with singleton lifetime
Parameter: Parameter:

View File

@@ -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: typing.Type[T], *args, **kwargs) -> Optional[T]:
result = self._find_service(service_type) result = self._find_service(service_type)
if result is None: if result is None:
@@ -157,7 +157,7 @@ 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: typing.Type[T], *args, **kwargs) -> list[Optional[T]]:
implementations = [] implementations = []
if typing.get_origin(service_type) != list: if typing.get_origin(service_type) != list:

View File

@@ -1,7 +1,7 @@
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
@@ -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: Type[T], *args, **kwargs) -> Optional[T]:
r"""Returns instance of given type r"""Returns instance of given type
Parameter Parameter
@@ -76,7 +76,7 @@ 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: Type[T], *args, **kwargs) -> list[Optional[T]]:
r"""Returns instance of given type r"""Returns instance of given type
Parameter Parameter

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -15,19 +15,15 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
from collections import namedtuple from collections import namedtuple
# imports: # imports:
from .bool_pipe import BoolPipe from .bool_pipe import BoolPipe
from .first_char_to_lower_pipe import FirstCharToLowerPipe
from .first_to_upper_pipe import FirstToUpperPipe
from .ip_address_pipe import IPAddressPipe from .ip_address_pipe import IPAddressPipe
from .pipe_abc import PipeABC from .pipe_abc import PipeABC
from .to_camel_case_pipe import ToCamelCasePipe
from .to_snake_case_pipe import ToSnakeCasePipe
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.post2")

View File

@@ -1,18 +0,0 @@
from cpl_core.pipes.pipe_abc import PipeABC
class FirstCharToLowerPipe(PipeABC):
def __init__(self):
pass
def transform(self, value: any, *args):
r"""Converts first char to lower
Parameter:
value: :class:`str`
String to convert
Returns:
String with first char as lower
"""
return f"{value[0].lower()}{value[1:]}"

View File

@@ -1,18 +0,0 @@
from cpl_core.pipes.pipe_abc import PipeABC
class FirstToUpperPipe(PipeABC):
def __init__(self):
pass
def transform(self, value: str, *args):
r"""Converts first char to upper
Parameter:
chars: :class:`str`
String to convert
Returns:
String with first char as upper
"""
return f"{value[0].upper()}{value[1:]}"

View File

@@ -13,7 +13,7 @@ class IPAddressPipe(PipeABC):
for i in range(0, len(value)): for i in range(0, len(value)):
byte = value[i] byte = value[i]
if byte > 255: if byte > 255 or byte < 0:
raise Exception("Invalid IP") raise Exception("Invalid IP")
if i == len(value) - 1: if i == len(value) - 1:

View File

@@ -1,26 +0,0 @@
import string
from cpl_core.pipes import PipeABC
class ToCamelCasePipe(PipeABC):
def __init__(self):
pass
def transform(self, value: str, *args) -> str:
r"""Converts string to camel case
Parameter:
chars: :class:`str`
String to convert
Returns:
String converted to CamelCase
"""
converted_name = value
char_set = string.punctuation + " "
for char in char_set:
if char in converted_name:
converted_name = "".join(word.title() for word in converted_name.split(char))
return converted_name

View File

@@ -1,27 +0,0 @@
import re
from cpl_core.pipes import PipeABC
class ToSnakeCasePipe(PipeABC):
def __init__(self):
pass
def transform(self, value: str, *args) -> str:
r"""Converts string to snake case
Parameter:
chars: :class:`str`
String to convert
Returns:
String converted to snake_case
"""
# convert to train-case to CamelCase
if "-" in value:
value = "".join(word.title() for word in value.split("-"))
pattern1 = re.compile(r"(.)([A-Z][a-z]+)")
pattern2 = re.compile(r"([a-z0-9])([A-Z])")
file_name = re.sub(pattern1, r"\1_\2", value)
return re.sub(pattern2, r"\1_\2", file_name).lower()

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -15,7 +15,7 @@ __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 - 2023 sh-edraft.de"
__version__ = "2023.4.0" __version__ = "2023.4.0.post2"
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="2023", minor="4", micro="0.post2")

View File

@@ -17,12 +17,14 @@ 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: elif name_first_lower in values:
value = values[name_first_lower] value = values[name_first_lower]
else:
value = values[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,6 +32,9 @@ 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.default != Parameter.empty: elif parameter.default != Parameter.empty:

View File

@@ -37,9 +37,19 @@ class String:
String converted to snake_case String converted to snake_case
""" """
# convert to train-case to CamelCase # convert to train-case to CamelCase
if "_" in chars:
chars = chars.replace("_", "-")
if "-" in chars: if "-" in chars:
chars = "".join(word.title() for word in chars.split("-")) chars = "".join(word.title() for word in chars.split("-"))
if " " in chars:
new_chars = ""
for word in chars.split(" "):
new_chars += String.first_to_upper(word)
chars = new_chars
pattern1 = re.compile(r"(.)([A-Z][a-z]+)") pattern1 = re.compile(r"(.)([A-Z][a-z]+)")
pattern2 = re.compile(r"([a-z0-9])([A-Z])") pattern2 = re.compile(r"([a-z0-9])([A-Z])")
file_name = re.sub(pattern1, r"\1_\2", chars) file_name = re.sub(pattern1, r"\1_\2", chars)

View File

@@ -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.4.0.post3"
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="4", micro="0.post3")

View File

@@ -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.4.0.post3"
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="4", micro="0.post3")

View File

@@ -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.4.0.post3"
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="4", micro="0.post3")

View File

@@ -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.4.0.post3"
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="4", micro="0.post3")

View File

@@ -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.4.0.post3"
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="4", micro="0.post3")

View File

@@ -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.4.0.post3"
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="4", micro="0.post3")

View File

@@ -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):

View File

@@ -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):

View File

@@ -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):

View File

@@ -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):

View File

@@ -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):

View File

@@ -4,7 +4,7 @@
"Version": { "Version": {
"Major": "2023", "Major": "2023",
"Minor": "4", "Minor": "4",
"Micro": "0" "Micro": "0.post3"
}, },
"Author": "Sven Heidemann", "Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de", "AuthorEmail": "sven.heidemann@sh-edraft.de",
@@ -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>=2023.4.0.post2",
"discord.py>=2.2.2", "discord.py>=2.3.0",
"cpl-query>=2023.4.0" "cpl-query>=2023.4.0.post1"
], ],
"DevDependencies": [ "DevDependencies": [
"cpl-cli>=2023.4.0" "cpl-cli>=2023.4.0.post3"
], ],
"PythonVersion": ">=3.10", "PythonVersion": ">=3.10",
"PythonPath": {}, "PythonPath": {},

View File

@@ -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.4.0.post3"
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="4", micro="0.post3")

View File

@@ -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.4.0.post3"
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="4", micro="0.post3")

View File

@@ -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.4.0.post3"
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="4", micro="0.post3")

View File

@@ -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

View File

@@ -5,7 +5,7 @@ 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 from cpl_query.extension.list import List
class DiscordCollection(DiscordCollectionABC): class DiscordCollection(DiscordCollectionABC):

View File

@@ -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):

View File

@@ -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.4.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="4", micro="0.post1")

View File

@@ -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.4.0.post1"
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="4", micro="0.post1")

View File

@@ -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:

View File

@@ -4,7 +4,7 @@
"Version": { "Version": {
"Major": "2023", "Major": "2023",
"Minor": "4", "Minor": "4",
"Micro": "0" "Micro": "0.post1"
}, },
"Author": "Sven Heidemann", "Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de", "AuthorEmail": "sven.heidemann@sh-edraft.de",
@@ -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": []
}, },

View File

@@ -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.4.0.post1"
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="4", micro="0.post1")

View File

@@ -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.4.0.post1"
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="4", micro="0.post1")

View File

@@ -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.4.0.post1"
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="4", micro="0.post1")

View File

@@ -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")

View File

@@ -4,7 +4,7 @@
"Version": { "Version": {
"Major": "2023", "Major": "2023",
"Minor": "4", "Minor": "4",
"Micro": "0" "Micro": "0.post1"
}, },
"Author": "Sven Heidemann", "Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de", "AuthorEmail": "sven.heidemann@sh-edraft.de",

View File

@@ -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]:

View File

@@ -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 general.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()

View File

@@ -29,5 +29,9 @@
"UseUnicode": "true", "UseUnicode": "true",
"Buffered": "true", "Buffered": "true",
"AuthPlugin": "mysql_native_password" "AuthPlugin": "mysql_native_password"
},
"TestSettings": {
"Value": 20
} }
} }

View File

@@ -0,0 +1,6 @@
from cpl_core.configuration import ConfigurationModelABC
class TestSettings(ConfigurationModelABC):
def __init__(self, value: int = None):
self.value = value

View File

@@ -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>=2022.12.0",
"GitPython==3.1.29" "GitPython>=3.1.29"
], ],
"DevDependencies": [], "DevDependencies": [],
"PythonVersion": ">=3.10.4", "PythonVersion": ">=3.10.4",

View File

@@ -4,6 +4,7 @@ from cpl_core.application import ApplicationABC
from cpl_core.configuration import ConfigurationABC from cpl_core.configuration import ConfigurationABC
from cpl_core.dependency_injection import ServiceProviderABC from cpl_core.dependency_injection import ServiceProviderABC
from unittests_cli.cli_test_suite import CLITestSuite from unittests_cli.cli_test_suite import CLITestSuite
from unittests_core.core_test_suite import CoreTestSuite
from unittests_query.query_test_suite import QueryTestSuite from unittests_query.query_test_suite import QueryTestSuite
from unittests_translation.translation_test_suite import TranslationTestSuite from unittests_translation.translation_test_suite import TranslationTestSuite
@@ -17,6 +18,7 @@ class Application(ApplicationABC):
def main(self): def main(self):
runner = unittest.TextTestRunner() runner = unittest.TextTestRunner()
runner.run(CoreTestSuite())
runner.run(CLITestSuite()) runner.run(CLITestSuite())
runner.run(QueryTestSuite()) runner.run(QueryTestSuite())
runner.run(TranslationTestSuite()) runner.run(TranslationTestSuite())

View File

@@ -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:

View 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)

View File

@@ -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)

View File

@@ -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)

View 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"
}
}

View File

@@ -1,19 +1,43 @@
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.ip_address_pipe_test_case import IPAddressTestCase
from unittests_core.pipes.version_pipe_test_case import VersionPipeTestCase
from unittests_core.utils.credential_manager_test_case import CredentialManagerTestCase
from unittests_core.utils.json_processor_test_case import JSONProcessorTestCase
from unittests_core.utils.string_test_case import StringTestCase from unittests_core.utils.string_test_case import StringTestCase
from unittests_query.enumerable_query_test_case import EnumerableQueryTestCase
from unittests_query.enumerable_test_case import EnumerableTestCase
from unittests_query.iterable_query_test_case import IterableQueryTestCase
from unittests_query.iterable_test_case import IterableTestCase
from unittests_query.sequence_test_case import SequenceTestCase
class QueryTestSuite(unittest.TestSuite): class CoreTestSuite(unittest.TestSuite):
def __init__(self): def __init__(self):
unittest.TestSuite.__init__(self) unittest.TestSuite.__init__(self)
loader = unittest.TestLoader() loader = unittest.TestLoader()
self.addTests(loader.loadTestsFromTestCase(StringTestCase)) tests = [
# config
ConfigurationTestCase,
ConsoleArgumentsTestCase,
EnvironmentTestCase,
# di
ServiceCollectionTestCase,
ServiceProviderTestCase,
# pipes
BoolPipeTestCase,
IPAddressTestCase,
VersionPipeTestCase,
# utils
CredentialManagerTestCase,
JSONProcessorTestCase,
StringTestCase,
]
for test in tests:
self.addTests(loader.loadTestsFromTestCase(test))
def run(self, *args): def run(self, *args):
super().run(*args) super().run(*args)
@@ -21,4 +45,4 @@ class QueryTestSuite(unittest.TestSuite):
if __name__ == "__main__": if __name__ == "__main__":
runner = unittest.TextTestRunner() runner = unittest.TextTestRunner()
runner.run(QueryTestSuite()) runner.run(CoreTestSuite())

View File

View 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)

View 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)

View File

@@ -0,0 +1 @@
# imports

View File

@@ -0,0 +1,14 @@
import unittest
from cpl_core.pipes import BoolPipe
class BoolPipeTestCase(unittest.TestCase):
def setUp(self):
pass
def test_transform(self):
pipe = BoolPipe()
self.assertEqual("True", pipe.transform(True))
self.assertEqual("False", pipe.transform(False))

View File

@@ -0,0 +1,20 @@
import unittest
from cpl_core.pipes import IPAddressPipe
class IPAddressTestCase(unittest.TestCase):
def setUp(self):
pass
def test_transform(self):
pipe = IPAddressPipe()
self.assertEqual("192.168.178.1", pipe.transform([192, 168, 178, 1]))
self.assertEqual("255.255.255.255", pipe.transform([255, 255, 255, 255]))
self.assertEqual("0.0.0.0", pipe.transform([0, 0, 0, 0]))
self.assertRaises(Exception, lambda: pipe.transform([-192, 168, 178, 1]))
self.assertRaises(Exception, lambda: pipe.transform([256, 168, 178, 1]))
self.assertRaises(Exception, lambda: pipe.transform([256, 168, 178]))
self.assertRaises(Exception, lambda: pipe.transform([256, 168, 178, 1, 1]))

View File

@@ -0,0 +1,16 @@
import unittest
from cpl_core.pipes.version_pipe import VersionPipe
class VersionPipeTestCase(unittest.TestCase):
def setUp(self):
pass
def test_transform(self):
pipe = VersionPipe()
self.assertEqual("1.1.1", pipe.transform({"Major": 1, "Minor": 1, "Micro": 1}))
self.assertEqual("0.1.1", pipe.transform({"Major": 0, "Minor": 1, "Micro": 1}))
self.assertEqual("0.0.1", pipe.transform({"Major": 0, "Minor": 0, "Micro": 1}))
self.assertEqual("0.0.0", pipe.transform({"Major": 0, "Minor": 0, "Micro": 0}))

View File

@@ -1,16 +0,0 @@
from cpl_core.application.startup_extension_abc import StartupExtensionABC
from cpl_core.configuration.configuration_abc import ConfigurationABC
from cpl_core.dependency_injection.service_collection_abc import ServiceCollectionABC
from cpl_core.environment.application_environment_abc import ApplicationEnvironmentABC
class TestStartup_extension(StartupExtensionABC):
def __init__(self):
pass
def configure_configuration(self, config: ConfigurationABC, env: ApplicationEnvironmentABC):
pass
def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
pass

View File

@@ -1,10 +1,40 @@
import unittest import unittest
from cpl_core.utils import CredentialManager
class CredentialManagerTestCase(unittest.TestCase): class CredentialManagerTestCase(unittest.TestCase):
def setUp(self): def setUp(self):
pass pass
def test_equal(self): def test_encrypt(self):
pass self.assertEqual("ZkVjSkplQUx4aW1zWHlPbA==", CredentialManager.encrypt("fEcJJeALximsXyOl"))
self.assertEqual("QmtVd1l4dW5Sck9jRmVTQQ==", CredentialManager.encrypt("BkUwYxunRrOcFeSA"))
self.assertEqual("c2FtaHF1VkNSdmZpSGxDcQ==", CredentialManager.encrypt("samhquVCRvfiHlCq"))
self.assertEqual("S05aWHBPYW9DbkRSV01rWQ==", CredentialManager.encrypt("KNZXpOaoCnDRWMkY"))
self.assertEqual("QmtUV0Zsb3h1Y254UkJWeg==", CredentialManager.encrypt("BkTWFloxucnxRBVz"))
self.assertEqual("VFdNTkRuYXB1b1dndXNKdw==", CredentialManager.encrypt("TWMNDnapuoWgusJw"))
self.assertEqual("WVRiQXVSZXRMblpicWNrcQ==", CredentialManager.encrypt("YTbAuRetLnZbqckq"))
self.assertEqual("bmN4aExackxhYUVVdnV2VA==", CredentialManager.encrypt("ncxhLZrLaaEUvuvT"))
self.assertEqual("dmpNT0J5U0lLQmFrc0pIYQ==", CredentialManager.encrypt("vjMOBySIKBaksJHa"))
self.assertEqual("ZHd6WHFzSlFvQlhRbGtVZw==", CredentialManager.encrypt("dwzXqsJQoBXQlkUg"))
self.assertEqual("Q0lmUUhOREtiUmxnY2VCbQ==", CredentialManager.encrypt("CIfQHNDKbRlgceBm"))
def test_decrypt(self):
self.assertEqual("fEcJJeALximsXyOl", CredentialManager.decrypt("ZkVjSkplQUx4aW1zWHlPbA=="))
self.assertEqual("BkUwYxunRrOcFeSA", CredentialManager.decrypt("QmtVd1l4dW5Sck9jRmVTQQ=="))
self.assertEqual("samhquVCRvfiHlCq", CredentialManager.decrypt("c2FtaHF1VkNSdmZpSGxDcQ=="))
self.assertEqual("KNZXpOaoCnDRWMkY", CredentialManager.decrypt("S05aWHBPYW9DbkRSV01rWQ=="))
self.assertEqual("BkTWFloxucnxRBVz", CredentialManager.decrypt("QmtUV0Zsb3h1Y254UkJWeg=="))
self.assertEqual("TWMNDnapuoWgusJw", CredentialManager.decrypt("VFdNTkRuYXB1b1dndXNKdw=="))
self.assertEqual("YTbAuRetLnZbqckq", CredentialManager.decrypt("WVRiQXVSZXRMblpicWNrcQ=="))
self.assertEqual("ncxhLZrLaaEUvuvT", CredentialManager.decrypt("bmN4aExackxhYUVVdnV2VA=="))
self.assertEqual("vjMOBySIKBaksJHa", CredentialManager.decrypt("dmpNT0J5U0lLQmFrc0pIYQ=="))
self.assertEqual("dwzXqsJQoBXQlkUg", CredentialManager.decrypt("ZHd6WHFzSlFvQlhRbGtVZw=="))
self.assertEqual("CIfQHNDKbRlgceBm", CredentialManager.decrypt("Q0lmUUhOREtiUmxnY2VCbQ=="))
def test_build_string(self):
self.assertEqual(
"TestStringWithCredentialsfEcJJeALximsXyOlHere",
CredentialManager.build_string("TestStringWithCredentials$credentialsHere", "ZkVjSkplQUx4aW1zWHlPbA=="),
)

Some files were not shown because too many files have changed in this diff Show More