Skip to content

Instantly share code, notes, and snippets.

@rochacbruno
Last active May 18, 2022 12:05
Show Gist options
  • Save rochacbruno/5f8ead878758f4143729b426c6132ffa to your computer and use it in GitHub Desktop.
Save rochacbruno/5f8ead878758f4143729b426c6132ffa to your computer and use it in GitHub Desktop.
O que é dynaconf

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment