Projeto da NLW da Rocketseat (trilha python)
Configurações iniciais do ambiente de desenvolvimento
-
Instalar o virtualenv setar como comandos 2. python3 -m venv .venv 3. . .venv/bin/activate
-
Instalar pylint
- pip3 install pylint
- ativar a extensão da MS pylint
- pylint
- snake_case -> Funções, Variáveis, Métodos
- PascalCase -> Classes
- pylint --generate-rcfile > .pylintrc
- colocar as seguinte exceções:
- disable= C0114, # missing-module-docstring C0115, # missing-class-docstring C0116, # missing-function-docstring W0703, # Catching too general exception Exception
-
Instalar o pre-commit
- fazer as configs do pre-commit
-
Gerar o requirements.txt
- .venv/bin/pip3 freeze > requirements.txt
-
Instalar Flask
-
Instalar python-barcode
-
Instalar pillow
Após isso, gerar o arquivo de requirements novamente para atualizar com as novas instalações
Os passos acima fazem parte da aula 1 mas vou dividir o projeto em si por aulas
Criar e subir o server usando Flask. Usar o barcode para receber o código e gerar o uma imagem do código de barras.
Começamos a aula separando o único arquivo 'run_raw.py' que foi criado na primeira aula em uma estrutura de pastas seguindo a filosofia de arquitetura para facilitar a manutenção além de seguir as boas práticas da programação.
No arquivo 'run.py' rodamos o servidor e a opção de debug=True é um "equivalente" ao nodemon. Essa opção "ligada" fica monitorando nossos arquivos para renovar o servidor sempre que os arquivos forem alterados.
Em seguida, implementamos tipagem http para deixar encapsulado como serão tratadas as requests e responses. E fizemos alguns testes para garantir que estava tudo funcionando.
E por fim, alteramos a estrutura do projeto para facilitar a manutenção. Controllers farão de uso de funções criadas usando o padrão de desing de fachada onde implementamos as libs externas nos drivers.
Vamos focar em tratamento de erros e testes unitários.
Construir o error_handler bem genérico mesmo e passar para a função para testar. Basicamente, colocamos a função de tratamento de errors na rota que queremos testar e ela vai criar uma "máscara" no erro parar torná-lo mais legível e facilitar o entendimento.
Implementamos a lib Cerberus que auxilia na trativa dos erros pois fica mais fácil construir os moldes que queremos. Na parte de implementação de uma tratativa específica para cada tipo de erros, vimos como construir um tipo específico de erros que queremos tratar fazendo uma classe derivada da classe Exception. Dessa forma, podemos especificar nomes e status codes. No error_handler podemos construir a tratativa para esse tipo específico de erro, como envio automático de emails, popular logs e muito mais. Lembrando que essa classe deve ser testada na rota!
Por último, vimos como fazer testes unitários. Usamos a biblioteca pytest:
- Colocar _test no final do nome do arquivo a ser testado;
- Os nomes dos arquivos devem ser iguais (com exceção do _test);
- A função que está sendo testada deve começar com test_