Closed fjuniorr closed 1 year ago
Não conheço nenhuma propriedade que possa ser usado pra isso, então minha sugestão apesar de possibilidade de confusão é usar novamente resources
. Dessa forma para o data.yaml
name: spreadmart
resources:
- name: reprex-excel
path: https://raw.githubusercontent.com/splor-mg/reprex/main/reprex/20230512T084359/datapackage.json
resources: ['plaintext', 'B'] # https://dev.to/this-is-learning/yaml-collections-sequences-and-mappings-4meb
A gente pode fazer
from frictionless import Package
dp = Package('data.yaml')
source = Package(dp.get_resource('reprex-excel').path)
for resource_name in source.resource_names:
resource_name in dp.get_resource('reprex-excel').custom['resources']
É importante que uma mensagem de warning seja mostrada se algum recurso especificado como filtro no data.yaml
não existir na fonte de dados, como por exemplo B
.
@fjuniorr a keyword ´resources´ foi usada novamente para manter alguma funcionalidade do frictionless?
Foi não. Pensei nela porque a gente está filtrando recursos, mas podemos usar outra coisa. Algumas outras que tinha pensado:
install_resources
keep_resources
download_resources
fetch_resources
No caso usar files
no nome da propriedade seria ruim? Por exemplo install_files
.
No caso, as resources de nível 1 (reprex-excel do exemplo) conteriam sempre arquivos? Ou poderiam ser datapackages ou outras coisas que não casaria com chamar a propriedade nova de `install_files?
Acho que selected_resources
seria bom, mas fica confuso se está selecionando das resources de nível 1 ou das que estão aninhadas dentro dessas.
update: Não haverá argumento novo na linha de comando (DPM install "data.yaml" install_resources reprex_excel [plain_text, B]
). Somente é necessário colocar os recursos que serão instalados dentro do data.yaml
e o DPM tratar isso.
É importante que uma mensagem de warning seja mostrada se algum recurso especificado como filtro no
data.yaml
não existir na fonte de dados, como por exemploB
.
Caso o pacote não seja encontrado, não é para interromper com erro, mas instalar os recursos presentes e avisar com warning os que não foram instalados/encontrados.
Primeiro commit do filtro em data.toml: 4805e0f060b551b24afb9dcaa03a65636512cd74
Problemas que serão tratados em commits futuros:
test_fetch_resources.py
não funciona ainda, pois não gera nenhum arquivo para ser comparado a lista esperada de arquivos. A pasta temporária de teste fica vazia após a execução. O teste não está encontrando o arquivo tests/data/fetch-resources.toml
, apesar de tudo indicar que ele esta na pasta correta.test_fetch_resources.py
referencia datapackages que não são puramente reprex, o que imagino que será visto como um problema.data.toml
, por exemplo [datapackage.obz-dados]
devem ser iguais das resources após o pacote ser instanciado no Frictionless. Imagino que existam contornos possíveis usando o ferramental frictionless que eu não soube utilizar.Para uma fonte de dados, caso a propriedade resources
do data.toml não exista ou seja uma lista vazia, o dpm procede como antes e baixa todos os arquivos.
Foi não. Pensei nela porque a gente está filtrando recursos, mas podemos usar outra coisa. Algumas outras que tinha pensado:
install_resources keep_resources download_resources fetch_resources
Sugiro, caso seja possível, que a propriedade do data.toml tenha outro nome que não resources
. Das opções dadas fetch_resources
parece intuitiva. Para escrever este texto tive dificuldade de explicar quando me referia às resources do frictionless ou às lista de resources do data.toml.
- [x] O teste
test_fetch_resources.py
não funciona ainda, pois não gera nenhum arquivo para ser comparado a lista esperada de arquivos. A pasta temporária de teste fica vazia após a execução. O teste não está encontrando o arquivotests/data/fetch-resources.toml
, apesar de tudo indicar que ele esta na pasta correta.
Era somente um problema de configuração da IDE Pycharm. Colocar o Working Directory na raiz do dpm resolveu o problema.
- [x] O teste
test_fetch_resources.py
referencia datapackages que não são puramente reprex, o que imagino que será visto como um problema.
implementado em 9f1f719526c4a14593735ef74bdb5206c5b41bfd
- [x] Atualmente o código considera que o nome das fontes de dados no
data.toml
, por exemplo[datapackage.obz-dados]
devem ser iguais das resources após o pacote ser instanciado no Frictionless. Imagino que existam contornos possíveis usando o ferramental frictionless que eu não soube utilizar.
O install funciona independentemente do nome dado ao package no data.toml
.
- [x] As mensagens de log ainda não foram adaptadas
Implementado em: https://github.com/splor-mg/dpm/commit/b4ade85fd841f1801228f6f27653e3d45380db01
- [x] adaptar o datapackage instalado (Criado depois do dpm install ) tem de dropar (retirar do datapackage.json) as linhas que referenciam as resources que não foram baixadas devido ao fetch resources.
Implementado em: https://github.com/splor-mg/dpm/commit/41dc345d6d0ff80471f3efb9b4607843eb5ddf05
@fjuniorr o comportamento quando a lista resources
no data.toml
está vazia:
[packages.empty-fetch-list]
path = "https://raw.githubusercontent.com/transparencia-mg/datapackage-reprex/foreign-key-constraint/datapackage.json"
resources = []
Agora é o de informar ao usuário que "nenhuma das resources listadas foram encontradas no data source."?
Essa funcionalidade veio ao observar que o painel-admin-obz precisa apenas do recurso
sisor-dados-2024/data/base_orcam_despesa_item_fiscal.csv
para implementar splor-mg/painel-admin-obz#6 mas teve que baixar todos os recursos do sisor-dados-2024