Ir para o conteúdo

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.

.env
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 dataclasses import dataclass

from lilya.conf.global_settings import Settings
from lilya.environments import EnvironLoader

loader = EnvironLoader()


@dataclass
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 dataclasses import dataclass

from lilya.conf.global_settings import Settings
from lilya.environments import EnvironLoader

loader = EnvironLoader()


@dataclass
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 .env declarado.
  • 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.environ se nada for fornecido.
  • prefix - Uma string prefix a 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.