Configuração

Configurações em zayt são tratadas em Python puro.

Os arquivos de configuração são localizados por padrão no diretório configuration com o nome base settings.py:

project/
├── application/
│   └── ...
└── configuration/
    ├── settings.py
    ├── settings_dev.py
    └── settings_prod.py

Recuperando valores de configuração

The configuration values can be accessed by injecting zayt.configuration.Settings.

from typing import Annotated
from zayt.conf import Settings
from zayt.di import Inject, service


@service
class MyService:
    settings: Annotated[Settings, Inject]

The Settings object is a dict like object that can also be accessed using property syntax:

from zayt.conf import Settings

settings = Settings({"config": "value"})
assert settings["config"] == "value"
assert settings.config == "value"

Variáveis de ambiente

A função zayt.conf.env() pode ser usada para recuperar variáveis de ambiente e aplicar conversão para tipos básicos (int, float, bool):

from zayt.conf import env

settings = {
    "required": env("ENV_VAR"),
    "optional": env("OPT_VAR", default="value"),
    "int": env("INT_VAR", cast=int),
    "bool": env("BOOL_VAR", cast=bool)
}

Perfis

Perfis opcionais podem ser ativados ao definir a variável de ambiente ZAYT_PROFILE. O framework procurará por um arquivo chamado settings_${ZAYT_PROFILE}.py e mesclará os valores com o settings.py principal. Valores da configuração do perfil tem precedência sobre os valores da configuração principal.

Por exemplo, se definirmos ZAYT_PROFILE=dev, o arquivo settings_dev.py será carregado. Se, ao invés disso, definirmos ZAYT_PROFILE=prod, então o arquivo settings_prod.py será carregado.

Múltiplos perfis podem ser ativados ao definir ZAYT_PROFILE como uma lista separa por vírgula de perfis, por exemplo, ZAYT_PROFILE=dev,prod. O framework vai iterar sobre a lista e mesclar as configurações encontrara em cada um. A precedência é do último para o primeiro, então configurações de um perfile sobrescrevem configurações do perfil anterior.

DotEnv

If running you project using zayt.run.app(), for example uvicorn zayt.run:app, environment variables are automatically loaded from a .env file. The parsing is done using the python-dotenv library.

Por padrão, um arquivo .env que existir no diretório atual será carregado, mas pode ser customizado com a variável de ambiente ZAYT_DOTENV apontando para o arquivo .env.