pynenc.conf.config_base#

Module Contents#

Classes#

ConfigField

Define each typed field from a ConfigBase instance.

ConfigBase

Base class for defining configuration settings.

Functions#

default_config_field_mapper

get_env_key

gets the key used in the environment variables

get_config_fields

avoid_multi_inheritance_field_conflict

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:
  • config_values (Optional[dict[str, Any]]) – A dictionary of configuration values to use.

  • config_filepath (Optional[str]) – The path to a configuration file to use.

Configuration values are determined based on the following priority (highest to lowest):

  1. Direct assignment in the config instance (not recommended)

  2. Environment variables

  3. Configuration file path specified by environment variables

  4. Configuration file path (YAML, TOML, JSON) by config_filepath parameter

  5. pyproject.toml

  6. Default values specified in the ConfigField

  7. Previous steps for any Parent config class

  8. 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 ConfigOrchestratorRedis class now includes settings from both ConfigOrchestrator and ConfigRedis.

Initialization

classmethod config_fields() list[str][source]#
property all_fields: list[str]#
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_from_mapping(source: str, config_id: str, mapping: dict[str, Any]) 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.get_config_fields(cls: Type) Iterator[str][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, a ConfigMultiInheritanceError is 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'}