Skip to main content

A flexible configuration management library for Python with multiple provider support (Environment, GCP Secret Manager, etc.) and easy extensibility.

Project description

Config Manager

tbi-config-manager (0.0.1)

A flexible configuration management library for Python with multiple provider support (Environment, GCP Secret Manager, etc.) and easy extensibility.

Features

  • Multiple Provider Support

    • Built-in Environment Variables (.env) support
    • Built-in GCP Secret Manager integration
    • Configurable provider priority
    • Easy to extend with custom providers
  • Type Safety & Flexibility

    • Strong typing support
    • Optional value handling
    • Default value support
    • Attribute-style access
  • Developer Friendly

    • Simple API
    • Clear error messages
    • Comprehensive logging
    • Easy to test

Installation

$ pip install tbi-config-manager

Prerequisites

  • Python >=3.8
  • GCP credentials (optional, GCP project Service Account, for Secret Manager support)

How to Use

Basic usage example:

from config_manager import ConfigManager, Provider

# Default to environment variables only
config = ConfigManager()
value = config.get("DATABASE_URL")

# With specific .env file
config = ConfigManager(env_file=".env.dev")

# ENV has higher priority than GCP.
config = ConfigManager(
    providers=[Provider.ENV, Provider.GCP],  
    project_id="your-project-id",
    credentials_path="path/to/credentials.json",
    secret_prefix="APP_"
)

# GCP has higher priority than ENV.
config = ConfigManager(
    providers=[Provider.GCP, Provider.ENV]  
    ...
)

# Only use GCP Secret Manager
config = ConfigManager(
    providers=[Provider.GCP]  
    ...
)

DATABASE_URL = config.get("DATABASE_URL")
...

In your config.py:

from config_manager import ConfigManager, Provider

config = ConfigManager(
    providers=[Provider.ENV, Provider.GCP],  
    project_id="config-manager",
    credentials_path="path/to/credentials.json",
    secret_prefix="PROD_"
)

# Access configs as attributes
DATABASE_URL = config.get("DATABASE_URL")
API_KEY = config.get("API_KEY")
ENV = config.get("ENV", default="dev")
PROVIDER = config.get("PROVIDER", "GCP") # Optional parameter with default

How to Contribute

Setup

git clone https://github.com/TaiwanBigdata/config-manager.git
cd readgen
python -m venv env
source env/bin/activate  # Linux/Mac
pip install -e .

Implementing Custom Providers

The config-manager library is designed for extensibility. Here's how to implement your own configuration provider:

1. Add New Provider Type

Add your provider type to the enum src/config_manager/typing.py

from enum import Enum

class Provider(Enum):
    """Available configuration provider types"""
    ENV = "env"      # Environment variables
    GCP = "gcp"      # Google Cloud Secret Manager
    REDIS = "redis"  # Your new provider

2. Implement Provider Class

Create your provider implementation under providers directory src/config_manager/providers/redis.py

from config_manager import ConfigProvider
from typing import Optional

# Inherit from the base abstract class ConfigProvider
class RedisProvider(ConfigProvider):
    def __init__(self, redis_url: str, prefix: str = ""):
        self.redis_url = redis_url
        self.prefix = prefix
        self._client = redis.Redis.from_url(redis_url)
    
    # Required interface implementations
    def get(self, key: str) -> Optional[str]: ...
    def has(self, key: str) -> bool: ...
    def reload(self) -> None: ...
    @property
    def name(self) -> str: ...

3. Register Provider

Register your provider in factory src/config_manager/providers/factory.py

class ProviderFactory:
    ...

# Register providers here
ProviderFactory.register(Provider.ENV, EnvProvider)
ProviderFactory.register(Provider.GCP, GCPProvider)

4. Export Provider

Export your provider in the module level src/config_manager/providers/__init__.py

from .redis import RedisProvider

__all__ = [
    ...
    "RedisProvider",
]

Export your provider in the package level src/config_manager/__init__.py

from .providers import ProviderFactory, EnvProvider, GCPProvider, RedisProvider

__all__ = [
    ...
    "RedisProvider",
]

Examples of Potential Custom Providers

  • AWS Secrets Manager
  • Azure Key Vault
  • HashiCorp Vault
  • Redis
  • MongoDB
  • Local JSON/YAML files
  • Remote HTTP endpoints

Each provider needs to implement the ConfigProvider interface and handle:

  • Configuration retrieval
  • Key existence checking
  • Reloading mechanism
  • Error handling

Dependencies

Core

  • python-dotenv>=1.0.0
  • google-cloud-secret-manager>=2.0.0
  • typing-extensions>=4.0.0

License

This project is licensed under the MIT License.

Project Structure

config-manager/
├── .gitignore
├── LICENSE
├── README.md
├── pyproject.toml
├── readgen.toml              # ReadGen - Readme Generator CLI tool configuration file
├── requirements.txt
└── src/
    └── config_manager/       # Register providers at the project level
        ├── config.py         # Configuration manager that orchestrates multiple providers to retrieve config values
        ├── exceptions.py
        ├── providers/        # Register providers at the model level
        │   ├── base.py       # Abstract base class for configuration providers
        │   ├── composite.py  # Implements composite pattern to aggregate multiple config providers in priority order
        │   ├── env.py        # Local environment configuration for the `.env` provider
        │   ├── factory.py    # Register and initialize providers in this file
        │   └── gcp.py        # The Provider class
        ├── typing.py         # Type definitions and enums
        └── utils/
            ├── cache.py
            └── logger.py

This document was automatically generated by ReadGen.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tbi_config_manager-0.0.1.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tbi_config_manager-0.0.1-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file tbi_config_manager-0.0.1.tar.gz.

File metadata

  • Download URL: tbi_config_manager-0.0.1.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.0.1 CPython/3.13.0

File hashes

Hashes for tbi_config_manager-0.0.1.tar.gz
Algorithm Hash digest
SHA256 d8768d7a5ca22cabee0e889475df055db5547dcbb479bfeda8cd66eb33dca643
MD5 f28932b0fc05824f632168b73c0e65f5
BLAKE2b-256 f8d95e302e0317c47a0e91c750adca50fd946239063c57fa08f9dcfb53222fa2

See more details on using hashes here.

File details

Details for the file tbi_config_manager-0.0.1-py3-none-any.whl.

File metadata

File hashes

Hashes for tbi_config_manager-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 710df81a9427cf001697f1e4808799064e15611ac946dadc9d9ba40002434f5c
MD5 6fbfd16acea0b7e710cb9979e4a1f10f
BLAKE2b-256 325ff613796d887cabfc5be096e98bdf1b079b36e65b7311060e724094c1c8b0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page