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

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_cli"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -28,4 +28,4 @@ from .main import main
from .startup import Startup
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
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 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):

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_cli.command"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -29,4 +29,4 @@ from .publish_service import PublishService
from .version_service import VersionService
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.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):
"""
Writes new package version to project.json
@@ -164,15 +182,12 @@ class UpdateService(CommandABC):
if self._is_simulation:
return
if old_package in self._project_settings.dependencies:
index = self._project_settings.dependencies.index(old_package)
if "/" in new_package:
new_package = new_package.split("/")[0]
if "\r" in new_package:
new_package = new_package.replace("\r", "")
self._project_settings.dependencies[index] = new_package
self._save_formatted_package_name_to_deps_collection(
self._project_settings.dependencies, old_package, new_package
)
self._save_formatted_package_name_to_deps_collection(
self._project_settings.dev_dependencies, old_package, new_package
)
config = {
ProjectSettings.__name__: SettingsHelper.get_project_settings_dict(self._project_settings),

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_cli.configuration"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -31,4 +31,4 @@ from .workspace_settings import WorkspaceSettings
from .workspace_settings_name_enum import WorkspaceSettingsNameEnum
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,
entry_point: str = None,
include_package_data: bool = None,
included: list[str] = None,
excluded: list[str] = None,
package_data: dict[str, list[str]] = None,
project_references: list[str] = None,
included: list = None,
excluded: list = None,
package_data: dict = None,
project_references: list = None,
):
ConfigurationModelABC.__init__(self)

View File

@@ -49,7 +49,7 @@ class ProjectSettings(ConfigurationModelABC):
self._python_executable: Optional[str] = python_executable
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]}"
if path == "" or path is None:

View File

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

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_cli.helper"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -25,4 +25,4 @@ from .publisher_abc import PublisherABC
from .publisher_service import PublisherService
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -29,4 +29,4 @@ from .startup_abc import StartupABC
from .startup_extension_abc import StartupExtensionABC
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -35,4 +35,4 @@ from .validator_abc import ValidatorABC
from .variable_argument import VariableArgument
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)
def add_configuration(self, key_type: T, value: any):
def add_configuration(self, key_type: Type[T], value: any):
self._config[key_type] = value
def create_console_argument(
@@ -314,7 +314,7 @@ class Configuration(ConfigurationABC):
for arg in self._argument_types:
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 search_type == ConfigurationVariableNameEnum.environment.value:
return self._application_environment.environment_name

View File

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

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_core.console"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -28,4 +28,4 @@ from .foreground_color_enum import ForegroundColorEnum
from .spinner_thread import SpinnerThread
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": {
"Major": "2023",
"Minor": "4",
"Micro": "0"
"Micro": "0.post2"
},
"Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de",
@@ -16,17 +16,17 @@
"LicenseName": "MIT",
"LicenseDescription": "MIT, see LICENSE for more details.",
"Dependencies": [
"art==5.9",
"colorama==0.4.6",
"mysql-connector==2.2.9",
"psutil==5.9.4",
"packaging==23.0",
"pynput==1.7.6",
"setuptools==67.6.1",
"tabulate==0.9.0",
"termcolor==2.2.0",
"watchdog==3.0.0",
"wheel==0.40.0"
"art>=5.9",
"colorama>=0.4.6",
"mysql-connector>=2.2.9",
"psutil>=5.9.4",
"packaging>=23.0",
"pynput>=1.7.6",
"setuptools>=67.6.1",
"tabulate>=0.9.0",
"termcolor>=2.2.0",
"watchdog>=3.0.0",
"wheel>=0.40.0"
],
"DevDependencies": [
"Sphinx==5.0.2",
@@ -36,7 +36,7 @@
"sphinx-markdown-builder==0.5.5",
"pygount==1.5.1"
],
"PythonVersion": ">=3.11",
"PythonVersion": ">=3.10",
"PythonPath": {},
"Classifiers": []
},

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_core.database"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -26,4 +26,4 @@ from .database_settings import DatabaseSettings
from .table_abc import TableABC
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -25,4 +25,4 @@ from .database_connection import DatabaseConnection
from .database_connection_abc import DatabaseConnectionABC
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -25,4 +25,4 @@ from .database_context import DatabaseContext
from .database_context_abc import DatabaseContextABC
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__(
self,
host: str = None,
port: int = None,
port: int = 3306,
user: str = None,
password: str = None,
databse: str = None,
database: str = None,
charset: str = None,
use_unicode: bool = None,
buffered: bool = None,
auth_plugin: bool = None,
auth_plugin: str = None,
):
ConfigurationModelABC.__init__(self)
@@ -24,7 +24,7 @@ class DatabaseSettings(ConfigurationModelABC):
self._port: Optional[int] = port
self._user: Optional[str] = user
self._password: Optional[str] = password
self._databse: Optional[str] = databse
self._databse: Optional[str] = database
self._charset: Optional[str] = charset
self._use_unicode: Optional[bool] = use_unicode
self._buffered: Optional[bool] = buffered

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_core.dependency_injection"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -31,4 +31,4 @@ from .service_provider import ServiceProvider
from .service_provider_abc import ServiceProviderABC
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)
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)
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)
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)
return self

View File

@@ -46,7 +46,7 @@ class ServiceCollectionABC(ABC):
pass
@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
Parameter:
@@ -61,7 +61,7 @@ class ServiceCollectionABC(ABC):
pass
@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
Parameter:
@@ -76,7 +76,7 @@ class ServiceCollectionABC(ABC):
pass
@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
Parameter:

View File

@@ -138,7 +138,7 @@ class ServiceProvider(ServiceProviderABC):
sb = ScopeBuilder(ServiceProvider(descriptors, self._configuration, self._database_context))
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)
if result is None:
@@ -157,7 +157,7 @@ class ServiceProvider(ServiceProviderABC):
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 = []
if typing.get_origin(service_type) != list:

View File

@@ -1,7 +1,7 @@
import functools
from abc import abstractmethod, ABC
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.type import T
@@ -61,7 +61,7 @@ class ServiceProviderABC(ABC):
pass
@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
Parameter
@@ -76,7 +76,7 @@ class ServiceProviderABC(ABC):
pass
@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
Parameter

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_core.environment"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -26,4 +26,4 @@ from .environment_name_enum import EnvironmentNameEnum
from .application_environment import ApplicationEnvironment
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -28,4 +28,4 @@ from .logging_settings import LoggingSettings
from .logging_settings_name_enum import LoggingSettingsNameEnum
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -28,4 +28,4 @@ from .email_client_settings import EMailClientSettings
from .email_client_settings_name_enum import EMailClientSettingsNameEnum
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
# imports:
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 .pipe_abc import PipeABC
from .to_camel_case_pipe import ToCamelCasePipe
from .to_snake_case_pipe import ToSnakeCasePipe
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)):
byte = value[i]
if byte > 255:
if byte > 255 or byte < 0:
raise Exception("Invalid IP")
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -25,4 +25,4 @@ from .time_format_settings import TimeFormatSettings
from .time_format_settings_names_enum import TimeFormatSettingsNamesEnum
VersionInfo = namedtuple("VersionInfo", "major minor micro")
version_info = VersionInfo(major="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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2020 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post2"
from collections import namedtuple
@@ -26,4 +26,4 @@ from .string import String
from .pip import Pip
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_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 = ""
if name in values:
value = values[name]
else:
elif name_first_lower in values:
value = values[name_first_lower]
else:
value = values[name.upper()]
if isinstance(value, dict) and not issubclass(parameter.annotation, dict):
value = JSONProcessor.process(parameter.annotation, value)
@@ -30,6 +32,9 @@ class JSONProcessor:
if issubclass(parameter.annotation, enum.Enum):
value = parameter.annotation[value]
if type(value) != parameter.annotation:
value = parameter.annotation(value)
args.append(value)
elif parameter.default != Parameter.empty:

View File

@@ -37,9 +37,19 @@ class String:
String converted to snake_case
"""
# convert to train-case to CamelCase
if "_" in chars:
chars = chars.replace("_", "-")
if "-" in chars:
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]+)")
pattern2 = re.compile(r"([a-z0-9])([A-Z])")
file_name = re.sub(pattern1, r"\1_\2", chars)

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_discord"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -59,4 +59,4 @@ def get_discord_collection(services: "ServiceCollectionABC") -> "DiscordCollecti
# build-ignore-end
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -24,4 +24,4 @@ from collections import namedtuple
from .discord_bot_application_abc import DiscordBotApplicationABC
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -25,4 +25,4 @@ from .discord_command_abc import DiscordCommandABC
from .discord_commands_meta import DiscordCogMeta
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -24,4 +24,4 @@ from collections import namedtuple
from .discord_bot_settings import DiscordBotSettings
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -31,4 +31,4 @@ from .thread import Thread
from .voice_channel import VoiceChannel
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.voice_channel import VoiceChannel
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):

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.voice_channel import VoiceChannel
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):

View File

@@ -4,7 +4,7 @@ from cpl_discord.container.container import Container
from cpl_discord.container.member import Member
from cpl_discord.container.thread import Thread
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):

View File

@@ -3,7 +3,7 @@ import discord
from cpl_discord.container.container import Container
from cpl_discord.container.member import Member
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):

View File

@@ -3,7 +3,7 @@ import discord
from cpl_discord.container.container import Container
from cpl_discord.container.member import Member
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):

View File

@@ -4,7 +4,7 @@
"Version": {
"Major": "2023",
"Minor": "4",
"Micro": "0"
"Micro": "0.post3"
},
"Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de",
@@ -16,12 +16,12 @@
"LicenseName": "MIT",
"LicenseDescription": "MIT, see LICENSE for more details.",
"Dependencies": [
"cpl-core>=2023.4.0",
"discord.py>=2.2.2",
"cpl-query>=2023.4.0"
"cpl-core>=2023.4.0.post2",
"discord.py>=2.3.0",
"cpl-query>=2023.4.0.post1"
],
"DevDependencies": [
"cpl-cli>=2023.4.0"
"cpl-cli>=2023.4.0.post3"
],
"PythonVersion": ">=3.10",
"PythonPath": {},

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_discord.events"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -69,4 +69,4 @@ from .on_voice_state_update_abc import OnVoiceStateUpdateABC
from .on_webhooks_update_abc import OnWebhooksUpdateABC
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -24,4 +24,4 @@ from collections import namedtuple
from .to_containers_converter import ToContainersConverter
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post3"
from collections import namedtuple
@@ -29,4 +29,4 @@ from .discord_service import DiscordService
from .discord_service_abc import DiscordServiceABC
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_prefix = self._config.get_configuration("PREFIX")
new_settings.from_dict(
{
"Token": env_token if token is None or token == "" else token,
"Prefix": ("! " if self._is_string_invalid(env_prefix) else env_prefix)
if self._is_string_invalid(prefix)
else prefix,
}
new_settings = DiscordBotSettings(
env_token if token is None or token == "" else token,
("! " if self._is_string_invalid(env_prefix) else env_prefix)
if self._is_string_invalid(prefix)
else prefix,
)
if new_settings.token is None or new_settings.token == "":
raise Exception("You have to configure discord token by appsettings or environment variables")
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.service.command_error_handler_service import CommandErrorHandlerService
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):

View File

@@ -2,7 +2,7 @@ from abc import ABC, abstractmethod
from typing import Type
from cpl_discord.command import DiscordCommandABC
from cpl_query.extension import List
from cpl_query.extension.list import List
class DiscordCollectionABC(ABC):

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_query"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post1"
from collections import namedtuple
@@ -23,4 +23,4 @@ from collections import namedtuple
# imports:
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post1"
from collections import namedtuple
# imports:
from .default_lambda import default_lambda
from .ordered_queryable import OrderedQueryable
@@ -27,4 +28,4 @@ from .queryable_abc import QueryableABC
from .sequence import Sequence
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 cpl_query.base.queryable_abc import QueryableABC
from cpl_query.base.ordered_queryable_abc import OrderedQueryableABC
from cpl_query.exceptions import ArgumentNoneException, ExceptionArgument
from cpl_query.iterable.iterable import Iterable
class OrderedQueryable(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)
def then_by(self, _func: Callable) -> OrderedQueryableABC:

View File

@@ -4,7 +4,7 @@
"Version": {
"Major": "2023",
"Minor": "4",
"Micro": "0"
"Micro": "0.post1"
},
"Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de",
@@ -17,7 +17,7 @@
"LicenseDescription": "MIT, see LICENSE for more details.",
"Dependencies": [],
"DevDependencies": [],
"PythonVersion": ">=3.11",
"PythonVersion": ">=3.10",
"PythonPath": {},
"Classifiers": []
},

View File

@@ -15,7 +15,7 @@ __title__ = "cpl_query.enumerable"
__author__ = "Sven Heidemann"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post1"
from collections import namedtuple
@@ -25,4 +25,4 @@ from .enumerable import Enumerable
from .enumerable_abc import EnumerableABC
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post1"
from collections import namedtuple
@@ -24,4 +24,4 @@ from collections import namedtuple
from .list import List
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2021 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post1"
from collections import namedtuple
@@ -25,4 +25,4 @@ from .iterable_abc import IterableABC
from .iterable import Iterable
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"
__license__ = "MIT"
__copyright__ = "Copyright (c) 2022 - 2023 sh-edraft.de"
__version__ = "2023.4.0"
__version__ = "2023.4.0.post1"
from collections import namedtuple
@@ -53,4 +53,4 @@ init()
# build-ignore-end
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": {
"Major": "2023",
"Minor": "4",
"Micro": "0"
"Micro": "0.post1"
},
"Author": "Sven Heidemann",
"AuthorEmail": "sven.heidemann@sh-edraft.de",

View File

@@ -5,12 +5,12 @@ class TranslationSettings(ConfigurationModelABC):
def __init__(
self,
languages: list = None,
default_lang: str = None,
default_language: str = None,
):
ConfigurationModelABC.__init__(self)
self._languages = [] if languages is None else languages
self._default_lang = default_lang
self._default_lang = default_language
@property
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.mailing import EMailClientABC, EMail
from cpl_core.pipes import IPAddressPipe
from general.test_settings import TestSettings
from test_service import TestService
@@ -57,4 +58,13 @@ class Application(ApplicationABC):
Console.write_line("scope", scope)
with self._services.create_scope() as 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()

View File

@@ -29,5 +29,9 @@
"UseUnicode": "true",
"Buffered": "true",
"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",
"LicenseDescription": "MIT, see LICENSE for more details.",
"Dependencies": [
"cpl-core==2022.12.0",
"GitPython==3.1.29"
"cpl-core>=2022.12.0",
"GitPython>=3.1.29"
],
"DevDependencies": [],
"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.dependency_injection import ServiceProviderABC
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_translation.translation_test_suite import TranslationTestSuite
@@ -17,6 +18,7 @@ class Application(ApplicationABC):
def main(self):
runner = unittest.TextTestRunner()
runner.run(CoreTestSuite())
runner.run(CLITestSuite())
runner.run(QueryTestSuite())
runner.run(TranslationTestSuite())

View File

@@ -8,6 +8,7 @@ from unittests_cli.constants import PLAYGROUND_PATH
class CommandTestCase(unittest.TestCase):
_skip_tear_down = False
_cwd = os.getcwd()
def __init__(self, method_name: str):
unittest.TestCase.__init__(self, method_name)
@@ -32,6 +33,7 @@ class CommandTestCase(unittest.TestCase):
if cls._skip_tear_down:
return
try:
os.chdir(cls._cwd)
if os.path.exists(PLAYGROUND_PATH):
shutil.rmtree(os.path.abspath(os.path.join(PLAYGROUND_PATH)))
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
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_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):
unittest.TestSuite.__init__(self)
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):
super().run(*args)
@@ -21,4 +45,4 @@ class QueryTestSuite(unittest.TestSuite):
if __name__ == "__main__":
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
from cpl_core.utils import CredentialManager
class CredentialManagerTestCase(unittest.TestCase):
def setUp(self):
pass
def test_equal(self):
pass
def test_encrypt(self):
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