From 0dd32b915efeca4e8f955257a679358e733089fe Mon Sep 17 00:00:00 2001
From: Markus Scheidgen <markus.scheidgen@gmail.com>
Date: Mon, 11 Jan 2021 14:01:37 +0100
Subject: [PATCH] Make app_fastapi a proper python package and fix linting
 issues.

---
 nomad/app_fastapi/__init__.py               |  0
 nomad/app_fastapi/models.py                 |  4 ++--
 nomad/app_fastapi/optimade/elasticsearch.py | 17 +++--------------
 nomad/app_fastapi/optimade_logger.py        |  1 -
 nomad/app_fastapi/routers/datasets.py       |  5 ++---
 nomad/app_fastapi/routers/entries.py        |  2 +-
 nomad/archive.py                            |  2 +-
 nomad/search.py                             | 10 +++++-----
 8 files changed, 14 insertions(+), 27 deletions(-)
 create mode 100644 nomad/app_fastapi/__init__.py

diff --git a/nomad/app_fastapi/__init__.py b/nomad/app_fastapi/__init__.py
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/nomad/app_fastapi/models.py b/nomad/app_fastapi/models.py
index 7d705aaa44..694f1d1a87 100644
--- a/nomad/app_fastapi/models.py
+++ b/nomad/app_fastapi/models.py
@@ -16,7 +16,7 @@
 # limitations under the License.
 #
 
-from typing import List, Dict, Optional, Union, Any
+from typing import List, Dict, Optional, Union, Any, Mapping
 import enum
 from fastapi import Body, Request, HTTPException, Query as FastApiQuery
 import pydantic
@@ -139,7 +139,7 @@ ops = {
 QueryParameterValue = Union[Value, List[Value], Lte, Lt, Gte, Gt, Any_, All, None_]
 
 Query = Union[
-    Dict[str, QueryParameterValue], And, Or, Not]
+    Mapping[str, QueryParameterValue], And, Or, Not]
 
 
 And.update_forward_refs()
diff --git a/nomad/app_fastapi/optimade/elasticsearch.py b/nomad/app_fastapi/optimade/elasticsearch.py
index df868611aa..e32fade851 100644
--- a/nomad/app_fastapi/optimade/elasticsearch.py
+++ b/nomad/app_fastapi/optimade/elasticsearch.py
@@ -1,26 +1,14 @@
-import os
-
-from typing import Tuple, List, Union, Dict, Any, Set
-import mongomock
-import pymongo.collection
+from typing import Tuple, List, Union, Dict, Set
 from fastapi import HTTPException
-
 from elasticsearch_dsl import Search, Q
-from urllib.parse import urlparse
 
 from optimade.filterparser import LarkParser
-from optimade.filtertransformers.elasticsearch import ElasticTransformer
-from optimade.models import EntryResource
-from optimade.server.config import CONFIG
 from optimade.server.entry_collections import EntryCollection
-from optimade.server.logger import LOGGER
-from optimade.server.mappers import BaseResourceMapper
 from optimade.server.query_params import EntryListingQueryParams, SingleEntryQueryParams
 from optimade.server.exceptions import BadRequest
 from optimade.server.mappers import StructureMapper
 from optimade.models import StructureResource
 
-
 from nomad import config, datamodel, files, search, utils
 from nomad.normalizing.optimade import (
     optimade_chemical_formula_reduced, optimade_chemical_formula_anonymous,
@@ -94,7 +82,8 @@ class ElasticsearchStructureCollection(EntryCollection):
             logger.error('could not parse optimade filter', filter=filter_param)
             raise NotImplementedError(
                 'some features used in filter query %s are not implemented' % filter_param)
-        elif filter != {}:
+
+        if filter != {}:
             search_request.query(filter)
 
         es_response = search_request.execute_paginated(
diff --git a/nomad/app_fastapi/optimade_logger.py b/nomad/app_fastapi/optimade_logger.py
index 372e055ca2..40a2ab9464 100644
--- a/nomad/app_fastapi/optimade_logger.py
+++ b/nomad/app_fastapi/optimade_logger.py
@@ -1,4 +1,3 @@
-import logging
 from nomad import utils
 
 LOGGER = utils.get_logger('optimade')
diff --git a/nomad/app_fastapi/routers/datasets.py b/nomad/app_fastapi/routers/datasets.py
index 602c4c4992..c0c267a112 100644
--- a/nomad/app_fastapi/routers/datasets.py
+++ b/nomad/app_fastapi/routers/datasets.py
@@ -25,14 +25,13 @@ import enum
 from nomad import utils, datamodel
 from nomad.utils import strip, create_uuid
 from nomad.datamodel import Dataset as DatasetDefinitionCls
-from nomad.search import search
 from nomad.doi import DOI
 
 from nomad.app_fastapi.routers.auth import get_required_user
 from nomad.app_fastapi.utils import create_responses
 from nomad.app_fastapi.models import (
     pagination_parameters, Pagination, PaginationResponse, Query,
-    HTTPExceptionModel, User, Direction, MetadataRequired)
+    HTTPExceptionModel, User, Direction, Owner)
 
 from .entries import _do_exaustive_search
 
@@ -212,7 +211,7 @@ async def post_datasets(
     # get all entry ids
     if create.query is not None:
         entries = _do_exaustive_search(
-            owner='public', query=create.query, user=user,
+            owner=Owner.public, query=create.query, user=user,
             include=['calc_id'])
         dataset.entries = [entry['calc_id'] for entry in entries]
     elif create.entries is not None:
diff --git a/nomad/app_fastapi/routers/entries.py b/nomad/app_fastapi/routers/entries.py
index b3b505d6b4..4548e574ac 100644
--- a/nomad/app_fastapi/routers/entries.py
+++ b/nomad/app_fastapi/routers/entries.py
@@ -737,7 +737,7 @@ async def get_entry_raw_download(
             status_code=status.HTTP_404_NOT_FOUND,
             detail='The entry with the given id does not exist or is not visible to you.')
 
-    return _answer_entries_raw_download_request(owner='public', query=query, files=files, user=user)
+    return _answer_entries_raw_download_request(owner=Owner.public, query=query, files=files, user=user)
 
 
 @router.get(
diff --git a/nomad/archive.py b/nomad/archive.py
index 70cbd0b57b..03990a6cc0 100644
--- a/nomad/archive.py
+++ b/nomad/archive.py
@@ -595,7 +595,7 @@ def query_archive(
 
 
 def filter_archive(
-        required: Dict[str, Any], archive_item: Union[Dict, ArchiveObject],
+        required: Union[str, Dict[str, Any]], archive_item: Union[Dict, ArchiveObject],
         transform: Callable) -> Dict:
 
     def _fix_index(index, length):
diff --git a/nomad/search.py b/nomad/search.py
index 7c11c5c846..15a6ccb659 100644
--- a/nomad/search.py
+++ b/nomad/search.py
@@ -20,7 +20,7 @@
 This module represents calculations in elastic search.
 '''
 
-from typing import Iterable, Dict, List, Any
+from typing import cast, Iterable, Dict, List, Any
 from elasticsearch_dsl import Search, Q, A, analyzer, tokenizer
 import elasticsearch.helpers
 from elasticsearch.exceptions import NotFoundError, RequestError
@@ -1110,15 +1110,15 @@ def search(
 
     # statistics
     if len(statistics) > 0:
-        more_response_data['statistics'] = {
+        more_response_data['statistics'] = cast(Dict[str, Any], {
             name: _es_to_api_statistics(es_response, name, statistic)
-            for name, statistic in statistics.items()}
+            for name, statistic in statistics.items()})
 
     # aggregations
     if len(aggregations) > 0:
-        more_response_data['aggregations'] = {
+        more_response_data['aggregations'] = cast(Dict[str, Any], {
             name: _es_to_api_aggregation(es_response, name, aggregation)
-            for name, aggregation in aggregations.items()}
+            for name, aggregation in aggregations.items()})
 
     more_response_data['es_query'] = es_query.to_dict()
 
-- 
GitLab