diff --git a/cubicweb_rodolf/import_data.py b/cubicweb_rodolf/import_data.py index a633599acb05f833d0bb1a6817a686d7807b7b55_Y3ViaWN3ZWJfcm9kb2xmL2ltcG9ydF9kYXRhLnB5..14e19658b3caee97527297a637e6850c83a34699_Y3ViaWN3ZWJfcm9kb2xmL2ltcG9ydF9kYXRhLnB5 100644 --- a/cubicweb_rodolf/import_data.py +++ b/cubicweb_rodolf/import_data.py @@ -96,5 +96,9 @@ 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) @@ -99,6 +103,6 @@ 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}" ) @@ -102,5 +106,15 @@ 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: @@ -106,4 +120,5 @@ 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 index a633599acb05f833d0bb1a6817a686d7807b7b55_Y3ViaWN3ZWJfcm9kb2xmL3NjaGVtYS5weQ==..14e19658b3caee97527297a637e6850c83a34699_Y3ViaWN3ZWJfcm9kb2xmL3NjaGVtYS5weQ== 100644 --- 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)