turicas / brasil.io

Backend do Brasil.IO (para código dos scripts de coleta de dados, veja o link na página de cada dataset)
https://brasil.io/
GNU General Public License v3.0
907 stars 144 forks source link

Permitir upload automático de planilhas dos estados para a Covid-19 #213

Open berinhard opened 4 years ago

berinhard commented 4 years ago

Mensagem do @turicas:

Possibilidade de um robô adicionar uma planilha. Não precisa ter uma API necessariamente. Se você conseguir criar uma função em que passo login/senha (ou auth token) e dados da planilha (os mesmos que o usuário preencherá no form), essa função cria a entrada da planilha no sistema e devolve {"success": True/False, "errors": [...]}. Idealmente essa função não dependerá do Django do Brasil.IO, pois o robô que baixará os dados (alguns estados já tem o dado em CSV) estará num repositório separado.

berinhard commented 4 years ago

A ideia é viabilizar isso por um endpoint de API específico para a importação automática de planilhas de covid-19. Para isso teríamos:

  1. um usuário django "bot-covid19" que faria parte de todos os grupos de importação de estado;
  2. um endpoint /covid19/api/import-report/STATE/YYYY-MM-DD/ com login obrigatório;
  3. Aceitaria uma planilha em CSV com os dados para aquele dia. Internamente, ele rodaria o mesmo processo que já temos rodando no admin, ou seja a. preparia os dados para serem usados pelo form de validação usando o usuário da API como user; b. no caso de sucesso, usar a estratégia de transaction.on_commit para disparar o processamento assíncrono da planilha; c. no caso de erro, retornar 400 + JSON com o form.errors;
berinhard commented 4 years ago

Ah, além do arquivo CSV, o endpoint também aceita outros dois campos no corpo da requisição:

ramiroluz commented 4 years ago

@berinhard pode atribuir a mim?

Se alguém quiser ver o progresso ou ajudar, estou trabalhando aqui: https://github.com/ramiroluz/brasil.io/tree/ramiroluz/issue-213

ramiroluz commented 4 years ago

Tem um problema, além de não estar passando no CI.

https://github.com/ramiroluz/brasil.io/blob/ramiroluz/issue-213/covid19/views.py#L341

Está dentro de uma função, self não está definido. Mas está passsando nos tests.