diff --git a/src/cpl-application/cpl/application/abc/application_abc.py b/src/cpl-application/cpl/application/abc/application_abc.py index 888f8046..609b86ce 100644 --- a/src/cpl-application/cpl/application/abc/application_abc.py +++ b/src/cpl-application/cpl/application/abc/application_abc.py @@ -3,9 +3,9 @@ from typing import Callable, Self from cpl.application.host import Host from cpl.core.console.console import Console -from cpl.core.environment.environment import Environment -from cpl.core.log.logger_abc import LoggerABC +from cpl.core.log import LogSettings from cpl.core.log.log_level_enum import LogLevel +from cpl.core.log.logger_abc import LoggerABC from cpl.dependency.service_provider_abc import ServiceProviderABC @@ -43,7 +43,10 @@ class ApplicationABC(ABC): def with_logging(self, level: LogLevel = None): if level is None: - level = Environment.get("LOG_LEVEL", LogLevel, LogLevel.info) + from cpl.core.configuration.configuration import Configuration + + settings = Configuration.get(LogSettings) + level = settings.level if settings else LogLevel.info logger = self._services.get_service(LoggerABC) logger.set_level(level) diff --git a/src/cpl-auth/cpl/auth/keycloak_settings.py b/src/cpl-auth/cpl/auth/keycloak_settings.py index c2e713f6..e94be010 100644 --- a/src/cpl-auth/cpl/auth/keycloak_settings.py +++ b/src/cpl-auth/cpl/auth/keycloak_settings.py @@ -1,37 +1,17 @@ from typing import Optional from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC -from cpl.core.environment import Environment class KeycloakSettings(ConfigurationModelABC): def __init__( self, - url: str = Environment.get("KEYCLOAK_URL", str), - client_id: str = Environment.get("KEYCLOAK_CLIENT_ID", str), - realm: str = Environment.get("KEYCLOAK_REALM", str), - client_secret: str = Environment.get("KEYCLOAK_CLIENT_SECRET", str), + src: Optional[dict] = None, ): - ConfigurationModelABC.__init__(self) + ConfigurationModelABC.__init__(self, src, "KEYCLOAK") - self._url: Optional[str] = url - self._client_id: Optional[str] = client_id - self._realm: Optional[str] = realm - self._client_secret: Optional[str] = client_secret - - @property - def url(self) -> Optional[str]: - return self._url - - @property - def client_id(self) -> Optional[str]: - return self._client_id - - @property - def realm(self) -> Optional[str]: - return self._realm - - @property - def client_secret(self) -> Optional[str]: - return self._client_secret + self.option("url", str, required=True) + self.option("client_id", str, required=True) + self.option("realm", str, required=True) + self.option("client_secret", str, required=True) diff --git a/src/cpl-core/cpl/core/configuration/configuration.py b/src/cpl-core/cpl/core/configuration/configuration.py index 6e67b9cd..989a4793 100644 --- a/src/cpl-core/cpl/core/configuration/configuration.py +++ b/src/cpl-core/cpl/core/configuration/configuration.py @@ -8,7 +8,6 @@ from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC from cpl.core.console.console import Console from cpl.core.console.foreground_color_enum import ForegroundColorEnum from cpl.core.typing import D, T -from cpl.core.utils.json_processor import JSONProcessor class Configuration: @@ -116,9 +115,7 @@ class Configuration: if sub.__name__ != key and sub.__name__.replace("Settings", "") != key: continue - configuration = JSONProcessor.process(sub, value) - - cls.set(sub, configuration) + cls.set(sub, sub(value)) @classmethod def set(cls, key: Any, value: T): diff --git a/src/cpl-core/cpl/core/configuration/configuration_model_abc.py b/src/cpl-core/cpl/core/configuration/configuration_model_abc.py index 0e31f079..fe7b5a71 100644 --- a/src/cpl-core/cpl/core/configuration/configuration_model_abc.py +++ b/src/cpl-core/cpl/core/configuration/configuration_model_abc.py @@ -1,7 +1,81 @@ -from abc import ABC +from abc import ABC, abstractmethod +from typing import Optional, Type, Any + +from cpl.core.typing import T +from cpl.core.utils.cast import cast +from cpl.core.utils.get_value import get_value +from cpl.core.utils.string import String class ConfigurationModelABC(ABC): r""" ABC for configuration model classes """ + + @abstractmethod + def __init__( + self, + src: Optional[dict] = None, + env_prefix: Optional[str] = None, + readonly: bool = True, + ): + ABC.__init__(self) + + self._src = src or {} + self._options: dict[str, Any] = {} + + self._env_prefix = env_prefix + self._readonly = readonly + + def __setattr__(self, attr: str, value: Any): + if hasattr(self, "_readonly") and self._readonly: + raise AttributeError(f"Cannot set attribute: {attr}. {type(self).__name__} is read-only") + + super().__setattr__(attr, value) + + def __getattr__(self, attr: str) -> Any: + options = super().__getattribute__("_options") + if attr in options: + return options[attr] + + return super().__getattribute__(attr) + + def option(self, field: str, cast_type: Type[T], default=None, required=False, from_env=True): + value = None + + field_variants = [ + field, + String.first_to_upper(field), + String.first_to_lower(field), + String.to_camel_case(field), + String.to_snake_case(field), + String.first_to_upper(String.to_camel_case(field)), + ] + + value = None + for variant in field_variants: + if variant in self._src: + value = self._src[variant] + break + + if value is None and from_env: + from cpl.core.environment import Environment + + env_field = field.upper() + if self._env_prefix: + env_field = f"{self._env_prefix}_{env_field}" + value = Environment.get(env_field, cast_type) + + if value is None and required: + raise ValueError(f"{field} is required") + elif value is None: + self._options[field] = default + return + + self._options[field] = cast(value, cast_type) + + def get(self, field: str, default=None) -> Optional[T]: + return get_value(self._src, field, self._options[field].type, default) + + def to_dict(self) -> dict: + return {field: self.get(field) for field in self._options.keys()} diff --git a/src/cpl-core/cpl/core/log/logging_settings.py b/src/cpl-core/cpl/core/log/logging_settings.py index 6055bf1c..ed7eb4f6 100644 --- a/src/cpl-core/cpl/core/log/logging_settings.py +++ b/src/cpl-core/cpl/core/log/logging_settings.py @@ -5,49 +5,14 @@ from cpl.core.log.log_level_enum import LogLevel class LogSettings(ConfigurationModelABC): - r"""Representation of logging settings""" def __init__( self, - path: str = None, - filename: str = None, - console_log_level: LogLevel = None, - file_log_level: LogLevel = None, + src: Optional[dict] = None, ): - ConfigurationModelABC.__init__(self) - self._path: Optional[str] = path - self._filename: Optional[str] = filename - self._console: Optional[LogLevel] = console_log_level - self._level: Optional[LogLevel] = file_log_level + ConfigurationModelABC.__init__(self, src) - @property - def path(self) -> str: - return self._path - - @path.setter - def path(self, path: str) -> None: - self._path = path - - @property - def filename(self) -> str: - return self._filename - - @filename.setter - def filename(self, filename: str) -> None: - self._filename = filename - - @property - def console(self) -> LogLevel: - return self._console - - @console.setter - def console(self, console: LogLevel) -> None: - self._console = console - - @property - def level(self) -> LogLevel: - return self._level - - @level.setter - def level(self, level: LogLevel) -> None: - self._level = level + self.option("path", str, default="logs") + self.option("filename", str, default="app.log") + self.option("console_level", LogLevel, default=LogLevel.info) + self.option("level", LogLevel, default=LogLevel.info) diff --git a/src/cpl-core/cpl/core/utils/__init__.py b/src/cpl-core/cpl/core/utils/__init__.py index 84bfba28..c5a89180 100644 --- a/src/cpl-core/cpl/core/utils/__init__.py +++ b/src/cpl-core/cpl/core/utils/__init__.py @@ -3,3 +3,4 @@ from .credential_manager import CredentialManager from .json_processor import JSONProcessor from .pip import Pip from .string import String +from .get_value import get_value diff --git a/src/cpl-core/cpl/core/utils/cast.py b/src/cpl-core/cpl/core/utils/cast.py new file mode 100644 index 00000000..dab9fa4a --- /dev/null +++ b/src/cpl-core/cpl/core/utils/cast.py @@ -0,0 +1,64 @@ +from enum import Enum +from typing import Type, Any + +from cpl.core.typing import T + +def _cast_enum(value: str, enum_type: Type[Enum]) -> Enum: + try: + return enum_type(value) + except ValueError: + pass + + try: + return enum_type(value.lower()) + except ValueError: + pass + + try: + return enum_type(value.upper()) + except ValueError: + pass + + try: + return enum_type[value] + except KeyError: + pass + + try: + return enum_type[value.lower()] + except KeyError: + pass + + try: + return enum_type[value.upper()] + except KeyError: + pass + + raise ValueError(f"Cannot cast value '{value}' to enum '{enum_type.__name__}'") + +def cast(value: Any, cast_type: Type[T], list_delimiter: str = ",") -> T: + """ + Cast a value to a specified type. + :param Any value: Value to be casted. + :param Type[T] cast_type: A callable to cast the variable's value. + :param str list_delimiter: The delimiter to split the value into a list. Defaults to ",". + :return: + """ + if cast_type == bool: + return value.lower() in ["true", "1", "yes", "on"] + + if issubclass(cast_type, Enum): + return _cast_enum(value, cast_type) + + if (cast_type if not hasattr(cast_type, "__origin__") else cast_type.__origin__) == list: + if not (value.startswith("[") and value.endswith("]")) and list_delimiter not in value: + raise ValueError("List values must be enclosed in square brackets or use a delimiter.") + + if value.startswith("[") and value.endswith("]"): + value = value[1:-1] + + value = value.split(list_delimiter) + subtype = cast_type.__args__[0] if hasattr(cast_type, "__args__") else None + return [subtype(item) if subtype is not None else item for item in value] + + return cast_type(value) \ No newline at end of file diff --git a/src/cpl-core/cpl/core/utils/credential_manager.py b/src/cpl-core/cpl/core/utils/credential_manager.py index b23ced0a..d030dc94 100644 --- a/src/cpl-core/cpl/core/utils/credential_manager.py +++ b/src/cpl-core/cpl/core/utils/credential_manager.py @@ -6,8 +6,10 @@ from cpl.core.log.logger import Logger _logger = Logger(__name__) + class CredentialManager: r"""Handles credential encryption and decryption""" + _secret: str = None @classmethod diff --git a/src/cpl-core/cpl/core/utils/get_value.py b/src/cpl-core/cpl/core/utils/get_value.py index f5389f8d..8ec5fd24 100644 --- a/src/cpl-core/cpl/core/utils/get_value.py +++ b/src/cpl-core/cpl/core/utils/get_value.py @@ -1,7 +1,7 @@ -from enum import Enum from typing import Type, Optional from cpl.core.typing import T +from cpl.core.utils.cast import cast def get_value( @@ -38,33 +38,6 @@ def get_value( return value try: - if cast_type == bool: - return value.lower() in ["true", "1"] - - if issubclass(cast_type, Enum): - try: - return cast_type(value) - except ValueError: - pass - - try: - return cast_type[value] - except KeyError: - pass - - return default - - if (cast_type if not hasattr(cast_type, "__origin__") else cast_type.__origin__) == list: - if not (value.startswith("[") and value.endswith("]")) and list_delimiter not in value: - raise ValueError("List values must be enclosed in square brackets or use a delimiter.") - - if value.startswith("[") and value.endswith("]"): - value = value[1:-1] - - value = value.split(list_delimiter) - subtype = cast_type.__args__[0] if hasattr(cast_type, "__args__") else None - return [subtype(item) if subtype is not None else item for item in value] - - return cast_type(value) + cast(cast_type, value, list_delimiter) except (ValueError, TypeError): return default diff --git a/src/cpl-core/cpl/core/utils/string.py b/src/cpl-core/cpl/core/utils/string.py index e52deae9..ce1c17b3 100644 --- a/src/cpl-core/cpl/core/utils/string.py +++ b/src/cpl-core/cpl/core/utils/string.py @@ -17,7 +17,11 @@ class String: Returns: String converted to CamelCase """ - return re.sub(r"(? str: diff --git a/src/cpl-database/cpl/database/model/database_settings.py b/src/cpl-database/cpl/database/model/database_settings.py index e0615845..e3862bea 100644 --- a/src/cpl-database/cpl/database/model/database_settings.py +++ b/src/cpl-database/cpl/database/model/database_settings.py @@ -2,74 +2,23 @@ from typing import Optional from cpl.core.configuration import Configuration from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC -from cpl.core.environment import Environment class DatabaseSettings(ConfigurationModelABC): - r"""Represents settings for the database connection""" def __init__( self, - host: str = Environment.get("DB_HOST", str), - port: int = Environment.get("DB_PORT", str, Configuration.get("DB_DEFAULT_PORT", 0)), - user: str = Environment.get("DB_USER", str), - password: str = Environment.get("DB_PASSWORD", str), - database: str = Environment.get("DB_DATABASE", str), - charset: str = Environment.get("DB_CHARSET", str, "utf8mb4"), - use_unicode: bool = Environment.get("DB_USE_UNICODE", bool, False), - buffered: bool = Environment.get("DB_BUFFERED", bool, False), - auth_plugin: str = Environment.get("DB_AUTH_PLUGIN", str, "caching_sha2_password"), - ssl_disabled: bool = Environment.get("DB_SSL_DISABLED", bool, False), + src: Optional[dict] = None, ): - ConfigurationModelABC.__init__(self) + ConfigurationModelABC.__init__(self, src, "DB") - self._host: Optional[str] = host - self._port: Optional[int] = port - self._user: Optional[str] = user - self._password: Optional[str] = password - self._database: Optional[str] = database - self._charset: Optional[str] = charset - self._use_unicode: Optional[bool] = use_unicode - self._buffered: Optional[bool] = buffered - self._auth_plugin: Optional[str] = auth_plugin - self._ssl_disabled: Optional[bool] = ssl_disabled - - @property - def host(self) -> Optional[str]: - return self._host - - @property - def port(self) -> Optional[int]: - return self._port - - @property - def user(self) -> Optional[str]: - return self._user - - @property - def password(self) -> Optional[str]: - return self._password - - @property - def database(self) -> Optional[str]: - return self._database - - @property - def charset(self) -> Optional[str]: - return self._charset - - @property - def use_unicode(self) -> Optional[bool]: - return self._use_unicode - - @property - def buffered(self) -> Optional[bool]: - return self._buffered - - @property - def auth_plugin(self) -> Optional[str]: - return self._auth_plugin - - @property - def ssl_disabled(self) -> Optional[bool]: - return self._ssl_disabled + self.option("host", str, required=True) + self.option("port", int, Configuration.get("DB_DEFAULT_PORT"), required=True) + self.option("user", str, required=True) + self.option("password", str, required=True) + self.option("database", str, required=True) + self.option("charset", str, "utf8mb4") + self.option("use_unicode", bool, False) + self.option("buffered", bool, False) + self.option("auth_plugin", str, "caching_sha2_password") + self.option("ssl_disabled", bool, False) diff --git a/src/cpl-mail/cpl/mail/__init__.py b/src/cpl-mail/cpl/mail/__init__.py index c2f00eb6..6e8a4f7a 100644 --- a/src/cpl-mail/cpl/mail/__init__.py +++ b/src/cpl-mail/cpl/mail/__init__.py @@ -2,7 +2,6 @@ from cpl.dependency import ServiceCollection as _ServiceCollection from .abc.email_client_abc import EMailClientABC from .email_client import EMailClient from .email_client_settings import EMailClientSettings -from .email_client_settings_name_enum import EMailClientSettingsNameEnum from .email_model import EMail from .mail_logger import MailLogger diff --git a/src/cpl-mail/cpl/mail/email_client_settings.py b/src/cpl-mail/cpl/mail/email_client_settings.py index cdf34c5a..3640820b 100644 --- a/src/cpl-mail/cpl/mail/email_client_settings.py +++ b/src/cpl-mail/cpl/mail/email_client_settings.py @@ -1,51 +1,17 @@ +from typing import Optional + from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC class EMailClientSettings(ConfigurationModelABC): - r"""Representation of mailing settings""" def __init__( - self, - host: str = None, - port: int = None, - user_name: str = None, - credentials: str = None, + self, + src: Optional[dict] = None, ): - ConfigurationModelABC.__init__(self) + ConfigurationModelABC.__init__(self, src, "EMAIL") - self._host: str = host - self._port: int = port - self._user_name: str = user_name - self._credentials: str = credentials - - @property - def host(self) -> str: - return self._host - - @host.setter - def host(self, host: str) -> None: - self._host = host - - @property - def port(self) -> int: - return self._port - - @port.setter - def port(self, port: int) -> None: - self._port = port - - @property - def user_name(self) -> str: - return self._user_name - - @user_name.setter - def user_name(self, user_name: str) -> None: - self._user_name = user_name - - @property - def credentials(self) -> str: - return self._credentials - - @credentials.setter - def credentials(self, credentials: str) -> None: - self._credentials = credentials + self.option("host", str, required=True) + self.option("port", int, 587, required=True) + self.option("user_name", str, required=True) + self.option("credentials", str, required=True) \ No newline at end of file diff --git a/src/cpl-mail/cpl/mail/email_client_settings_name_enum.py b/src/cpl-mail/cpl/mail/email_client_settings_name_enum.py deleted file mode 100644 index b40c71e2..00000000 --- a/src/cpl-mail/cpl/mail/email_client_settings_name_enum.py +++ /dev/null @@ -1,8 +0,0 @@ -from enum import Enum - - -class EMailClientSettingsNameEnum(Enum): - host = "Host" - port = "Port" - user_name = "UserName" - credentials = "Credentials" diff --git a/tests/custom/database/cpl.json b/tests/custom/database/cpl.json index ee84d745..2915ba1f 100644 --- a/tests/custom/database/cpl.json +++ b/tests/custom/database/cpl.json @@ -1,5 +1,5 @@ { - "ProjectSettings": { + "Project": { "Name": "database", "Version": { "Major": "0", @@ -22,7 +22,7 @@ "PythonPath": {}, "Classifiers": [] }, - "BuildSettings": { + "Build": { "ProjectType": "console", "SourcePath": "src", "OutputPath": "dist", diff --git a/tests/custom/database/src/appsettings.development.json b/tests/custom/database/src/appsettings.development.json index 62ec6c61..4f0c6a8a 100644 --- a/tests/custom/database/src/appsettings.development.json +++ b/tests/custom/database/src/appsettings.development.json @@ -1,8 +1,8 @@ { - "LoggingSettings": { + "Logging": { "Path": "logs/", "Filename": "log_$start_time.log", - "ConsoleLogLevel": "TRACE", - "FileLogLevel": "TRACE" + "ConsoleLevel": "TRACE", + "Level": "TRACE" } } \ No newline at end of file diff --git a/tests/custom/database/src/appsettings.edrafts-lapi.json b/tests/custom/database/src/appsettings.edrafts-lapi.json index c5330111..1a8e0cd0 100644 --- a/tests/custom/database/src/appsettings.edrafts-lapi.json +++ b/tests/custom/database/src/appsettings.edrafts-lapi.json @@ -1,19 +1,19 @@ { - "TimeFormatSettings": { + "TimeFormat": { "DateFormat": "%Y-%m-%d", "TimeFormat": "%H:%M:%S", "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" }, - "LoggingSettings": { + "Log": { "Path": "logs/", "Filename": "log_$start_time.log", - "ConsoleLogLevel": "TRACE", - "FileLogLevel": "TRACE" + "ConsoleLevel": "TRACE", + "Level": "TRACE" }, - "DatabaseSettings": { + "Database": { "AuthPlugin": "mysql_native_password", "ConnectionString": "mysql+mysqlconnector://cpl:$credentials@localhost/cpl", "Credentials": "Y3Bs", diff --git a/tests/custom/database/src/appsettings.edrafts-pc.json b/tests/custom/database/src/appsettings.edrafts-pc.json index 64b534b1..3016d50a 100644 --- a/tests/custom/database/src/appsettings.edrafts-pc.json +++ b/tests/custom/database/src/appsettings.edrafts-pc.json @@ -1,19 +1,19 @@ { - "TimeFormatSettings": { + "TimeFormat": { "DateFormat": "%Y-%m-%d", "TimeFormat": "%H:%M:%S", "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" }, - "LoggingSettings": { + "Log": { "Path": "logs/", "Filename": "log_$start_time.log", - "ConsoleLogLevel": "TRACE", - "FileLogLevel": "TRACE" + "ConsoleLevel": "TRACE", + "Level": "TRACE" }, - "DatabaseSettings": { + "Database": { "Host": "localhost", "User": "cpl", "Port": 3306, diff --git a/tests/custom/database/src/appsettings.json b/tests/custom/database/src/appsettings.json index fd8ddf6c..089c1b07 100644 --- a/tests/custom/database/src/appsettings.json +++ b/tests/custom/database/src/appsettings.json @@ -1,15 +1,15 @@ { - "TimeFormatSettings": { + "TimeFormat": { "DateFormat": "%Y-%m-%d", "TimeFormat": "%H:%M:%S", "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" }, - "LoggingSettings": { + "Log": { "Path": "logs/", "Filename": "log_$start_time.log", - "ConsoleLogLevel": "ERROR", - "FileLogLevel": "WARN" + "ConsoleLevel": "ERROR", + "Level": "WARNING" } } \ No newline at end of file diff --git a/tests/custom/di/appsettings.json b/tests/custom/di/appsettings.json index 629e6ebd..8e837e9b 100644 --- a/tests/custom/di/appsettings.json +++ b/tests/custom/di/appsettings.json @@ -1,15 +1,15 @@ { - "TimeFormatSettings": { + "TimeFormat": { "DateFormat": "%Y-%m-%d", "TimeFormat": "%H:%M:%S", "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" }, - "LoggingSettings": { + "Logging": { "Path": "logs/", "Filename": "log_$start_time.log", - "ConsoleLogLevel": "ERROR", - "FileLogLevel": "WARN" + "ConsoleLevel": "ERROR", + "Level": "WARN" } } diff --git a/tests/custom/di/cpl-workspace.json b/tests/custom/di/cpl-workspace.json index 4e95d495..44506c16 100644 --- a/tests/custom/di/cpl-workspace.json +++ b/tests/custom/di/cpl-workspace.json @@ -1,5 +1,5 @@ { - "WorkspaceSettings": { + "Workspace": { "DefaultProject": "di", "Projects": { "di": "src/di/di.json" diff --git a/tests/custom/di/src/di/di.json b/tests/custom/di/src/di/di.json index 8058551d..f85f9d11 100644 --- a/tests/custom/di/src/di/di.json +++ b/tests/custom/di/src/di/di.json @@ -1,5 +1,5 @@ { - "ProjectSettings": { + "Project": { "Name": "di", "Version": { "Major": "0", @@ -25,7 +25,7 @@ "PythonPath": {}, "Classifiers": [] }, - "BuildSettings": { + "Build": { "ProjectType": "console", "SourcePath": "", "OutputPath": "../../dist", diff --git a/tests/custom/general/src/general/appsettings.development.json b/tests/custom/general/src/general/appsettings.development.json index 62ec6c61..4f0c6a8a 100644 --- a/tests/custom/general/src/general/appsettings.development.json +++ b/tests/custom/general/src/general/appsettings.development.json @@ -1,8 +1,8 @@ { - "LoggingSettings": { + "Logging": { "Path": "logs/", "Filename": "log_$start_time.log", - "ConsoleLogLevel": "TRACE", - "FileLogLevel": "TRACE" + "ConsoleLevel": "TRACE", + "Level": "TRACE" } } \ No newline at end of file diff --git a/tests/custom/general/src/general/appsettings.edrafts-lapi.json b/tests/custom/general/src/general/appsettings.edrafts-lapi.json index 0b2e194a..6c726627 100644 --- a/tests/custom/general/src/general/appsettings.edrafts-lapi.json +++ b/tests/custom/general/src/general/appsettings.edrafts-lapi.json @@ -1,63 +1,20 @@ { - "TimeFormatSettings": { + "TimeFormat": { "DateFormat": "%Y-%m-%d", "TimeFormat": "%H:%M:%S", "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" }, - "LoggingSettings": { + "Logging": { "Path": "logs/", "Filename": "log_$start_time.log", - "ConsoleLogLevel": "TRACE", - "FileLogLevel": "TRACE" + "ConsoleLevel": "TRACE", + "Level": "TRACE" }, - "EMailClientSettings": { + "EMailClient": { "Host": "mail.sh-edraft.de", "Port": "587", "UserName": "dev-srv@sh-edraft.de", "Credentials": "RmBOQX1eNFYiYjgsSid3fV1nelc2WA==" - }, - "PublishSettings": { - "SourcePath": "../", - "DistPath": "../../dist", - "Templates": [ - { - "TemplatePath": "../../publish_templates/all_template.txt", - "Name": "all", - "Description": "", - "LongDescription": "", - "CopyrightDate": "2020", - "CopyrightName": "sh-edraft.de", - "LicenseName": "MIT", - "LicenseDescription": ", see LICENSE for more details.", - "Title": "", - "Author": "Sven Heidemann", - "Version": { - "Major": 2020, - "Minor": 12, - "Micro": 9 - } - }, - { - "TemplatePath": "../../publish_templates/all_template.txt", - "Name": "sh_edraft", - "Description": "common python library", - "LongDescription": "Library to share common classes and models used at sh-edraft.de", - "CopyrightDate": "2020", - "CopyrightName": "sh-edraft.de", - "LicenseName": "MIT", - "LicenseDescription": ", see LICENSE for more details.", - "Title": "", - "Author": "Sven Heidemann", - "Version": { - "Major": 2020, - "Minor": 12, - "Micro": 9 - } - } - ], - "IncludedFiles": [], - "ExcludedFiles": [], - "TemplateEnding": "_template.txt" } } \ No newline at end of file diff --git a/tests/custom/general/src/general/appsettings.edrafts-pc.json b/tests/custom/general/src/general/appsettings.edrafts-pc.json index 996cbe72..c036e649 100644 --- a/tests/custom/general/src/general/appsettings.edrafts-pc.json +++ b/tests/custom/general/src/general/appsettings.edrafts-pc.json @@ -1,26 +1,26 @@ { - "TimeFormatSettings": { + "TimeFormat": { "DateFormat": "%Y-%m-%d", "TimeFormat": "%H:%M:%S", "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" }, - "LoggingSettings": { + "Logging": { "Path": "logs/", "Filename": "log_$start_time.log", - "ConsoleLogLevel": "TRACE", - "FileLogLevel": "TRACE" + "ConsoleLevel": "TRACE", + "Level": "TRACE" }, - "EMailClientSettings": { + "EMailClient": { "Host": "mail.sh-edraft.de", "Port": "587", "UserName": "dev-srv@sh-edraft.de", "Credentials": "RmBOQX1eNFYiYjgsSid3fV1nelc2WA==" }, - "DatabaseSettings": { + "Database": { "Host": "localhost", "User": "sh_cpl", "Password": "MHZhc0Y2bjhKc1VUMWV0Qw==", @@ -31,7 +31,7 @@ "AuthPlugin": "mysql_native_password" }, - "TestSettings": { + "Test": { "Value": 20 } } \ No newline at end of file diff --git a/tests/custom/general/src/general/appsettings.json b/tests/custom/general/src/general/appsettings.json index fd8ddf6c..34d14b58 100644 --- a/tests/custom/general/src/general/appsettings.json +++ b/tests/custom/general/src/general/appsettings.json @@ -1,15 +1,15 @@ { - "TimeFormatSettings": { + "TimeFormat": { "DateFormat": "%Y-%m-%d", "TimeFormat": "%H:%M:%S", "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" }, - "LoggingSettings": { + "Logging": { "Path": "logs/", "Filename": "log_$start_time.log", - "ConsoleLogLevel": "ERROR", - "FileLogLevel": "WARN" + "ConsoleLevel": "ERROR", + "Level": "WARN" } } \ No newline at end of file diff --git a/tests/custom/general/src/general/general.json b/tests/custom/general/src/general/general.json index aa7ce5d7..c0367c2e 100644 --- a/tests/custom/general/src/general/general.json +++ b/tests/custom/general/src/general/general.json @@ -1,5 +1,5 @@ { - "ProjectSettings": { + "Project": { "Name": "general", "Version": { "Major": "2021", @@ -30,7 +30,7 @@ }, "Classifiers": [] }, - "BuildSettings": { + "Build": { "ProjectType": "console", "SourcePath": "", "OutputPath": "dist", diff --git a/tests/custom/translation/cpl-workspace.json b/tests/custom/translation/cpl-workspace.json index e75a5784..a29e1851 100644 --- a/tests/custom/translation/cpl-workspace.json +++ b/tests/custom/translation/cpl-workspace.json @@ -1,5 +1,5 @@ { - "WorkspaceSettings": { + "Workspace": { "DefaultProject": "translation", "Projects": { "translation": "src/translation/translation.json" diff --git a/tests/custom/translation/src/translation/appsettings.json b/tests/custom/translation/src/translation/appsettings.json index e307f59c..29fbaef8 100644 --- a/tests/custom/translation/src/translation/appsettings.json +++ b/tests/custom/translation/src/translation/appsettings.json @@ -1,16 +1,16 @@ { - "TimeFormatSettings": { + "TimeFormat": { "DateFormat": "%Y-%m-%d", "TimeFormat": "%H:%M:%S", "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" }, - "LoggingSettings": { + "Logging": { "Path": "logs/", "Filename": "log_$start_time.log", - "ConsoleLogLevel": "ERROR", - "FileLogLevel": "WARN" + "ConsoleLevel": "ERROR", + "Level": "WARN" }, "Translation": { diff --git a/tests/custom/translation/src/translation/translation.json b/tests/custom/translation/src/translation/translation.json index dbbe2dcd..426c1db1 100644 --- a/tests/custom/translation/src/translation/translation.json +++ b/tests/custom/translation/src/translation/translation.json @@ -1,5 +1,5 @@ { - "ProjectSettings": { + "Project": { "Name": "translation", "Version": { "Major": "0", @@ -25,7 +25,7 @@ "PythonPath": {}, "Classifiers": [] }, - "BuildSettings": { + "Build": { "ProjectType": "console", "SourcePath": "", "OutputPath": "../../dist", diff --git a/unittests/unittests/unittests.json b/unittests/unittests/unittests.json index 93e25267..1b2c393e 100644 --- a/unittests/unittests/unittests.json +++ b/unittests/unittests/unittests.json @@ -1,5 +1,5 @@ { - "ProjectSettings": { + "Project": { "Name": "unittests", "Version": { "Major": "2024", @@ -23,7 +23,7 @@ "Classifiers": [], "DevDependencies": [] }, - "BuildSettings": { + "Build": { "ProjectType": "unittest", "SourcePath": "", "OutputPath": "../../dist", diff --git a/unittests/unittests_cli/unittests_cli.json b/unittests/unittests_cli/unittests_cli.json index c628239c..84a10f1c 100644 --- a/unittests/unittests_cli/unittests_cli.json +++ b/unittests/unittests_cli/unittests_cli.json @@ -1,5 +1,5 @@ { - "ProjectSettings": { + "Project": { "Name": "unittest_cli", "Version": { "Major": "2024", @@ -24,7 +24,7 @@ "Classifiers": [], "DevDependencies": [] }, - "BuildSettings": { + "Build": { "ProjectType": "library", "SourcePath": "", "OutputPath": "../../dist", diff --git a/unittests/unittests_core/configuration/test-settings.json b/unittests/unittests_core/configuration/test-settings.json index 702de250..e6cb1f59 100644 --- a/unittests/unittests_core/configuration/test-settings.json +++ b/unittests/unittests_core/configuration/test-settings.json @@ -1,17 +1,17 @@ { - "TimeFormatSettings": { + "TimeFormat": { "DateFormat": "%Y-%m-%d", "TimeFormat": "%H:%M:%S", "DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f", "DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S" }, - "LoggingSettings": { + "Logging": { "Path": "logs/$date_now/", "Filename": "bot.log", - "ConsoleLogLevel": "TRACE", - "FileLogLevel": "TRACE" + "ConsoleLevel": "TRACE", + "Level": "TRACE" }, - "DatabaseSettings": { + "Database": { "Host": "localhost", "User": "local", "Password": "bG9jYWw=", diff --git a/unittests/unittests_core/unittests_core.json b/unittests/unittests_core/unittests_core.json index b975723e..7e3aca8a 100644 --- a/unittests/unittests_core/unittests_core.json +++ b/unittests/unittests_core/unittests_core.json @@ -1,5 +1,5 @@ { - "ProjectSettings": { + "Project": { "Name": "unittest_core", "Version": { "Major": "2024", @@ -23,7 +23,7 @@ "Classifiers": [], "DevDependencies": [] }, - "BuildSettings": { + "Build": { "ProjectType": "library", "SourcePath": "", "OutputPath": "../../dist", diff --git a/unittests/unittests_query/unittests_query.json b/unittests/unittests_query/unittests_query.json index d8f614a3..fd0accd1 100644 --- a/unittests/unittests_query/unittests_query.json +++ b/unittests/unittests_query/unittests_query.json @@ -1,5 +1,5 @@ { - "ProjectSettings": { + "Project": { "Name": "unittest_query", "Version": { "Major": "2024", @@ -24,7 +24,7 @@ "Classifiers": [], "DevDependencies": [] }, - "BuildSettings": { + "Build": { "ProjectType": "library", "SourcePath": "", "OutputPath": "../../dist", diff --git a/unittests/unittests_shared/unittests_shared.json b/unittests/unittests_shared/unittests_shared.json index 74fca1ca..d90e41c2 100644 --- a/unittests/unittests_shared/unittests_shared.json +++ b/unittests/unittests_shared/unittests_shared.json @@ -1,5 +1,5 @@ { - "ProjectSettings": { + "Project": { "Name": "unittest_shared", "Version": { "Major": "2024", @@ -23,7 +23,7 @@ "Classifiers": [], "DevDependencies": [] }, - "BuildSettings": { + "Build": { "ProjectType": "library", "SourcePath": "", "OutputPath": "../../dist", diff --git a/unittests/unittests_translation/unittests_translation.json b/unittests/unittests_translation/unittests_translation.json index 956b832a..1b7474a0 100644 --- a/unittests/unittests_translation/unittests_translation.json +++ b/unittests/unittests_translation/unittests_translation.json @@ -1,5 +1,5 @@ { - "ProjectSettings": { + "Project": { "Name": "unittests_translation", "Version": { "Major": "2024", @@ -26,7 +26,7 @@ "PythonPath": {}, "Classifiers": [] }, - "BuildSettings": { + "Build": { "ProjectType": "unittest", "SourcePath": "", "OutputPath": "../../dist",