refactor: update ConfigurationService to avoid circular imports and streamline repository usage
This commit is contained in:
@@ -9,7 +9,6 @@ from pydantic import BaseModel, Field
|
||||
|
||||
from arbitrade.config.settings import Settings
|
||||
from arbitrade.storage.db import DuckDBStore
|
||||
from arbitrade.storage.repositories import AuditRepository, ConfigSettingRepository
|
||||
|
||||
|
||||
class ConfigSection(BaseModel):
|
||||
@@ -59,19 +58,22 @@ class ConfigBacktestingDefaults(BaseModel):
|
||||
class ConfigurationService:
|
||||
"""Manages application configuration from environment and database sources."""
|
||||
|
||||
def __init__(self, settings: Settings, store: DuckDBStore, audit_repo: AuditRepository) -> None:
|
||||
def __init__(self, settings: Settings, store: DuckDBStore, audit_repo) -> None:
|
||||
self._settings = settings
|
||||
self._store = store
|
||||
self._audit_repo = audit_repo
|
||||
self._config_version = 0
|
||||
self._loaded_settings: dict[str, Any] = {}
|
||||
self._setting_repo = ConfigSettingRepository(store)
|
||||
self._load_database_settings()
|
||||
|
||||
def _load_database_settings(self) -> None:
|
||||
"""Load user settings from database and merge with defaults."""
|
||||
# Import here to avoid circular imports
|
||||
from arbitrade.storage.repositories import ConfigSettingRepository
|
||||
setting_repo = ConfigSettingRepository(self._store)
|
||||
|
||||
# Load all settings from database
|
||||
db_settings = self._setting_repo.list_settings()
|
||||
db_settings = setting_repo.list_settings()
|
||||
|
||||
# Convert to dictionary for easy access
|
||||
for setting in db_settings:
|
||||
@@ -112,6 +114,10 @@ class ConfigurationService:
|
||||
|
||||
def set_setting(self, key: str, value: Any, updated_by: str | None = None) -> None:
|
||||
"""Set a configuration setting value and persist to database."""
|
||||
# Import here to avoid circular imports
|
||||
from arbitrade.storage.repositories import ConfigSettingRepository
|
||||
setting_repo = ConfigSettingRepository(self._store)
|
||||
|
||||
# Convert value to JSON string and determine type
|
||||
if isinstance(value, str):
|
||||
value_json = value
|
||||
@@ -147,20 +153,10 @@ class ConfigurationService:
|
||||
)
|
||||
|
||||
# Check if setting exists
|
||||
existing_setting = self._setting_repo.get_setting(key)
|
||||
existing_setting = setting_repo.get_setting(key)
|
||||
if existing_setting:
|
||||
# Update existing setting
|
||||
updated_setting = self._setting_repo.update_setting(key, setting)
|
||||
updated_setting = setting_repo.update_setting(key, setting)
|
||||
else:
|
||||
# Create new setting
|
||||
updated_setting = self._setting_repo.create_setting(setting)
|
||||
|
||||
# Update in-memory cache
|
||||
self._loaded_settings[key] = value
|
||||
|
||||
# Increment version for hot reloading
|
||||
self._config_version += 1
|
||||
|
||||
def get_all_settings(self) -> dict[str, Any]:
|
||||
"""Get all configuration settings."""
|
||||
return self._loaded_settings.copy()
|
||||
updated_setting = setting_repo.create_setting(setting)
|
||||
|
||||
Reference in New Issue
Block a user