Open gabrielbdornas opened 1 year ago
Tomar cuidado na hora de executar esta mudança. Ao tentar fazer incluir um if statement
no final da função is_dataset_published_check
o conjunto já publicado foi excluído:
def is_dataset_published_check(ckan_instance, package, exit_code):
dataset = dataset_path(ckan_instance.address, package)
if is_dataset_published(ckan_instance, package.name):
click.echo(f'Dataset {dataset} already published')
if exit_code:
sys.exit(1)
Isso aconteceu porque o fluxo caiu no exept
da função create
do módulo create_dataset
, que chama a função delete_dataset
.
def create(ckan_host, ckan_key, datapackage, datastore, exit_code):
local_datapackage = load_complete_datapackage(datapackage)
dataset = dataset_path(ckan_host, local_datapackage)
click.echo(f"Creating dataset {dataset}")
ckan_instance = RemoteCKAN(ckan_host, apikey = ckan_key)
try:
run_dataset_validations(ckan_instance, local_datapackage)
dataset_create(ckan_instance, local_datapackage, datastore)
click.echo(f"Dataset {dataset} created")
except Exception:
delete_dataset(ckan_instance, local_datapackage.name)
print(f"Error during {dataset} creation")
if exit_code == True:
sys.exit(1)
Ao tentar implantar fluxo de publicação automática no novo dataset template deparei com o seguinte erro:
Os demais jobs não foram processados pois o exit code do comando
dpckan dataset create
foi 1. O que é estranho pois na documentação do pacote está escrito:Isso significa que o default do comando seria um exit code 0, o que permitiria a continuidade dos demais jobs.
Em um processo de debug rápido verifiquei que a função
create
do módulocreate_dataset
recebe e utiliza o parâmetroexit_code
corretamente:https://github.com/transparencia-mg/dpckan/blob/2de5072ca55ae5328a0fc1505abd41d1ab612b01/dpckan/create_dataset.py#L21-L25
O problema, identificado neste debug rápido, está na função
run_dataset_validations
que é chamada na linha 18:https://github.com/transparencia-mg/dpckan/blob/2de5072ca55ae5328a0fc1505abd41d1ab612b01/dpckan/create_dataset.py#L18
O argumento
exit_code
não é passada para nenhuma função de validação e ali todos os erros são finalizados comsys.exit(1)
.O comando
echo $?
me ajudou a visualizar o exit code no terminal, conforme demonstrado neste post.