From fca57924f63147555d29f6b629c57d5c9168fe1b Mon Sep 17 00:00:00 2001 From: Markus Scheidgen <markus.scheidgen@gmail.com> Date: Mon, 25 Jan 2021 13:14:07 +0100 Subject: [PATCH] Allow the admin user to provide uploader metadata via nomad.json. --- nomad/processing/data.py | 4 ++++ tests/conftest.py | 1 + .../data/proc/examples_with_adminmetadata.zip | Bin 0 -> 1144 bytes tests/processing/test_data.py | 22 ++++++++++++++++++ 4 files changed, 27 insertions(+) create mode 100644 tests/data/proc/examples_with_adminmetadata.zip diff --git a/nomad/processing/data.py b/nomad/processing/data.py index bf46e6b609..8d10a9f8b8 100644 --- a/nomad/processing/data.py +++ b/nomad/processing/data.py @@ -586,6 +586,10 @@ class Calc(Proc): if definition is None and self.upload.from_oasis: definition = _oasis_metadata.get(key, None) + if key == 'uploader': + if datamodel.User.get(self.upload.user_id).is_admin: + definition = datamodel.EntryMetadata.uploader + if definition is None: logger.warn('Users cannot set metadata', quantity=key) continue diff --git a/tests/conftest.py b/tests/conftest.py index 16fecf4119..288c741498 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -297,6 +297,7 @@ def keycloak(monkeypatch): @pytest.fixture(scope='function') def proc_infra(worker, elastic, mongo, raw_files): ''' Combines all fixtures necessary for processing (elastic, worker, files, mongo) ''' + processing.Upload.metadata_file_cached.cache_clear() return dict(elastic=elastic) diff --git a/tests/data/proc/examples_with_adminmetadata.zip b/tests/data/proc/examples_with_adminmetadata.zip new file mode 100644 index 0000000000000000000000000000000000000000..de6f4503aaa28cad845af6765aa66d4ffdeef977 GIT binary patch literal 1144 zcmWIWW@Zs#U|`^2NRGD*3Y?b63*zZ9Ffgbw$S|Z<B<2?6q!!1QXO?8d=cbk<rX-dm z#;0ZGr0VD8=O(7;RVL=<gobc3Fjp?&OAubdmrz>4&A`a=m63q~Y_7KMiIe_5p1PZY z3>uhXby!3s7#R?DM#ozQ{l4hmvVn<#A(@+jL6d-;C8@auIf*5ydRfK!d0=bvmhdHj zFq*Y<!=m$N8;I1sU+-YEoa2n@hVAR3S9?{jxRSLxBy^fL-%QiynT^{br~bEdZfJTu z;eri|#qs;)@3!4P&-2rmyTkjG@t;#i=eK+e|J?oYUd9r>bQM-jgZk1_uIr=jr)XD9 z_S!wYRAk4UC%ielHmyN92IswJU8-NQ?aM(yVX^Qvf=P_7N4<V}xJ{W`UbT!ry#1VC zvKaG`I-a0e7kUhMBs;#ct<RX$(4ez!X71_YJ4@fU#x*$EbJ<$B$8p~=JO4ImPDtQY zKf7(&%jT>Nmn+p3uhI3m)m$HU=k6@2zuX;3)8#L3W;*?q_we2mt+G;v{>5zhZ4-qZ zC79FxEQtJCR$RLBaitooZUJLz{KYvFd3wS>F&!1S;Hvof@9gz#iv5SLwcl$JJGCj1 z?U+`AkY<Hja?F%PU8lVcv}b<4eRZ$bwV72rj(AQrecvM5HUIa%SARo2#H2dbRqZWn zd4F^Ldi@W~`~LpA8zOM~;`hrl{XQ>Q>AF$V%Om~TB39q4NlP>{Zuu7Q^kf>Xs*`5h zG)=GQFvmGr->P%VuWn1#-lSf7ao^F$bKL*T$S=C}=#9j2+XW(u&mx_!PrY$fk=^m9 z*STX|%O+g?-LUTB(>o1WKPTi|ve2yTDvrDGsbT5gJ6C?b`~PhDwT*Wa3Y2bh26oh# zZ@Jj$_exCZc-bBf-E^JVQ~#^6_SiI+c^kfeaZfJrw4L=elW5}uk7x1wUE0Z9-;;MN z%;0Q`_q{y*SDN;&3XaZwclGKU7T9hUW-RU4w65+6+v$XtE~T-8pHfquZI?Y!O|(71 zzlg!rQNZ=zC0nLL-^+T7b)PIy;7|?QHtCIGi=V#c#P&@*|B8<<@3PyQP@TpfbHk5M zW#V+U3Ex}yhgK)g5^iU*v+OZk_i~e-LG5e}hGVJCZ`X+HI>{#fo)Re=%kp~t+ne<P z-i%Cg%%H4?Eh9=WfB+){1H+O=5R2Gs$qLDqXn6zKF3b#wY*z^b1KuJ4EjzL@Fk{Jz W0p6@^AV)JXFfrU_U|?ux2Jrxxh{B!# literal 0 HcmV?d00001 diff --git a/tests/processing/test_data.py b/tests/processing/test_data.py index 1edf034a82..eeb53fee31 100644 --- a/tests/processing/test_data.py +++ b/tests/processing/test_data.py @@ -606,3 +606,25 @@ def test_read_metadata_from_file(proc_infra, test_user, other_test_user): assert entry_coauthors[j].email == coauthors[i][j].email assert entry_coauthors[j].first_name == coauthors[i][j].first_name assert entry_coauthors[j].last_name == coauthors[i][j].last_name + + +@pytest.mark.parametrize('user,uploader', [ + ('admin_user', 'other_test_user'), + ('test_user', 'test_user') +]) +def test_read_adminmetadata_from_file(proc_infra, test_user, other_test_user, admin_user, user, uploader): + def user_from_name(user_name): + if user_name == 'test_user': + return test_user + if user_name == 'other_test_user': + return other_test_user + if user_name == 'admin_user': + return admin_user + + user = user_from_name(user) + uploader = user_from_name(uploader) + + upload = run_processing( + ('test_upload', 'tests/data/proc/examples_with_adminmetadata.zip'), user) + calc = Calc.objects(upload_id=upload.upload_id).first() + assert calc.metadata['uploader'] == uploader.user_id -- GitLab