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.5)

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/
├── src/
│   └── config_manager/       # Register providers at the project level
│       ├── 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        # GCP Secret Manager provider for accessing and managing configuration secrets in Google Cloud Platform
│       ├── utils/
│       │   ├── cache.py
│       │   └── logger.py
│       ├── config.py         # Configuration manager that orchestrates multiple providers to retrieve config values
│       ├── exceptions.py
│       └── typing.py         # Type definitions and enums
├── LICENSE
├── pyproject.toml
├── readgen.toml              # ReadGen - Readme Generator CLI tool configuration file
├── README.md
└── requirements.txt

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.5.tar.gz (9.2 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.5-py3-none-any.whl (11.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: tbi_config_manager-0.0.5.tar.gz
  • Upload date:
  • Size: 9.2 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.5.tar.gz
Algorithm Hash digest
SHA256 9290cf4dfa161901954c5b9c80d12fb2743aa47749c2ef683c1c449dc8a5d777
MD5 1c35dac6caccb35419aba057f982025f
BLAKE2b-256 43dfa073985255b6d7f2612b1d7385f69749b8332f542bce8fbe53d3e5b11e47

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for tbi_config_manager-0.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 d4b61819659e3eea12d4ef0ecfe17cddbf2909e4731cafff2c7bf875f79bbc3f
MD5 31e8192d6993fc9e529e21fd2ff56c61
BLAKE2b-256 2a4f3005e41ffa6715a8c004dda411fc44e71a13233559fccdf078e502d546c6

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