diff --git a/src/caoscrawler/identifiable_adapters.py b/src/caoscrawler/identifiable_adapters.py index 7f54f39674ef69703615fe3a985aeadb9296d627..81396c66b9e3b08b2f375ffa26525ed1fa81baf0 100644 --- a/src/caoscrawler/identifiable_adapters.py +++ b/src/caoscrawler/identifiable_adapters.py @@ -149,6 +149,14 @@ identifiabel, identifiable and identified record) for a Record. return query_string def check_identifying_props(self, node, raise_exception=True): + """checks whether all identifying properties exist and raises an error if not + + If raise_exception is False, the function returns False instead of raising an error. + + Backreferences are not checked. + + Returns True if all identifying properties exist. + """ if node.registered_identifiable is None: if raise_exception: raise RuntimeError("no registered_identifiable") diff --git a/unittests/test_file_identifiables.py b/unittests/test_file_identifiables.py deleted file mode 100644 index 93dc8cb5d274b0875b9414d191f0379761af8dd8..0000000000000000000000000000000000000000 --- a/unittests/test_file_identifiables.py +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/python -# Tests for file identifiables -# A. Schlemmer, 06/2021 - -from unittest.mock import Mock, patch - -import caosdb as db -import pytest -from caoscrawler.identifiable import Identifiable -from caoscrawler.identifiable_adapters import LocalStorageIdentifiableAdapter -from caoscrawler.sync_graph import SyncNode -from caosdb.cached import cache_clear -from caosdb.exceptions import EmptyUniqueQueryError -from pytest import raises - -from test_crawler import mock_get_entity_by - - -@pytest.fixture(autouse=True) -def clear_cache(): - cache_clear() - - -@patch("caoscrawler.identifiable_adapters.get_children_of_rt", - new=Mock(side_effect=id)) -@patch("caoscrawler.identifiable_adapters.cached_get_entity_by", - new=Mock(side_effect=mock_get_entity_by)) -def test_file_identifiable(): - ident = LocalStorageIdentifiableAdapter() - - # Without a path there is no identifying information - with raises(ValueError): - ident.get_identifiable(SyncNode(db.File(), None), []) - - fp = "/test/bla/bla.txt" - file_obj = db.File(path=fp) - identifiable = ident.get_identifiable(SyncNode(file_obj, None), []) - - # the path is copied to the identifiable - assert fp == identifiable.path - assert isinstance(identifiable, Identifiable) - - # __eq__ function is only defined for Identifiable objects - with raises(ValueError): - file_obj != identifiable - - # since the path does not exist in the data in ident, the follwoing functions return None - with raises(EmptyUniqueQueryError): - ident.retrieve_identified_record_for_record(file_obj) - assert ident.get_file(identifiable) is None - - # Try again with actual files in the store: - records = ident.get_records() - test_record_wrong_path = db.File(path="/bla/bla/test.txt") - test_record_correct_path = db.File(path="/test/bla/bla.txt") - test_record_alsocorrect_path = db.File(path="/test/bla/bla.txt") - records.append(test_record_wrong_path) - # Now, there is a file, but still wrong path -> result is still None - identified_file = ident.get_file(file_obj) - assert identified_file is None - - records.append(test_record_correct_path) - # now there is a match - identified_file = ident.get_file(file_obj) - assert identified_file is not None - assert identified_file.path == file_obj.path - - with raises(RuntimeError, match=".*unambigiously.*"): - records.append(test_record_alsocorrect_path) - identified_file = ident.get_file(file_obj)