Ao enviar um data_dict idêntico ao JSON retornado pelo package_show (id=br-ibge-pib) para o package_validate, recebo o seguinte erro no cliente do Python:
CKANAPIError: ['http://0.0.0.0:5000/api/action/package_validate', 500, '{"help": "http://3.87.150.32/api/3/action/help_show?name=package_validate", "error": {"__type": "Internal Server Error", "message": "Internal Server Error"}, "success": false}']
E no log servidor web do website eu recebo o seguinte erro:
2021-09-06 22:03:56,451 ERROR [ckan.views.api] dict() got multiple values for keyword argument 'dataset_id'
Traceback (most recent call last):
File "/venv/lib/python3.9/site-packages/ckan/config/middleware/../../views/api.py", line 291, in action
result = function(context, request_data)
│ │ └ {'name': 'br-ibge-pib_', 'title': 'Produto Interno Bruto do Brasil', 'type': 'dataset', 'notes': 'Um sistema de indicadores muni...
│ └ {'model': <module 'ckan.model' from '/venv/lib/python3.9/site-packages/ckan/model/__init__.py'>, 'session': <sqlalchemy.orm.scop...
└ <function get_action.<locals>.make_wrapped.<locals>.wrapped at 0x7f77d48e7c10>
File "/venv/lib/python3.9/site-packages/ckan/logic/__init__.py", line 473, in wrapped
result = _action(context, data_dict, **kw)
│ │ │ └ {}
│ │ └ {'name': 'br-ibge-pib_', 'title': 'Produto Interno Bruto do Brasil', 'type': 'dataset', 'notes': 'Um sistema de indicadores muni...
│ └ {'model': <module 'ckan.model' from '/venv/lib/python3.9/site-packages/ckan/model/__init__.py'>, 'session': <sqlalchemy.orm.scop...
└ <function package_validate at 0x7f77d4312d30>
File "/app/ckanext-basedosdados/ckanext/basedosdados/actions/__init__.py", line 36, in package_validate
data, errors = lib_plugins.plugin_validate(
File "/venv/lib/python3.9/site-packages/ckan/lib/plugins.py", line 302, in plugin_validate
result = plugin.validate(context, data_dict, schema, action)
│ │ │ │ └ 'package_create'
│ │ │ └ {'__before': [<function duplicate_extras_key at 0x7f77d79d7700>, <function ignore at 0x7f77d48c7dc0>], 'id': [<function empty_if...
│ │ └ {'name': 'br-ibge-pib_', 'title': 'Produto Interno Bruto do Brasil', 'type': 'dataset', 'notes': 'Um sistema de indicadores muni...
│ └ {'model': <module 'ckan.model' from '/venv/lib/python3.9/site-packages/ckan/model/__init__.py'>, 'session': <sqlalchemy.orm.scop...
└ <Plugin BasedosdadosPlugin 'basedosdados'>
File "/app/ckanext-basedosdados/ckanext/basedosdados/plugin.py", line 28, in validate
out, errors = {
File "/app/ckanext-basedosdados/ckanext/basedosdados/plugin.py", line 58, in _validate_create
out = self._validate_pydantic(data_dict, action)
│ │ └ 'package_create'
│ └ {'name': 'br-ibge-pib_', 'title': 'Produto Interno Bruto do Brasil', 'type': 'dataset', 'notes': 'Um sistema de indicadores muni...
└ <Plugin BasedosdadosPlugin 'basedosdados'>
File "/app/ckanext-basedosdados/ckanext/basedosdados/plugin.py", line 106, in _validate_pydantic
data_model = dict(**data_dict, **dataset_args)
│ └ {'dataset_id': 'br_ibge_pib'}
└ {'name': 'br-ibge-pib_', 'title': 'Produto Interno Bruto do Brasil', 'type': 'dataset', 'notes': 'Um sistema de indicadores muni...
TypeError: dict() got multiple values for keyword argument 'dataset_id'
Os mesmos errors acontecem no cliente Python e no servidor web ao tentar publicar modificações dos metadados via package_patch.
O data_dict passo para API do CKAN é o seguinte:
{'id': '9ffa2eb2-3119-45f1-9353-7c279f1613e9',
'name': 'br-ibge-pib',
'title': 'Produto Interno Bruto do Brasil',
'type': 'dataset',
'notes': 'Um sistema de indicadores municipais com informações econômicas e sociais é importante instrumento para o planejamento de políticas públicas. Com a promulgação da Constituição Federal de 1988, que deu mais responsabilidade e autonomia aos municípios, ampliaram-se as demandas por informações econômicas padronizadas e comparáveis em nível municipal, tanto por parte de agentes públicos e privados, quanto por estudiosos da economia, e pela sociedade em geral. os resultados do PIB dos Municípios permitem identificar as áreas de geração de renda, produzindo informações que captam as especifidades do País.Dados sobre Produto Interno Bruto do IBGE.\nDados sobre Produto Interno Bruto do IBGE.\n',
'author': None,
'author_email': None,
'maintainer': None,
'maintainer_email': None,
'state': 'active',
'license_id': '',
'url': 'https://sidra.ibge.gov.br/pesquisa/pib-munic',
'version': None,
'metadata_created': '2019-09-17T17:05:24.772484',
'metadata_modified': '2021-08-17T04:01:25.334011',
'creator_user_id': '27eaffe3-f79b-469f-8f02-4716146bdfcc',
'private': False,
'license_title': '',
'num_resources': 3,
'resources': [{'id': '2fa7cf39-5a8c-4e9f-87d1-297f85c98371',
'name': 'Baixar (Link Externo)',
'description': '',
'position': 0,
'url': 'https://sidra.ibge.gov.br/pesquisa/pib-munic/tabelas',
'cache_last_updated': None,
'cache_url': None,
'created': '2019-09-17T17:05:51.164381',
'datastore_active': False,
'format': '',
'hash': '',
'last_modified': None,
'metadata_modified': '2021-08-11T01:23:07.893966',
'mimetype': None,
'mimetype_inner': None,
'package_id': '9ffa2eb2-3119-45f1-9353-7c279f1613e9',
'size': None,
'state': 'active',
'url_type': None,
'resource_type': 'external_link',
'language': ['portuguese'],
'has_structured_data': None,
'has_api': None,
'is_free': 'yes',
'requires_registration': 'no',
'country_ip_address_required': None,
'license': 'mit',
'temporal_coverage': [2002,
2003,
2004,
2005,
2006,
2007,
2008,
2009,
2010,
2011,
2012,
2013,
2014,
2015,
2016,
2017],
'update_frequency': 'one_year',
'formato': ''},
{'id': '29f1c4e5-5932-4a6b-8b1f-f8b0bd91a200',
'name': 'municipio',
'description': 'Produto Interno Bruto (PIB) municipal a preços correntes.\n',
'position': 1,
'url': '',
'cache_last_updated': None,
'cache_url': None,
'created': '2020-10-13T18:32:26.189478',
'datastore_active': False,
'format': '',
'hash': '',
'last_modified': None,
'metadata_modified': '2021-08-17T04:01:25.346852',
'mimetype': None,
'mimetype_inner': None,
'package_id': '9ffa2eb2-3119-45f1-9353-7c279f1613e9',
'size': None,
'state': 'active',
'url_type': '',
'resource_type': 'bdm_table',
'dataset_id': 'br_ibge_pib',
'table_id': 'municipio',
'spatial_coverage': 'bra',
'temporal_coverage': [2002,
2003,
2004,
2005,
2006,
2007,
2008,
2009,
2010,
2011,
2012,
2013,
2014,
2015,
2016,
2017,
2018],
'update_frequency': 'one_year',
'entity': ['municipality'],
'identifying_columns': ['id_municipio', 'ano'],
'version': 'v1.0',
'published_by': {'name': 'Ricardo Dahis',
'email': 'rdahis@basedosdados.org',
'github_user': None,
'website': 'www.ricardodahis.com',
'ckan_user': None},
'data_cleaned_by': {'name': 'Ricardo Dahis',
'email': 'rdahis@basedosdados.org',
'github_user': None,
'ckan_user': None,
'website': None,
'code_url': 'https://github.com/basedosdados/mais/tree/master/bases/br_ibge_pib/code'},
'data_cleaning_description': 'Mudamos a unidade de medida para R$1.\n',
'auxiliary_files_url': '',
'source_bucket_name': 'basedosdados-dev',
'project_id_prod': 'basedosdados-dev',
'project_id_staging': 'basedosdados-dev',
'partitions': '',
'bdm_file_size': None,
'columns': [{'name': 'id_municipio',
'description': 'ID Município - IBGE 7 Dígitos',
'is_in_staging': True,
'is_partition': False},
{'name': 'ano',
'description': 'Ano',
'is_in_staging': True,
'is_partition': False},
{'name': 'pib',
'description': 'Produto Interno Bruto a preços correntes',
'is_in_staging': True,
'is_partition': False},
{'name': 'impostos_liquidos',
'description': 'Impostos, líquidos de subsídios, sobre produtos a preços correntes',
'is_in_staging': True,
'is_partition': False},
{'name': 'va',
'description': 'Valor adicionado bruto a preços correntes total',
'is_in_staging': True,
'is_partition': False},
{'name': 'va_agropecuaria',
'description': 'Valor adicionado bruto a preços correntes da agropecuária',
'is_in_staging': True,
'is_partition': False},
{'name': 'va_industria',
'description': 'Valor adicionado bruto a preços correntes da indústria',
'is_in_staging': True,
'is_partition': False},
{'name': 'va_servicos',
'description': 'Valor adicionado bruto a preços correntes dos serviços, exclusive administração, defesa, educação e saúde públicas e seguridade social',
'is_in_staging': True,
'is_partition': False},
{'name': 'va_adespss',
'description': 'Valor adicionado bruto a preços correntes da administração, defesa, educação e saúde públicas e seguridade social',
'is_in_staging': True,
'is_partition': False}]},
{'id': '297f5f2f-c5eb-4adb-94e0-b3d630f20ede',
'name': 'Visualizar',
'description': None,
'position': 2,
'url': 'https://www.ibge.gov.br/explica/pib.php',
'cache_last_updated': None,
'cache_url': None,
'created': '2021-08-16T23:36:44.072002',
'format': '',
'hash': '',
'last_modified': None,
'metadata_modified': '2021-08-16T23:36:44.064040',
'mimetype': None,
'mimetype_inner': None,
'package_id': '9ffa2eb2-3119-45f1-9353-7c279f1613e9',
'size': None,
'state': 'active',
'url_type': None,
'resource_type': 'external_link',
'dataset_id': 'br_ibge_pib',
'language': ['portuguese'],
'has_api': 'no',
'is_free': 'yes',
'requires_registration': 'no',
'availability': 'online',
'country_ip_address_required': None,
'license': 'mit'}],
'groups': [{'id': '52e4efe1-c527-4446-88dc-33ec9af7abb8',
'name': 'economia',
'title': 'Economia',
'type': 'group',
'description': '',
'image_url': '2019-09-19-055720.95356961SjkfwyNTL.png',
'created': '2019-09-17T04:33:42.307242',
'is_organization': False,
'approval_status': 'approved',
'state': 'active',
'capacity': 'public',
'display_name': 'Economia',
'image_display_url': 'http://3.87.150.32/uploads/group/2019-09-19-055720.95356961SjkfwyNTL.png'}],
'owner_org': 'b82f9164-33eb-4e10-9c26-8c99e4591db3',
'organization': {'id': 'b82f9164-33eb-4e10-9c26-8c99e4591db3',
'name': 'instituto-brasileiro-de-geografia-e-estatistica',
'title': 'Instituto Brasileiro de Geografia e Estatística (IBGE)',
'type': 'organization',
'description': 'www.ibge.gov.br',
'image_url': '2019-09-19-153117.558371IBGE.png',
'created': '2019-09-14T20:59:07.312684',
'is_organization': True,
'approval_status': 'approved',
'state': 'active'},
'num_tags': 3,
'tags': [{'id': '76afbcbc-d493-4508-be69-933ffb7c69ae',
'name': 'PIB',
'vocabulary_id': None,
'state': 'active',
'display_name': 'PIB'},
{'id': '99df6909-4c0e-43fa-af10-afcccc8a035c',
'name': 'crescimento',
'vocabulary_id': None,
'state': 'active',
'display_name': 'crescimento'},
{'id': '347907c3-92c3-45c9-9fcd-080fcd5e383f',
'name': 'renda',
'vocabulary_id': None,
'state': 'active',
'display_name': 'renda'}],
'relationships_as_object': [],
'relationships_as_subject': [],
'dataset_id': 'br_ibge_pib',
'isopen': False,
'extras': [{'key': 'dataset_args', 'value': {'dataset_id': 'br_ibge_pib'}}]}
Reprodução do erro
Após subir o website localmente na branch develop, rode o seguinte código:
Descrição do bug
Ao enviar um
data_dict
idêntico ao JSON retornado pelopackage_show
(id=br-ibge-pib
) para opackage_validate
, recebo o seguinte erro no cliente do Python:E no log servidor web do website eu recebo o seguinte erro:
Os mesmos errors acontecem no cliente Python e no servidor web ao tentar publicar modificações dos metadados via
package_patch
.O
data_dict
passo para API do CKAN é o seguinte:Reprodução do erro
Após subir o website localmente na branch
develop
, rode o seguinte código: