diff --git a/nomad/cli/admin/uploads.py b/nomad/cli/admin/uploads.py index 5747bf1194a9b53fa3626358dadf04a6c84ed062..4c03dbcdbcb924646f28630db758e926015b2996 100644 --- a/nomad/cli/admin/uploads.py +++ b/nomad/cli/admin/uploads.py @@ -16,8 +16,10 @@ from typing import List import click from tabulate import tabulate from mongoengine import Q +from elasticsearch_dsl import Q as ESQ from pymongo import UpdateOne import elasticsearch_dsl as es +import json from nomad import processing as proc, config, infrastructure, utils, search, files, datamodel from .admin import admin, __run_processing @@ -67,6 +69,15 @@ def uploads(ctx, user: str, staging: bool, processing: bool, outdated: bool, cod def query_uploads(ctx, uploads): + try: + json_query = json.loads(' '.join(uploads)) + request = search.SearchRequest() + request.q = ESQ(json_query) + request.quantity('upload_id', size=10000) + uploads = list(request.execute()['quantities']['upload_id']['values']) + except Exception: + pass + query = ctx.obj.query if len(uploads) > 0: query &= Q(upload_id__in=uploads) diff --git a/tests/test_cli.py b/tests/test_cli.py index cd700350a7447ce78aac5f5d5e0ebd22b4c184a2..dc67809b85939f818632983dd31303ddd9c4de0d 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -149,6 +149,15 @@ class TestAdminUploads: assert result.exit_code == 0 assert '1 uploads selected' in result.stdout + def test_ls_query(self, published): + upload_id = published.upload_id + + result = click.testing.CliRunner().invoke( + cli, ['admin', 'uploads', 'ls', '{"match":{"upload_id":"%s"}}' % upload_id], catch_exceptions=False, obj=utils.POPO()) + + assert result.exit_code == 0 + assert '1 uploads selected' in result.stdout + def test_rm(self, published): upload_id = published.upload_id