odufrn / odufrn-downloader

Pacote para baixar os dados do portal de dados abertos da UFRN
https://odufrn.github.io/odufrn-downloader/
MIT License
32 stars 4 forks source link

Package e File #81

Open alvarofpp opened 5 years ago

alvarofpp commented 5 years ago

Feature

Remodelar a classe de Package e criar a nova classe File.

Checklist:

Para entender melhor

A seguir as mudanças que consistem nessa issue.

Tomemos como base a requisição http://dados.ufrn.br/api/rest/dataset/discentes. Nessa requisição iremos coletar o máximo de dados possíveis sobre o pacote e os arquivos que a ele pertencem.

alvarofpp commented 5 years ago

Dados de File

Usando a requisição exemplo da issue, acho interessante a classe conter os seguintes dados (os arquivos estão em resources da requisição):

Dado Exemplo de valor
format "CSV"
description "Relação dos discentes de ingressantes em 2019 na UFRN."
name "Ingressantes em 2019"
url "http://dados.ufrn.br/dataset/554c2d41-cfce-4278-93c6-eb9aa49c5d16/resource/a55aef81-e094-4267-8643-f283524e3dd7/download/discentes-2019.csv"
created "2019-02-28T10:39:39.841876"
last_modified "2019-08-26T21:02:17.004565"

Os campos name, description e format seriam para conhecer melhor sobre o arquivo em si. url seria para realizar o download do arquivo. created e last_modified seriam para saber desde quando o arquivo existe e se ele já sofreu alguma mudança (possivelmente correção de erro e tals, como já teve).

alvarofpp commented 5 years ago

Métodos de File

O acesso aos atributos não necessitaria de métodos (por exemplo os gets), pois é um padrão adotado em alguns pacotes que já vi, como df.columns que é uma variável da classe pandas.DataFrame.

Existiria o método download(), porém os parâmetros poderiam ser diferentes dos que já existem, visto que os filtros de dicionário e anos serão aplicados em Package, no vetor de File, e não diretamente em File.

alvarofpp commented 5 years ago

Dados de Package

Usando a requisição exemplo da issue, acho interessante a classe conter os seguintes dados:

Dado Exemplo de valor
version "1.1"
resources Lista de File
title "Discentes"
name "discentes"
ckan_url "http://dados.ufrn.br/dataset/discentes"
notes "Relação dos discentes da UFRN."
notes_rendered "<p>Relação dos discentes da UFRN.</p>"
extras É um dicionário com alguns extras do pacote.

Boa parte dos campos seriam para permitir que o programador conheça melhor o pacote, sendo que tem atributos "redundantes" que valeriam o debate para decidirmos se iremos colocar ou não, como: notes e notes_rendered, title e name.

alvarofpp commented 5 years ago

Métodos de Package

O acesso aos atributos não necessitaria de métodos (por exemplo os gets), pois é um padrão adotado em alguns pacotes que já vi, como df.columns que é uma variável da classe pandas.DataFrame.

Métodos já existentes como print e load poderia ser adaptados, o primeiro para imprimir as informações do pacote e da lista de arquivos (fica a critério do programador decidir isso) e o segundo para dar um refresh no pacote atual que o objeto representa.

alvarofpp commented 5 years ago

Demais funções que existem atualmente

Funções como download_packages, search_related_packages, download_all, download_packages_by_tag e download_packages_by_tag seriam realocados para as novas classes que o pacote irá ter, como um novo modelo para Tag e Group. Isso pois atualmente a classe Package pode manipular mais de um pacote ao mesmo tempo, exemplo: download_all baixa todos os pacotes, e a função dela ao final dessa issue é representar um único pacote.

itepifanio commented 5 years ago

Dados de Package

Usando a requisição exemplo da issue, acho interessante a classe conter os seguintes dados: Dado Exemplo de valor version "1.1" resources Lista de File title "Discentes" name "discentes" ckan_url "http://dados.ufrn.br/dataset/discentes" notes "Relação dos discentes da UFRN." notes_rendered "<p>Relação dos discentes da UFRN.</p>" extras É um dicionário com alguns extras do pacote.

Boa parte dos campos seriam para permitir que o programador conheça melhor o pacote, sendo que tem atributos "redundantes" que valeriam o debate para decidirmos se iremos colocar ou não, como: notes e notes_rendered, title e name.

Essa parte de imprimir pacote podemos implementar como str da classe packages. Outra é que a renderização html notes_rendered é desnecessária, além disso o name e title da API são praticamente iguais, devemos escolher uma das duas.

diegodiogenes commented 4 years ago

Dados de Package

Usando a requisição exemplo da issue, acho interessante a classe conter os seguintes dados: Dado Exemplo de valor version "1.1" resources Lista de File title "Discentes" name "discentes" ckan_url "http://dados.ufrn.br/dataset/discentes" notes "Relação dos discentes da UFRN." notes_rendered "<p>Relação dos discentes da UFRN.</p>" extras É um dicionário com alguns extras do pacote.

Boa parte dos campos seriam para permitir que o programador conheça melhor o pacote, sendo que tem atributos "redundantes" que valeriam o debate para decidirmos se iremos colocar ou não, como: notes e notes_rendered, title e name.

acho interessante mantermos o note, mas notes_rendered é irrelevante e escolheríamos entre title ou name, possivelmente name

itepifanio commented 4 years ago

Como File só é estendida para Package, não há razão para ela ser um mixin, então ela vai ser só uma classe normal que será estendida pra package.