Ambientes¶
Em muitos projetos, se não todos, as variáveis de ambiente são utilizadas para deployments ou para simplemente não expor qualquer informação secreta do código-fonte.
Existem muitas bibliotecas que pode utilizar para facilitar sua vida, como load_env, por exemplo.
Embora essas bibliotecas sejam poderosas, elas podem ser carentes em simplicidade de utilização.
Para ajudá-lo com isso, o Lilya fornece a funcionalidade EnvironLoader.
from lilya.environments import EnvironLoader
O EnvironLoader¶
Ambientes¶
Neste caso, este objecto é apenas um invólucro em cima do multidict, que faz muita magia por nós.
O objetivo do EnvironLoader é tornar o processo de carregamento e análise mais simples e direto, sem complicações extras.
Como utilizar¶
As configurações da aplicação devem ser armazenadas em variáveis de ambiente, por exemplo, dentro de um ficheiro .env.
Um bom exemplo dessa prática é o acesso a uma base de dados específica onde não quer codificar as credenciais diretamente!
O EnvironLoader lê tanto do ficheiro .env quanto das variáveis de ambiente do sistema. Consulte a ordem de prioridade para mais detalhes.
Existem duas formas de utilizar o EnvironLoader.
- Através do
env(). - Através do acesso direto.
Vamos supor que temos um ficheiro .env que contém os seguintes valores e onde estão declarados num settings específico do Lilya.
DATABASE_NAME=mydb
DATABASE_USER=postgres
DATABASE_PASSWD=postgres
DATABASE_HOST=a-host-somewhere.com
DATABASE_PORT=5432
API_KEY=XXXXX
Vamos ver como podemos usar ambas as abordagens para extrair os valores.
Via env()¶
Para aqueles familiarizados com bibliotecas externas, este método segue o mesmo princípio. Muito fácil de perceber e usar.
from lilya.conf.global_settings import Settings
from lilya.environments import EnvironLoader
loader = EnvironLoader()
class DatabaseSettings(Settings):
database_name: str = loader("DATABASE_NAME", cast=str, default="mydb")
database_user: str = loader("DATABASE_USER", cast=str, default="postgres")
database_password: str = loader("DATABASE_PASSWD", cast=str, default="postgres")
database_host: str = loader("DATABASE_HOST", cast=str, default="localhost")
database_port: int = loader("DATABASE_PORT", cast=int, default=5432)
api_key: str = loader("API_KEY", cast=str, default="")
Via Acesso direto¶
Com o acesso direto é praticamente a mesma coisa, mas sem chamar a função env().
from lilya.conf.global_settings import Settings
from lilya.environments import EnvironLoader
loader = EnvironLoader()
class DatabaseSettings(Settings):
database_name: str = loader("DATABASE_NAME", cast=str, default="mydb")
database_user: str = loader("DATABASE_USER", cast=str, default="postgres")
database_password: str = loader("DATABASE_PASSWD", cast=str, default="postgres")
database_host: str = loader("DATABASE_HOST", cast=str, default="localhost")
database_port: int = loader("DATABASE_PORT", cast=int, default=5432)
api_key: str = loader("API_KEY", cast=str, default="")
Ordem de prioridade¶
Existe uma ordem de prioridade na forma como o EnvironLoader opera e lê os valores:
- A partir de uma variável de ambiente.
- A partir de um ficheiro
.envdeclarado. - A partir do valor padrão fornecido no
loader.
Parâmetros¶
- env_file - Uma string com o caminho do ficheiro
.env. - environ - Dicionário opcional que contém variáveis de ambiente específicas. Por defeito, utiliza
os.environse nada for fornecido. - prefix - Uma string
prefixa ser concatenada em todas as variáveis de ambiente carregadas. - ignore_case - Sinalizador booleano que indica se uma variável de ambiente pode estar em minúsculas. Por defeito, é falso e transforma internamente todas as variáveis em minúsculas em maiúsculas.