diff --git a/integrationtests/test_data/extroot/realworld_example/data/35/03_raw_data/001_dataset1/metadata.json b/integrationtests/test_data/extroot/realworld_example/data/35/03_raw_data/001_dataset1/metadata.json index 64df90e55eff065b1cc249a634444a72f9fd00d2..9b81cc094bf7d1c35154d8f092a96d5f5fae35c9 100644 --- a/integrationtests/test_data/extroot/realworld_example/data/35/03_raw_data/001_dataset1/metadata.json +++ b/integrationtests/test_data/extroot/realworld_example/data/35/03_raw_data/001_dataset1/metadata.json @@ -1,5 +1,5 @@ { - "title": "Random numbers created on a random autumn day in a random office", + "title": "Random numbers created on a random autumn day in a random person's office", "abstract": "For demonstration purposes we created random numbers on a computer in an office of the CLOUD. This demonstration dataset is used in the DataCloud, a curated cloud storage for scientific data.", "Event": [ { diff --git a/integrationtests/test_realworld_example.py b/integrationtests/test_realworld_example.py index 19a9aca2eaabce59b9570ade9ad7bae6eb43f9b9..da3fb69ce635ae69cd33cbf01de9df8ebf019661 100644 --- a/integrationtests/test_realworld_example.py +++ b/integrationtests/test_realworld_example.py @@ -124,7 +124,7 @@ def test_dataset(clear_database, usemodel): " given_name='Max'", unique=True) dataset = db.execute_query(f"FIND RECORD Dataset with Dataspace={dataspace.id} AND title=" - "'Random numbers created on a random autumn day in a random office'" + "'Random numbers created on a random autumn day in a random person\\'s office'" "", unique=True) assert db.execute_query(f"COUNT RECORD with id={dataset.id} AND WHICH REFERENCES Person WITH full_name=" "'Alexa Nozone' AND WHICH REFERENCES Person WITH full_name='Max Schmitt'" diff --git a/src/caoscrawler/identifiable_adapters.py b/src/caoscrawler/identifiable_adapters.py index 0b00cbeaefe42bcf600db735d27c67571ca6a79b..d4c2b1d04316946dc28fec15489e0dc390cb9dd3 100644 --- a/src/caoscrawler/identifiable_adapters.py +++ b/src/caoscrawler/identifiable_adapters.py @@ -52,8 +52,11 @@ def convert_value(value): return str(value.id) elif isinstance(value, datetime): return value.isoformat() + elif type(value) == str: + # replace single quotes, otherwise they may break the queries + return value.replace("\'", "\\'") else: - return str(value) + return f"{value}" class IdentifiableAdapter(metaclass=ABCMeta): @@ -387,7 +390,8 @@ class LocalStorageIdentifiableAdapter(IdentifiableAdapter): if self.check_record(record, identifiable): candidates.append(record) if len(candidates) > 1: - raise RuntimeError("Identifiable was not defined unambigiously.") + raise RuntimeError( + f"Identifiable was not defined unambigiously. Possible candidates are {candidates}") if len(candidates) == 0: return None return candidates[0] @@ -469,7 +473,8 @@ class CaosDBIdentifiableAdapter(IdentifiableAdapter): query_string = self.create_query_for_identifiable(identifiable) candidates = db.execute_query(query_string) if len(candidates) > 1: - raise RuntimeError("Identifiable was not defined unambigiously.") + raise RuntimeError( + f"Identifiable was not defined unambigiously.\n{query_string}\nReturned the following {candidates}.") if len(candidates) == 0: return None return candidates[0]