Skip to main content

Proyecto de carga de configuraciones base a partir de un fichero YAML

Project description

Config Mounter

Una librería de Python para cargar configuraciones base desde un archivo YAML plano, proporcionando acceso centralizado a variables de configuración para aplicaciones.

Descripción

Config Mounter es un módulo diseñado para simplificar la gestión de configuraciones en aplicaciones Python. Prioriza las variables de entorno (útiles en despliegues con contenedores/orquestadores como AWS ECS, Kubernetes o Docker Compose) y usa un archivo YAML plano como fallback para desarrollo local.

Proporciona:

  • Prioridad a variables de entorno: Si una variable ya existe en os.environ (ej. desde task definition), no la sobrescribe
  • Fallback a YAML plano: Carga config.yml para variables no definidas, ideal para desarrollo
  • Carga automática: Al importar el módulo, carga configuraciones automáticamente
  • Acceso vía os.environ: Las variables se acceden usando os.environ.get('VARIABLE', 'default')
  • Configuraciones para múltiples servicios: Soporte para AWS, Jira, bases de datos y más
  • Logging integrado: Usa logger-tracker para trazabilidad
  • Función manual de carga: load_config() para recargar si es necesario

Instalación

Instala desde PyPI:

pip install config-mounter

O desde el código fuente:

git clone https://github.com/tu-usuario/config-mounter.git
cd config-mounter
pip install -e .

Uso

Archivo de configuración

Crea un archivo config.yml en la raíz de tu proyecto. Puede ser plano o anidado; el módulo lo aplana automáticamente. Ejemplo anidado:

debug: true
host: 0.0.0.0
port: 8080
environment: dev
connectors:
  database:
    driver: postgresql+psycopg2
    host: localhost
    port: 5432
    database: kerverus
    user: postgres
    password: admin
  jira:
    server: https://jira.example.com
    email: user@example.com
    token: token123
aws:
  region: us-east-1
  capabilities: ["CAPABILITY_IAM"]
  parameters: []

Esto se aplana a variables como DEBUG, HOST, PORT, CONNECTORS_DATABASE_DRIVER, CONNECTORS_DATABASE_HOST, etc.

Carga automática

Al importar config_mounter, las variables se cargan automáticamente en os.environ:

import config_mounter  # Carga config.yml automáticamente

# Usar las variables
import os
print(f"Entorno: {os.environ.get('ENVIRONMENT', 'dev')}")
print(f"Debug: {os.environ.get('DEBUG', 'False').lower() == 'true'}")
print(f"Región AWS: {os.environ.get('AWS_REGION')}")
print(f"Servidor Jira: {os.environ.get('JIRA_SERVER')}")
print(f"Host DB: {os.environ.get('DB_HOST')}")

Carga manual

Si necesitas recargar el YAML manualmente:

from config_mounter import load_config

load_config()  # Recarga las variables

Configuración de ruta del archivo

Puedes especificar una ruta personalizada para el archivo de configuración usando la variable de entorno APP_CONFIG_PATH:

export APP_CONFIG_PATH=/path/to/my/config.yml
python tu_aplicacion.py

Despliegues en contenedores

El módulo es compatible con entornos de despliegue como AWS ECS Task Definitions, Kubernetes y Docker Compose, donde las variables de entorno se pasan desde el orquestador.

AWS ECS Task Definition

En tu task-definition.json, define las variables de entorno:

{
  "containerDefinitions": [
    {
      "name": "my-app",
      "environment": [
        {"name": "ENVIRONMENT", "value": "prod"},
        {"name": "DB_HOST", "value": "my-db-host"}
      ]
    }
  ]
}

Kubernetes

Usa ConfigMaps o Secrets para las variables:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-config
data:
  ENVIRONMENT: "prod"
  DB_HOST: "my-db-host"

Y en el Deployment:

envFrom:
- configMapRef:
    name: my-config

Docker Compose

En docker-compose.yml:

services:
  app:
    environment:
      - ENVIRONMENT=prod
      - DB_HOST=my-db-host

En todos estos casos, las variables del orquestador tienen prioridad sobre el config.yml. Si no se definen en el orquestador, se usan los valores del YAML como fallback.

Definir constantes en tu proyecto

Como la librería solo carga variables en os.environ, define tus propias constantes en tu aplicación:

import os
import config_mounter  # Carga las variables

# Definir constantes personalizadas
DEBUG = os.environ.get('DEBUG', 'True').lower() == 'true'
HOST = os.environ.get('HOST', '0.0.0.0')
PORT = int(os.environ.get('PORT', '5000'))
ENVIRONMENT = os.environ.get('ENVIRONMENT', 'dev')
DB_DRIVER = os.environ.get('CONNECTORS_DATABASE_DRIVER')
DB_HOST = os.environ.get('CONNECTORS_DATABASE_HOST')
DB_PORT = int(os.environ.get('CONNECTORS_DATABASE_PORT', '5432'))
DB_NAME = os.environ.get('CONNECTORS_DATABASE_DATABASE')
DB_USER = os.environ.get('CONNECTORS_DATABASE_USER')
DB_PASSWORD = os.environ.get('CONNECTORS_DATABASE_PASSWORD')
JIRA_SERVER = os.environ.get('CONNECTORS_JIRA_SERVER')
AWS_REGION = os.environ.get('AWS_REGION')
AWS_CAPABILITIES = os.environ.get('AWS_CAPABILITIES', '').split(',') if os.environ.get('AWS_CAPABILITIES') else []

Esto te da flexibilidad para definir solo las constantes que necesitas en tu proyecto.

Dependencias

  • logger-tracker >=1.0.10
  • PyYAML >=6.0

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

config_mounter-1.0.0.tar.gz (3.3 kB view details)

Uploaded Source

Built Distribution

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

config_mounter-1.0.0-py3-none-any.whl (4.1 kB view details)

Uploaded Python 3

File details

Details for the file config_mounter-1.0.0.tar.gz.

File metadata

  • Download URL: config_mounter-1.0.0.tar.gz
  • Upload date:
  • Size: 3.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.13.13 Linux/5.15.154+

File hashes

Hashes for config_mounter-1.0.0.tar.gz
Algorithm Hash digest
SHA256 d38ed63fdc6cb3fec4391a3d5a16dc070507d4dbc491c50aba6fb485f5252e6e
MD5 34b830eed5a2982be071a9d1ccb24be1
BLAKE2b-256 15b419258cc646c789018fecd2bdbbe8e1949b5bb66903ebd5acf1de66b900cb

See more details on using hashes here.

File details

Details for the file config_mounter-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: config_mounter-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 4.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/2.1.4 CPython/3.13.13 Linux/5.15.154+

File hashes

Hashes for config_mounter-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 08edfd055b30f5b8bf1b3b7886b9db82e60ea08804b9cdb8ce9dbdd55407e99c
MD5 cc1545c6cf324568ad2507dfaea7fb50
BLAKE2b-256 e2f99c87916a1abac9b2c4589c4f4ea058965c03d20f1cc3e09173e953ed217a

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