From a2cef69a719722baab6d7752f0e9cfda4bf4010b Mon Sep 17 00:00:00 2001 From: Markus Scheidgen <markus.scheidgen@gmail.com> Date: Fri, 17 Dec 2021 18:22:59 +0100 Subject: [PATCH] Clean API user metadata. --- nomad/datamodel/__init__.py | 2 +- nomad/search.py | 15 +++++++++++++++ tests/app/v1/routers/test_entries.py | 3 +++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/nomad/datamodel/__init__.py b/nomad/datamodel/__init__.py index f6cf880df3..3434ea2baf 100644 --- a/nomad/datamodel/__init__.py +++ b/nomad/datamodel/__init__.py @@ -92,7 +92,7 @@ from .ems import EMSMetadata from .qcms import QCMSMetadata from .datamodel import ( Dataset, User, Author, EditableUserMetadata, UserProvidableMetadata, OasisMetadata, - MongoMetadata, EntryMetadata, EntryArchive) + MongoMetadata, EntryMetadata, EntryArchive, user_reference, author_reference) from .optimade import OptimadeEntry, Species from .metainfo import m_env diff --git a/nomad/search.py b/nomad/search.py index adc8e9280f..91c4fb4847 100644 --- a/nomad/search.py +++ b/nomad/search.py @@ -43,6 +43,11 @@ _entry_metadata_defaults = { if quantity.default not in [None, [], False, 0] } +_all_author_quantities = [ + quantity.name + for quantity in datamodel.EntryMetadata.m_def.all_quantities.values() + if quantity.type in [datamodel.user_reference, datamodel.author_reference]] + def _es_to_entry_dict(hit, required: MetadataRequired) -> Dict[str, Any]: ''' @@ -61,6 +66,16 @@ def _es_to_entry_dict(hit, required: MetadataRequired) -> Dict[str, Any]: entry_dict[key] = value + for author_quantity in _all_author_quantities: + authors = entry_dict.get(author_quantity) + if authors is None: + continue + if isinstance(authors, dict): + authors = [authors] + for author in authors: + if 'email' in author: + del(author['email']) + return entry_dict diff --git a/tests/app/v1/routers/test_entries.py b/tests/app/v1/routers/test_entries.py index 13a8ab8549..12b1f09cfc 100644 --- a/tests/app/v1/routers/test_entries.py +++ b/tests/app/v1/routers/test_entries.py @@ -227,6 +227,9 @@ def assert_entry_metadata(response_json): if 'required' not in response_json: assert 'license' in entry + if 'uploader' in entry: + assert 'email' not in entry['uploader'] + def assert_entries_metadata_response(response, status_code=None): response_json = assert_entries_raw_metadata_response(response, status_code=status_code) -- GitLab