From 107595826a540b2099cbe5c5adf3a0ec9b128939 Mon Sep 17 00:00:00 2001 From: zwitschi Date: Tue, 2 Jun 2026 15:33:14 +0200 Subject: [PATCH] refactor: update ConfigurationService to avoid circular imports and streamline repository usage --- src/arbitrade/config/service.py | 30 +++++++++++++----------------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/src/arbitrade/config/service.py b/src/arbitrade/config/service.py index 7c6ab3e..4f79b6d 100644 --- a/src/arbitrade/config/service.py +++ b/src/arbitrade/config/service.py @@ -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)