Source code for tidy3d.config
"""Tidy3D configuration system public API."""
from __future__ import annotations
from typing import Any
from . import sections # noqa: F401 - ensure builtin sections register
from .legacy import LegacyConfigWrapper, LegacyEnvironment, LegacyEnvironmentConfig
from .manager import ConfigManager
from .registry import (
get_handlers,
get_sections,
register_handler,
register_plugin,
register_section,
)
__all__ = [
"ConfigManager",
"Env",
"Environment",
"EnvironmentConfig",
"config",
"get_handlers",
"get_sections",
"register_handler",
"register_plugin",
"register_section",
]
def _create_manager() -> ConfigManager:
return ConfigManager()
_base_manager = _create_manager()
# TODO(FXC-3827): Drop LegacyConfigWrapper once legacy accessors are removed in Tidy3D 2.12.
_config_wrapper = LegacyConfigWrapper(_base_manager)
config = _config_wrapper
# TODO(FXC-3827): Remove legacy Env exports after deprecation window (planned 2.12).
Environment = LegacyEnvironment
EnvironmentConfig = LegacyEnvironmentConfig
Env = LegacyEnvironment(_base_manager)
[docs]
def reload_config(*, profile: str | None = None) -> LegacyConfigWrapper:
"""Recreate the global configuration manager (primarily for tests)."""
global _base_manager, Env
if _base_manager is not None:
try:
_base_manager.apply_web_env({})
except AttributeError:
pass
_base_manager = ConfigManager(profile=profile)
_config_wrapper.reset_manager(_base_manager)
Env.reset_manager(_base_manager)
return _config_wrapper
[docs]
def get_manager() -> ConfigManager:
"""Return the underlying configuration manager instance."""
return _base_manager
def __getattr__(name: str) -> Any:
return getattr(config, name)