Este é o repositório com a API do Leg.go.
Leg.go é uma plataforma de inteligência para o acompanhamento das atividades no Congresso Nacional. Coletamos dados da Câmara e do Senado para encontrar quais proposições estão quentes, o que está tramitando com mais energia, como o conteúdo dos projetos é alterado e quem são os atores importantes nesse processo. Acesse o Leg.go.
Recomendamos que você instale o docker e o docker-compose para configuração do ambiente de desenvolvimento.
Este repositório é responsável apenas pelo código do backend do Leg.go. Recomendamos que caso você esteja interessado em configurar o ambiente de desenvolvimento por completo, acesse nosso orquestrador de repositórios: o leggo-geral. Lá você irá encontrar instruções para configurar todo o ambiente incluindo: banco de dados, backend e frontend.
Pelo leggo-geral você conseguirá executar todos os serviços incluindo este aqui: o leggo-backend.
Antes de ir lá pro leggo-geral, outra etapa de configuração importante é a criação do arquivo de variáveis de ambiente usado pelo leggo-backend.
Para isto faça uma cópia do arquivo .ENV.sample e a reinomeie para .ENV. Entre em contato com a equipe de desenvolvimento para obter as chaves de acesso ao servidor de dados processados e atualizados diariamente.
Com o arquivo .ENV criado e preenchido agora é possível seguir os passos do leggo-geral para levantar os serviços e configurar o ambiente de desenvolvimento.
A API estará disponível em localhost:8000. O nome do container que está servindo a api é agorapi.
O make deste repositório ajuda a executar alguns comandos docker comuns durante o processo de desenvolvimento.
Comando | Descrição |
---|---|
make update migrate=true data=remote | Atualiza o banco de acordo com os dados do servidor remoto. Muito útil para quando não se quer processar os dados localmente usando os repositórios de tratamento de dados. Os csvs são recuperados já processados e são importados para o banco de dados pelo leggo-backend. Os parametros data=local e migrate=false também podem ser utilizados, se caso não for necessário executar as migrations e se não quiser processar os dados de forma remota. |
make sync-db-with-heroku | Sincroniza o banco local com o banco remoto do Heroku. Cuidado! Dados locais serão alterados e podem ser perdidos. As migrações locais serão ignoradas e as migrações do banco de dados remoto do heroku serão consideradas. Para mais informações leia atentamente o README em ./heroku-cli/README.md. |
make import-csv-remote | Importa os csvs do servidor remoto para o volume leggo_data. |
make shell | Abre terminal psql para o banco de dados presente no container dbapi. |
make test | Executa linter e testes localmente. |
make run | Build e create dos containers. (não usa o leggo-geral) |
make start | Começa containers já existentes. (não usa o leggo-geral) |
make import | Importa dados da pasta data/ e escreve no banco de dados. |
make help | Para visualizar os demais comandos. |
Rodando com docker, o serviço estará disponível em http://0.0.0.0:8000/
Para rodar com docker-compose, é preciso clonar o repositório:
git clone https://github.com/analytics-ufcg/leggo-backend/
Após isso basta:
docker-compose up
E depois para carregar os dados:
docker exec -it "agorapi" sh -c './manage.py flush --no-input; ./manage.py import_data'
Alguns comando básicos para manipulação de seus containers dockers.
Caso você esteja querendo reegerar a imagem, forçando-a a pegar as atualizações novas, use:
docker-compose up --build
docker ps
Rode docker ps, copie o container-id e use:
docker kill <id>
virtualenv env
. env/bin/activate
pip install -r requirements.txt
./manage.py runserver
Atenção: Estamos usando um
.dockerignore
bastante rígido (que ignora tudo menos alguns arquivos). Isso evita copiar para a imagem docker de produção arquivos desnecessários ou secretos. Porém, é preciso lembrar disso e possivelmente adicionar uma nova regra nesse arquivo caso precise adicionar novos arquivos na imagem.
Criar um arquivo deploy/env
com:
SECRET_KEY=umasenhasecreta
DEBUG=False
E rodar:
docker-compose -f docker-compose.yml -f deploy/prod.yml up
(substituir up
por build
caso seja necessário gerar a imagem)
Acessar em http://localhost:9002/
Gerar migrações e migrar base:
./manage.py makemigrations && ./manage.py migrate
Limpar base de dados:
./manage.py flush --no-input
Importar dados do CSV para o BD:
./manage.py import_data
Gera migrações, migra, limpa dados e importa de novo ao mesmo tempo:
./manage.py update_db
Testes com cobertura de código:
./manage.py test_all
No Docker
docker exec -it agorapi sh -c './manage.py test_all'
É possivel gerar um diagrama que mostre as classes/tabelas do banco, atributos/colunas de dados e as relações entre elas.
Primeiro é necessário rodar isso dentro do container do código, para instalar as dependências:
pip install pydot django_extensions
apk add ttf-dejavu
apk add graphviz
Depois o diagrama pode ser gerado dessa forma:
docker exec -it "agorapi" sh -c './manage.py graph_models --pydot -g -o diagram.pdf api'
Mais informações na doc e aqui um exemplo de diagrama gerado.