O projeto todo foi concebido usando python 3.8.5. O projeto deve funcionar para qualquer versão do python 3.8, porém algumas features pode não funcionar corretamente com versões menores ou maiores. Você pode usar o pyenv para gerenciar as instalações de versões do python. Se você já usa pyenv, temos um arquivo .python-version
no projeto e isso não deve ser um problema para você.
Projeto atualizado para 3.9.2 (02/04/2021)
O projeto todo é usado com base no Poetry. Tanto o gerenciamento de ambiente virtual, quanto as instalações de pacotes. Certifique-se que você tem o poetry instalado no seu ambiente, caso não tenha:
pip install poetry # pip3 caso ainda tenha o python 2 instalado
poetry install # Para instalar todos os pacotes
poetry shell # Para reproduzir os comando a seguir nesse documento
Lembrando que caso não gostei de usar poetry shell
você pode usar poetry run
antes de cada linha desse tutorial, como por exemplo poetry run flask db update
Antes de tudo é necessário declarar as variáveis de ambiente do Flask.
Caso você deseje rodar os testes de comportamento, eles fazem uso de rotas exclusivas que são executadas somente no FLASK_ENV=testing
export FLASK_APP=app
export FLASK_ENV=development
Lembrando que é importante que você rode as migrações para que o banco esteja configurado.
flask db upgrade
Aí sim podemos rodar nosso projeto
flask run
Assim a aplicação deve ser iniciada sem grandes problemas.
Também foi criado um script que sobe a aplicação com um único comando
bash start.sh
docker build -f dockerfile-app . -t todo_list
docker run -it -p 80:80 --name="todo_list" todo_list
docker-compose up --build
Caso tenha interesse em rodar os testes de unidade, você deve se certificar que está com as variáveis de ambiente do flask configuradas.
python -m pytest # Ou somente pytest, após um `pip install -e.`
Caso você queira ver a cobertura dos testes
coverage --source app -m pytest
Ver o report de cobertura
coverage html
Os arquivos serão gerados na pasta 'htmlcov'. Você pode abrir o index.html
no seu browser de preferência e explorar o que não está coberto.