transparencia-mg / dpckan

MIT License
5 stars 4 forks source link

Erro datastore ao mudar schema de recurso #207

Closed Andrelamor closed 1 year ago

Andrelamor commented 1 year ago

novo script de conversão para csv do new-dataset-template muda para lower-case, mas já haviam recursos publicados com label (name) das colunas em maiúsculo, então o datastore não aceita o upload do ckan com labels minúsculos:

(venv)
m6695506@D03GC5234264738 MINGW64 ~/Documents/CGE_transparência/repositorios/transparencia-mg/crimes-violentos (main)
$ dpckan --datastore --datapackage dataset/datapackage.json --ckan-host $HOMOLOGA_HOST --ckan-key $HOMOLOGA_KEY dataset update
Updating dataset https://homologa.cge.mg.gov.br/dataset/crimes-violentos
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2012.
Updating resource crimes_violentos_2012 datastore.
Error during https://homologa.cge.mg.gov.br/dataset/crimes-violentos updating
(venv)
m6695506@D03GC5234264738 MINGW64 ~/Documents/CGE_transparência/repositorios/transparencia-mg/crimes-violentos (main)
$ task json
(venv)
m6695506@D03GC5234264738 MINGW64 ~/Documents/CGE_transparência/repositorios/transparencia-mg/crimes-violentos (main)
$ dpckan --datastore --datapackage dataset/datapackage.json --ckan-host $HOMOLOGA_HOST --ckan-key $HOMOLOGA_KEY dataset update
Updating dataset https://homologa.cge.mg.gov.br/dataset/crimes-violentos
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2012.
Updating resource crimes_violentos_2012 datastore.
Updating resource crimes_violentos_2012 datastore.
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2013.
Updating resource crimes_violentos_2013 datastore.
Updating resource crimes_violentos_2013 datastore.
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2014.
Updating resource crimes_violentos_2014 datastore.
Updating resource crimes_violentos_2014 datastore.
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2015.
Updating resource crimes_violentos_2015 datastore.
Updating resource crimes_violentos_2015 datastore.
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2016.
Updating resource crimes_violentos_2016 datastore.
Updating resource crimes_violentos_2016 datastore.
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2017.
Updating resource crimes_violentos_2017 datastore.
Updating resource crimes_violentos_2017 datastore.
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2018.
Updating resource crimes_violentos_2018 datastore.
Updating resource crimes_violentos_2018 datastore.
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2019.
Updating resource crimes_violentos_2019 datastore.
Updating resource crimes_violentos_2019 datastore.
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2020.
Updating resource crimes_violentos_2020 datastore.
Updating resource crimes_violentos_2020 datastore.
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2021.
Updating resource crimes_violentos_2021 datastore.
Updating resource crimes_violentos_2021 datastore.
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2022.
Updating resource crimes_violentos_2022 datastore.
Updating resource crimes_violentos_2022 datastore.
Updating resource datapackage.json.
Updating data and metadata of resource crimes_violentos_2023.
Updating resource crimes_violentos_2023 datastore.
Updating resource crimes_violentos_2023 datastore.
Updating resource datapackage.json.
Dataset https://homologa.cge.mg.gov.br/dataset/crimes-violentos updated
(venv)
m6695506@D03GC5234264738 MINGW64 ~/Documents/CGE_transparência/repositorios/transparencia-mg/crimes-violentos (main)
$ frictinoless validate datapackage.json
bash: frictinoless: command not found
(venv)
m6695506@D03GC5234264738 MINGW64 ~/Documents/CGE_transparência/repositorios/transparencia-mg/crimes-violentos (main)
$ frictionless validate datapackage.json
# -------
# invalid: datapackage.json
# -------
=============  =================================================================
==========================================================================
code           message

=============  =================================================================
==========================================================================
package-error  The data package has an error: cannot extract metadata "datapacka
ge.json" because "[Errno 2] No such file or directory: 'datapackage.json'"
=============  =================================================================
==========================================================================

(venv)
m6695506@D03GC5234264738 MINGW64 ~/Documents/CGE_transparência/repositorios/transparencia-mg/crimes-violentos (main)
$ frictionless validate dataset/datapackage.json
# -------
# invalid: data/crimes_violentos_2012.csv
# -------

===  =====  ===============  ===================================================
=====================================================
row  field  code             message

===  =====  ===============  ===================================================
=====================================================
         1  incorrect-label  Label "registros" in field REGISTROS at position "1
" does not match the field name in the schema
         2  incorrect-label  Label "natureza" in field NATUREZA at position "2"
does not match the field name in the schema
         3  incorrect-label  Label "municipio" in field MUNICIPIO at position "3
" does not match the field name in the schema
         4  incorrect-label  Label "cod_municipio" in field COD_MUNICIPIO at pos
ition "4" does not match the field name in the schema
         5  incorrect-label  Label "mes" in field MES at position "5" does not m
atch the field name in the schema
         6  incorrect-label  Label "ano" in field ANO at position "6" does not m
atch the field name in the schema
         7  incorrect-label  Label "risp" in field RISP at position "7" does not
 match the field name in the schema
         8  incorrect-label  Label "rmbh" in field RMBH at position "8" does not
 match the field name in the schema
===  =====  ===============  ===================================================
=====================================================
gabrielbdornas commented 1 year ago

@Andrelamor a parte que faz a criação/atualização do datastore é a mesma, veja:

https://github.com/transparencia-mg/dpckan/blob/2de5072ca55ae5328a0fc1505abd41d1ab612b01/dpckan/functions.py#L74-L90

A maneira que proponho de resolvermos o problema é verificar se o recurso tem o datastore ativo e caso positivo deletamos. Desta maneira um novo sempre será criado com a nova estrutura ficando algo parecido com:

dataset_fields = {}
resource_show = ckan_instance.call_action('resource_show', { "id" : resource_id })
resource_id = { "resource_id" : resource_id }
dataset_fields.update(resource_id)
force = { "force" : "True" }
dataset_fields.update(force)
if resource_show['datastore_active']:
    ckan_instance.call_action('datastore_delete', dataset_fields)

Os testes que fiz utilizando o datapackage letters (bem simples) funcionou para adição, exclusão e inclusão de campos. Honestamente não sei prever se, para além do teste (de sucesso) relatado acima, teremos implicações maiores, mas acho que vale publicar uma versão 0.0.22 do dpckan para utilizar nos datasets-templates já migrados para o novo repositório.

gabrielbdornas commented 1 year ago

@Andrelamor para testar, como explicado neste stackoverflow, podemos rodar pip install git+ssh://git@github.com/transparencia-mg/dpckan.git@improve-datastore-update

Andrelamor commented 1 year ago
Andrelamor commented 1 year ago

@gabrielbdornas por que aparece o mesmo erro de conversão de csv de antes (new columns) com o template atualizado?

(venv)
Andre@DESKTOP-R63LP8N MINGW64 ~/Documents/teletrabalho/dados-mg/datastore (main)
$ task csv
Traceback (most recent call last):
  File "C:\Users\Andre\Documents\teletrabalho\dados-mg\datastore\scripts\convert_csv.py", line 47,
 in <module>
    convert_csv()
  File "C:\Users\Andre\Documents\teletrabalho\dados-mg\datastore\scripts\convert_csv.py", line 22,
 in convert_csv
    for column in new_columns:
UnboundLocalError: local variable 'new_columns' referenced before assignment
gabrielbdornas commented 1 year ago

@gabrielbdornas por que aparece o mesmo erro de conversão de csv de antes (new columns) com o template atualizado?

@Andrelamor, estou achando que isso é um problema de versão do Python. Qual a versão você está utilizando?

Andrelamor commented 1 year ago

3.9.5

gabrielbdornas commented 1 year ago

@Andrelamor, vou fazer a publicação da nova versão e fechar esse issue.