diff --git a/src/caoscrawler/crawl.py b/src/caoscrawler/crawl.py index d30472c9aa9745fb985358f86015f01286a41680..461a41f9d3da736cfb7a1f1efc23f557814c8185 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 5eecb10630bb478ff9070ad97eb5acca9a963fab..26aa9e73c42e4d3923d01d83a47c8dfa7007f0a6 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: