Muy buenas, les saluda Luis y aquí les traigo un artículo.
Repositorio de GitHub: https://github.com/davidohana/kofiko-python
Paquete PyPi: https://pypi.org/project/kofiko
En el enfoque Code-First, primero define su modelo de datos en código simple. Puede comenzar a trabajar con ese modelo de inmediato y solo más tarde se preocupará por las definiciones de esquema, los enlaces y otras necesidades. El mapeo entre el modelo de dominio y entidades externas como tablas / campos de base de datos generalmente se basa en convenciones.
Lo que me gusta de este enfoque es que le permite concentrarse primero en las cosas más importantes, y no menos importantes, tiene toda la conveniencia de un IDE moderno al definir su modelo: refactorizaciones, finalización de código, comprobaciones de tipos, etc.
Después de mi último intento de crear una biblioteca de configuración para Python, todavía no estaba satisfecho y busqué una manera de implementar el enfoque de configuración de código primero. El resultado es un paquete de Python llamado kofiko – «KoDelaware Fiprimero Konfiguration ”(que también es un simio divertido de una vieja serie de libros infantiles israelíes). Estoy bastante satisfecho con el resultado, que se describe a continuación.
Primero, defina los ajustes de configuración deseados en código Python simple. Las entradas de configuración se definen como atributos estáticos de una clase, con un valor predeterminado que también define el tipo de cada entrada. Puede definir muchas clases de configuración; cada clase sirve como una sección de configuración diferente. Puede ubicarse en cualquier lugar de su código.
En el ejemplo anterior, por ejemplo, el código de arranque de registro que usa la clase de configuración anterior no está interesado en ninguna opción de configuración que no sea la relacionada con el registro, por lo que es razonable definir una clase de configuración dedicada para el registro y ubicarlo uno al lado del otro. con el código de arranque.
El @config_section
decorador de arriba está registrando esta clase con Kofiko. Una vez kofiko.configure()
se llama a la función, buscará anulaciones de configuración en varias fuentes y establecerá el valor de los atributos relevantes de la clase en consecuencia.
Actualmente, Kofiko admite las siguientes fuentes de configuración:
(1) Funciones de personalización
(2) .INI
archivos
(3) Env. vars
Las funciones de personalización le permiten permanecer en el enfoque de código primero, al definir funciones Python simples que anulan las variables selectivas en las clases de configuración predeterminadas. Esto es útil, por ejemplo, en los casos en los que tiene varias implementaciones. Puede crear una clase de personalización para cada implementación.
Tienes que registrar la función de personalización con Kofiko usando el @config_custom
decorador, de la misma forma que hicimos con la clase de configuración.
Kofiko también apoya el familiar .INI
formato. Puede especificar uno o más en los nombres de archivo para buscar anulaciones. Kofiko asigna el nombre de la clase de configuración a una sección ini y el nombre del atributo a una opción ini:
Tenga en cuenta que incluso puede omitir Config
palabra clave del nombre de la sección.
La última fuente de anulación admitida son las variables de entorno. Kofiko buscará claves env que coincidan con la siguiente convención app-prefix_section_option
y anule los atributos de configuración en consecuencia. Por ejemplo, podemos ejecutar nuestra aplicación así:
log_file_out_folder=../log-staging elastic_env_name=staging mirror_batch_hours=1 python my_app.py
En este caso, no usamos ningún prefijo de búsqueda específico de la aplicación, pero siempre podemos optar por usarlo para evitar colisiones con otras variables de entorno.
Además, tenga en cuenta que las búsquedas en ini y env-vars no distinguen entre mayúsculas y minúsculas de forma predeterminada. Y si no le gustan mis convenciones predeterminadas para las búsquedas de anulación, Kofiko también le permite personalizarlas con las suyas propias.
Una de las cosas más bonitas de Kofiko es que ya no tienes que hacer conversión de tipos. Kofiko usará el valor predeterminado para cada atributo de configuración como una sugerencia de tipo e intentará convertir el valor de texto leído de fuentes de anulación sin tipo (ini y env) al mismo tipo. Recurrirá a la cadena solo cuando no se pueda convertir.
Además de lo básico (str
, int
, float
Y bool
), Agregué soporte para analizar list
(delimitado por comas por defecto) y dict
en el formato key1:val1,key2:val2
. La conversión de tipo para valores de lista y claves y valores de dictado se realiza utilizando el primer elemento en el valor predeterminado para el atributo de configuración relevante (si existe).
database_endpoints=host1,host2 database_quotas=logs:300,alerts:50 python my_db_client.py
Bootstrapping
En el código de inicialización de su aplicación Python, todo lo que tiene que hacer es llamar a la estática kofiko.configure()
función. Puede especificar una personalización y / o archivos ini para una búsqueda como esta:
overrides = kofiko.configure( customization_name="prod", ini_file_names="../cfg/prod.ini")
Después de esta llamada, los valores de atributos en todas las clases de configuración se anulan desde las fuentes de anulación relevantes, y puede usar esas clases de configuración directamente en su código.
Los valores de retorno de invalidaciones contienen un diccionario de todos los valores que se cambiaron de sus valores predeterminados. Puede ser útil registrar o imprimir esto.
Cómo conseguirlo
El código fuente de Kofiko está disponible en GitHub bajo la licencia Apache-2.0. También puede instalarlo desde PyPi:
pip install kofiko
Espero que te guste este pequeño mono de configuración, y por favor comenta y dime qué te ha parecido.
Gracias por leer.
Añadir comentario