|
import logging |
|
import os |
|
import time |
|
from typing import Any, Optional |
|
|
|
from omagent_core.engine.configuration.settings.authentication_settings import \ |
|
AuthenticationSettings |
|
from pydantic import Field |
|
from pydantic_settings import BaseSettings |
|
|
|
TEMPLATE_CONFIG = { |
|
"name": "Configuration", |
|
"base_url": { |
|
"value": "http://localhost:8080", |
|
"description": "The Conductor Server API endpoint", |
|
"env_var": "CONDUCTOR_SERVER_URL", |
|
}, |
|
"auth_key": { |
|
"value": None, |
|
"description": "The authorization key", |
|
"env_var": "AUTH_KEY", |
|
}, |
|
"auth_secret": { |
|
"value": None, |
|
"description": "The authorization secret", |
|
"env_var": "CONDUCTOR_AUTH_SECRET", |
|
}, |
|
"auth_token_ttl_min": { |
|
"value": 45, |
|
"description": "The authorization token refresh interval in minutes.", |
|
"env_var": "AUTH_TOKEN_TTL_MIN", |
|
}, |
|
"debug": {"value": False, "description": "Debug mode", "env_var": "DEBUG"}, |
|
} |
|
|
|
|
|
class Configuration(BaseSettings): |
|
class Config: |
|
"""Configuration for this pydantic object.""" |
|
|
|
extra = "allow" |
|
|
|
base_url: str = Field( |
|
default="http://localhost:8080", description="The Conductor Server API endpoint" |
|
) |
|
auth_key: Optional[str] = Field(default=None, description="The authorization key") |
|
auth_secret: Optional[str] = Field( |
|
default=None, |
|
description="The authorization secret", |
|
) |
|
auth_token_ttl_min: int = Field( |
|
default=45, description="The authorization token refresh interval in minutes." |
|
) |
|
debug: bool = Field(default=False, description="Debug mode") |
|
|
|
def model_post_init(self, __context: Any) -> None: |
|
self.__log_level = logging.DEBUG if self.debug else logging.INFO |
|
self.AUTH_TOKEN = None |
|
self.temp_folder_path = None |
|
self.host = self.base_url + "/api" |
|
self.__ui_host = self.host.replace("8080/api", "5000") |
|
if self.auth_key and self.auth_secret: |
|
self.authentication_settings = AuthenticationSettings( |
|
key_id=self.auth_key, key_secret=self.auth_secret |
|
) |
|
else: |
|
self.authentication_settings = None |
|
|
|
|
|
self.logger_format = "%(asctime)s %(name)-12s %(levelname)-8s %(message)s" |
|
|
|
|
|
|
|
|
|
self.verify_ssl = True |
|
|
|
self.ssl_ca_cert = None |
|
|
|
self.cert_file = None |
|
|
|
self.key_file = None |
|
|
|
self.assert_hostname = None |
|
|
|
|
|
self.proxy = None |
|
|
|
self.safe_chars_for_path_param = "" |
|
|
|
|
|
self.http_connection = None |
|
|
|
|
|
self.token_update_time = 0 |
|
self.auth_token_ttl_msec = self.auth_token_ttl_min * 60 * 1000 |
|
|
|
@property |
|
def logger_format(self): |
|
"""The logger format. |
|
|
|
The logger_formatter will be updated when sets logger_format. |
|
|
|
:param value: The format string. |
|
:type: str |
|
""" |
|
return self.__logger_format |
|
|
|
@logger_format.setter |
|
def logger_format(self, value): |
|
"""The logger format. |
|
|
|
The logger_formatter will be updated when sets logger_format. |
|
|
|
:param value: The format string. |
|
:type: str |
|
""" |
|
self.__logger_format = value |
|
|
|
@property |
|
def log_level(self): |
|
"""The log level. |
|
|
|
The log_level will be updated when sets logger_format. |
|
|
|
:param value: The format string. |
|
:type: str |
|
""" |
|
return self.__log_level |
|
|
|
@property |
|
def ui_host(self): |
|
""" |
|
|
|
The log_level will be updated when sets logger_format. |
|
|
|
:param value: The format string. |
|
:type: str |
|
""" |
|
return self.__ui_host |
|
|
|
def apply_logging_config(self, log_format: str = None, level=None): |
|
if log_format is None: |
|
log_format = self.logger_format |
|
if level is None: |
|
level = self.__log_level |
|
logging.basicConfig(format=log_format, level=level) |
|
|
|
@staticmethod |
|
def get_logging_formatted_name(name): |
|
return f"[{os.getpid()}] {name}" |
|
|
|
def update_token(self, token: str) -> None: |
|
self.AUTH_TOKEN = token |
|
self.token_update_time = round(time.time() * 1000) |
|
|