mirror of
https://github.com/Akkudoktor-EOS/EOS.git
synced 2026-11-13 09:13:30 +01:00
fix(config): enable documentation mode only explicitly
ConfigEOS.documentation_mode() was true as soon as Sphinx was imported anywhere in the process. A test importing Sphinx therefore switched all later tests into documentation mode, and test_config_md_current failed depending on test order. Documentation mode is now enabled only by the documentation generators (_force_documentation_mode) or by the Sphinx configuration, which sets sys._called_from_sphinx in docs/conf.py. Declare _force_documentation_mode as a ClassVar. Without the annotation pydantic turned it into a private attribute, and the class attribute was a truthy descriptor object. Behavior change: because of that descriptor, every running EOS was in documentation mode, so the get_adapter/config/measurement/prediction/ems/ database/resource_registry() guards never raised "access before init" and created the singletons lazily on first access. They now raise for every access before initialization. The worker process of uvicorn's auto-reload (server.reload, make run-dev) relied on that: the app's lifespan now sets up the configuration and initializes the singletons that do not exist yet. Leave runtime state out of the documentation: the Home Assistant entity ID properties and OptimizationCommonSettings.keys return an empty list in documentation mode, so entity IDs and solution keys of a running system no longer reach the generated configuration docs. Keep the tests isolated: test_doc sets documentation mode on the class and test_docstringrst restores sys._called_from_sphinx after reading the Sphinx configuration. Add tests for how documentation mode is enabled and for the runtime values it leaves out. Additional changes - Generate openapi.json in documentation mode, as the config docs. - Share the documentation mode check as coreabc.documentation_mode(). - Move the logging and server address setup of run_eos() to setup_eos_config(). - Test that EOS starts with server.reload. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5.5
parent
a0e57a18b7
commit
57132df44e
@@ -106,6 +106,31 @@ class AdapterMixin:
|
||||
return get_adapter()
|
||||
|
||||
|
||||
def documentation_mode() -> bool:
|
||||
"""Return whether EOS runs in documentation mode.
|
||||
|
||||
Shortcut for ``ConfigEOS.documentation_mode()`` for modules that cannot
|
||||
import ``ConfigEOS`` at module level. Documentation shows no runtime state,
|
||||
e.g. entity IDs of a Home Assistant instance or keys of an optimization
|
||||
solution.
|
||||
|
||||
Returns:
|
||||
True if the documentation is being generated.
|
||||
"""
|
||||
from akkudoktoreos.config.config import ConfigEOS
|
||||
|
||||
return ConfigEOS.documentation_mode()
|
||||
|
||||
|
||||
def config_initialized() -> bool:
|
||||
"""Return whether the configuration singleton exists, without creating it.
|
||||
|
||||
Returns:
|
||||
True if ``get_config(init=...)`` already created the configuration.
|
||||
"""
|
||||
return _config_eos is not None
|
||||
|
||||
|
||||
def get_config(init: Union[bool, dict[str, bool]] = False) -> ConfigEOS:
|
||||
"""Retrieve the singleton EOS configuration instance.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user