pynenc.conf.config_base#
Module Contents#
Classes#
Define each typed field from a ConfigBase instance. |
|
Base class for defining configuration settings. |
Functions#
gets the key used in the environment variables |
|
Ensures that the same configuration field is not defined in multiple parent classes of a given configuration class. |
Data#
API#
- pynenc.conf.config_base.T#
‘TypeVar(…)’
- pynenc.conf.config_base.ConfigLoader#
None
- pynenc.conf.config_base.ConfigFieldMapper#
None
- pynenc.conf.config_base.default_config_field_mapper(value: Any, expected_type: Type[pynenc.conf.config_base.T]) pynenc.conf.config_base.T[source]#
- class pynenc.conf.config_base.ConfigField(default_value: pynenc.conf.config_base.T, mapper: Optional[pynenc.conf.config_base.ConfigFieldMapper] = None)[source]#
Bases:
typing.Generic[pynenc.conf.config_base.T]Define each typed field from a ConfigBase instance.
This class is used to define typed configuration fields within a ConfigBase subclass. It ensures type consistency and supports value validation and casting.
- Parameters:
default_value (T) – The default value for the configuration field.
mapper (Optional[ConfigFieldMapper]) – An optional function to map or transform the value.
Initialization
- __get__(instance: Optional[pynenc.conf.config_base.ConfigBase], owner: Type[object]) pynenc.conf.config_base.T[source]#
- __set__(instance: pynenc.conf.config_base.ConfigBase, value: Any) None[source]#
- pynenc.conf.config_base.get_env_key(field: str, config: Optional[Type[ConfigBase]] = None) str[source]#
gets the key used in the environment variables
- class pynenc.conf.config_base.ConfigBase(config_values: Optional[dict[str, Any]] = None, config_filepath: Optional[str] = None)[source]#
Base class for defining configuration settings.
This class serves as the base for creating configuration classes. It supports hierarchical and flexible configuration from various sources, including environment variables, configuration files, and default values.
- Parameters:
Configuration values are determined based on the following priority (highest to lowest):
Direct assignment in the config instance (not recommended)
Environment variables
Configuration file path specified by environment variables
Configuration file path (YAML, TOML, JSON) by config_filepath parameter
pyproject.tomlDefault values specified in the
ConfigFieldPrevious steps for any Parent config class
User does not specify anything (default values)
Examples
Define a configuration class for a Redis client:
class ConfigRedis(ConfigBase): redis_host = ConfigField("localhost") redis_port = ConfigField(6379) redis_db = ConfigField(0)
Define a main configuration class for orchestrator components:
class ConfigOrchestrator(ConfigBase): cycle_control = ConfigField(True) blocking_control = ConfigField(True) auto_final_invocation_purge_hours = ConfigField(24.0)
Combine configurations using multiple inheritance:
class ConfigOrchestratorRedis(ConfigOrchestrator, ConfigRedis): pass
The
ConfigOrchestratorRedisclass now includes settings from bothConfigOrchestratorandConfigRedis.Initialization
- static get_config_id(config_cls: Type[pynenc.conf.config_base.ConfigBase]) str[source]#
- init_parent_values(config_cls: Type[pynenc.conf.config_base.ConfigBase], config_values: Optional[dict[str, Any]], config_filepath: Optional[str]) None[source]#
- init_config_values(config_cls: Type[pynenc.conf.config_base.ConfigBase], config_values: Optional[dict[str, Any]], config_filepath: Optional[str]) None[source]#
- init_config_value_key_from_mapping(source: str, config_id: str, key: str, mapping: dict, conf_mapping: dict) None[source]#
- init_config_value_from_env_vars(config_cls: Type[pynenc.conf.config_base.ConfigBase]) None[source]#
- pynenc.conf.config_base.avoid_multi_inheritance_field_conflict(config_cls: Type, config_cls_to_fields: dict[str, set[str]]) dict[str, str][source]#
Ensures that the same configuration field is not defined in multiple parent classes of a given configuration class.
This function checks all parent classes of the provided configuration class that are subclasses of
ConfigBase. It ensures that each configuration field is defined only once among all parent classes. If a field is found in multiple parent classes, aConfigMultiInheritanceErroris raised. This check ensures deterministic behavior in the configuration inheritance hierarchy.- Parameters:
config_cls (Type) – The configuration class to check for field conflicts.
- Returns:
A dictionary mapping each configuration field to the name of the parent class where it is defined.
- Raises:
ConfigMultiInheritanceError – If a configuration field is found in multiple parent classes.
- Example:
class ParentConfig1(ConfigBase): field1 = ConfigField(default_value=1) ... class ParentConfig2(ConfigBase): field2 = ConfigField(default_value=2) ... class ChildConfig(ParentConfig1, ParentConfig2): pass avoid_multi_inheritance_field_conflict(ChildConfig) # prings: {'field1': 'ParentConfig1', 'field2': 'ParentConfig2'}