From 32846c39fce0bfbee9d3b8a2c9dfb985e4e1f5ce Mon Sep 17 00:00:00 2001
From: Markus Scheidgen <markus.scheidgen@gmail.com>
Date: Thu, 14 Jan 2021 14:38:34 +0100
Subject: [PATCH] Moved app_fastapi to app.

---
 Dockerfile                                             |  8 ++++----
 docs/api_reference.rst                                 |  4 ++--
 nomad/{app_fastapi => app}/__init__.py                 |  0
 nomad/{app_fastapi => app}/flask/.gitignore            |  0
 nomad/{app_fastapi => app}/flask/__init__.py           |  0
 nomad/{app_fastapi => app}/flask/__main__.py           |  0
 nomad/{app_fastapi => app}/flask/api/__init__.py       | 10 +++++-----
 nomad/{app_fastapi => app}/flask/api/api.py            |  0
 nomad/{app_fastapi => app}/flask/api/archive.py        |  0
 nomad/{app_fastapi => app}/flask/api/auth.py           |  0
 nomad/{app_fastapi => app}/flask/api/common.py         |  2 +-
 nomad/{app_fastapi => app}/flask/api/dataset.py        |  0
 nomad/{app_fastapi => app}/flask/api/encyclopedia.py   |  0
 .../flask/api/encyclopedia_grammar.lark                |  0
 nomad/{app_fastapi => app}/flask/api/info.py           |  0
 .../flask/api/materialtransformer.py                   |  0
 nomad/{app_fastapi => app}/flask/api/metainfo.py       |  0
 nomad/{app_fastapi => app}/flask/api/mirror.py         |  0
 nomad/{app_fastapi => app}/flask/api/raw.py            |  0
 nomad/{app_fastapi => app}/flask/api/repo.py           |  0
 nomad/{app_fastapi => app}/flask/api/upload.py         |  0
 nomad/{app_fastapi => app}/flask/common.py             |  0
 nomad/{app_fastapi => app}/flask/dcat/__init__.py      |  0
 nomad/{app_fastapi => app}/flask/dcat/api.py           |  0
 nomad/{app_fastapi => app}/flask/dcat/catalog.py       |  0
 nomad/{app_fastapi => app}/flask/dcat/datasets.py      |  0
 nomad/{app_fastapi => app}/flask/dcat/mapping.py       |  0
 nomad/{app_fastapi => app}/flask/dist.py               |  0
 nomad/{app_fastapi => app}/flask/docs.py               |  0
 nomad/{app_fastapi => app}/flask/encyclopedia.py       |  0
 nomad/{app_fastapi => app}/flask/gui.py                |  0
 nomad/{app_fastapi => app}/main.py                     |  0
 nomad/{app_fastapi => app}/models.py                   |  2 +-
 nomad/{app_fastapi => app}/optimade/__init__.py        |  2 +-
 nomad/{app_fastapi => app}/optimade/elasticsearch.py   |  0
 nomad/{app_fastapi => app}/optimade/filterparser.py    |  0
 .../{app_fastapi => app}/optimade/optimade_config.json |  0
 nomad/{app_fastapi => app}/optimade_logger.py          |  0
 nomad/{app_fastapi => app}/routers/__init__.py         |  0
 nomad/{app_fastapi => app}/routers/auth.py             |  4 ++--
 nomad/{app_fastapi => app}/routers/datasets.py         |  6 +++---
 nomad/{app_fastapi => app}/routers/entries.py          |  6 +++---
 nomad/{app_fastapi => app}/routers/users.py            |  6 +++---
 nomad/{app_fastapi => app}/utils.py                    |  0
 nomad/cli/admin/migrate.py                             |  2 +-
 nomad/cli/admin/run.py                                 |  2 +-
 nomad/metainfo/flask_extension.py                      |  2 +-
 nomad/processing/base.py                               |  2 +-
 nomad/search.py                                        |  4 ++--
 run.sh                                                 |  2 +-
 tests/{app_fastapi => app}/__init__.py                 |  0
 tests/{app_fastapi => app}/conftest.py                 |  2 +-
 tests/{app_fastapi => app}/flask/__init__.py           |  0
 tests/{app_fastapi => app}/flask/bravado.py            |  0
 tests/{app_fastapi => app}/flask/conftest.py           |  2 +-
 tests/{app_fastapi => app}/flask/resource.py           |  2 +-
 tests/{app_fastapi => app}/flask/test_api.py           |  4 ++--
 .../flask/test_api_encyclopedia.py                     |  2 +-
 tests/{app_fastapi => app}/flask/test_app.py           |  0
 tests/{app_fastapi => app}/flask/test_bravado.py       |  0
 tests/{app_fastapi => app}/flask/test_dcat.py          |  4 ++--
 tests/{app_fastapi => app}/flask/utils.py              |  0
 tests/{app_fastapi => app}/routers/__init__.py         |  0
 tests/{app_fastapi => app}/routers/common.py           |  0
 tests/{app_fastapi => app}/routers/test_auth.py        |  0
 tests/{app_fastapi => app}/routers/test_datasets.py    |  0
 tests/{app_fastapi => app}/routers/test_entries.py     |  4 ++--
 tests/{app_fastapi => app}/routers/test_users.py       |  0
 tests/{app_fastapi => app}/test_optimade.py            |  6 +++---
 tests/{app_fastapi => app}/test_utils.py               |  2 +-
 tests/normalizing/test_system.py                       |  2 +-
 tests/parsing/test_parsing.py                          |  2 +-
 tests/processing/test_data.py                          |  4 ++--
 tests/test_cli.py                                      |  6 +++---
 tests/test_client.py                                   |  6 +++---
 tests/test_search.py                                   |  2 +-
 76 files changed, 57 insertions(+), 57 deletions(-)
 rename nomad/{app_fastapi => app}/__init__.py (100%)
 rename nomad/{app_fastapi => app}/flask/.gitignore (100%)
 rename nomad/{app_fastapi => app}/flask/__init__.py (100%)
 rename nomad/{app_fastapi => app}/flask/__main__.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/__init__.py (78%)
 rename nomad/{app_fastapi => app}/flask/api/api.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/archive.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/auth.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/common.py (99%)
 rename nomad/{app_fastapi => app}/flask/api/dataset.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/encyclopedia.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/encyclopedia_grammar.lark (100%)
 rename nomad/{app_fastapi => app}/flask/api/info.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/materialtransformer.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/metainfo.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/mirror.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/raw.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/repo.py (100%)
 rename nomad/{app_fastapi => app}/flask/api/upload.py (100%)
 rename nomad/{app_fastapi => app}/flask/common.py (100%)
 rename nomad/{app_fastapi => app}/flask/dcat/__init__.py (100%)
 rename nomad/{app_fastapi => app}/flask/dcat/api.py (100%)
 rename nomad/{app_fastapi => app}/flask/dcat/catalog.py (100%)
 rename nomad/{app_fastapi => app}/flask/dcat/datasets.py (100%)
 rename nomad/{app_fastapi => app}/flask/dcat/mapping.py (100%)
 rename nomad/{app_fastapi => app}/flask/dist.py (100%)
 rename nomad/{app_fastapi => app}/flask/docs.py (100%)
 rename nomad/{app_fastapi => app}/flask/encyclopedia.py (100%)
 rename nomad/{app_fastapi => app}/flask/gui.py (100%)
 rename nomad/{app_fastapi => app}/main.py (100%)
 rename nomad/{app_fastapi => app}/models.py (99%)
 rename nomad/{app_fastapi => app}/optimade/__init__.py (98%)
 rename nomad/{app_fastapi => app}/optimade/elasticsearch.py (100%)
 rename nomad/{app_fastapi => app}/optimade/filterparser.py (100%)
 rename nomad/{app_fastapi => app}/optimade/optimade_config.json (100%)
 rename nomad/{app_fastapi => app}/optimade_logger.py (100%)
 rename nomad/{app_fastapi => app}/routers/__init__.py (100%)
 rename nomad/{app_fastapi => app}/routers/auth.py (97%)
 rename nomad/{app_fastapi => app}/routers/datasets.py (98%)
 rename nomad/{app_fastapi => app}/routers/entries.py (99%)
 rename nomad/{app_fastapi => app}/routers/users.py (88%)
 rename nomad/{app_fastapi => app}/utils.py (100%)
 rename tests/{app_fastapi => app}/__init__.py (100%)
 rename tests/{app_fastapi => app}/conftest.py (99%)
 rename tests/{app_fastapi => app}/flask/__init__.py (100%)
 rename tests/{app_fastapi => app}/flask/bravado.py (100%)
 rename tests/{app_fastapi => app}/flask/conftest.py (97%)
 rename tests/{app_fastapi => app}/flask/resource.py (95%)
 rename tests/{app_fastapi => app}/flask/test_api.py (99%)
 rename tests/{app_fastapi => app}/flask/test_api_encyclopedia.py (99%)
 rename tests/{app_fastapi => app}/flask/test_app.py (100%)
 rename tests/{app_fastapi => app}/flask/test_bravado.py (100%)
 rename tests/{app_fastapi => app}/flask/test_dcat.py (95%)
 rename tests/{app_fastapi => app}/flask/utils.py (100%)
 rename tests/{app_fastapi => app}/routers/__init__.py (100%)
 rename tests/{app_fastapi => app}/routers/common.py (100%)
 rename tests/{app_fastapi => app}/routers/test_auth.py (100%)
 rename tests/{app_fastapi => app}/routers/test_datasets.py (100%)
 rename tests/{app_fastapi => app}/routers/test_entries.py (99%)
 rename tests/{app_fastapi => app}/routers/test_users.py (100%)
 rename tests/{app_fastapi => app}/test_optimade.py (98%)
 rename tests/{app_fastapi => app}/test_utils.py (96%)

diff --git a/Dockerfile b/Dockerfile
index 1626f97606..a2d25e004c 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -123,12 +123,12 @@ COPY --from=build /install/docs/.build /app/docs/.build
 COPY --from=build /usr/local/bin/nomad /usr/bin/nomad
 # copy the gui
 RUN mkdir -p /app/gui
-COPY --from=gui_build /app/build /app/nomad/app_fastapi/flask/static/gui
+COPY --from=gui_build /app/build /app/nomad/app/flask/static/gui
 # copy the encyclopedia gui production code
-COPY --from=gui_build /encyclopedia /app/nomad/app_fastapi/flask/static/encyclopedia
+COPY --from=gui_build /encyclopedia /app/nomad/app/flask/static/encyclopedia
 # remove the developer config on the gui, will be generated by run.sh from nomad.yaml
-RUN rm -f /app/nomad/app_fastapi/flask/static/gui/env.js
-RUN rm -f /app/nomad/app_fastapi/flask/static/encyclopedia/conf.js
+RUN rm -f /app/nomad/app/flask/static/gui/env.js
+RUN rm -f /app/nomad/app/flask/static/encyclopedia/conf.js
 # build the python package dist
 RUN python setup.py compile
 RUN python setup.py sdist
diff --git a/docs/api_reference.rst b/docs/api_reference.rst
index 2bedb7f251..20f5043679 100644
--- a/docs/api_reference.rst
+++ b/docs/api_reference.rst
@@ -11,7 +11,7 @@ consult our *swagger* dashboards:
 Summary
 -------
 
-.. qrefflask:: nomad.app_fastapi.flask:app
+.. qrefflask:: nomad.app.flask:app
   :undoc-static:
 
 
@@ -19,5 +19,5 @@ Summary
 API(s) Details
 --------------
 
-.. autoflask:: nomad.app_fastapi.flask:app
+.. autoflask:: nomad.app.flask:app
   :undoc-static:
diff --git a/nomad/app_fastapi/__init__.py b/nomad/app/__init__.py
similarity index 100%
rename from nomad/app_fastapi/__init__.py
rename to nomad/app/__init__.py
diff --git a/nomad/app_fastapi/flask/.gitignore b/nomad/app/flask/.gitignore
similarity index 100%
rename from nomad/app_fastapi/flask/.gitignore
rename to nomad/app/flask/.gitignore
diff --git a/nomad/app_fastapi/flask/__init__.py b/nomad/app/flask/__init__.py
similarity index 100%
rename from nomad/app_fastapi/flask/__init__.py
rename to nomad/app/flask/__init__.py
diff --git a/nomad/app_fastapi/flask/__main__.py b/nomad/app/flask/__main__.py
similarity index 100%
rename from nomad/app_fastapi/flask/__main__.py
rename to nomad/app/flask/__main__.py
diff --git a/nomad/app_fastapi/flask/api/__init__.py b/nomad/app/flask/api/__init__.py
similarity index 78%
rename from nomad/app_fastapi/flask/api/__init__.py
rename to nomad/app/flask/api/__init__.py
index 37766017d2..3782d7be92 100644
--- a/nomad/app_fastapi/flask/api/__init__.py
+++ b/nomad/app/flask/api/__init__.py
@@ -21,11 +21,11 @@ The official NOMAD API.
 
 There is a separate documentation for the API endpoints from a client perspective.
 
-.. automodule:: nomad.app_fastapi.flask.api.api
-.. automodule:: nomad.app_fastapi.flask.api.auth
-.. automodule:: nomad.app_fastapi.flask.api.upload
-.. automodule:: nomad.app_fastapi.flask.api.repo
-.. automodule:: nomad.app_fastapi.flask.api.archive
+.. automodule:: nomad.app.flask.api.api
+.. automodule:: nomad.app.flask.api.auth
+.. automodule:: nomad.app.flask.api.upload
+.. automodule:: nomad.app.flask.api.repo
+.. automodule:: nomad.app.flask.api.archive
 '''
 
 from .api import api, blueprint
diff --git a/nomad/app_fastapi/flask/api/api.py b/nomad/app/flask/api/api.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/api.py
rename to nomad/app/flask/api/api.py
diff --git a/nomad/app_fastapi/flask/api/archive.py b/nomad/app/flask/api/archive.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/archive.py
rename to nomad/app/flask/api/archive.py
diff --git a/nomad/app_fastapi/flask/api/auth.py b/nomad/app/flask/api/auth.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/auth.py
rename to nomad/app/flask/api/auth.py
diff --git a/nomad/app_fastapi/flask/api/common.py b/nomad/app/flask/api/common.py
similarity index 99%
rename from nomad/app_fastapi/flask/api/common.py
rename to nomad/app/flask/api/common.py
index 10bb8b5023..31815fa21c 100644
--- a/nomad/app_fastapi/flask/api/common.py
+++ b/nomad/app/flask/api/common.py
@@ -35,7 +35,7 @@ import gzip
 from functools import wraps
 
 from nomad import search, config, datamodel, utils
-from nomad.app_fastapi.optimade import filterparser
+from nomad.app.optimade import filterparser
 from nomad.files import Restricted
 
 from ..common import RFC3339DateTime, rfc3339DateTime
diff --git a/nomad/app_fastapi/flask/api/dataset.py b/nomad/app/flask/api/dataset.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/dataset.py
rename to nomad/app/flask/api/dataset.py
diff --git a/nomad/app_fastapi/flask/api/encyclopedia.py b/nomad/app/flask/api/encyclopedia.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/encyclopedia.py
rename to nomad/app/flask/api/encyclopedia.py
diff --git a/nomad/app_fastapi/flask/api/encyclopedia_grammar.lark b/nomad/app/flask/api/encyclopedia_grammar.lark
similarity index 100%
rename from nomad/app_fastapi/flask/api/encyclopedia_grammar.lark
rename to nomad/app/flask/api/encyclopedia_grammar.lark
diff --git a/nomad/app_fastapi/flask/api/info.py b/nomad/app/flask/api/info.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/info.py
rename to nomad/app/flask/api/info.py
diff --git a/nomad/app_fastapi/flask/api/materialtransformer.py b/nomad/app/flask/api/materialtransformer.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/materialtransformer.py
rename to nomad/app/flask/api/materialtransformer.py
diff --git a/nomad/app_fastapi/flask/api/metainfo.py b/nomad/app/flask/api/metainfo.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/metainfo.py
rename to nomad/app/flask/api/metainfo.py
diff --git a/nomad/app_fastapi/flask/api/mirror.py b/nomad/app/flask/api/mirror.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/mirror.py
rename to nomad/app/flask/api/mirror.py
diff --git a/nomad/app_fastapi/flask/api/raw.py b/nomad/app/flask/api/raw.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/raw.py
rename to nomad/app/flask/api/raw.py
diff --git a/nomad/app_fastapi/flask/api/repo.py b/nomad/app/flask/api/repo.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/repo.py
rename to nomad/app/flask/api/repo.py
diff --git a/nomad/app_fastapi/flask/api/upload.py b/nomad/app/flask/api/upload.py
similarity index 100%
rename from nomad/app_fastapi/flask/api/upload.py
rename to nomad/app/flask/api/upload.py
diff --git a/nomad/app_fastapi/flask/common.py b/nomad/app/flask/common.py
similarity index 100%
rename from nomad/app_fastapi/flask/common.py
rename to nomad/app/flask/common.py
diff --git a/nomad/app_fastapi/flask/dcat/__init__.py b/nomad/app/flask/dcat/__init__.py
similarity index 100%
rename from nomad/app_fastapi/flask/dcat/__init__.py
rename to nomad/app/flask/dcat/__init__.py
diff --git a/nomad/app_fastapi/flask/dcat/api.py b/nomad/app/flask/dcat/api.py
similarity index 100%
rename from nomad/app_fastapi/flask/dcat/api.py
rename to nomad/app/flask/dcat/api.py
diff --git a/nomad/app_fastapi/flask/dcat/catalog.py b/nomad/app/flask/dcat/catalog.py
similarity index 100%
rename from nomad/app_fastapi/flask/dcat/catalog.py
rename to nomad/app/flask/dcat/catalog.py
diff --git a/nomad/app_fastapi/flask/dcat/datasets.py b/nomad/app/flask/dcat/datasets.py
similarity index 100%
rename from nomad/app_fastapi/flask/dcat/datasets.py
rename to nomad/app/flask/dcat/datasets.py
diff --git a/nomad/app_fastapi/flask/dcat/mapping.py b/nomad/app/flask/dcat/mapping.py
similarity index 100%
rename from nomad/app_fastapi/flask/dcat/mapping.py
rename to nomad/app/flask/dcat/mapping.py
diff --git a/nomad/app_fastapi/flask/dist.py b/nomad/app/flask/dist.py
similarity index 100%
rename from nomad/app_fastapi/flask/dist.py
rename to nomad/app/flask/dist.py
diff --git a/nomad/app_fastapi/flask/docs.py b/nomad/app/flask/docs.py
similarity index 100%
rename from nomad/app_fastapi/flask/docs.py
rename to nomad/app/flask/docs.py
diff --git a/nomad/app_fastapi/flask/encyclopedia.py b/nomad/app/flask/encyclopedia.py
similarity index 100%
rename from nomad/app_fastapi/flask/encyclopedia.py
rename to nomad/app/flask/encyclopedia.py
diff --git a/nomad/app_fastapi/flask/gui.py b/nomad/app/flask/gui.py
similarity index 100%
rename from nomad/app_fastapi/flask/gui.py
rename to nomad/app/flask/gui.py
diff --git a/nomad/app_fastapi/main.py b/nomad/app/main.py
similarity index 100%
rename from nomad/app_fastapi/main.py
rename to nomad/app/main.py
diff --git a/nomad/app_fastapi/models.py b/nomad/app/models.py
similarity index 99%
rename from nomad/app_fastapi/models.py
rename to nomad/app/models.py
index 694f1d1a87..f7dc7c31ac 100644
--- a/nomad/app_fastapi/models.py
+++ b/nomad/app/models.py
@@ -29,7 +29,7 @@ import fnmatch
 from nomad import datamodel  # pylint: disable=unused-import
 from nomad.utils import strip
 from nomad.metainfo import Datetime, MEnum
-from nomad.app_fastapi.utils import parameter_dependency_from_model
+from nomad.app.utils import parameter_dependency_from_model
 from nomad.metainfo.search_extension import metrics, search_quantities
 
 
diff --git a/nomad/app_fastapi/optimade/__init__.py b/nomad/app/optimade/__init__.py
similarity index 98%
rename from nomad/app_fastapi/optimade/__init__.py
rename to nomad/app/optimade/__init__.py
index ec1d289f15..b98541bb9b 100644
--- a/nomad/app_fastapi/optimade/__init__.py
+++ b/nomad/app/optimade/__init__.py
@@ -7,7 +7,7 @@ import importlib
 os.environ['OPTIMADE_CONFIG_FILE'] = os.path.join(os.path.dirname(__file__), 'optimade_config.json')
 
 # patch optimade logger (patched module most be outside this module to force import before optimade)
-sys.modules['optimade.server.logger'] = importlib.import_module('nomad.app_fastapi.optimade_logger')
+sys.modules['optimade.server.logger'] = importlib.import_module('nomad.app.optimade_logger')
 
 # patch optimade base path
 from nomad import config, utils  # nopep8
diff --git a/nomad/app_fastapi/optimade/elasticsearch.py b/nomad/app/optimade/elasticsearch.py
similarity index 100%
rename from nomad/app_fastapi/optimade/elasticsearch.py
rename to nomad/app/optimade/elasticsearch.py
diff --git a/nomad/app_fastapi/optimade/filterparser.py b/nomad/app/optimade/filterparser.py
similarity index 100%
rename from nomad/app_fastapi/optimade/filterparser.py
rename to nomad/app/optimade/filterparser.py
diff --git a/nomad/app_fastapi/optimade/optimade_config.json b/nomad/app/optimade/optimade_config.json
similarity index 100%
rename from nomad/app_fastapi/optimade/optimade_config.json
rename to nomad/app/optimade/optimade_config.json
diff --git a/nomad/app_fastapi/optimade_logger.py b/nomad/app/optimade_logger.py
similarity index 100%
rename from nomad/app_fastapi/optimade_logger.py
rename to nomad/app/optimade_logger.py
diff --git a/nomad/app_fastapi/routers/__init__.py b/nomad/app/routers/__init__.py
similarity index 100%
rename from nomad/app_fastapi/routers/__init__.py
rename to nomad/app/routers/__init__.py
diff --git a/nomad/app_fastapi/routers/auth.py b/nomad/app/routers/auth.py
similarity index 97%
rename from nomad/app_fastapi/routers/auth.py
rename to nomad/app/routers/auth.py
index e2801c312c..0a7bcb7809 100644
--- a/nomad/app_fastapi/routers/auth.py
+++ b/nomad/app/routers/auth.py
@@ -22,8 +22,8 @@ from pydantic import BaseModel
 
 from nomad import infrastructure
 from nomad.utils import get_logger, strip
-from nomad.app_fastapi.models import User, HTTPExceptionModel
-from nomad.app_fastapi.utils import create_responses
+from nomad.app.models import User, HTTPExceptionModel
+from nomad.app.utils import create_responses
 
 logger = get_logger(__name__)
 
diff --git a/nomad/app_fastapi/routers/datasets.py b/nomad/app/routers/datasets.py
similarity index 98%
rename from nomad/app_fastapi/routers/datasets.py
rename to nomad/app/routers/datasets.py
index ed091e6c7c..c5099530db 100644
--- a/nomad/app_fastapi/routers/datasets.py
+++ b/nomad/app/routers/datasets.py
@@ -27,9 +27,9 @@ from nomad.utils import strip, create_uuid
 from nomad.datamodel import Dataset as DatasetDefinitionCls
 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 (
+from nomad.app.routers.auth import get_required_user
+from nomad.app.utils import create_responses
+from nomad.app.models import (
     pagination_parameters, Pagination, PaginationResponse, Query,
     HTTPExceptionModel, User, Direction, Owner)
 
diff --git a/nomad/app_fastapi/routers/entries.py b/nomad/app/routers/entries.py
similarity index 99%
rename from nomad/app_fastapi/routers/entries.py
rename to nomad/app/routers/entries.py
index 4548e574ac..c871461a57 100644
--- a/nomad/app_fastapi/routers/entries.py
+++ b/nomad/app/routers/entries.py
@@ -29,9 +29,9 @@ from nomad.utils import strip
 from nomad.archive import (
     query_archive, ArchiveQueryError, compute_required_with_referenced,
     read_partial_archives_from_mongo, filter_archive)
-from nomad.app_fastapi.utils import create_streamed_zipfile, File, create_responses
-from nomad.app_fastapi.routers.auth import get_optional_user
-from nomad.app_fastapi.models import (
+from nomad.app.utils import create_streamed_zipfile, File, create_responses
+from nomad.app.routers.auth import get_optional_user
+from nomad.app.models import (
     Pagination, WithQuery, MetadataRequired, EntriesMetadataResponse, EntriesMetadata,
     EntryMetadataResponse, query_parameters, metadata_required_parameters, Files, Query,
     pagination_parameters, files_parameters, User, Owner, HTTPExceptionModel, EntriesRaw,
diff --git a/nomad/app_fastapi/routers/users.py b/nomad/app/routers/users.py
similarity index 88%
rename from nomad/app_fastapi/routers/users.py
rename to nomad/app/routers/users.py
index b6d54b2fe0..cce273ebed 100644
--- a/nomad/app_fastapi/routers/users.py
+++ b/nomad/app/routers/users.py
@@ -18,9 +18,9 @@
 
 from fastapi import Depends, APIRouter, status
 
-from nomad.app_fastapi.routers.auth import get_required_user
-from nomad.app_fastapi.models import User, HTTPExceptionModel
-from nomad.app_fastapi.utils import create_responses
+from nomad.app.routers.auth import get_required_user
+from nomad.app.models import User, HTTPExceptionModel
+from nomad.app.utils import create_responses
 from nomad.utils import strip
 
 router = APIRouter()
diff --git a/nomad/app_fastapi/utils.py b/nomad/app/utils.py
similarity index 100%
rename from nomad/app_fastapi/utils.py
rename to nomad/app/utils.py
diff --git a/nomad/cli/admin/migrate.py b/nomad/cli/admin/migrate.py
index 894fbb95a5..641c1833c7 100644
--- a/nomad/cli/admin/migrate.py
+++ b/nomad/cli/admin/migrate.py
@@ -27,7 +27,7 @@ def migrate(mongo_db: str):
     import pymongo
     import sys
     from nomad import config, processing as proc, doi as nomad_doi, datamodel, infrastructure
-    from nomad.app_fastapi.flask.api.mirror import _upload_data
+    from nomad.app.flask.api.mirror import _upload_data
     from nomad.cli.client.mirror import v0Dot7, fix_time, _Dataset
     from bson.json_util import dumps
 
diff --git a/nomad/cli/admin/run.py b/nomad/cli/admin/run.py
index 76e08c0ed3..499a1bd6af 100644
--- a/nomad/cli/admin/run.py
+++ b/nomad/cli/admin/run.py
@@ -47,7 +47,7 @@ def run_app(**kwargs):
     from uvicorn import Server, Config
 
     uv_config = Config(
-        'nomad.app_fastapi.main:app', host='127.0.0.1',
+        'nomad.app.main:app', host='127.0.0.1',
         port=config.services.api_port, log_level='info')
     server = Server(config=uv_config)
     server.run()
diff --git a/nomad/metainfo/flask_extension.py b/nomad/metainfo/flask_extension.py
index 9747ba7e5d..7c312216bc 100644
--- a/nomad/metainfo/flask_extension.py
+++ b/nomad/metainfo/flask_extension.py
@@ -18,7 +18,7 @@
 
 from flask_restplus import fields
 
-from nomad.app_fastapi.flask.common import RFC3339DateTime
+from nomad.app.flask.common import RFC3339DateTime
 
 from .metainfo import Section, Quantity, Datetime, Capitalized, MEnum
 
diff --git a/nomad/processing/base.py b/nomad/processing/base.py
index 2a687fa606..8c2423ddd4 100644
--- a/nomad/processing/base.py
+++ b/nomad/processing/base.py
@@ -528,7 +528,7 @@ def unwarp_task(task, cls_name, self_id, *args, **kwargs):
         try:
             self = cls.get(self_id)
         except KeyError as e:
-            from nomad.app_fastapi import flask
+            from nomad.app import flask
             if flask.app.config['TESTING']:
                 # This only happens in tests, where it is not always avoidable that
                 # tasks from old test-cases bleed over.
diff --git a/nomad/search.py b/nomad/search.py
index c9ed8334cc..7ee0780eb8 100644
--- a/nomad/search.py
+++ b/nomad/search.py
@@ -31,8 +31,8 @@ from nomad.datamodel.material import Material
 from nomad import config, datamodel, infrastructure, utils
 from nomad.metainfo.search_extension import (  # pylint: disable=unused-import
     search_quantities, metrics, order_default_quantities, groups)
-from nomad.app_fastapi import models as api_models
-from nomad.app_fastapi.models import (
+from nomad.app import models as api_models
+from nomad.app.models import (
     Pagination, PaginationResponse, Query, MetadataRequired, SearchResponse, Aggregation,
     Statistic, StatisticResponse, AggregationOrderType, AggregationResponse, AggregationDataItem)
 
diff --git a/run.sh b/run.sh
index fd69c688f6..508d4730af 100644
--- a/run.sh
+++ b/run.sh
@@ -3,4 +3,4 @@ python -m nomad.cli admin ops gui-config
 params=()
 [ -e gunicorn.conf ] && params+=(--config gunicorn.conf)
 [ -e gunicorn.log.conf ] && params+=(--log-config gunicorn.log.conf)
-python -m gunicorn.app.wsgiapp "${params[@]}" --worker-class=uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 nomad.app_fastapi.main:app
+python -m gunicorn.app.wsgiapp "${params[@]}" --worker-class=uvicorn.workers.UvicornWorker -b 0.0.0.0:8000 nomad.app.main:app
diff --git a/tests/app_fastapi/__init__.py b/tests/app/__init__.py
similarity index 100%
rename from tests/app_fastapi/__init__.py
rename to tests/app/__init__.py
diff --git a/tests/app_fastapi/conftest.py b/tests/app/conftest.py
similarity index 99%
rename from tests/app_fastapi/conftest.py
rename to tests/app/conftest.py
index 131214ee41..e6547afaaf 100644
--- a/tests/app_fastapi/conftest.py
+++ b/tests/app/conftest.py
@@ -23,7 +23,7 @@ from datetime import datetime
 
 from nomad import infrastructure, config
 from nomad.archive import write_partial_archive_to_mongo
-from nomad.app_fastapi.main import app
+from nomad.app.main import app
 from nomad.datamodel import EntryArchive, EntryMetadata, DFTMetadata, User
 
 
diff --git a/tests/app_fastapi/flask/__init__.py b/tests/app/flask/__init__.py
similarity index 100%
rename from tests/app_fastapi/flask/__init__.py
rename to tests/app/flask/__init__.py
diff --git a/tests/app_fastapi/flask/bravado.py b/tests/app/flask/bravado.py
similarity index 100%
rename from tests/app_fastapi/flask/bravado.py
rename to tests/app/flask/bravado.py
diff --git a/tests/app_fastapi/flask/conftest.py b/tests/app/flask/conftest.py
similarity index 97%
rename from tests/app_fastapi/flask/conftest.py
rename to tests/app/flask/conftest.py
index 129b051552..bb978efd19 100644
--- a/tests/app_fastapi/flask/conftest.py
+++ b/tests/app/flask/conftest.py
@@ -19,7 +19,7 @@
 import pytest
 from bravado.client import SwaggerClient
 
-from nomad.app_fastapi.flask import app as flask_app
+from nomad.app.flask import app as flask_app
 
 from .bravado import FlaskTestHttpClient
 from ..conftest import admin_user_auth, test_user_auth  # pylint: disable=unused-import
diff --git a/tests/app_fastapi/flask/resource.py b/tests/app/flask/resource.py
similarity index 95%
rename from tests/app_fastapi/flask/resource.py
rename to tests/app/flask/resource.py
index acc3d11d6b..f25d7b406c 100644
--- a/tests/app_fastapi/flask/resource.py
+++ b/tests/app/flask/resource.py
@@ -23,7 +23,7 @@ error handling, etc.
 
 from flask_restplus import Resource
 
-from nomad.app_fastapi.flask.api.api import api
+from nomad.app.flask.api.api import api
 
 
 ns = api.namespace('test', description='Only used for tests.')
diff --git a/tests/app_fastapi/flask/test_api.py b/tests/app/flask/test_api.py
similarity index 99%
rename from tests/app_fastapi/flask/test_api.py
rename to tests/app/flask/test_api.py
index 429eee2723..4ba0b65fcd 100644
--- a/tests/app_fastapi/flask/test_api.py
+++ b/tests/app/flask/test_api.py
@@ -30,8 +30,8 @@ import base64
 import itertools
 from hashlib import md5
 
-from nomad.app_fastapi.flask.common import rfc3339DateTime
-from nomad.app_fastapi.flask.api.auth import generate_upload_token
+from nomad.app.flask.common import rfc3339DateTime
+from nomad.app.flask.api.auth import generate_upload_token
 from nomad import search, files, config, utils, infrastructure
 from nomad.metainfo import search_extension
 from nomad.files import UploadFiles, PublicUploadFiles
diff --git a/tests/app_fastapi/flask/test_api_encyclopedia.py b/tests/app/flask/test_api_encyclopedia.py
similarity index 99%
rename from tests/app_fastapi/flask/test_api_encyclopedia.py
rename to tests/app/flask/test_api_encyclopedia.py
index 623d2a8e4c..f2d2c3204c 100644
--- a/tests/app_fastapi/flask/test_api_encyclopedia.py
+++ b/tests/app/flask/test_api_encyclopedia.py
@@ -25,7 +25,7 @@ from nomad import config
 from nomad.cli import cli
 from nomad import processing as proc, infrastructure
 
-from tests.app_fastapi.flask.test_app import BlueprintClient
+from tests.app.flask.test_app import BlueprintClient
 
 silicon_id = "fh3UBjhUVm4nxzeRd2JJuqw5oXYa"
 
diff --git a/tests/app_fastapi/flask/test_app.py b/tests/app/flask/test_app.py
similarity index 100%
rename from tests/app_fastapi/flask/test_app.py
rename to tests/app/flask/test_app.py
diff --git a/tests/app_fastapi/flask/test_bravado.py b/tests/app/flask/test_bravado.py
similarity index 100%
rename from tests/app_fastapi/flask/test_bravado.py
rename to tests/app/flask/test_bravado.py
diff --git a/tests/app_fastapi/flask/test_dcat.py b/tests/app/flask/test_dcat.py
similarity index 95%
rename from tests/app_fastapi/flask/test_dcat.py
rename to tests/app/flask/test_dcat.py
index 91733a8f01..3233c0c121 100644
--- a/tests/app_fastapi/flask/test_dcat.py
+++ b/tests/app/flask/test_dcat.py
@@ -21,10 +21,10 @@ from datetime import datetime
 
 from nomad import infrastructure, config
 from nomad.datamodel import EntryMetadata
-from nomad.app_fastapi.flask.dcat.mapping import Mapping
+from nomad.app.flask.dcat.mapping import Mapping
 
 from tests.conftest import clear_elastic
-from tests.app_fastapi.flask.test_app import BlueprintClient
+from tests.app.flask.test_app import BlueprintClient
 
 
 @pytest.fixture(scope='session')
diff --git a/tests/app_fastapi/flask/utils.py b/tests/app/flask/utils.py
similarity index 100%
rename from tests/app_fastapi/flask/utils.py
rename to tests/app/flask/utils.py
diff --git a/tests/app_fastapi/routers/__init__.py b/tests/app/routers/__init__.py
similarity index 100%
rename from tests/app_fastapi/routers/__init__.py
rename to tests/app/routers/__init__.py
diff --git a/tests/app_fastapi/routers/common.py b/tests/app/routers/common.py
similarity index 100%
rename from tests/app_fastapi/routers/common.py
rename to tests/app/routers/common.py
diff --git a/tests/app_fastapi/routers/test_auth.py b/tests/app/routers/test_auth.py
similarity index 100%
rename from tests/app_fastapi/routers/test_auth.py
rename to tests/app/routers/test_auth.py
diff --git a/tests/app_fastapi/routers/test_datasets.py b/tests/app/routers/test_datasets.py
similarity index 100%
rename from tests/app_fastapi/routers/test_datasets.py
rename to tests/app/routers/test_datasets.py
diff --git a/tests/app_fastapi/routers/test_entries.py b/tests/app/routers/test_entries.py
similarity index 99%
rename from tests/app_fastapi/routers/test_entries.py
rename to tests/app/routers/test_entries.py
index a540fc8320..492abc68a1 100644
--- a/tests/app_fastapi/routers/test_entries.py
+++ b/tests/app/routers/test_entries.py
@@ -23,12 +23,12 @@ import io
 import json
 
 from nomad.metainfo.search_extension import search_quantities
-from nomad.app_fastapi.models import AggregateableQuantity, Metric
+from nomad.app.models import AggregateableQuantity, Metric
 
 from tests.utils import assert_at_least
 
 from .common import assert_response
-from tests.app_fastapi.conftest import example_data as data  # pylint: disable=unused-import
+from tests.app.conftest import example_data as data  # pylint: disable=unused-import
 
 '''
 These are the tests for all API operations below ``entries``. The tests are organized
diff --git a/tests/app_fastapi/routers/test_users.py b/tests/app/routers/test_users.py
similarity index 100%
rename from tests/app_fastapi/routers/test_users.py
rename to tests/app/routers/test_users.py
diff --git a/tests/app_fastapi/test_optimade.py b/tests/app/test_optimade.py
similarity index 98%
rename from tests/app_fastapi/test_optimade.py
rename to tests/app/test_optimade.py
index d339f3e4b0..77eea728df 100644
--- a/tests/app_fastapi/test_optimade.py
+++ b/tests/app/test_optimade.py
@@ -21,7 +21,7 @@ import pytest
 
 from nomad.processing import Upload
 from nomad import search
-from nomad.app_fastapi.optimade import parse_filter
+from nomad.app.optimade import parse_filter
 
 from tests.conftest import clear_elastic, clear_raw_files
 
@@ -37,7 +37,7 @@ def test_get_entry(published: Upload):
 
 
 def test_no_optimade(mongo, elastic, raw_files, client):
-    from tests.app_fastapi.flask.utils import Upload
+    from tests.app.flask.utils import Upload
     upload = Upload()
     upload.create_test_structure(1, 2, 1, [], 0)
     upload.create_test_structure(2, 2, 1, [], 0, optimade=False)
@@ -55,7 +55,7 @@ def example_structures(elastic_infra, mongo_infra, raw_files_infra):
     clear_elastic(elastic_infra)
     mongo_infra.drop_database('test_db')
 
-    from tests.app_fastapi.flask.utils import Upload
+    from tests.app.flask.utils import Upload
     upload = Upload()
     upload.create_test_structure(1, 2, 1, [], 0)
     upload.create_test_structure(2, 2, 1, ['C'], 0)
diff --git a/tests/app_fastapi/test_utils.py b/tests/app/test_utils.py
similarity index 96%
rename from tests/app_fastapi/test_utils.py
rename to tests/app/test_utils.py
index 901c850181..59c6c69020 100644
--- a/tests/app_fastapi/test_utils.py
+++ b/tests/app/test_utils.py
@@ -22,7 +22,7 @@ import zipfile
 
 from nomad import config
 from nomad.datamodel import EntryArchive, EntryMetadata
-from nomad.app_fastapi.utils import create_streamed_zipfile, File
+from nomad.app.utils import create_streamed_zipfile, File
 
 from tests.conftest import clear_raw_files
 from tests.test_files import create_test_upload_files
diff --git a/tests/normalizing/test_system.py b/tests/normalizing/test_system.py
index a1137c480b..464f7c6e00 100644
--- a/tests/normalizing/test_system.py
+++ b/tests/normalizing/test_system.py
@@ -20,7 +20,7 @@ import ase.build
 
 from nomad import datamodel, config
 from nomad.datamodel import EntryArchive
-from nomad.app_fastapi.flask import dump_json
+from nomad.app.flask import dump_json
 from nomad.datamodel.metainfo.public import section_springer_material as SpringerMaterial
 
 from tests.parsing.test_parsing import parsed_vasp_example  # pylint: disable=unused-import
diff --git a/tests/parsing/test_parsing.py b/tests/parsing/test_parsing.py
index daf243a886..d40fe3d4d5 100644
--- a/tests/parsing/test_parsing.py
+++ b/tests/parsing/test_parsing.py
@@ -27,7 +27,7 @@ from nomad import utils, files, datamodel
 from nomad.datamodel import EntryArchive, EntryMetadata
 from nomad.parsing import BrokenParser, Backend
 from nomad.parsing.parsers import parser_dict, match_parser
-from nomad.app_fastapi.flask import dump_json
+from nomad.app.flask import dump_json
 
 parser_examples = [
     ('parsers/random', 'test/data/parsers/random_0'),
diff --git a/tests/processing/test_data.py b/tests/processing/test_data.py
index cded6111c1..7dae894bd0 100644
--- a/tests/processing/test_data.py
+++ b/tests/processing/test_data.py
@@ -31,8 +31,8 @@ from nomad.processing.base import task as task_decorator, FAILURE, SUCCESS
 
 from tests.test_search import assert_search_upload
 from tests.test_files import assert_upload_files
-from tests.app_fastapi.flask.conftest import client, oasis_central_nomad_client, session_client  # pylint: disable=unused-import
-from tests.app_fastapi.conftest import other_test_user_auth, test_user_auth  # pylint: disable=unused-import
+from tests.app.flask.conftest import client, oasis_central_nomad_client, session_client  # pylint: disable=unused-import
+from tests.app.conftest import other_test_user_auth, test_user_auth  # pylint: disable=unused-import
 
 
 def test_send_mail(mails, monkeypatch):
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 2d7bf8947d..cd06a8c22b 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -28,10 +28,10 @@ from nomad.cli import cli
 from nomad.cli.cli import POPO
 from nomad.processing import Upload, Calc
 
-from tests.app_fastapi.flask.test_app import BlueprintClient
-from tests.app_fastapi.flask.conftest import (  # pylint: disable=unused-import
+from tests.app.flask.test_app import BlueprintClient
+from tests.app.flask.conftest import (  # pylint: disable=unused-import
     test_user_bravado_client, client, session_client, admin_user_bravado_client)  # pylint: disable=unused-import
-from tests.app_fastapi.conftest import test_user_auth, admin_user_auth  # pylint: disable=unused-import
+from tests.app.conftest import test_user_auth, admin_user_auth  # pylint: disable=unused-import
 
 # TODO there is much more to test
 
diff --git a/tests/test_client.py b/tests/test_client.py
index 67c8fca6e9..b221dcee87 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -23,9 +23,9 @@ from nomad.metainfo import MSection, SubSection
 from nomad.datamodel import EntryArchive, User
 from nomad.datamodel.metainfo.public import section_run
 
-from tests.app_fastapi.flask.conftest import client, session_client  # pylint: disable=unused-import
-from tests.app_fastapi.conftest import other_test_user_auth, test_user_auth  # pylint: disable=unused-import
-from tests.app_fastapi.flask.test_app import BlueprintClient
+from tests.app.flask.conftest import client, session_client  # pylint: disable=unused-import
+from tests.app.conftest import other_test_user_auth, test_user_auth  # pylint: disable=unused-import
+from tests.app.flask.test_app import BlueprintClient
 from tests.processing import test_data as test_processing
 
 
diff --git a/tests/test_search.py b/tests/test_search.py
index 6a7a9e87c9..42be98d249 100644
--- a/tests/test_search.py
+++ b/tests/test_search.py
@@ -25,7 +25,7 @@ import json
 from nomad import datamodel, processing, infrastructure, config
 from nomad.metainfo import search_extension
 from nomad.search import entry_document, SearchRequest, search, flat
-from nomad.app_fastapi.models import WithQuery
+from nomad.app.models import WithQuery
 
 
 def test_init_mapping(elastic):
-- 
GitLab