diff --git a/nomad/datamodel/__init__.py b/nomad/datamodel/__init__.py index f6cf880df3304335b25eb7ef9eba3aa732062b6c..3434ea2baf1f0ffc0687a74972f5a7a1b0117273 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 adc8e9280f7b712954ee3b8b2741855f61993e08..91c4fb48472c8ed490ecbf5139fb8125a478efb3 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 13a8ab854911bfe8990ae9f8fd9ba89742b47733..12b1f09cfcfec93c14552af8f1980ca94fd5e97a 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)