Pretty Conf¶

Imagen generada con Inteligencia Artificial
prettyconf es un paquete Python que facilita la creación de ficheros de configuración mediante la parametrización de sus variables.
Es habitual no incluir credenciales o datos sensibles en el control de versiones de ciertos proyectos de software. Para esto hay varias soluciones, pero la que nos propone prettyconf es utilizar una función genérica config() que se encargará de recuperar estos datos bien desde variables de entorno o bien desde un fichero .env.
Instalación¶
La instalación del paquete es muy sencilla:
Modo de uso¶
Su modo de uso es muy sencillo:
-
- Se busca
PASSWORDen variables de entorno o en fichero.env - Si se encuentra, se asigna su valor a la variable
PASSWD - Si no se encuentra, se eleva una excepción
UnknownConfiguration.
- Se busca
Ficheros .env¶
Aunque también existe la posibilidad de definir los valores mediate variables de entorno suele ser habitual utilizar un fichero de configuración .env para ello.
Su estructura es realmente simple:
- Aunque podría ir sin comillas dobles, lo más fácil —para evitar errores— es ponerlas siempre.
Fuera de control de versiones
Es crucial dejar fuera del control de versiones el archivo .env mediante su inclusión en el fichero .gitignore.
Conversiones¶
Por defecto, cualquier valor que le demos a una variable mediante prettyconf se interpretará como una cadena de texto (str).
Pero es posible indicar conversiones explícitas en la propia llamada a la función:
| Conversión | Explicación | Valor ITEM |
Ejemplo |
|---|---|---|---|
config.boolean |
Convierte a booleano(1) | 'On' |
config(ITEM, cast=config.boolean) True |
config.list |
Convierte a lista(2) | 'A,B,C' |
config(ITEM, cast=config.list) ['A','B','C'] |
config.tuple |
Convierte a tupla(3) | 'A,B,C' |
config(ITEM, cast=config.tuple) ('A','B','C') |
config.json |
Convierte a objeto Python(4) | '{"a": [1, 2], "b": [3, 4]}' |
config(ITEM, cast=config.json) {'a': [1, 2], 'b': [3, 4]} |
- Ejemplos:
On|Off,1|0,yes|no,true|false,t|f - Desde cadenas de texto separadas por comas.
- Desde cadenas de texto separadas por comas.
- Desde cadena de texto con objeto JSON.
Valores por defecto
Un error bastante común se produce a la hora de definir valores por defecto a los que se aplican conversiones personalizadas.
En el siguiente ejemplo definimos una lista como valor por defecto, pero quizás el resultado no es lo que realmente esperamos:
Lo que seguramente tendríamos que hacer es asignar el valor por defecto como una cadena de texto que ya luego el «cast» se encargará de convertir:
Conversiones personalizadas¶
Además de las conversiones predefinidas es posible crear conversiones personalizadas mediante una función propia.
Por ejemplo, supongamos una configuración que almacena latitud y longitud de un determinado lugar (geolocalización):
def geoloc(loc: str) -> tuple[float, float]:
return tuple(float(v) for v in loc.split(','))
TEIDE_GPS = config('TEIDE_GPS', cast=geoloc)#(1)!
- Es habitual usar funciones anónimas lambda para estos propósitos.
Con esto podríamos «leer» un fichero de configuración tipo:
- Esto se convertiría en una tupla:
(28.2723364, -16.6631076)(cuyos valores ya estarían en formato flotante).