Dynaconf é uma ferramenta para gerenciar as configurações do seu programa.
Digamos que você tenha uma função assim:
def calcula_preco_com_desconto(valor):
aliquota = 10 # 10% de desconto
return valor - (valor * aliquota / 100)
Agora imagina que este programa vai ser executado em 2 lojas diferentes, mas a Loja 1 oferece 5% e a loja 2 oferece 15 %, ao invés da aliquota ser fixa como na função, fazemos:
from config import settings # `settings` é uma instancia de Dynaconf
def calcula_preco_com_desconto(valor):
aliquota = settings.get("aliquota", default=10) # Buscamos o valor nas configurações do ambiente
return valor - (valor * aliquota / 100)
e no ambiente temos um arquivo de configuração
Na loja 1
# settings.yaml
aliquota: 5
Na loja 2
# settings.yaml
aliquota: 15
Agora as 2 lojas podem rodar o mesmo código pois o Dynaconf vai buscar esse valor do arquivo de settings que va ser diferente em cada uma das instalações.
O dynaconf pode ler essas variaveis de arquivos em varios formatos: .yaml, .toml, .json, .py e tambem de variaveis de ambiente do sistema operacional.
export DYNACONF_ALIQUOTA=25
Além do acesso o Dynaconf também oferece gestão de segredos
para guardar senhas e tokens,
e uma parte importante que é a validação, assim evitamos que por exemplo alguém dê 100% de desconto.
# A aliquote só pode ser menor que 50
settings.validators.register(Validator("ALIQUOTA", required=True, lt=50, is_type_of=int))
O Dynaconf também faz algumas coisinhas extras:
- multiplos ambientes em camadas (development, production, testing etc)
- merge de valores de multiplas fontes e multiplos arquivos
- variavéis de ambiente tipadas e com sub tipos
- plugin para django, flask e fastapi
- schema based validation com anotações de tipos do Python
- acesso a storages externos como Vault, Redis e Bancos de Dados
- casting dos valores automaticamente para o tipo necessário
- ferramenta CLI para gestão das configs
Saiba mais em https://dynaconf.com e https://github.com/rochacbruno/learndynaconf/blob/main/config.py