From 0c6a2f7994aff6b4ec19cf2c00daae9b2c7ecf83 Mon Sep 17 00:00:00 2001
From: Daniel <d.hornung@indiscale.com>
Date: Mon, 19 Feb 2024 14:30:26 +0100
Subject: [PATCH] FIX: Better handling of unidentified entities.

---
 src/caoscrawler/crawl.py  |  5 ++++-
 unittests/test_crawler.py | 11 +++++++++--
 2 files changed, 13 insertions(+), 3 deletions(-)

diff --git a/src/caoscrawler/crawl.py b/src/caoscrawler/crawl.py
index d30472c9..461a41f9 100644
--- a/src/caoscrawler/crawl.py
+++ b/src/caoscrawler/crawl.py
@@ -613,7 +613,8 @@ class Crawler(object):
         """
         try:
             merge_entities(
-                newrecord, record, merge_references_with_empty_diffs=False, merge_id_with_resolved_entity=True)
+                newrecord, record, merge_references_with_empty_diffs=False,
+                merge_id_with_resolved_entity=True)
         except EntityMergeConflictError:
             _treat_merge_error_of(newrecord, record)
             # We cannot merge but it is none of the clear case where merge is
@@ -637,6 +638,8 @@ class Crawler(object):
         """
 
         registered_identifiable = self.identifiableAdapter.get_registered_identifiable(record)
+        if registered_identifiable is None:
+            return False
         refs = self.identifiableAdapter.get_identifying_referencing_entities(referencing_entities,
                                                                              registered_identifiable)
         if any([el is None for el in refs]):
diff --git a/unittests/test_crawler.py b/unittests/test_crawler.py
index 5eecb106..26aa9e73 100644
--- a/unittests/test_crawler.py
+++ b/unittests/test_crawler.py
@@ -34,8 +34,8 @@ from pathlib import Path
 from unittest.mock import MagicMock, Mock, patch
 
 import caoscrawler
-import caosdb as db
-import caosdb.common.models as dbmodels
+import linkahead as db
+import linkahead.common.models as dbmodels
 import pytest
 import yaml
 from caoscrawler.crawl import (Crawler, SecurityMode, TreatedRecordLookUp,
@@ -216,6 +216,13 @@ def test_split_into_inserts_and_updates_trivial():
     crawler.split_into_inserts_and_updates([])
 
 
+def test_split_into_inserts_and_updates_unidentified():
+    crawler = Crawler()
+    with raises(ValueError) as err:
+        crawler.split_into_inserts_and_updates([db.Record(name="recname").add_parent("someparent")])
+    assert str(err.value).startswith("There is no identifying information.")
+
+
 def basic_retrieve_by_name_mock_up(rec, referencing_entities=None, known=None):
     """ returns a stored Record if rec.name is an existing key, None otherwise """
     if rec.name in known:
-- 
GitLab