Projetos Python com Poetry e VSCode Parte 2 - Folha de Dicas Python

No primeiro artigo aprendemos o que é o ficheiro pyproject.toml e como trabalhar com ele, usamos o Poetry para iniciar um novo projeto, criar um Ambiente Virtual e para adicionar e remover dependências. Tudo isso com os seguintes comandos:
| Comando | Descrição |
|---|---|
poetry new [package-name] | Iniciar um novo Projeto Python. |
poetry init | Criar um ficheiro pyproject.toml interativamente. |
poetry install | Instalar os pacotes dentro do ficheiro pyproject.toml. |
poetry add [package-name] | Adicionar um pacote a um Ambiente Virtual. |
poetry add -D [package-name] | Adicionar um pacote de desenvolvimento a um Ambiente Virtual. |
poetry remove [package-name] | Remover um pacote de um Ambiente Virtual. |
poetry remove -D [package-name] | Remover um pacote de desenvolvimento de um Ambiente Virtual. |
Nesta segunda parte, vamos:
- Adicionar o nosso Ambiente Virtual ao VSCode.
- Atualizar as nossas dependências.
- Integrar as nossas dependências de desenvolvimento com o editor:
- Flake8
- Black
- Pytest
E num terceiro artigo escreveremos uma biblioteca de exemplo, construiremos o nosso projeto com Poetry e publicá-lo-emos no PyPI.
Antes de começarmos, certifique-se de que instalou o VSCode, adicionou a extensão Python e que seguiu e compreendeu o primeiro artigo desta série.
Configuração do Poetry no VSCode
Passaram alguns dias desde a primeira parte, por isso pode ser uma boa ideia verificar se há novas versões das nossas dependências. Abra o seu terminal, navegue para dentro do diretório do seu projeto e digite o comando poetry update:

Até agora, não há novas versões disponíveis.
Quando cria um Ambiente Virtual com o comando venv, o VSCode irá automaticamente configurá-lo como o Ambiente Python predefinido para esse projeto. Ao trabalhar com o Poetry, pela primeira vez teremos de digitar o seguinte no terminal e dentro da pasta do projeto:
poetry shell
code .
O primeiro comando, poetry shell, irá colocar-nos dentro do nosso ambiente virtual, e code . abrirá a pasta atual dentro do VSCode.

Abra a pasta how-long (ou a com o nome do seu projeto) usando o painel esquerdo e, ao lado de __init__.py, crie um ficheiro how-long.py. No canto inferior esquerdo, verá o Ambiente Python atual:

Clique nele e uma lista de Ambientes disponíveis será exibida. Escolha aquele que tem o nome do seu projeto:

Agora, vamos integrar as nossas dependências de desenvolvimento, Flake8, Black e Pytest no Visual Studio Code.
Flake8
O Flake8 fornecerá aos nossos projetos capacidades de linting. Por outras palavras, avisará sobre erros de sintaxe e estilo, e graças ao VSCode, saberemos deles enquanto digitamos.
Por predefinição, a extensão Python vem com o Pylint ativado, que é poderoso mas complexo de configurar. Para mudar para o Flake8, faça uma alteração em qualquer ficheiro Python e guarde-o; no canto inferior direito, aparecerá uma mensagem pop-up:

Clique em Select Linter e escolha Flake8 na lista. Agora, o VSCode irá informar-nos dos nossos problemas de sintaxe e estilo, a verde ou vermelho dependendo da sua gravidade, sempre com uma boa descrição do que está errado:

Parece que temos dois problemas: falta uma linha em branco no final do nosso ficheiro (estilo) e esquecemo-nos de adicionar aspas à nossa string Hello, World! (sintaxe). Corrija-os e veja todos os avisos desaparecerem.
Black
O Black é um formatador de código, uma ferramenta que irá olhar para o nosso código e formatá-lo automaticamente em conformidade com o guia de estilo PEP 8, o mesmo PEP que o Flake8 usa para fazer o lint dos nossos erros de estilo.
Pressione shift + cmd/ctrl + p para abrir a Paleta de Comandos, digite Format Document e pressione enter. Uma nova mensagem pop-up aparecerá:

Selecione Use Black. Agora copie este código mal formatado para o seu ficheiro python:
for i in range(5): # this comment has too many spaces
print(i) # this line has 6 space indentation.
Que pedaço de c***… código feio. Tente formatá-lo novamente e veja como o Black corrige todos eles para si!
Outra coisa que podemos fazer é configurar o VSCode para que cada vez que guardamos, o Black formate automaticamente o nosso código. Pressione cmd/ctrl + , para abrir as Definições (Settings). Certifique-se de que está em Workspace Settings, procure por Format On Save e ative a caixa de seleção:

Por último, o Black tem como predefinição 88 caracteres por linha, em contraste com os 80 permitidos pelo Flake8, por isso, para evitar conflitos, abra a pasta .vscode e adicione o seguinte ao final do ficheiro settings.json:
{
...
"python.linting.flake8Args": [
"--max-line-length=88"
],
}

Pytest
Se é sério em relação à programação, é crucial que aprenda a testar os seus projetos. É uma habilidade incrivelmente útil que lhe permite escrever e entregar programas com confiança, reduzindo a possibilidade de surgirem bugs catastróficos após o lançamento.
O Pytest é um framework muito popular e fácil de usar para escrever testes. Nós já o instalámos, por isso também o integraremos com o VSCode.
Abra a pasta tests e selecione o ficheiro test_how_long.py. O Poetry já nos dá o nosso primeiro teste:
# test_how_long.py
from how_long import __version__
def test_version():
assert __version__ == '0.1.0'
Neste teste, importamos a variável __version__ do ficheiro __init__.py que está dentro da pasta how_long e afirmamos que a versão atual é 0.1.0. Abra o terminal integrado indo a Terminal > New Terminal e digite:
pytest
O Resultado será assim:

Ok, tudo está bem. Abra a sua Paleta de Comandos com shift + cmd/ctrl + p:
- Escreva unit e selecione Python: Configure Unit Tests.
- Selecione pytest.
- Escolha o diretório onde guardou os testes, tests no nosso caso.
Três coisas aconteceram:
Um novo botão apareceu na barra de estado: Run Tests. Isto é o mesmo que digitar pytest no terminal. Pressione-o e selecione Run All Unit Tests. Quando terminar, informá-lo-á do número de testes que passaram e dos testes que falharam:

Um novo ícone na barra lateral esquerda. Se clicar nele, aparecerá um painel a exibir todos os testes. Aqui, pode executar cada um individualmente:

Dentro do ficheiro de teste, novas opções serão exibidas antes de cada função de teste: um ícone de verificação aparecerá se estiver OK, e um x caso contrário. Também permite executar testes específicos:

Conclusão
Até agora, temos:
- Iniciado um novo projeto, criado um Ambiente Virtual e adicionado, eliminado e atualizado dependências.
- Adicionado o nosso Ambiente Virtual ao VSCode, Configurado o Flake8 para fazer lint do nosso código enquanto digitamos, selecionado o Black como formatador e incluído o Pytest para executar os nossos testes visualmente.
Finalmente, no terceiro e último artigo, vamos:
- Escrever uma biblioteca de exemplo.
- Construir o nosso projeto com Poetry.
- Publicá-lo no PyPI.