# 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)