WIP: dev into master #184
@@ -3,9 +3,9 @@ from typing import Callable, Self
|
|||||||
|
|
||||||
from cpl.application.host import Host
|
from cpl.application.host import Host
|
||||||
from cpl.core.console.console import Console
|
from cpl.core.console.console import Console
|
||||||
from cpl.core.environment.environment import Environment
|
from cpl.core.log import LogSettings
|
||||||
from cpl.core.log.logger_abc import LoggerABC
|
|
||||||
from cpl.core.log.log_level_enum import LogLevel
|
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
|
from cpl.dependency.service_provider_abc import ServiceProviderABC
|
||||||
|
|
||||||
|
|
||||||
@@ -43,7 +43,10 @@ class ApplicationABC(ABC):
|
|||||||
|
|
||||||
def with_logging(self, level: LogLevel = None):
|
def with_logging(self, level: LogLevel = None):
|
||||||
if level is 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 = self._services.get_service(LoggerABC)
|
||||||
logger.set_level(level)
|
logger.set_level(level)
|
||||||
|
|||||||
@@ -1,37 +1,17 @@
|
|||||||
from typing import Optional
|
from typing import Optional
|
||||||
|
|
||||||
from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC
|
from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC
|
||||||
from cpl.core.environment import Environment
|
|
||||||
|
|
||||||
|
|
||||||
class KeycloakSettings(ConfigurationModelABC):
|
class KeycloakSettings(ConfigurationModelABC):
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
url: str = Environment.get("KEYCLOAK_URL", str),
|
src: Optional[dict] = None,
|
||||||
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),
|
|
||||||
):
|
):
|
||||||
ConfigurationModelABC.__init__(self)
|
ConfigurationModelABC.__init__(self, src, "KEYCLOAK")
|
||||||
|
|
||||||
self._url: Optional[str] = url
|
self.option("url", str, required=True)
|
||||||
self._client_id: Optional[str] = client_id
|
self.option("client_id", str, required=True)
|
||||||
self._realm: Optional[str] = realm
|
self.option("realm", str, required=True)
|
||||||
self._client_secret: Optional[str] = client_secret
|
self.option("client_secret", str, required=True)
|
||||||
|
|
||||||
@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
|
|
||||||
|
|||||||
@@ -8,7 +8,6 @@ from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC
|
|||||||
from cpl.core.console.console import Console
|
from cpl.core.console.console import Console
|
||||||
from cpl.core.console.foreground_color_enum import ForegroundColorEnum
|
from cpl.core.console.foreground_color_enum import ForegroundColorEnum
|
||||||
from cpl.core.typing import D, T
|
from cpl.core.typing import D, T
|
||||||
from cpl.core.utils.json_processor import JSONProcessor
|
|
||||||
|
|
||||||
|
|
||||||
class Configuration:
|
class Configuration:
|
||||||
@@ -116,9 +115,7 @@ class Configuration:
|
|||||||
if sub.__name__ != key and sub.__name__.replace("Settings", "") != key:
|
if sub.__name__ != key and sub.__name__.replace("Settings", "") != key:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
configuration = JSONProcessor.process(sub, value)
|
cls.set(sub, sub(value))
|
||||||
|
|
||||||
cls.set(sub, configuration)
|
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def set(cls, key: Any, value: T):
|
def set(cls, key: Any, value: T):
|
||||||
|
|||||||
@@ -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):
|
class ConfigurationModelABC(ABC):
|
||||||
r"""
|
r"""
|
||||||
ABC for configuration model classes
|
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()}
|
||||||
|
|||||||
@@ -5,49 +5,14 @@ from cpl.core.log.log_level_enum import LogLevel
|
|||||||
|
|
||||||
|
|
||||||
class LogSettings(ConfigurationModelABC):
|
class LogSettings(ConfigurationModelABC):
|
||||||
r"""Representation of logging settings"""
|
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
path: str = None,
|
src: Optional[dict] = None,
|
||||||
filename: str = None,
|
|
||||||
console_log_level: LogLevel = None,
|
|
||||||
file_log_level: LogLevel = None,
|
|
||||||
):
|
):
|
||||||
ConfigurationModelABC.__init__(self)
|
ConfigurationModelABC.__init__(self, src)
|
||||||
self._path: Optional[str] = path
|
|
||||||
self._filename: Optional[str] = filename
|
|
||||||
self._console: Optional[LogLevel] = console_log_level
|
|
||||||
self._level: Optional[LogLevel] = file_log_level
|
|
||||||
|
|
||||||
@property
|
self.option("path", str, default="logs")
|
||||||
def path(self) -> str:
|
self.option("filename", str, default="app.log")
|
||||||
return self._path
|
self.option("console_level", LogLevel, default=LogLevel.info)
|
||||||
|
self.option("level", LogLevel, default=LogLevel.info)
|
||||||
@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
|
|
||||||
|
|||||||
@@ -3,3 +3,4 @@ from .credential_manager import CredentialManager
|
|||||||
from .json_processor import JSONProcessor
|
from .json_processor import JSONProcessor
|
||||||
from .pip import Pip
|
from .pip import Pip
|
||||||
from .string import String
|
from .string import String
|
||||||
|
from .get_value import get_value
|
||||||
|
|||||||
64
src/cpl-core/cpl/core/utils/cast.py
Normal file
64
src/cpl-core/cpl/core/utils/cast.py
Normal file
@@ -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)
|
||||||
@@ -6,8 +6,10 @@ from cpl.core.log.logger import Logger
|
|||||||
|
|
||||||
_logger = Logger(__name__)
|
_logger = Logger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class CredentialManager:
|
class CredentialManager:
|
||||||
r"""Handles credential encryption and decryption"""
|
r"""Handles credential encryption and decryption"""
|
||||||
|
|
||||||
_secret: str = None
|
_secret: str = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
from enum import Enum
|
|
||||||
from typing import Type, Optional
|
from typing import Type, Optional
|
||||||
|
|
||||||
from cpl.core.typing import T
|
from cpl.core.typing import T
|
||||||
|
from cpl.core.utils.cast import cast
|
||||||
|
|
||||||
|
|
||||||
def get_value(
|
def get_value(
|
||||||
@@ -38,33 +38,6 @@ def get_value(
|
|||||||
return value
|
return value
|
||||||
|
|
||||||
try:
|
try:
|
||||||
if cast_type == bool:
|
cast(cast_type, value, list_delimiter)
|
||||||
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)
|
|
||||||
except (ValueError, TypeError):
|
except (ValueError, TypeError):
|
||||||
return default
|
return default
|
||||||
|
|||||||
@@ -17,7 +17,11 @@ class String:
|
|||||||
Returns:
|
Returns:
|
||||||
String converted to CamelCase
|
String converted to CamelCase
|
||||||
"""
|
"""
|
||||||
return re.sub(r"(?<!^)(?=[A-Z])", "_", s).lower()
|
|
||||||
|
s = String.to_snake_case(s)
|
||||||
|
words = s.split('_')
|
||||||
|
return words[0] + ''.join(word.title() for word in words[1:])
|
||||||
|
# return re.sub(r"(?<!^)(?=[A-Z])", "_", s).lower()
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def to_snake_case(chars: str) -> str:
|
def to_snake_case(chars: str) -> str:
|
||||||
|
|||||||
@@ -2,74 +2,23 @@ from typing import Optional
|
|||||||
|
|
||||||
from cpl.core.configuration import Configuration
|
from cpl.core.configuration import Configuration
|
||||||
from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC
|
from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC
|
||||||
from cpl.core.environment import Environment
|
|
||||||
|
|
||||||
|
|
||||||
class DatabaseSettings(ConfigurationModelABC):
|
class DatabaseSettings(ConfigurationModelABC):
|
||||||
r"""Represents settings for the database connection"""
|
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
host: str = Environment.get("DB_HOST", str),
|
src: Optional[dict] = None,
|
||||||
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),
|
|
||||||
):
|
):
|
||||||
ConfigurationModelABC.__init__(self)
|
ConfigurationModelABC.__init__(self, src, "DB")
|
||||||
|
|
||||||
self._host: Optional[str] = host
|
self.option("host", str, required=True)
|
||||||
self._port: Optional[int] = port
|
self.option("port", int, Configuration.get("DB_DEFAULT_PORT"), required=True)
|
||||||
self._user: Optional[str] = user
|
self.option("user", str, required=True)
|
||||||
self._password: Optional[str] = password
|
self.option("password", str, required=True)
|
||||||
self._database: Optional[str] = database
|
self.option("database", str, required=True)
|
||||||
self._charset: Optional[str] = charset
|
self.option("charset", str, "utf8mb4")
|
||||||
self._use_unicode: Optional[bool] = use_unicode
|
self.option("use_unicode", bool, False)
|
||||||
self._buffered: Optional[bool] = buffered
|
self.option("buffered", bool, False)
|
||||||
self._auth_plugin: Optional[str] = auth_plugin
|
self.option("auth_plugin", str, "caching_sha2_password")
|
||||||
self._ssl_disabled: Optional[bool] = ssl_disabled
|
self.option("ssl_disabled", bool, False)
|
||||||
|
|
||||||
@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
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ from cpl.dependency import ServiceCollection as _ServiceCollection
|
|||||||
from .abc.email_client_abc import EMailClientABC
|
from .abc.email_client_abc import EMailClientABC
|
||||||
from .email_client import EMailClient
|
from .email_client import EMailClient
|
||||||
from .email_client_settings import EMailClientSettings
|
from .email_client_settings import EMailClientSettings
|
||||||
from .email_client_settings_name_enum import EMailClientSettingsNameEnum
|
|
||||||
from .email_model import EMail
|
from .email_model import EMail
|
||||||
from .mail_logger import MailLogger
|
from .mail_logger import MailLogger
|
||||||
|
|
||||||
|
|||||||
@@ -1,51 +1,17 @@
|
|||||||
|
from typing import Optional
|
||||||
|
|
||||||
from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC
|
from cpl.core.configuration.configuration_model_abc import ConfigurationModelABC
|
||||||
|
|
||||||
|
|
||||||
class EMailClientSettings(ConfigurationModelABC):
|
class EMailClientSettings(ConfigurationModelABC):
|
||||||
r"""Representation of mailing settings"""
|
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
host: str = None,
|
src: Optional[dict] = None,
|
||||||
port: int = None,
|
|
||||||
user_name: str = None,
|
|
||||||
credentials: str = None,
|
|
||||||
):
|
):
|
||||||
ConfigurationModelABC.__init__(self)
|
ConfigurationModelABC.__init__(self, src, "EMAIL")
|
||||||
|
|
||||||
self._host: str = host
|
self.option("host", str, required=True)
|
||||||
self._port: int = port
|
self.option("port", int, 587, required=True)
|
||||||
self._user_name: str = user_name
|
self.option("user_name", str, required=True)
|
||||||
self._credentials: str = credentials
|
self.option("credentials", str, required=True)
|
||||||
|
|
||||||
@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
|
|
||||||
@@ -1,8 +0,0 @@
|
|||||||
from enum import Enum
|
|
||||||
|
|
||||||
|
|
||||||
class EMailClientSettingsNameEnum(Enum):
|
|
||||||
host = "Host"
|
|
||||||
port = "Port"
|
|
||||||
user_name = "UserName"
|
|
||||||
credentials = "Credentials"
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ProjectSettings": {
|
"Project": {
|
||||||
"Name": "database",
|
"Name": "database",
|
||||||
"Version": {
|
"Version": {
|
||||||
"Major": "0",
|
"Major": "0",
|
||||||
@@ -22,7 +22,7 @@
|
|||||||
"PythonPath": {},
|
"PythonPath": {},
|
||||||
"Classifiers": []
|
"Classifiers": []
|
||||||
},
|
},
|
||||||
"BuildSettings": {
|
"Build": {
|
||||||
"ProjectType": "console",
|
"ProjectType": "console",
|
||||||
"SourcePath": "src",
|
"SourcePath": "src",
|
||||||
"OutputPath": "dist",
|
"OutputPath": "dist",
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"LoggingSettings": {
|
"Logging": {
|
||||||
"Path": "logs/",
|
"Path": "logs/",
|
||||||
"Filename": "log_$start_time.log",
|
"Filename": "log_$start_time.log",
|
||||||
"ConsoleLogLevel": "TRACE",
|
"ConsoleLevel": "TRACE",
|
||||||
"FileLogLevel": "TRACE"
|
"Level": "TRACE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,19 +1,19 @@
|
|||||||
{
|
{
|
||||||
"TimeFormatSettings": {
|
"TimeFormat": {
|
||||||
"DateFormat": "%Y-%m-%d",
|
"DateFormat": "%Y-%m-%d",
|
||||||
"TimeFormat": "%H:%M:%S",
|
"TimeFormat": "%H:%M:%S",
|
||||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||||
},
|
},
|
||||||
|
|
||||||
"LoggingSettings": {
|
"Log": {
|
||||||
"Path": "logs/",
|
"Path": "logs/",
|
||||||
"Filename": "log_$start_time.log",
|
"Filename": "log_$start_time.log",
|
||||||
"ConsoleLogLevel": "TRACE",
|
"ConsoleLevel": "TRACE",
|
||||||
"FileLogLevel": "TRACE"
|
"Level": "TRACE"
|
||||||
},
|
},
|
||||||
|
|
||||||
"DatabaseSettings": {
|
"Database": {
|
||||||
"AuthPlugin": "mysql_native_password",
|
"AuthPlugin": "mysql_native_password",
|
||||||
"ConnectionString": "mysql+mysqlconnector://cpl:$credentials@localhost/cpl",
|
"ConnectionString": "mysql+mysqlconnector://cpl:$credentials@localhost/cpl",
|
||||||
"Credentials": "Y3Bs",
|
"Credentials": "Y3Bs",
|
||||||
|
|||||||
@@ -1,19 +1,19 @@
|
|||||||
{
|
{
|
||||||
"TimeFormatSettings": {
|
"TimeFormat": {
|
||||||
"DateFormat": "%Y-%m-%d",
|
"DateFormat": "%Y-%m-%d",
|
||||||
"TimeFormat": "%H:%M:%S",
|
"TimeFormat": "%H:%M:%S",
|
||||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||||
},
|
},
|
||||||
|
|
||||||
"LoggingSettings": {
|
"Log": {
|
||||||
"Path": "logs/",
|
"Path": "logs/",
|
||||||
"Filename": "log_$start_time.log",
|
"Filename": "log_$start_time.log",
|
||||||
"ConsoleLogLevel": "TRACE",
|
"ConsoleLevel": "TRACE",
|
||||||
"FileLogLevel": "TRACE"
|
"Level": "TRACE"
|
||||||
},
|
},
|
||||||
|
|
||||||
"DatabaseSettings": {
|
"Database": {
|
||||||
"Host": "localhost",
|
"Host": "localhost",
|
||||||
"User": "cpl",
|
"User": "cpl",
|
||||||
"Port": 3306,
|
"Port": 3306,
|
||||||
|
|||||||
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"TimeFormatSettings": {
|
"TimeFormat": {
|
||||||
"DateFormat": "%Y-%m-%d",
|
"DateFormat": "%Y-%m-%d",
|
||||||
"TimeFormat": "%H:%M:%S",
|
"TimeFormat": "%H:%M:%S",
|
||||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||||
},
|
},
|
||||||
|
|
||||||
"LoggingSettings": {
|
"Log": {
|
||||||
"Path": "logs/",
|
"Path": "logs/",
|
||||||
"Filename": "log_$start_time.log",
|
"Filename": "log_$start_time.log",
|
||||||
"ConsoleLogLevel": "ERROR",
|
"ConsoleLevel": "ERROR",
|
||||||
"FileLogLevel": "WARN"
|
"Level": "WARNING"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"TimeFormatSettings": {
|
"TimeFormat": {
|
||||||
"DateFormat": "%Y-%m-%d",
|
"DateFormat": "%Y-%m-%d",
|
||||||
"TimeFormat": "%H:%M:%S",
|
"TimeFormat": "%H:%M:%S",
|
||||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||||
},
|
},
|
||||||
|
|
||||||
"LoggingSettings": {
|
"Logging": {
|
||||||
"Path": "logs/",
|
"Path": "logs/",
|
||||||
"Filename": "log_$start_time.log",
|
"Filename": "log_$start_time.log",
|
||||||
"ConsoleLogLevel": "ERROR",
|
"ConsoleLevel": "ERROR",
|
||||||
"FileLogLevel": "WARN"
|
"Level": "WARN"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"WorkspaceSettings": {
|
"Workspace": {
|
||||||
"DefaultProject": "di",
|
"DefaultProject": "di",
|
||||||
"Projects": {
|
"Projects": {
|
||||||
"di": "src/di/di.json"
|
"di": "src/di/di.json"
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ProjectSettings": {
|
"Project": {
|
||||||
"Name": "di",
|
"Name": "di",
|
||||||
"Version": {
|
"Version": {
|
||||||
"Major": "0",
|
"Major": "0",
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
"PythonPath": {},
|
"PythonPath": {},
|
||||||
"Classifiers": []
|
"Classifiers": []
|
||||||
},
|
},
|
||||||
"BuildSettings": {
|
"Build": {
|
||||||
"ProjectType": "console",
|
"ProjectType": "console",
|
||||||
"SourcePath": "",
|
"SourcePath": "",
|
||||||
"OutputPath": "../../dist",
|
"OutputPath": "../../dist",
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"LoggingSettings": {
|
"Logging": {
|
||||||
"Path": "logs/",
|
"Path": "logs/",
|
||||||
"Filename": "log_$start_time.log",
|
"Filename": "log_$start_time.log",
|
||||||
"ConsoleLogLevel": "TRACE",
|
"ConsoleLevel": "TRACE",
|
||||||
"FileLogLevel": "TRACE"
|
"Level": "TRACE"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,63 +1,20 @@
|
|||||||
{
|
{
|
||||||
"TimeFormatSettings": {
|
"TimeFormat": {
|
||||||
"DateFormat": "%Y-%m-%d",
|
"DateFormat": "%Y-%m-%d",
|
||||||
"TimeFormat": "%H:%M:%S",
|
"TimeFormat": "%H:%M:%S",
|
||||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||||
},
|
},
|
||||||
"LoggingSettings": {
|
"Logging": {
|
||||||
"Path": "logs/",
|
"Path": "logs/",
|
||||||
"Filename": "log_$start_time.log",
|
"Filename": "log_$start_time.log",
|
||||||
"ConsoleLogLevel": "TRACE",
|
"ConsoleLevel": "TRACE",
|
||||||
"FileLogLevel": "TRACE"
|
"Level": "TRACE"
|
||||||
},
|
},
|
||||||
"EMailClientSettings": {
|
"EMailClient": {
|
||||||
"Host": "mail.sh-edraft.de",
|
"Host": "mail.sh-edraft.de",
|
||||||
"Port": "587",
|
"Port": "587",
|
||||||
"UserName": "dev-srv@sh-edraft.de",
|
"UserName": "dev-srv@sh-edraft.de",
|
||||||
"Credentials": "RmBOQX1eNFYiYjgsSid3fV1nelc2WA=="
|
"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"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,26 +1,26 @@
|
|||||||
{
|
{
|
||||||
"TimeFormatSettings": {
|
"TimeFormat": {
|
||||||
"DateFormat": "%Y-%m-%d",
|
"DateFormat": "%Y-%m-%d",
|
||||||
"TimeFormat": "%H:%M:%S",
|
"TimeFormat": "%H:%M:%S",
|
||||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||||
},
|
},
|
||||||
|
|
||||||
"LoggingSettings": {
|
"Logging": {
|
||||||
"Path": "logs/",
|
"Path": "logs/",
|
||||||
"Filename": "log_$start_time.log",
|
"Filename": "log_$start_time.log",
|
||||||
"ConsoleLogLevel": "TRACE",
|
"ConsoleLevel": "TRACE",
|
||||||
"FileLogLevel": "TRACE"
|
"Level": "TRACE"
|
||||||
},
|
},
|
||||||
|
|
||||||
"EMailClientSettings": {
|
"EMailClient": {
|
||||||
"Host": "mail.sh-edraft.de",
|
"Host": "mail.sh-edraft.de",
|
||||||
"Port": "587",
|
"Port": "587",
|
||||||
"UserName": "dev-srv@sh-edraft.de",
|
"UserName": "dev-srv@sh-edraft.de",
|
||||||
"Credentials": "RmBOQX1eNFYiYjgsSid3fV1nelc2WA=="
|
"Credentials": "RmBOQX1eNFYiYjgsSid3fV1nelc2WA=="
|
||||||
},
|
},
|
||||||
|
|
||||||
"DatabaseSettings": {
|
"Database": {
|
||||||
"Host": "localhost",
|
"Host": "localhost",
|
||||||
"User": "sh_cpl",
|
"User": "sh_cpl",
|
||||||
"Password": "MHZhc0Y2bjhKc1VUMWV0Qw==",
|
"Password": "MHZhc0Y2bjhKc1VUMWV0Qw==",
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
"AuthPlugin": "mysql_native_password"
|
"AuthPlugin": "mysql_native_password"
|
||||||
},
|
},
|
||||||
|
|
||||||
"TestSettings": {
|
"Test": {
|
||||||
"Value": 20
|
"Value": 20
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"TimeFormatSettings": {
|
"TimeFormat": {
|
||||||
"DateFormat": "%Y-%m-%d",
|
"DateFormat": "%Y-%m-%d",
|
||||||
"TimeFormat": "%H:%M:%S",
|
"TimeFormat": "%H:%M:%S",
|
||||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||||
},
|
},
|
||||||
|
|
||||||
"LoggingSettings": {
|
"Logging": {
|
||||||
"Path": "logs/",
|
"Path": "logs/",
|
||||||
"Filename": "log_$start_time.log",
|
"Filename": "log_$start_time.log",
|
||||||
"ConsoleLogLevel": "ERROR",
|
"ConsoleLevel": "ERROR",
|
||||||
"FileLogLevel": "WARN"
|
"Level": "WARN"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ProjectSettings": {
|
"Project": {
|
||||||
"Name": "general",
|
"Name": "general",
|
||||||
"Version": {
|
"Version": {
|
||||||
"Major": "2021",
|
"Major": "2021",
|
||||||
@@ -30,7 +30,7 @@
|
|||||||
},
|
},
|
||||||
"Classifiers": []
|
"Classifiers": []
|
||||||
},
|
},
|
||||||
"BuildSettings": {
|
"Build": {
|
||||||
"ProjectType": "console",
|
"ProjectType": "console",
|
||||||
"SourcePath": "",
|
"SourcePath": "",
|
||||||
"OutputPath": "dist",
|
"OutputPath": "dist",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"WorkspaceSettings": {
|
"Workspace": {
|
||||||
"DefaultProject": "translation",
|
"DefaultProject": "translation",
|
||||||
"Projects": {
|
"Projects": {
|
||||||
"translation": "src/translation/translation.json"
|
"translation": "src/translation/translation.json"
|
||||||
|
|||||||
@@ -1,16 +1,16 @@
|
|||||||
{
|
{
|
||||||
"TimeFormatSettings": {
|
"TimeFormat": {
|
||||||
"DateFormat": "%Y-%m-%d",
|
"DateFormat": "%Y-%m-%d",
|
||||||
"TimeFormat": "%H:%M:%S",
|
"TimeFormat": "%H:%M:%S",
|
||||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||||
},
|
},
|
||||||
|
|
||||||
"LoggingSettings": {
|
"Logging": {
|
||||||
"Path": "logs/",
|
"Path": "logs/",
|
||||||
"Filename": "log_$start_time.log",
|
"Filename": "log_$start_time.log",
|
||||||
"ConsoleLogLevel": "ERROR",
|
"ConsoleLevel": "ERROR",
|
||||||
"FileLogLevel": "WARN"
|
"Level": "WARN"
|
||||||
},
|
},
|
||||||
|
|
||||||
"Translation": {
|
"Translation": {
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ProjectSettings": {
|
"Project": {
|
||||||
"Name": "translation",
|
"Name": "translation",
|
||||||
"Version": {
|
"Version": {
|
||||||
"Major": "0",
|
"Major": "0",
|
||||||
@@ -25,7 +25,7 @@
|
|||||||
"PythonPath": {},
|
"PythonPath": {},
|
||||||
"Classifiers": []
|
"Classifiers": []
|
||||||
},
|
},
|
||||||
"BuildSettings": {
|
"Build": {
|
||||||
"ProjectType": "console",
|
"ProjectType": "console",
|
||||||
"SourcePath": "",
|
"SourcePath": "",
|
||||||
"OutputPath": "../../dist",
|
"OutputPath": "../../dist",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ProjectSettings": {
|
"Project": {
|
||||||
"Name": "unittests",
|
"Name": "unittests",
|
||||||
"Version": {
|
"Version": {
|
||||||
"Major": "2024",
|
"Major": "2024",
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"Classifiers": [],
|
"Classifiers": [],
|
||||||
"DevDependencies": []
|
"DevDependencies": []
|
||||||
},
|
},
|
||||||
"BuildSettings": {
|
"Build": {
|
||||||
"ProjectType": "unittest",
|
"ProjectType": "unittest",
|
||||||
"SourcePath": "",
|
"SourcePath": "",
|
||||||
"OutputPath": "../../dist",
|
"OutputPath": "../../dist",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ProjectSettings": {
|
"Project": {
|
||||||
"Name": "unittest_cli",
|
"Name": "unittest_cli",
|
||||||
"Version": {
|
"Version": {
|
||||||
"Major": "2024",
|
"Major": "2024",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"Classifiers": [],
|
"Classifiers": [],
|
||||||
"DevDependencies": []
|
"DevDependencies": []
|
||||||
},
|
},
|
||||||
"BuildSettings": {
|
"Build": {
|
||||||
"ProjectType": "library",
|
"ProjectType": "library",
|
||||||
"SourcePath": "",
|
"SourcePath": "",
|
||||||
"OutputPath": "../../dist",
|
"OutputPath": "../../dist",
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
{
|
{
|
||||||
"TimeFormatSettings": {
|
"TimeFormat": {
|
||||||
"DateFormat": "%Y-%m-%d",
|
"DateFormat": "%Y-%m-%d",
|
||||||
"TimeFormat": "%H:%M:%S",
|
"TimeFormat": "%H:%M:%S",
|
||||||
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
"DateTimeFormat": "%Y-%m-%d %H:%M:%S.%f",
|
||||||
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
"DateTimeLogFormat": "%Y-%m-%d_%H-%M-%S"
|
||||||
},
|
},
|
||||||
"LoggingSettings": {
|
"Logging": {
|
||||||
"Path": "logs/$date_now/",
|
"Path": "logs/$date_now/",
|
||||||
"Filename": "bot.log",
|
"Filename": "bot.log",
|
||||||
"ConsoleLogLevel": "TRACE",
|
"ConsoleLevel": "TRACE",
|
||||||
"FileLogLevel": "TRACE"
|
"Level": "TRACE"
|
||||||
},
|
},
|
||||||
"DatabaseSettings": {
|
"Database": {
|
||||||
"Host": "localhost",
|
"Host": "localhost",
|
||||||
"User": "local",
|
"User": "local",
|
||||||
"Password": "bG9jYWw=",
|
"Password": "bG9jYWw=",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ProjectSettings": {
|
"Project": {
|
||||||
"Name": "unittest_core",
|
"Name": "unittest_core",
|
||||||
"Version": {
|
"Version": {
|
||||||
"Major": "2024",
|
"Major": "2024",
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"Classifiers": [],
|
"Classifiers": [],
|
||||||
"DevDependencies": []
|
"DevDependencies": []
|
||||||
},
|
},
|
||||||
"BuildSettings": {
|
"Build": {
|
||||||
"ProjectType": "library",
|
"ProjectType": "library",
|
||||||
"SourcePath": "",
|
"SourcePath": "",
|
||||||
"OutputPath": "../../dist",
|
"OutputPath": "../../dist",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ProjectSettings": {
|
"Project": {
|
||||||
"Name": "unittest_query",
|
"Name": "unittest_query",
|
||||||
"Version": {
|
"Version": {
|
||||||
"Major": "2024",
|
"Major": "2024",
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
"Classifiers": [],
|
"Classifiers": [],
|
||||||
"DevDependencies": []
|
"DevDependencies": []
|
||||||
},
|
},
|
||||||
"BuildSettings": {
|
"Build": {
|
||||||
"ProjectType": "library",
|
"ProjectType": "library",
|
||||||
"SourcePath": "",
|
"SourcePath": "",
|
||||||
"OutputPath": "../../dist",
|
"OutputPath": "../../dist",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ProjectSettings": {
|
"Project": {
|
||||||
"Name": "unittest_shared",
|
"Name": "unittest_shared",
|
||||||
"Version": {
|
"Version": {
|
||||||
"Major": "2024",
|
"Major": "2024",
|
||||||
@@ -23,7 +23,7 @@
|
|||||||
"Classifiers": [],
|
"Classifiers": [],
|
||||||
"DevDependencies": []
|
"DevDependencies": []
|
||||||
},
|
},
|
||||||
"BuildSettings": {
|
"Build": {
|
||||||
"ProjectType": "library",
|
"ProjectType": "library",
|
||||||
"SourcePath": "",
|
"SourcePath": "",
|
||||||
"OutputPath": "../../dist",
|
"OutputPath": "../../dist",
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"ProjectSettings": {
|
"Project": {
|
||||||
"Name": "unittests_translation",
|
"Name": "unittests_translation",
|
||||||
"Version": {
|
"Version": {
|
||||||
"Major": "2024",
|
"Major": "2024",
|
||||||
@@ -26,7 +26,7 @@
|
|||||||
"PythonPath": {},
|
"PythonPath": {},
|
||||||
"Classifiers": []
|
"Classifiers": []
|
||||||
},
|
},
|
||||||
"BuildSettings": {
|
"Build": {
|
||||||
"ProjectType": "unittest",
|
"ProjectType": "unittest",
|
||||||
"SourcePath": "",
|
"SourcePath": "",
|
||||||
"OutputPath": "../../dist",
|
"OutputPath": "../../dist",
|
||||||
|
|||||||
Reference in New Issue
Block a user