Série API em Flask - Parte 4 - Configurando o Makefile | Lucas Simon
Série API em Flask - Parte 4 - Configurando o Makefile
Wed Jun 27, 2018 by Lucas Simon in
Para melhorar nosso desenvolvimento, coloco no arquivo Makefile todos os comandos que utilizo durante o processo de desenvolvimento de software. Leia o artigo e veja algumas dicas e como o make pode facilitar nossa vida.
Capítulo 4: Configurando o Makefile. Estamos aqui
Capítulo 8: Listando usuários
O Make é um utilitário criado para automatizar o processo de construção de aplicações executando o compilador, linkador, testes, e até mesmo fazendo o deploy, entre outras operações possíveis.
O Makefile, é um arquivo de configurações que possui instruções para executar um processo. Podendo ser, conforme dito acima, executar testes, gerar arquivos binários e etc…
Particulamente eu gosto de utilizar esse método por questões de organização, documentação e facilitar o uso de comandos que serão utilizados repetidamente. Também posso encadear uma lista de instruções antes de executar a instrução solicitada. Isso ficará mais claro após a configuração e exemplos.
Em nosso arquivo setup.cfg adicione o conteúdo abaixo para configurar o flake8 e isort
exclude = application.py, conftest.py
skip=application.py,conftest.py
default_section = THIRDPARTY
known_first_party = apps
known_flask = flask
sections = FUTURE,STDLIB,FLASK,THIRDPARTY,FIRSTPARTY,LOCALFOLDER
import_heading_future = Future
import_heading_stdlib = Python
import_heading_thirdparty = Third
import_heading_firstparty = Apps
import_heading_localfolder = Local
O MakeFile exige que os comandos sejam identados por tabulação de 4 espaços. O primeiro passo é criar uma entrada help: e especificar o uso do comando através do @echo. Em seguida definimos qual será o comando parão do nosso make através do .DEFAULT.
@echo "make clean-build"
@echo "       Clear all build directories"
@echo "make isort"
@echo "       run isort command cli in development features"
@echo "       run lint"
@echo "       run the web application"
Nossa primeira cadeia de instruções são comandos linux que irão deletar todos os arquivos .pyc e pyo e diretórios pycache e .DS_Store.
.py: São arquivos com o código fonte que escrevemos.
.pyc: Estes arquivos são compilados para binários. Ao importar um módulo o python irá compilar o fonte contendo somente o fonte. Após ser importado e passado pelo processo de compilação a primeira vez esse módulo será importado mais rápido.
.pyo: Possui a mesma caracteristicas do .pyc porém otimizado com a flag -O.
find . -name '*.pyc' -exec rm --force {} +
find . -name '*.pyo' -exec rm --force {} +
find . | grep -E "__pycache__|.pyc|.DS_Store$$" | xargs rm -rf
O clean-build
Quando instalamos um pacote via python setup.py install ou pip install -e . Fizemos esse processo para instalar os testes no capítulo anterior.
rm --force --recursive build/
rm --force --recursive dist/
rm --force --recursive *.egg-info
O Isort
O Isort é um utilitário para padronizar as importações de pacotes no código fonte. É útil pois cada desenvolvedor tem uma maneira de codificar que nem sempre é igual ao outro. Logo dessa forma o isort padroniza todo o código fonte.
isort:
sh -c "isort --skip-glob=.tox --recursive . "
Escolhi flake8 como utilitário para padronizar o código. Quando executamos o comando ele avisa qual arquivo, linha e uma descrição do erro. Observe que o este comando irá executar o clean também.
Para executar os testes conforme o capítulo anterior chamamos o pytest. Mas para facilitar podemos chamar clean encadeado com o lint que por sua vez executa o test
test: lint
pytest --verbose --color=yes
Por fim a execução da aplicação utilizando o make run. Veja que antes de executar a aplicação ele executa um clean, lint e test. Assim previnimos que antes de começar a desenvolver estaremos executando os testes e demais comandos
O arquivo final Makefile fica assim:
.PHONY: help clean test clean-build isort run
Pode parecer perfumaria, entretanto, através do comando make e de suas configurações Makefile podemos padronizar e organizar o desenvolvimento de nossa aplicação.
Próxima seção vamos fazer uma conexão com o banco de dados MongoDB, um pouco do uso do docker. Até breve, abraços a todos.