Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,8 @@ venv/
ENV/
env.bak/
venv.bak/

*.swp
*.swo
# Spyder project settings
.spyderproject
.spyproject
Expand Down
1 change: 1 addition & 0 deletions Pipfile
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ verify_ssl = true
name = "pypi"

[packages]
pydantic = "==0.30.1"

[dev-packages]
asynctest = "==0.12.1"
Expand Down
33 changes: 33 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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`
24 changes: 24 additions & 0 deletions config.py
Original file line number Diff line number Diff line change
@@ -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()
5 changes: 4 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
@@ -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__))

Expand Down