diff --git a/.gitignore b/.gitignore index 11614af..66120e1 100644 --- a/.gitignore +++ b/.gitignore @@ -95,7 +95,8 @@ venv/ ENV/ env.bak/ venv.bak/ - +*.swp +*.swo # Spyder project settings .spyderproject .spyproject diff --git a/Pipfile b/Pipfile index dd7cbc2..066f877 100644 --- a/Pipfile +++ b/Pipfile @@ -4,6 +4,7 @@ verify_ssl = true name = "pypi" [packages] +pydantic = "==0.30.1" [dev-packages] asynctest = "==0.12.1" diff --git a/README.md b/README.md index da8ed27..1eab891 100644 --- a/README.md +++ b/README.md @@ -48,3 +48,36 @@ Usamos o isort para ordenar os imports do seu código. Os parâmetros do isort g # CI/CD Uma configuração do circleci já está pronta em `.circleci/config.yml`. Pode ser usada pra rodar a pipeline de build/check do seu projeto. + + +# Pydantic - Configuração baseada em variáveis de ambiente + +Para facilitar na criação de um novo serviço e seguindo as boas práticas definidas no [12factors](https://12factor.net/config) sobre configurações. +Adicionamos o uso no pydantic para criar e validar essas informações para nós. + +Exemplo de uso: + +```python + from config import settings + + print(settings.DEBUG) +``` + +Para configurar uma variável de ambiente é necessário ficar atento ao prefixo. +o default do projeto verificar inicialmente para uma variável de ambiente chamada `NAMESPACE`caso não a +encontre o prefixo será `DEV_`, o que isso significa? + +O uso ficará da seguinte forma quando configuramos o namespace sempre adicionaremos o prefixo no +momento de exportar as variaveis de ambiente. + +```python + NAMESPACE=PROD PROD_DEBUG=False python main.py +``` + +Caso não definimos nenhum namespace, o prefixo será `DEV`, ou seja + +```python + DEV_REDIS_PORT=1234 python main.py +``` + +`lembrando que dentro da sua aplicação o que vale é justamente o nome que foi definido no arquivo config.py, sem o prefixo` diff --git a/config.py b/config.py new file mode 100644 index 0000000..400b1da --- /dev/null +++ b/config.py @@ -0,0 +1,24 @@ +import os +from typing import Optional + +from pydantic import BaseSettings + + +class Settings(BaseSettings): + """ + https://pydantic-docs.helpmanual.io/#settings + Exemplo de uso das variaveis de ambiente + + REDIS_HOST: str = "localhost" + REDIS_PORT: int = 6379 + REDIS_DATABASE: int = 0 + REDIS_URL: str = f"redis://{REDIS_HOST}:{REDIS_PORT}/{REDIS_DATABASE}" + """ + + DEBUG: bool = True + + class Config: + env_prefix = os.getenv("NAMESPACE", "DEV").upper() + "_" # defaults to 'APP_' + + +settings = Settings() diff --git a/setup.py b/setup.py index 2ad9775..1ce289d 100644 --- a/setup.py +++ b/setup.py @@ -1,7 +1,10 @@ from codecs import open # To use a consistent encoding from os import path -from setuptools import find_packages, setup # Always prefer setuptools over distutils +from setuptools import ( # Always prefer setuptools over distutils + find_packages, + setup, +) here = path.abspath(path.dirname(__file__))