# HG changeset patch # User Fabien Amarger <fabien.amarger@logilab.fr> # Date 1709040201 -3600 # Tue Feb 27 14:23:21 2024 +0100 # Node ID 14e19658b3caee97527297a637e6850c83a34699 # Parent a633599acb05f833d0bb1a6817a686d7807b7b55 feat(import_data): Log SHACL validation into a dedicated log file diff --git a/cubicweb_rodolf/import_data.py b/cubicweb_rodolf/import_data.py --- a/cubicweb_rodolf/import_data.py +++ b/cubicweb_rodolf/import_data.py @@ -96,14 +96,29 @@ valid_rdf, shacl_errors = check_rdf_graph(rdf_graph, import_procedure) if not valid_rdf: + stream_shacl_log = io.StringIO() + shacl_log = get_import_data_logger(stream_shacl_log) + shacl_log.propagate = False # do not log into stdout + log.error("Data was not validated") for key, value in shacl_errors.items(): shacl_file = cnx.entity_from_eid(key) - log.error( + shacl_log.error( f"Data from {dataservice.dc_title()} does not comply with SHACL file " f"{shacl_file.dc_title()} and gives message : \n\t\t{value}" ) - task_failed = True + stream_shacl_log.seek(0) + import_process.cw_set( + shacl_report=cnx.create_entity( + "File", + title=f"SHACL Log file for ImportProcess#{import_process_eid}", + data=Binary(stream_shacl_log.read().encode("utf8")), + data_name=f"log_SHACL_ImportProcess_{import_process.eid}.txt", + data_format="plain/text", + ) + ) + import_process.cw_set(shacl_valid=False) else: + import_process.cw_set(shacl_valid=True) log.info("Data was successfully validated") except Exception as error: diff --git a/cubicweb_rodolf/schema.py b/cubicweb_rodolf/schema.py --- a/cubicweb_rodolf/schema.py +++ b/cubicweb_rodolf/schema.py @@ -65,3 +65,5 @@ rq_task = SubjectRelation("RqTask", cardinality="11", inlined=True) has_output_dataset = SubjectRelation("File", cardinality="??", inlined=True) import_report = SubjectRelation("File", cardinality="??", inlined=True) + shacl_valid = Boolean() + shacl_report = SubjectRelation("File", cardinality="??", inlined=True)