From d3fd4e2415871ee0e695424a8c20e393eeedf04d Mon Sep 17 00:00:00 2001
From: Markus Scheidgen <markus.scheidgen@gmail.com>
Date: Tue, 18 Feb 2020 14:42:35 +0100
Subject: [PATCH] Added es query to uploads cli commands.

---
 nomad/cli/admin/uploads.py | 11 +++++++++++
 tests/test_cli.py          |  9 +++++++++
 2 files changed, 20 insertions(+)

diff --git a/nomad/cli/admin/uploads.py b/nomad/cli/admin/uploads.py
index 5747bf1194..4c03dbcdbc 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 cd700350a7..dc67809b85 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
 
-- 
GitLab