Skip to content

interfaces

azure_bootstrap.repositories.interfaces

Repository interfaces for Azure bootstrap library.

This module contains interface definitions for configuration and secrets repositories.

Modules:

Name Description
enhanced_config_repository_interface

Interface for Enhanced Config Repository.

secrets_repository_interface

Interface for Secrets Repository.

Classes:

Name Description
EnhancedConfigRepositoryInterface

Abstract interface for enhanced configuration repository operations.

SecretsRepositoryInterface

Abstract interface for secrets repository operations.

EnhancedConfigRepositoryInterface

Bases: ABC

Abstract interface for enhanced configuration repository operations.

This interface defines all configuration access operations for integration with Azure App Configuration, Key Vault, and environment variables following a hierarchical precedence model.

Configuration Precedence (highest to lowest): 1. Environment variables (os.environ) 2. Azure App Configuration 3. Key Vault secrets (via secrets repository) 4. Default values

Benefits: - Abstracts configuration storage implementation details - Enables dependency injection and testing with mocks - Provides clear contract for configuration access - Supports multiple backends with transparent fallback

Methods:

Name Description
get_value

Get a configuration value with hierarchical lookup.

get_secret_value

Get a secret value from Key Vault.

get_all_values

Get all configuration values from all sources.

load_to_environ

Load all configuration values into os.environ.

refresh

Refresh configuration from all sources.

get_repository_metrics

Get metrics about the configuration repository.

is_app_config_available

Check if Azure App Configuration is available and accessible.

is_key_vault_available

Check if Azure Key Vault is available and accessible.

get_value abstractmethod

get_value(key: str, default: str | None = None) -> str | None

Get a configuration value with hierarchical lookup.

Parameters:

Name Type Description Default
key str

Configuration key name

required
default str | None

Default value if key not found

None

Returns:

Type Description
str | None

Optional[str]: Configuration value or default

Raises:

Type Description
ConfigurationError

If configuration access fails

Source code in azure_bootstrap/repositories/interfaces/enhanced_config_repository_interface.py
@abstractmethod
def get_value(self, key: str, default: str | None = None) -> str | None:
    """
    Get a configuration value with hierarchical lookup.

    Args:
        key: Configuration key name
        default: Default value if key not found

    Returns:
        Optional[str]: Configuration value or default

    Raises:
        ConfigurationError: If configuration access fails
    """
    pass

get_secret_value abstractmethod

get_secret_value(key: str, default: str | None = None) -> str | None

Get a secret value from Key Vault.

This method specifically targets secrets and bypasses the standard configuration hierarchy to directly access Key Vault.

Parameters:

Name Type Description Default
key str

Secret key name

required
default str | None

Default value if secret not found

None

Returns:

Type Description
str | None

Optional[str]: Secret value or default

Raises:

Type Description
SecretAccessError

If secret retrieval fails

Source code in azure_bootstrap/repositories/interfaces/enhanced_config_repository_interface.py
@abstractmethod
def get_secret_value(self, key: str, default: str | None = None) -> str | None:
    """
    Get a secret value from Key Vault.

    This method specifically targets secrets and bypasses the standard
    configuration hierarchy to directly access Key Vault.

    Args:
        key: Secret key name
        default: Default value if secret not found

    Returns:
        Optional[str]: Secret value or default

    Raises:
        SecretAccessError: If secret retrieval fails
    """
    pass

get_all_values abstractmethod

get_all_values() -> dict[str, str]

Get all configuration values from all sources.

Returns:

Type Description
dict[str, str]

Dict[str, str]: All configuration key-value pairs

Raises:

Type Description
ConfigurationError

If configuration access fails

Source code in azure_bootstrap/repositories/interfaces/enhanced_config_repository_interface.py
@abstractmethod
def get_all_values(self) -> dict[str, str]:
    """
    Get all configuration values from all sources.

    Returns:
        Dict[str, str]: All configuration key-value pairs

    Raises:
        ConfigurationError: If configuration access fails
    """
    pass

load_to_environ abstractmethod

load_to_environ() -> int

Load all configuration values into os.environ.

This method loads all configuration from App Config and Key Vault into environment variables for transparent application access.

Returns:

Name Type Description
int int

Number of new values added to os.environ (excludes skipped values)

Raises:

Type Description
ConfigurationError

If loading fails

Source code in azure_bootstrap/repositories/interfaces/enhanced_config_repository_interface.py
@abstractmethod
def load_to_environ(self) -> int:
    """
    Load all configuration values into os.environ.

    This method loads all configuration from App Config and Key Vault
    into environment variables for transparent application access.

    Returns:
        int: Number of new values added to os.environ (excludes skipped values)

    Raises:
        ConfigurationError: If loading fails
    """
    pass

refresh abstractmethod

refresh() -> None

Refresh configuration from all sources.

This method reloads configuration from App Configuration and Key Vault to pick up any changes.

Raises:

Type Description
ConfigurationError

If refresh fails

Source code in azure_bootstrap/repositories/interfaces/enhanced_config_repository_interface.py
@abstractmethod
def refresh(self) -> None:
    """
    Refresh configuration from all sources.

    This method reloads configuration from App Configuration and
    Key Vault to pick up any changes.

    Raises:
        ConfigurationError: If refresh fails
    """
    pass

get_repository_metrics abstractmethod

get_repository_metrics() -> dict[str, Any]

Get metrics about the configuration repository.

Returns:

Type Description
dict[str, Any]

Dict[str, Any]: Metrics including source counts, cache hits, etc.

Source code in azure_bootstrap/repositories/interfaces/enhanced_config_repository_interface.py
@abstractmethod
def get_repository_metrics(self) -> dict[str, Any]:
    """
    Get metrics about the configuration repository.

    Returns:
        Dict[str, Any]: Metrics including source counts, cache hits, etc.
    """
    pass

is_app_config_available abstractmethod

is_app_config_available() -> bool

Check if Azure App Configuration is available and accessible.

Returns:

Name Type Description
bool bool

True if App Config is accessible, False otherwise

Source code in azure_bootstrap/repositories/interfaces/enhanced_config_repository_interface.py
@abstractmethod
def is_app_config_available(self) -> bool:
    """
    Check if Azure App Configuration is available and accessible.

    Returns:
        bool: True if App Config is accessible, False otherwise
    """
    pass

is_key_vault_available abstractmethod

is_key_vault_available() -> bool

Check if Azure Key Vault is available and accessible.

Returns:

Name Type Description
bool bool

True if Key Vault is accessible, False otherwise

Source code in azure_bootstrap/repositories/interfaces/enhanced_config_repository_interface.py
@abstractmethod
def is_key_vault_available(self) -> bool:
    """
    Check if Azure Key Vault is available and accessible.

    Returns:
        bool: True if Key Vault is accessible, False otherwise
    """
    pass

SecretsRepositoryInterface

Bases: ABC

Abstract interface for secrets repository operations.

This interface defines all secret access operations for integration with Azure Key Vault or other secret storage backends.

Benefits: - Abstracts secret storage implementation details from business logic - Enables dependency injection and testing with mocks - Provides clear contract for secret access operations - Supports multiple backends (Key Vault, local files, environment, etc.)

Methods:

Name Description
get_secret

Retrieve a secret value by name.

set_secret

Store a secret value (if backend supports writes).

delete_secret

Delete a secret (if backend supports deletion).

list_secrets

List all available secrets (names only for security).

is_available

Check if secrets repository is available and accessible.

get_secret abstractmethod

get_secret(secret_name: str) -> str | None

Retrieve a secret value by name.

Parameters:

Name Type Description Default
secret_name str

Name of the secret to retrieve

required

Returns:

Type Description
str | None

Optional[str]: Secret value if found, None otherwise

Raises:

Type Description
SecretAccessError

If secret retrieval fails

Source code in azure_bootstrap/repositories/interfaces/secrets_repository_interface.py
@abstractmethod
def get_secret(self, secret_name: str) -> str | None:
    """
    Retrieve a secret value by name.

    Args:
        secret_name: Name of the secret to retrieve

    Returns:
        Optional[str]: Secret value if found, None otherwise

    Raises:
        SecretAccessError: If secret retrieval fails
    """
    pass

set_secret abstractmethod

set_secret(secret_name: str, secret_value: str) -> bool

Store a secret value (if backend supports writes).

Parameters:

Name Type Description Default
secret_name str

Name of the secret

required
secret_value str

Value to store

required

Returns:

Name Type Description
bool bool

True if successful, False otherwise

Raises:

Type Description
SecretAccessError

If secret storage fails

NotImplementedError

If backend doesn't support writes

Source code in azure_bootstrap/repositories/interfaces/secrets_repository_interface.py
@abstractmethod
def set_secret(self, secret_name: str, secret_value: str) -> bool:
    """
    Store a secret value (if backend supports writes).

    Args:
        secret_name: Name of the secret
        secret_value: Value to store

    Returns:
        bool: True if successful, False otherwise

    Raises:
        SecretAccessError: If secret storage fails
        NotImplementedError: If backend doesn't support writes
    """
    pass

delete_secret abstractmethod

delete_secret(secret_name: str) -> bool

Delete a secret (if backend supports deletion).

Parameters:

Name Type Description Default
secret_name str

Name of the secret to delete

required

Returns:

Name Type Description
bool bool

True if successful, False otherwise

Raises:

Type Description
SecretAccessError

If secret deletion fails

NotImplementedError

If backend doesn't support deletion

Source code in azure_bootstrap/repositories/interfaces/secrets_repository_interface.py
@abstractmethod
def delete_secret(self, secret_name: str) -> bool:
    """
    Delete a secret (if backend supports deletion).

    Args:
        secret_name: Name of the secret to delete

    Returns:
        bool: True if successful, False otherwise

    Raises:
        SecretAccessError: If secret deletion fails
        NotImplementedError: If backend doesn't support deletion
    """
    pass

list_secrets abstractmethod

list_secrets() -> dict[str, str]

List all available secrets (names only for security).

Returns:

Type Description
dict[str, str]

Dict[str, str]: Dictionary mapping secret names to metadata

Raises:

Type Description
SecretAccessError

If listing fails

Source code in azure_bootstrap/repositories/interfaces/secrets_repository_interface.py
@abstractmethod
def list_secrets(self) -> dict[str, str]:
    """
    List all available secrets (names only for security).

    Returns:
        Dict[str, str]: Dictionary mapping secret names to metadata

    Raises:
        SecretAccessError: If listing fails
    """
    pass

is_available abstractmethod

is_available() -> bool

Check if secrets repository is available and accessible.

Returns:

Name Type Description
bool bool

True if repository is accessible, False otherwise

Source code in azure_bootstrap/repositories/interfaces/secrets_repository_interface.py
@abstractmethod
def is_available(self) -> bool:
    """
    Check if secrets repository is available and accessible.

    Returns:
        bool: True if repository is accessible, False otherwise
    """
    pass