|
10 | 10 | from __future__ import annotations |
11 | 11 |
|
12 | 12 | import logging |
| 13 | +from typing import Any |
13 | 14 |
|
14 | 15 | from src.core.config.app_config import AppConfig |
15 | 16 | from src.core.di.container import ServiceCollection |
16 | 17 | from src.core.interfaces.application_state_interface import IApplicationState |
| 18 | +from src.core.interfaces.command_settings_interface import ICommandSettingsService |
17 | 19 | from src.core.interfaces.di_interface import IServiceProvider |
| 20 | +from src.core.interfaces.state_provider_interface import ( |
| 21 | + ISecureStateAccess, |
| 22 | + ISecureStateModification, |
| 23 | +) |
18 | 24 |
|
19 | 25 | from .base import InitializationStage |
20 | 26 |
|
21 | 27 | logger = logging.getLogger(__name__) |
22 | 28 |
|
23 | 29 |
|
| 30 | +class DefaultCommandStateService(ISecureStateAccess, ISecureStateModification): |
| 31 | + """Lightweight state holder used when auto-registering domain commands.""" |
| 32 | + |
| 33 | + def __init__(self, settings_service: ICommandSettingsService) -> None: |
| 34 | + self._settings = settings_service |
| 35 | + self._routes: list[dict[str, Any]] = [] |
| 36 | + self._command_prefix_override: str | None = None |
| 37 | + self._api_key_redaction_override: bool | None = None |
| 38 | + self._disable_interactive_override: bool | None = None |
| 39 | + |
| 40 | + def get_command_prefix(self) -> str: |
| 41 | + if self._command_prefix_override is not None: |
| 42 | + return self._command_prefix_override |
| 43 | + return self._settings.get_command_prefix() |
| 44 | + |
| 45 | + def get_failover_routes(self) -> list[dict[str, Any]] | None: |
| 46 | + return self._routes |
| 47 | + |
| 48 | + def update_failover_routes(self, routes: list[dict[str, Any]]) -> None: |
| 49 | + self._routes = routes |
| 50 | + |
| 51 | + def get_api_key_redaction_enabled(self) -> bool: |
| 52 | + if self._api_key_redaction_override is not None: |
| 53 | + return self._api_key_redaction_override |
| 54 | + return self._settings.get_api_key_redaction_enabled() |
| 55 | + |
| 56 | + def get_disable_interactive_commands(self) -> bool: |
| 57 | + if self._disable_interactive_override is not None: |
| 58 | + return self._disable_interactive_override |
| 59 | + return self._settings.get_disable_interactive_commands() |
| 60 | + |
| 61 | + def update_command_prefix(self, prefix: str) -> None: |
| 62 | + if isinstance(prefix, str) and prefix: |
| 63 | + self._command_prefix_override = prefix |
| 64 | + |
| 65 | + def update_api_key_redaction(self, enabled: bool) -> None: |
| 66 | + self._api_key_redaction_override = bool(enabled) |
| 67 | + |
| 68 | + def update_interactive_commands(self, enabled: bool) -> None: |
| 69 | + self._disable_interactive_override = bool(enabled) |
| 70 | + |
24 | 71 | class CommandStage(InitializationStage): |
25 | 72 | """ |
26 | 73 | Stage for registering command-related services. |
@@ -188,39 +235,7 @@ def populate_commands_factory(provider: IServiceProvider) -> None: |
188 | 235 | ICommandSettingsService # type: ignore[type-abstract] |
189 | 236 | ) |
190 | 237 |
|
191 | | - # Create a simple state service for commands |
192 | | - class DefaultStateService( |
193 | | - ISecureStateAccess, ISecureStateModification |
194 | | - ): |
195 | | - def __init__(self, settings_service): |
196 | | - self._settings = settings_service |
197 | | - self._routes = [] |
198 | | - |
199 | | - def get_command_prefix(self): |
200 | | - return self._settings.get_command_prefix() |
201 | | - |
202 | | - def get_failover_routes(self): |
203 | | - return self._routes |
204 | | - |
205 | | - def update_failover_routes(self, routes): |
206 | | - self._routes = routes |
207 | | - |
208 | | - def get_api_key_redaction_enabled(self): |
209 | | - return self._settings.get_api_key_redaction_enabled() |
210 | | - |
211 | | - def get_disable_interactive_commands(self): |
212 | | - return self._settings.get_disable_interactive_commands() |
213 | | - |
214 | | - def update_command_prefix(self, prefix: str) -> None: |
215 | | - self._settings.command_prefix = prefix |
216 | | - |
217 | | - def update_api_key_redaction(self, enabled: bool) -> None: |
218 | | - self._settings.api_key_redaction_enabled = enabled |
219 | | - |
220 | | - def update_interactive_commands(self, enabled: bool) -> None: |
221 | | - pass |
222 | | - |
223 | | - state_service = DefaultStateService(settings_service) |
| 238 | + state_service = DefaultCommandStateService(settings_service) |
224 | 239 |
|
225 | 240 | # Auto-register all commands from the domain command registry |
226 | 241 | for ( |
|
0 commit comments