Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Package e File #81

Open
8 tasks
alvarofpp opened this issue Aug 27, 2019 · 8 comments
Open
8 tasks

Package e File #81

alvarofpp opened this issue Aug 27, 2019 · 8 comments
Labels
enhancement New feature or request

Comments

@alvarofpp
Copy link
Member

Feature

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

  • Tipo: Refatoração/Nova implementação
  • Depende da issue: Env --> Core #77.
    • Status: Totalmente.
  • Branch: no final, deverá ser feito um merge para a branch version-2.

Checklist:

  • Implementar feature;
  • Adicionar testes;
  • Atualizar docstring;
  • Atualizar documentação.

Para entender melhor

A seguir as mudanças que consistem nessa issue.

  • A classe File existente se tornará em um Mixin para a classe Package;
  • Criar a nova classe File a qual conterá os dados sobre cada arquivo presente em um pacote (os dados selecionados serão decididos no debate dessa issue);
  • Remodelar a classe Package para que possua uma lista de objetos File.
    • Criar métodos de manipulação dessa lista de objetos File (os métodos serão decididos no debate dessa 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 alvarofpp added enhancement New feature or request question Further information is requested labels Aug 27, 2019
@alvarofpp alvarofpp added this to the Versão 1.0.0 -> 2.0.0 milestone Aug 27, 2019
@alvarofpp
Copy link
Member Author

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
Copy link
Member Author

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
Copy link
Member Author

alvarofpp commented Aug 27, 2019

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
Copy link
Member Author

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.

  • __init(self)__: o construtor poderia receber o nome do pacote, aí seria feito a requisição que preencheria a lista de File e pegaria todos os dados necessários.
    • Deveria existir um método set_package() que receberia o nome de um novo pacote, atualizando todas as informações do objeto atual, ou seja, não retorna um novo objeto;
    • Poderia existir o erro de não encontrar o pacote desejado.
  • download(): que iria baixar toda a lista de File que existem no Package;
    • Perceba que isso já exclui o atual método download_all(), pois não condiz ao comportamento atual do pacote, sendo necessário colocar esse método em outro local.
  • filter(): que iria receber uma função e filtrar a lista de File, retornando um novo Package com os arquivos que satisfizessem o filtro aplicado. Esse método retorna um novo Package.
    • Existiria filtros já criados, como o de baixar dicionário ou não ou se o arquivo está dentro de um range de anos.

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
Copy link
Member Author

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
Copy link
Member

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
Copy link
Member

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

@nymarya nymarya removed the question Further information is requested label Sep 28, 2019
@itepifanio
Copy link
Member

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

4 participants