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