splor-mg / dpm

Data Package Manager
0 stars 0 forks source link

DPM install: datapackage.json é criado mesmo se todas as fetch_resources forem inválidas. #44

Open labanca opened 9 months ago

labanca commented 9 months ago
[packages.invalid-fetch-only]
path =  "https://raw.githubusercontent.com/transparencia-mg/datapackage-reprex/foreign-key-constraint/datapackage.json"
resources = ["foo", "bar"]

O datapackage é criado mesmo se nenhuma resource for baixada pelo dpm install e a proprieddade resources fica vazia (esse comportamento é esperado):

{
  "name": "datapackage-reprex",
  "title": "Data packages for Reproducible Examples",
  "description": "Esse repositório armazena exemplos de [data packages](https://specs.frictionlessdata.io/) para construção de [minimal, reproducible examples (reprex)](https://stackoverflow.com/help/minimal-reproducible-example)",
  "homepage": "https://github.com/dados-mg/datapackage-reprex",
  "profile": "tabular-data-package",
  "licenses": [
    {
      "name": "CC0-1.0",
      "title": "CC0 1.0",
      "path": "https://creativecommons.org/publicdomain/zero/1.0/"
    }
  ],
  "contributors": [
    {
      "title": "Francisco Alves",
      "role": "author"
    }
  ],
  "keywords": [
    "estados",
    "brasil",
    "federação"
  ],
  "version": "0.0.0.9000",
  "resources": [],
  "owner_org": "controladoria-geral-do-estado-cge"
}

Questão a decidir: O datapackage.json deve ser criado ou não nesse caso? Ele deveria ter todas as resources listadas ou nenhuma como é o caso atual?

fjuniorr commented 9 months ago

Eu tendo a achar que o datapackage.json não deve ser criado por causa da spec:

A Data Package descriptor MUST be a valid JSON object. (JSON is defined in RFC 4627 (opens new window)). When available as a file it MUST be named datapackage.json and it MUST be placed in the top-level directory (relative to any other resources provided as part of the data package).

The descriptor MUST contain a resources property describing the data resources.

[...]

The resources property is required, with at least one resource.

No entanto o frictionless-py não considera isso para validar um data package:

>>> from frictionless import Package
>>> dp = Package('./datapackages/invalid-fetch-only/datapackage.json')
>>> dp.resource_names
[]
>>> dp.resources
[]
>>> dp.validate()
{'valid': True,
 'stats': {'tasks': 0, 'errors': 0, 'warnings': 0, 'seconds': 0.0},
 'warnings': [],
 'errors': [],
 'tasks': []}

Então podemos esperar isso gerar algum tipo de problema efetivo antes de alterarmos o comportamento.