Projeto com objetivo de extrair dados do site Open Food Facts através de web scraping e gerar uma API REST de consulta. O scraping deve ser executado através de um sistema Cron executado uma vez ao dia.
- Linguagem Python
- Django
- Django Rest Framework
- Pip-tools (gerenciamento de dependências)
- Pytest
- Model Bakery (Fixtures do Django)
- Flake8 e Blue (linters)
- Isort (Organização imports)
- Swagger (Documentação OpenAPI)
- BeautifulSoup (Scraping)
- Docker e docker-compose
- PostgreSQL
Requisitos: Docker e docker-compose instalados.
- Copie o conteúdo de contrib/env-sample para um arquivo .env na raiz do projeto.
cp contrib/env-sample .env
- Construa a imagem
docker-compose build
- Suba o banco de dados
docker-compose up -d db
- Aplique as migrações do Django no banco de dados
docker-compose run --rm api python manage.py migrate
- Execute a API
docker-compose run --rm --service-ports api
- Execute o cron
docker-compose up cron
- Compilar dependências (Lembre de executar o build da imagem novamente após)
docker-compose run --rm api bash -c "pip-compile --generate-hashes /usr/src/requirements/production.in && pip-compile --generate-hashes /usr/src/requirements/development.in"
- Executar testes
docker-compose run --rm api pytest --cov .
- Executar o flake8 (linter)
docker-compose run --rm api flake8 .
-
Acesse a documentação do Swagger para ter aos endpoints disponíveis na API: http://localhost:8080/swagger/ (edite a porta se necessário)
-
Edite o arquivo crontabs caso queira mudar o tempo de execução do cron (Formato do comando)
This is a challenge by Coodesh