diff --git a/nomad/app/api/repo.py b/nomad/app/api/repo.py index 6aea33d9198a77191a1e353219d9f56fad4225a2..f1b8289cdb7b1847d9bd8b67e6a088b337c20a8f 100644 --- a/nomad/app/api/repo.py +++ b/nomad/app/api/repo.py @@ -180,10 +180,14 @@ class RepoCalcsResource(Resource): except Exception as e: abort(400, message='bad parameters: %s' % str(e)) + for metric in metrics: + if metric not in search_extension.metrics: + abort(400, message='there is no metric %s' % metric) + search_request = search.SearchRequest() apply_search_parameters(search_request, args) if date_histogram: - search_request.date_histogram(interval=interval) + search_request.date_histogram(interval=interval, metrics_to_use=metrics) try: assert page >= 1 @@ -194,10 +198,6 @@ class RepoCalcsResource(Resource): if order not in [-1, 1]: abort(400, message='invalid pagination') - for metric in metrics: - if metric not in search_extension.metrics: - abort(400, message='there is no metric %s' % metric) - if len(statistics) > 0: search_request.statistics(statistics, metrics_to_use=metrics) diff --git a/tests/app/test_api.py b/tests/app/test_api.py index f77d375160220507667a7abc6b66622a5bc2d41f..fd212559c2f7e42c8010b5c3d634a863753827e1 100644 --- a/tests/app/test_api.py +++ b/tests/app/test_api.py @@ -1064,6 +1064,15 @@ class TestRepo(): histogram = data.get('statistics').get('date_histogram') assert len(histogram) == nbuckets + def test_search_date_histogram_metrics(self, api, example_elastic_calcs, no_warn): + rv = api.get('/repo/?date_histogram=true&metrics=unique_entries') + assert rv.status_code == 200 + data = json.loads(rv.data) + histogram = data.get('statistics').get('date_histogram') + bucket = histogram[list(histogram.keys())[0]] + assert 'code_runs' in bucket + assert 'unique_entries' in bucket + @pytest.mark.parametrize('n_results, page, per_page', [(2, 1, 5), (1, 1, 1), (0, 2, 3)]) def test_search_pagination(self, api, example_elastic_calcs, no_warn, n_results, page, per_page): rv = api.get('/repo/?&page=%d&per_page=%d&statistics=dft.system' % (page, per_page)) diff --git a/tests/test_search.py b/tests/test_search.py index 1d8688cbeabd688c72e944b727dfdaa9228a78ee..a3d7aa3ac824f4f7ba883db1d51d8d259445dbf5 100644 --- a/tests/test_search.py +++ b/tests/test_search.py @@ -15,6 +15,7 @@ from typing import List, Iterable from elasticsearch_dsl import Q import pytest +from datetime import datetime from nomad import datamodel, search, processing, parsing, infrastructure, config from nomad.search import entry_document, SearchRequest @@ -71,7 +72,8 @@ def test_index_upload(elastic, processed: processing.Upload): def example_search_data(elastic, normalized: parsing.Backend): entry_metadata = normalized.entry_archive.section_metadata entry_metadata.m_update( - domain='dft', upload_id='test upload id', calc_id='test id') + domain='dft', upload_id='test upload id', calc_id='test id', + upload_time=datetime.now()) entry_metadata.apply_domain_metadata(normalized) create_entry(entry_metadata) refresh_index() @@ -178,15 +180,17 @@ def test_search_statistics(elastic, example_search_data): use_metrics = search_extension.metrics.keys() request = SearchRequest(domain='dft').statistic( - 'dft.system', size=10, metrics_to_use=use_metrics).date_histogram() + 'dft.system', size=10, metrics_to_use=use_metrics).date_histogram(metrics_to_use=use_metrics) results = request.execute() statistics = results['statistics'] assert 'results' not in results assert 'bulk' in statistics['dft.system'] + assert 'date_histogram' in statistics example_statistic = statistics['dft.system']['bulk'] assert_metrics(example_statistic, use_metrics) + assert_metrics(statistics['date_histogram'][list(statistics['date_histogram'].keys())[0]], use_metrics) assert_metrics(statistics['total']['all'], []) assert 'quantities' not in results