From ac89492d7c1b33b5036c40fb3323a690328dd0ab Mon Sep 17 00:00:00 2001
From: Ahmed Ilyas <ahmed.ilyas@hu-berlin.de>
Date: Tue, 11 Mar 2025 09:00:17 +0000
Subject: [PATCH] Revert "Merge branch 'ruff-isort' into 'develop'"

---
 nomad/app/dcat/common.py                      |   6 +-
 nomad/app/dcat/main.py                        |   6 +-
 nomad/app/dcat/mapping.py                     |   6 +-
 nomad/app/dcat/routers/dcat.py                |  10 +-
 nomad/app/h5grove_app.py                      |  20 ++-
 nomad/app/main.py                             |  10 +-
 nomad/app/optimade/common.py                  |   3 +-
 nomad/app/optimade/elasticsearch.py           |  16 +--
 nomad/app/optimade/filterparser.py            |   6 +-
 nomad/app/resources/common.py                 |   1 +
 nomad/app/resources/main.py                   |   8 +-
 nomad/app/resources/routers/resources.py      |  29 +++--
 nomad/app/v1/main.py                          |  23 ++--
 nomad/app/v1/models/graph/graph_models.py     |  38 +++---
 nomad/app/v1/models/graph/utils.py            |  27 ++---
 nomad/app/v1/models/groups.py                 |   7 +-
 nomad/app/v1/models/models.py                 |  14 ++-
 nomad/app/v1/models/pagination.py             |   9 +-
 nomad/app/v1/routers/auth.py                  |  29 +++--
 nomad/app/v1/routers/datasets.py              |  41 ++++---
 nomad/app/v1/routers/entries.py               |  92 ++++++++------
 nomad/app/v1/routers/federation.py            |   2 +-
 nomad/app/v1/routers/graph.py                 |  11 +-
 nomad/app/v1/routers/groups.py                |   3 +
 nomad/app/v1/routers/info.py                  |  12 +-
 nomad/app/v1/routers/materials.py             |  30 ++---
 nomad/app/v1/routers/metainfo.py              |  10 +-
 nomad/app/v1/routers/north.py                 |  20 +--
 nomad/app/v1/routers/suggestions.py           |  10 +-
 nomad/app/v1/routers/systems.py               |  24 ++--
 nomad/app/v1/routers/uploads.py               |  83 +++++++------
 nomad/app/v1/routers/users.py                 |   8 +-
 nomad/app/v1/utils.py                         |  22 ++--
 nomad/archive/converter.py                    |   9 +-
 nomad/archive/partial.py                      |   8 +-
 nomad/archive/query.py                        |   4 +-
 nomad/archive/required.py                     |  19 ++-
 nomad/archive/storage.py                      |  14 ++-
 nomad/archive/storage_v2.py                   |   2 +-
 nomad/atomutils.py                            |   8 +-
 nomad/bundles.py                              |  31 +++--
 nomad/cli/admin/admin.py                      |  13 +-
 nomad/cli/admin/clean.py                      |   6 +-
 nomad/cli/admin/entries.py                    |   3 +-
 nomad/cli/admin/migrate.py                    |   8 +-
 nomad/cli/admin/run.py                        |  12 +-
 nomad/cli/admin/springer.py                   |  11 +-
 nomad/cli/admin/uploads.py                    |  32 ++---
 nomad/cli/admin/users.py                      |   4 +-
 nomad/cli/aflow.py                            |  19 ++-
 nomad/cli/cli.py                              |   3 +-
 nomad/cli/client/integrationtests.py          |   4 +-
 nomad/cli/dev.py                              |  20 ++-
 nomad/cli/parse.py                            |   4 +-
 nomad/client/api.py                           |   3 +-
 nomad/client/archive.py                       |   8 +-
 nomad/client/processing.py                    |   7 +-
 nomad/client/upload.py                        |   2 +-
 nomad/common.py                               |   5 +-
 nomad/config/models/common.py                 |   5 +-
 nomad/config/models/config.py                 |  15 ++-
 nomad/config/models/plugins.py                |  16 ++-
 nomad/config/models/ui.py                     |  16 +--
 nomad/datamodel/context.py                    |  17 ++-
 nomad/datamodel/data.py                       |  13 +-
 nomad/datamodel/datamodel.py                  |  27 ++---
 nomad/datamodel/hdf5.py                       |   6 +-
 nomad/datamodel/metainfo/action.py            |   2 +-
 nomad/datamodel/metainfo/annotations.py       |  13 +-
 nomad/datamodel/metainfo/basesections/v1.py   |  14 ++-
 nomad/datamodel/metainfo/basesections/v2.py   |  62 +++++++---
 nomad/datamodel/metainfo/common.py            |   3 +-
 nomad/datamodel/metainfo/downloads.py         |   7 +-
 nomad/datamodel/metainfo/measurements.py      |   5 +-
 nomad/datamodel/metainfo/plot.py              |  12 +-
 .../metainfo/simulation/calculation.py        |  20 +--
 .../metainfo/simulation/legacy_workflows.py   |  26 ++--
 nomad/datamodel/metainfo/simulation/method.py |  17 ++-
 nomad/datamodel/metainfo/simulation/run.py    |  18 +--
 nomad/datamodel/metainfo/simulation/system.py |  18 ++-
 .../datamodel/metainfo/simulation/workflow.py |  65 +++++-----
 nomad/datamodel/metainfo/system.py            |   4 +-
 nomad/datamodel/metainfo/tabulartree.py       |   1 +
 nomad/datamodel/metainfo/workflow.py          |   3 +-
 nomad/datamodel/optimade.py                   |  10 +-
 nomad/datamodel/results.py                    |  37 +++---
 nomad/datamodel/util.py                       |   8 +-
 nomad/doi.py                                  |  13 +-
 nomad/files.py                                |  37 +++---
 nomad/graph/graph_reader.py                   |  26 +++-
 nomad/graph/lazy_wrapper.py                   |   1 -
 nomad/graph/model.py                          |   6 +-
 nomad/infrastructure.py                       |  27 ++---
 nomad/logtransfer.py                          |   8 +-
 nomad/metainfo/annotation.py                  |   2 +-
 nomad/metainfo/data_frames.py                 |  16 ++-
 nomad/metainfo/data_type.py                   |   8 +-
 nomad/metainfo/elasticsearch_extension.py     |  10 +-
 nomad/metainfo/example.py                     |  15 ++-
 nomad/metainfo/metainfo.py                    |  17 +--
 nomad/metainfo/mongoengine_extension.py       |   7 +-
 nomad/metainfo/pydantic_extension.py          |  11 +-
 nomad/metainfo/util.py                        |   1 -
 nomad/mkdocs/metainfo.py                      |   2 +-
 nomad/mkdocs/pydantic.py                      |  11 +-
 nomad/normalizing/common.py                   |  22 ++--
 nomad/normalizing/material.py                 |  10 +-
 nomad/normalizing/metainfo.py                 |   2 +-
 nomad/normalizing/method.py                   |  30 ++---
 nomad/normalizing/normalizer.py               |   4 +-
 nomad/normalizing/optimade.py                 |   9 +-
 nomad/normalizing/results.py                  |  85 +++++++------
 nomad/normalizing/topology.py                 |  33 ++---
 nomad/parsing/artificial.py                   |  11 +-
 nomad/parsing/file_parser/file_parser.py      |  15 ++-
 nomad/parsing/file_parser/mapping_parser.py   |   3 +-
 nomad/parsing/file_parser/text_parser.py      |   9 +-
 nomad/parsing/file_parser/xml_parser.py       |   3 +-
 nomad/parsing/parser.py                       |  17 ++-
 nomad/parsing/parsers.py                      |  18 ++-
 nomad/parsing/tabular.py                      |  23 ++--
 nomad/processing/base.py                      |  34 +++---
 nomad/processing/data.py                      | 114 ++++++++++--------
 nomad/search.py                               |  15 ++-
 nomad/utils/exampledata.py                    |  16 +--
 nomad/utils/json_transformer.py               |   2 +-
 nomad/utils/structlogging.py                  |  15 ++-
 pyproject.toml                                |   4 +-
 tests/app/test_app.py                         |   3 +-
 tests/app/test_dcat.py                        |   5 +-
 tests/app/test_h5grove.py                     |   7 +-
 tests/app/test_optimade.py                    |   6 +-
 tests/app/test_resources.py                   |  13 +-
 tests/app/v1/routers/common.py                |   9 +-
 tests/app/v1/routers/test_auth.py             |   3 +-
 tests/app/v1/routers/test_datasets.py         |  10 +-
 tests/app/v1/routers/test_entries.py          |  30 ++---
 .../v1/routers/test_entries_archive_edit.py   |   1 -
 tests/app/v1/routers/test_entries_edit.py     |  14 +--
 tests/app/v1/routers/test_federation.py       |   7 +-
 tests/app/v1/routers/test_graph.py            |   4 +-
 tests/app/v1/routers/test_materials.py        |  18 +--
 tests/app/v1/routers/test_metainfo.py         |   8 +-
 tests/app/v1/routers/test_suggestions.py      |   2 -
 tests/app/v1/routers/test_systems.py          |  14 +--
 .../v1/routers/uploads/test_basic_uploads.py  |  12 +-
 tests/app/v1/test_models.py                   |   8 +-
 tests/app/v1/test_utils.py                    |   1 -
 tests/archive/test_archive.py                 |  48 ++++----
 tests/archive/test_storage.py                 |   5 +-
 tests/config/models/test_plugins.py           |   5 +-
 tests/config/models/test_ui.py                |   6 +-
 tests/conftest.py                             |  18 +--
 .../data/schemas/nomadschemaexample/schema.py |  17 ++-
 tests/datamodel/metainfo/test_annotations.py  |   4 +-
 tests/datamodel/metainfo/test_plotly.py       |   1 -
 tests/datamodel/metainfo/test_substance.py    |   5 +-
 tests/datamodel/test_context.py               |  14 +--
 tests/datamodel/test_datamodel.py             |   9 +-
 tests/datamodel/test_hdf5.py                  |  11 +-
 tests/datamodel/test_metadata.py              |  11 +-
 tests/datamodel/test_schema.py                |  10 +-
 tests/examples/test_archive_query.py          |   5 +-
 tests/examples/test_docs.py                   |   6 +-
 tests/examples/test_metainfo.py               |   4 +-
 tests/fixtures/data.py                        |   2 +-
 tests/fixtures/group_uploads.py               |   1 -
 tests/graph/test_definition_reader.py         |   2 +-
 tests/graph/test_graph_reader.py              |   8 +-
 tests/metainfo/test_attributes.py             |  10 +-
 tests/metainfo/test_data_frames.py            |  15 ++-
 .../metainfo/test_elasticsearch_extension.py  |  18 +--
 tests/metainfo/test_full_storage_quantity.py  |   6 +-
 tests/metainfo/test_hash_id.py                |   2 +-
 tests/metainfo/test_metainfo.py               |  39 +++---
 tests/metainfo/test_mongodb_extension.py      |   6 +-
 tests/metainfo/test_package.py                |   2 +-
 tests/metainfo/test_quantities.py             |   4 +-
 tests/metainfo/test_references.py             |  23 ++--
 tests/metainfo/test_sections.py               |   4 +-
 tests/metainfo/test_to_dict.py                |   6 +-
 tests/metainfo/test_yaml_schema.py            |  12 +-
 tests/mkdocs/test_mkdocs_metainfo.py          |   2 +-
 tests/mkdocs/test_mkdocs_pydantic.py          |  11 +-
 tests/normalizing/conftest.py                 |  62 +++++-----
 tests/normalizing/test_entry_type_and_name.py |   2 -
 tests/normalizing/test_material.py            |   8 +-
 tests/normalizing/test_metainfo.py            |   4 +-
 tests/normalizing/test_method.py              |   3 +-
 tests/normalizing/test_properties.py          |  12 +-
 tests/normalizing/test_topology.py            |  33 +++--
 tests/parsing/test_archive_parser.py          |   5 +-
 tests/parsing/test_file_parser.py             |  11 +-
 tests/parsing/test_mapping_parser.py          |  31 ++---
 tests/parsing/test_parsing.py                 |   4 +-
 tests/parsing/test_tabular.py                 |  14 +--
 tests/processing/test_base.py                 |   8 +-
 tests/processing/test_data.py                 |  30 ++---
 tests/processing/test_edit_metadata.py        |   5 +-
 tests/processing/test_rfc3161.py              |   4 +-
 tests/states/archives/create_archives.py      |   1 -
 tests/states/entry.py                         |   6 +-
 tests/states/search.py                        |   5 +-
 tests/states/uploads.py                       |   5 +-
 tests/test_atomutils.py                       |   3 +-
 tests/test_cli.py                             |  18 ++-
 tests/test_client.py                          |  13 +-
 tests/test_common.py                          |   3 +-
 tests/test_config.py                          |   3 +-
 tests/test_doi.py                             |   6 +-
 tests/test_files.py                           |  24 ++--
 tests/test_logtransfer.py                     |   7 +-
 tests/test_search.py                          |  13 +-
 tests/test_test.py                            |   3 +-
 tests/test_utils.py                           |  20 +--
 tests/utils.py                                |   1 -
 216 files changed, 1533 insertions(+), 1428 deletions(-)

diff --git a/nomad/app/dcat/common.py b/nomad/app/dcat/common.py
index 90e6fc4876..3d782dad88 100644
--- a/nomad/app/dcat/common.py
+++ b/nomad/app/dcat/common.py
@@ -16,14 +16,14 @@
 # limitations under the License.
 #
 
+from fastapi import Response, Query, Header
 import urllib.parse
-from enum import Enum
-
-from fastapi import Header, Query, Response
 from rdflib import Graph
+from enum import Enum
 
 from nomad.config import config
 
+
 root_path = f'{config.services.api_base_path}/dcat'
 base_url = config.api_url(api='dcat')
 
diff --git a/nomad/app/dcat/main.py b/nomad/app/dcat/main.py
index 0fbfa0d4f6..49d4d68d50 100644
--- a/nomad/app/dcat/main.py
+++ b/nomad/app/dcat/main.py
@@ -16,11 +16,10 @@
 # limitations under the License.
 #
 
-import traceback
-
-from fastapi import FastAPI, Request, status
+from fastapi import FastAPI, status, Request
 from fastapi.middleware.cors import CORSMiddleware
 from fastapi.responses import JSONResponse, RedirectResponse
+import traceback
 
 from nomad import utils
 from nomad.config import config
@@ -28,6 +27,7 @@ from nomad.config import config
 from .common import root_path
 from .routers import dcat
 
+
 logger = utils.get_logger(__name__)
 
 
diff --git a/nomad/app/dcat/mapping.py b/nomad/app/dcat/mapping.py
index c15ec0a876..d22399a762 100644
--- a/nomad/app/dcat/mapping.py
+++ b/nomad/app/dcat/mapping.py
@@ -16,15 +16,15 @@
 # limitations under the License.
 #
 
-from rdflib import RDF, BNode, Graph, Literal, URIRef
-from rdflib.namespace import DCAT, FOAF, RDF, Namespace
-from rdflib.namespace import DCTERMS as DCT
+from rdflib import Graph, Literal, RDF, URIRef, BNode
+from rdflib.namespace import Namespace, DCAT, DCTERMS as DCT, FOAF, RDF
 
 from nomad.config import config
 from nomad.datamodel import User
 
 from .common import url
 
+
 VCARD = Namespace('http://www.w3.org/2006/vcard/ns#')
 HYDRA = Namespace('http://www.w3.org/ns/hydra/core#')
 
diff --git a/nomad/app/dcat/routers/dcat.py b/nomad/app/dcat/routers/dcat.py
index 0aa5b6b6ec..99a2f0256a 100644
--- a/nomad/app/dcat/routers/dcat.py
+++ b/nomad/app/dcat/routers/dcat.py
@@ -16,17 +16,17 @@
 # limitations under the License.
 #
 
-from datetime import date, datetime
 from enum import Enum
 
+from fastapi import APIRouter, Query, Path, HTTPException, status, Depends
+from datetime import datetime, date
 from elasticsearch_dsl import Q
-from fastapi import APIRouter, Depends, HTTPException, Path, Query, status
 
 from nomad import utils
-from nomad.app.v1.models import HTTPExceptionModel, MetadataPagination
-from nomad.app.v1.utils import create_responses
-from nomad.search import search
 from nomad.utils import strip
+from nomad.search import search
+from nomad.app.v1.models import MetadataPagination, HTTPExceptionModel
+from nomad.app.v1.utils import create_responses
 
 from ..common import rdf_response
 from ..mapping import Mapping
diff --git a/nomad/app/h5grove_app.py b/nomad/app/h5grove_app.py
index 8e01225ff4..d409e01ee9 100644
--- a/nomad/app/h5grove_app.py
+++ b/nomad/app/h5grove_app.py
@@ -17,24 +17,23 @@
 #
 from __future__ import annotations
 
-import re
+from fastapi import FastAPI, status, Request, Depends
+from fastapi.middleware.cors import CORSMiddleware
+from fastapi.responses import JSONResponse
 import traceback
+import re
 import urllib.parse
+import h5py
+from typing import Any, IO
 from collections.abc import Callable
-from typing import IO, Any
 
-import h5py
-from fastapi import Depends, FastAPI, Request, status
-from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse
-from h5grove import fastapi_utils as h5grove_router
-from h5grove import utils as h5grove_utils
+from h5grove import fastapi_utils as h5grove_router, utils as h5grove_utils
 
 from nomad import utils
+from nomad.files import UploadFiles, PublicUploadFiles
 from nomad.app.v1.models import User
 from nomad.app.v1.routers.auth import create_user_dependency
 from nomad.app.v1.routers.uploads import get_upload_with_read_access
-from nomad.files import PublicUploadFiles, UploadFiles
 
 logger = utils.get_logger(__name__)
 
@@ -44,9 +43,8 @@ def open_zipped_h5_file(
     create_error: Callable[[int, str], Exception],
     h5py_options: dict[str, Any] = {},
 ) -> h5py.File:
-    import io
     import re
-
+    import io
     from nomad import files
 
     """
diff --git a/nomad/app/main.py b/nomad/app/main.py
index 29829f997a..2168e5fd96 100644
--- a/nomad/app/main.py
+++ b/nomad/app/main.py
@@ -23,17 +23,16 @@ from fastapi import FastAPI, Response, status
 from fastapi.exception_handlers import (
     http_exception_handler as default_http_exception_handler,
 )
-from fastapi.responses import HTMLResponse, JSONResponse
 from starlette.exceptions import HTTPException as StarletteHTTPException
+from fastapi.responses import HTMLResponse, JSONResponse
 from starlette.middleware.base import BaseHTTPMiddleware
 
 from nomad import infrastructure
 from nomad.config import config
 from nomad.config.models.plugins import APIEntryPoint
 
-from .static import GuiFiles
-from .static import app as static_files_app
 from .v1.main import app as v1_app
+from .static import app as static_files_app, GuiFiles
 
 
 class OasisAuthenticationMiddleware(BaseHTTPMiddleware):
@@ -165,10 +164,11 @@ async def http_exception_handler(request, exc):
 
 @app.on_event('startup')
 async def startup_event():
+    from nomad.cli.dev import get_gui_artifacts_js
+    from nomad.cli.dev import get_gui_config
+    from nomad.parsing.parsers import import_all_parsers
     from nomad import infrastructure
-    from nomad.cli.dev import get_gui_artifacts_js, get_gui_config
     from nomad.metainfo.elasticsearch_extension import entry_type
-    from nomad.parsing.parsers import import_all_parsers
 
     import_all_parsers()
 
diff --git a/nomad/app/optimade/common.py b/nomad/app/optimade/common.py
index 45824ef06b..fb0df1cc85 100644
--- a/nomad/app/optimade/common.py
+++ b/nomad/app/optimade/common.py
@@ -19,8 +19,9 @@
 from typing import cast
 
 from nomad.metainfo.data_type import Datatype, to_optimade_type
-from nomad.metainfo.elasticsearch_extension import SearchQuantity, entry_type
 from nomad.metainfo.metainfo import Quantity, Reference
+from nomad.metainfo.elasticsearch_extension import SearchQuantity, entry_type
+
 
 _provider_specific_fields: dict[str, SearchQuantity] = None
 
diff --git a/nomad/app/optimade/elasticsearch.py b/nomad/app/optimade/elasticsearch.py
index d966f7d7cc..d90607b339 100644
--- a/nomad/app/optimade/elasticsearch.py
+++ b/nomad/app/optimade/elasticsearch.py
@@ -1,23 +1,23 @@
 from typing import Any
-
 from elasticsearch_dsl import Q
+
 from optimade.filterparser import LarkParser
-from optimade.models import StructureResource
 from optimade.server.entry_collections import EntryCollection
 from optimade.server.exceptions import BadRequest
 from optimade.server.mappers import StructureMapper
 from optimade.server.mappers.entries import classproperty
+from optimade.models import StructureResource
 
-from nomad import datamodel, files, utils
-from nomad.app.v1.models import MetadataPagination, MetadataRequired
+from nomad.units import ureg
 from nomad.atomutils import Formula
-from nomad.config import config
 from nomad.search import search
-from nomad.units import ureg
+from nomad.app.v1.models import MetadataPagination, MetadataRequired
+from nomad.config import config
+from nomad import datamodel, files, utils
 
-from ...archive import to_json
-from .common import provider_specific_fields
 from .filterparser import _get_transformer as get_transformer
+from .common import provider_specific_fields
+from ...archive import to_json
 
 logger = utils.get_logger(__name__)
 
diff --git a/nomad/app/optimade/filterparser.py b/nomad/app/optimade/filterparser.py
index 11caebaf9e..6ff5b0e26a 100644
--- a/nomad/app/optimade/filterparser.py
+++ b/nomad/app/optimade/filterparser.py
@@ -16,16 +16,18 @@
 # limitations under the License.
 #
 
-from cachetools import cached
 from elasticsearch_dsl import Q
+from cachetools import cached
+
 from optimade.filterparser import LarkParser
-from optimade.filtertransformers.elasticsearch import ElasticsearchQuantity as Quantity
 from optimade.filtertransformers.elasticsearch import (
+    ElasticsearchQuantity as Quantity,
     ElasticTransformer as OPTElasticTransformer,
 )
 
 from .common import provider_specific_fields
 
+
 _parser = LarkParser(version=(1, 0, 1))
 
 
diff --git a/nomad/app/resources/common.py b/nomad/app/resources/common.py
index 96a0e9c977..f0cedfb72b 100644
--- a/nomad/app/resources/common.py
+++ b/nomad/app/resources/common.py
@@ -18,5 +18,6 @@
 
 from nomad.config import config
 
+
 root_path = f'{config.services.api_base_path}/resources'
 base_url = config.api_url(api='resources')
diff --git a/nomad/app/resources/main.py b/nomad/app/resources/main.py
index ab6e17d11d..e5c4b6992d 100644
--- a/nomad/app/resources/main.py
+++ b/nomad/app/resources/main.py
@@ -16,18 +16,18 @@
 # limitations under the License.
 #
 
-import traceback
-
-from celery.signals import worker_process_init
-from fastapi import FastAPI, Request, status
+from fastapi import FastAPI, status, Request
 from fastapi.middleware.cors import CORSMiddleware
 from fastapi.responses import JSONResponse
+import traceback
+from celery.signals import worker_process_init
 
 from nomad import utils
 from nomad.config import config
 
 from .routers import resources
 
+
 logger = utils.get_logger(__name__)
 
 mongo_client_resources = None
diff --git a/nomad/app/resources/routers/resources.py b/nomad/app/resources/routers/resources.py
index 45f4f9559b..242e82950d 100644
--- a/nomad/app/resources/routers/resources.py
+++ b/nomad/app/resources/routers/resources.py
@@ -16,36 +16,35 @@
 # limitations under the License.
 #
 
-import asyncio
-import io
-import os
 import re
-from datetime import datetime
+import os
+import io
+import bs4
+import asyncio
+import httpx
 from enum import Enum
+from fastapi import APIRouter, Query as FastApiQuery
+from pydantic import BaseModel, Field
 from typing import Any
-
+from datetime import datetime
 import ase.io
-import bs4
-import httpx
-from asgiref.sync import async_to_sync
-from fastapi import APIRouter
-from fastapi import Query as FastApiQuery
 from mongoengine import (
-    BooleanField,
-    DateTimeField,
     Document,
+    StringField,
+    DateTimeField,
     IntField,
     ListField,
-    StringField,
+    BooleanField,
 )
 from mongoengine.queryset.visitor import Q
-from pydantic import BaseModel, Field
+from asgiref.sync import async_to_sync
 
 from nomad import utils
-from nomad.atomutils import Formula
 from nomad.config import config
+from nomad.atomutils import Formula
 from nomad.processing.base import app
 
+
 logger = utils.get_logger(__name__)
 
 router = APIRouter()
diff --git a/nomad/app/v1/main.py b/nomad/app/v1/main.py
index af4def9247..2c3e7b6606 100644
--- a/nomad/app/v1/main.py
+++ b/nomad/app/v1/main.py
@@ -18,9 +18,9 @@
 
 import traceback
 
-from fastapi import FastAPI, Request, status
+from fastapi import FastAPI, status, Request
 from fastapi.middleware.cors import CORSMiddleware
-from fastapi.responses import JSONResponse, ORJSONResponse, RedirectResponse
+from fastapi.responses import JSONResponse, RedirectResponse, ORJSONResponse
 from pyinstrument import Profiler
 from starlette.middleware import Middleware
 from starlette.middleware.base import BaseHTTPMiddleware
@@ -29,23 +29,22 @@ from starlette.types import ASGIApp, Receive, Scope, Send
 
 from nomad import utils
 from nomad.config import config
-
 from .common import root_path
 from .routers import (
-    auth,
-    datasets,
+    users,
     entries,
-    federation,
-    graph,
-    groups,
-    info,
     materials,
+    auth,
+    info,
+    datasets,
+    uploads,
+    suggestions,
     metainfo,
     north,
-    suggestions,
     systems,
-    uploads,
-    users,
+    federation,
+    graph,
+    groups,
 )
 
 logger = utils.get_logger(__name__)
diff --git a/nomad/app/v1/models/graph/graph_models.py b/nomad/app/v1/models/graph/graph_models.py
index dff9d7d42b..480221c93f 100644
--- a/nomad/app/v1/models/graph/graph_models.py
+++ b/nomad/app/v1/models/graph/graph_models.py
@@ -17,37 +17,35 @@
 #
 
 from __future__ import annotations
-
 from typing import Any, Literal
+from pydantic import BaseModel, ConfigDict, Field, Extra
 
-from pydantic import BaseModel, ConfigDict, Extra, Field
+from ..groups import UserGroup, UserGroupPagination, UserGroupQuery
 
-from nomad.app.v1.models.graph.utils import (
-    generate_request_model,
-    generate_response_model,
-    mapped,
+from nomad.graph.model import (
+    RequestConfig,
+    DatasetQuery,
+    MetainfoQuery,
+    MetainfoPagination,
 )
+from nomad.metainfo.pydantic_extension import PydanticModel
+from nomad.datamodel.data import User as UserModel
 from nomad.app.v1.models.models import Metadata, MetadataResponse
-from nomad.app.v1.routers.datasets import Dataset as DatasetV1
-from nomad.app.v1.routers.datasets import DatasetPagination
+from nomad.app.v1.routers.datasets import Dataset as DatasetV1, DatasetPagination
 from nomad.app.v1.routers.uploads import (
-    EntryProcData,
-    EntryProcDataPagination,
-    PaginationResponse,
     UploadProcData,
     UploadProcDataPagination,
     UploadProcDataQuery,
+    PaginationResponse,
+    EntryProcData,
+    EntryProcDataPagination,
 )
-from nomad.datamodel.data import User as UserModel
-from nomad.graph.model import (
-    DatasetQuery,
-    MetainfoPagination,
-    MetainfoQuery,
-    RequestConfig,
-)
-from nomad.metainfo.pydantic_extension import PydanticModel
 
-from ..groups import UserGroup, UserGroupPagination, UserGroupQuery
+from nomad.app.v1.models.graph.utils import (
+    generate_request_model,
+    generate_response_model,
+    mapped,
+)
 
 
 class Error(BaseModel):
diff --git a/nomad/app/v1/models/graph/utils.py b/nomad/app/v1/models/graph/utils.py
index 6c871c5547..6d420a6e10 100644
--- a/nomad/app/v1/models/graph/utils.py
+++ b/nomad/app/v1/models/graph/utils.py
@@ -17,33 +17,32 @@
 #
 
 from __future__ import annotations
-
-import sys
-from collections.abc import Callable
-from datetime import datetime
-from types import UnionType
 from typing import (
-    Any,
-    ForwardRef,
-    Literal,
     Optional,
+    Literal,
     Union,
-    cast,
-    get_args,
-    get_origin,
+    Any,
+    ForwardRef,
     get_type_hints,
+    get_origin,
+    get_args,
+    cast,
 )
-
+from collections.abc import Callable
+from types import UnionType
+from datetime import datetime
 from pydantic import (
     BaseModel,
     ConfigDict,
-    Field,
     TypeAdapter,
-    ValidationError,
     create_model,
+    Field,
     model_validator,
+    ValidationError,
 )
 from pydantic.config import ConfigDict as BaseConfigDict
+import sys
+
 
 ref_prefix = '#/components/schemas'
 request_suffix = 'Request'
diff --git a/nomad/app/v1/models/groups.py b/nomad/app/v1/models/groups.py
index dbdae164fb..3a83a81818 100644
--- a/nomad/app/v1/models/groups.py
+++ b/nomad/app/v1/models/groups.py
@@ -1,4 +1,9 @@
-from pydantic import BaseModel, ConfigDict, Field, field_validator
+from pydantic import (
+    BaseModel,
+    ConfigDict,
+    Field,
+    field_validator,
+)
 from pydantic_core import PydanticCustomError
 
 from .pagination import Direction, Pagination, PaginationResponse
diff --git a/nomad/app/v1/models/models.py b/nomad/app/v1/models/models.py
index 7dab17d0f8..32841a8832 100644
--- a/nomad/app/v1/models/models.py
+++ b/nomad/app/v1/models/models.py
@@ -16,25 +16,25 @@
 # limitations under the License.
 #
 import datetime
+from enum import Enum
 import fnmatch
 import json
 import re
+from typing import Any
 from collections.abc import Mapping
-from enum import Enum
-from typing import Annotated, Any
 
 from fastapi import Body, HTTPException, Request
 from fastapi import Query as FastApiQuery
 from pydantic import (  # noqa: F401
-    BaseModel,
+    field_validator,
+    model_validator,
+    StringConstraints,
     ConfigDict,
+    BaseModel,
     Field,
     StrictBool,
     StrictFloat,
     StrictInt,
-    StringConstraints,
-    field_validator,
-    model_validator,
 )
 from pydantic.main import create_model
 from pydantic_core import PydanticCustomError
@@ -49,6 +49,8 @@ from nomad.metainfo.elasticsearch_extension import (
 from nomad.utils import strip
 
 from .pagination import Pagination, PaginationResponse
+from typing import Annotated
+
 
 User: Any = datamodel.User.m_def.a_pydantic.model
 # It is important that datetime.datetime comes last. Otherwise, number valued strings
diff --git a/nomad/app/v1/models/pagination.py b/nomad/app/v1/models/pagination.py
index c3fba17369..6cb92b5c54 100644
--- a/nomad/app/v1/models/pagination.py
+++ b/nomad/app/v1/models/pagination.py
@@ -1,7 +1,12 @@
 from enum import Enum
-
 from fastapi import HTTPException, Request
-from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
+from pydantic import (
+    BaseModel,
+    ConfigDict,
+    Field,
+    field_validator,
+    model_validator,
+)
 from pydantic_core import PydanticCustomError
 
 from nomad.app.v1.utils import update_url_query_arguments
diff --git a/nomad/app/v1/routers/auth.py b/nomad/app/v1/routers/auth.py
index 01740cda39..d64981f471 100644
--- a/nomad/app/v1/routers/auth.py
+++ b/nomad/app/v1/routers/auth.py
@@ -16,29 +16,34 @@
 # limitations under the License.
 #
 
-import datetime
-import hashlib
 import hmac
+import hashlib
 import uuid
-from collections.abc import Callable
+import requests
 from enum import Enum
-from functools import wraps
-from inspect import Parameter, signature
 from typing import cast
-
-import jwt
-import requests
-from fastapi import APIRouter, Depends, HTTPException, Request, status
-from fastapi import Query as FastApiQuery
+from collections.abc import Callable
+from inspect import Parameter, signature
+from functools import wraps
+from fastapi import (
+    APIRouter,
+    Depends,
+    Query as FastApiQuery,
+    Request,
+    HTTPException,
+    status,
+)
 from fastapi.security import OAuth2PasswordBearer, OAuth2PasswordRequestForm
 from pydantic import BaseModel
+import jwt
+import datetime
 
-from nomad import datamodel, infrastructure, utils
+from nomad import utils, infrastructure, datamodel
 from nomad.config import config
 from nomad.utils import get_logger, strip
 
 from ..common import root_path
-from ..models import HTTPExceptionModel, User
+from ..models import User, HTTPExceptionModel
 from ..utils import create_responses
 
 logger = get_logger(__name__)
diff --git a/nomad/app/v1/routers/datasets.py b/nomad/app/v1/routers/datasets.py
index 6038f44f98..34eec59747 100644
--- a/nomad/app/v1/routers/datasets.py
+++ b/nomad/app/v1/routers/datasets.py
@@ -17,37 +17,44 @@
 #
 
 import re
-from datetime import datetime
 from enum import Enum
 from typing import cast
+from fastapi import (
+    APIRouter,
+    Request,
+    Depends,
+    Query as FastApiQuery,
+    Path,
+    HTTPException,
+    status,
+)
+from pydantic import field_validator, BaseModel, Field
+from datetime import datetime
 
-from fastapi import APIRouter, Depends, HTTPException, Path, Request, status
-from fastapi import Query as FastApiQuery
-from pydantic import BaseModel, Field, field_validator
-
-from nomad import datamodel, processing, utils
+from nomad import utils, datamodel, processing
 from nomad.config import config
+from nomad.metainfo.elasticsearch_extension import entry_type
+from nomad.utils import strip, create_uuid
 from nomad.datamodel import Dataset as DatasetDefinitionCls
 from nomad.doi import DOI, DOIException
-from nomad.metainfo.elasticsearch_extension import entry_type
 from nomad.search import search, update_by_query
-from nomad.utils import create_uuid, strip
 
+from .auth import create_user_dependency
+from .entries import _do_exhaustive_search
+from ..utils import create_responses, parameter_dependency_from_model
 from ..models import (
-    Any_,
-    Direction,
-    HTTPExceptionModel,
-    MetadataPagination,
-    MetadataRequired,
-    Owner,
     Pagination,
     PaginationResponse,
+    MetadataPagination,
     Query,
+    HTTPExceptionModel,
     User,
+    Direction,
+    Owner,
+    Any_,
+    MetadataRequired,
 )
-from ..utils import create_responses, parameter_dependency_from_model
-from .auth import create_user_dependency
-from .entries import _do_exhaustive_search
+
 
 router = APIRouter()
 
diff --git a/nomad/app/v1/routers/entries.py b/nomad/app/v1/routers/entries.py
index f974e15421..7f25c97581 100644
--- a/nomad/app/v1/routers/entries.py
+++ b/nomad/app/v1/routers/entries.py
@@ -15,75 +15,89 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-import io
-import json
-import os.path
-from collections.abc import Iterator
 from datetime import datetime
+
 from enum import Enum
 from typing import Any
-
-import orjson
-import yaml
-from fastapi import APIRouter, Body, Depends, HTTPException, Path, Request, status
-from fastapi import Query as QueryParameter
+from collections.abc import Iterator
+from fastapi import (
+    APIRouter,
+    Depends,
+    Path,
+    status,
+    HTTPException,
+    Request,
+    Query as QueryParameter,
+    Body,
+)
+from fastapi.responses import StreamingResponse, ORJSONResponse
 from fastapi.exceptions import RequestValidationError
-from fastapi.responses import ORJSONResponse, StreamingResponse
-from pydantic import BaseModel, ConfigDict, Field, field_validator
+from pydantic import (
+    ConfigDict,
+    field_validator,
+    BaseModel,
+    Field,
+)
+import os.path
+import io
+import json
+import orjson
 from pydantic.main import create_model
 from starlette.responses import Response
+import yaml
 
-from nomad import datamodel, files, metainfo, utils
-from nomad import processing as proc
-from nomad.archive import ArchiveQueryError, RequiredReader, RequiredValidationError
+from nomad import files, utils, metainfo, processing as proc
+from nomad import datamodel
 from nomad.config import config
 from nomad.config.models.config import Reprocess
 from nomad.datamodel import EditableUserMetadata
 from nomad.datamodel.context import ServerContext
 from nomad.files import StreamedFile, create_zipstream_async
-from nomad.groups import get_group_ids
-from nomad.metainfo.elasticsearch_extension import entry_type
 from nomad.processing.data import Upload
+from nomad.utils import strip
+from nomad.archive import RequiredReader, RequiredValidationError, ArchiveQueryError
+from nomad.groups import get_group_ids
 from nomad.search import (
     AuthenticationRequiredError,
     QueryValidationError,
     SearchError,
     search,
+    update_metadata as es_update_metadata,
 )
-from nomad.search import update_metadata as es_update_metadata
-from nomad.utils import strip
+from nomad.metainfo.elasticsearch_extension import entry_type
 
+from .auth import create_user_dependency
+from ..utils import (
+    create_download_stream_zipped,
+    create_download_stream_raw_file,
+    browser_download_headers,
+    DownloadItem,
+    create_responses,
+    log_query,
+)
 from ..models import (
     Aggregation,
-    Files,
-    HTTPExceptionModel,
-    Metadata,
-    MetadataEditRequest,
-    MetadataPagination,
-    MetadataRequired,
-    MetadataResponse,
-    Owner,
     Pagination,
     PaginationResponse,
-    Query,
-    QueryParameters,
+    MetadataPagination,
     TermsAggregation,
-    User,
     WithQuery,
     WithQueryAndPagination,
+    MetadataRequired,
+    MetadataResponse,
+    Metadata,
+    MetadataEditRequest,
+    Files,
+    Query,
+    User,
+    Owner,
+    QueryParameters,
+    metadata_required_parameters,
     files_parameters,
     metadata_pagination_parameters,
-    metadata_required_parameters,
-)
-from ..utils import (
-    DownloadItem,
-    browser_download_headers,
-    create_download_stream_raw_file,
-    create_download_stream_zipped,
-    create_responses,
-    log_query,
+    HTTPExceptionModel,
 )
-from .auth import create_user_dependency
+
 
 router = APIRouter()
 
diff --git a/nomad/app/v1/routers/federation.py b/nomad/app/v1/routers/federation.py
index c554228d0b..11c7ff4eb5 100644
--- a/nomad/app/v1/routers/federation.py
+++ b/nomad/app/v1/routers/federation.py
@@ -24,7 +24,7 @@ import socket
 import zlib
 from enum import Enum
 
-from fastapi import HTTPException, Request
+from fastapi import Request, HTTPException
 from fastapi.routing import APIRouter
 
 from nomad import utils
diff --git a/nomad/app/v1/routers/graph.py b/nomad/app/v1/routers/graph.py
index 1d1006c53c..c3715787c6 100644
--- a/nomad/app/v1/routers/graph.py
+++ b/nomad/app/v1/routers/graph.py
@@ -18,22 +18,21 @@
 
 from enum import Enum
 
-from fastapi import APIRouter, Body, Depends, HTTPException
+from fastapi import Depends, APIRouter, Body, HTTPException
 from fastapi.responses import ORJSONResponse
 
-from nomad.app.v1.models.graph import GraphRequest, GraphResponse
 from nomad.graph.graph_reader import (
+    MongoReader,
     ConfigError,
     GeneralReader,
-    MongoReader,
-    Token,
     UserReader,
+    Token,
 )
 from nomad.graph.lazy_wrapper import LazyWrapper
-
-from ..models import User
 from .auth import create_user_dependency
 from .entries import EntriesArchive
+from ..models import User
+from nomad.app.v1.models.graph import GraphRequest, GraphResponse
 
 router = APIRouter()
 
diff --git a/nomad/app/v1/routers/groups.py b/nomad/app/v1/routers/groups.py
index 945b95f757..a41342eb46 100644
--- a/nomad/app/v1/routers/groups.py
+++ b/nomad/app/v1/routers/groups.py
@@ -29,6 +29,9 @@ from nomad.app.v1.models.groups import (
 )
 from nomad.app.v1.models.pagination import PaginationResponse
 from nomad.app.v1.utils import parameter_dependency_from_model
+
+from fastapi import APIRouter, Depends, HTTPException, status
+
 from nomad.datamodel import User as UserDataModel
 from nomad.groups import MongoUserGroup
 from nomad.groups import create_user_group as create_mongo_user_group
diff --git a/nomad/app/v1/routers/info.py b/nomad/app/v1/routers/info.py
index 0e63c57788..1efa9a15fc 100644
--- a/nomad/app/v1/routers/info.py
+++ b/nomad/app/v1/routers/info.py
@@ -20,22 +20,22 @@
 API endpoint that deliver backend configuration details.
 """
 
-from datetime import datetime
 from enum import Enum
 from typing import Any
-
+from datetime import datetime
 from fastapi.routing import APIRouter
 from pydantic.fields import Field
 from pydantic.main import BaseModel
 
 from nomad import normalizing
-from nomad.app.v1.models import Aggregation, StatisticsAggregation
 from nomad.config import config
-from nomad.metainfo.elasticsearch_extension import entry_type
+from nomad.utils import strip
+from nomad.search import search
 from nomad.parsing import parsers
 from nomad.parsing.parsers import code_metadata
-from nomad.search import search
-from nomad.utils import strip
+from nomad.app.v1.models import Aggregation, StatisticsAggregation
+from nomad.metainfo.elasticsearch_extension import entry_type
+
 
 router = APIRouter()
 
diff --git a/nomad/app/v1/routers/materials.py b/nomad/app/v1/routers/materials.py
index 70c6ef56b6..579342c5fb 100644
--- a/nomad/app/v1/routers/materials.py
+++ b/nomad/app/v1/routers/materials.py
@@ -17,36 +17,32 @@
 #
 
 from typing import Any
-
-from fastapi import APIRouter, Depends, HTTPException, Path, Request, status
+from fastapi import APIRouter, Depends, Path, status, HTTPException, Request
 from fastapi.exception_handlers import RequestValidationError
 from pydantic import BaseModel, Field
 
 from nomad import utils
-from nomad.metainfo.elasticsearch_extension import material_index, material_type
-from nomad.search import (
-    AuthenticationRequiredError,
-    QueryValidationError,
-    SearchError,
-    search,
-)
 from nomad.utils import strip
+from nomad.search import AuthenticationRequiredError, SearchError
+from nomad.search import search, QueryValidationError
+from nomad.metainfo.elasticsearch_extension import material_type, material_index
 
+from .auth import create_user_dependency
+from ..utils import create_responses
 from ..models import (
-    HTTPExceptionModel,
+    User,
+    Owner,
+    WithQuery,
+    MetadataResponse,
     Metadata,
     MetadataPagination,
     MetadataRequired,
-    MetadataResponse,
-    Owner,
-    QueryParameters,
-    User,
-    WithQuery,
     metadata_pagination_parameters,
     metadata_required_parameters,
+    QueryParameters,
+    HTTPExceptionModel,
 )
-from ..utils import create_responses
-from .auth import create_user_dependency
+
 
 router = APIRouter()
 
diff --git a/nomad/app/v1/routers/metainfo.py b/nomad/app/v1/routers/metainfo.py
index a92fccbb52..882e21b6d2 100644
--- a/nomad/app/v1/routers/metainfo.py
+++ b/nomad/app/v1/routers/metainfo.py
@@ -19,16 +19,16 @@ import copy
 import datetime
 from typing import Any
 
-from fastapi import APIRouter, HTTPException, Path, status
+from fastapi import APIRouter, Path, status, HTTPException
 from pydantic import BaseModel, Field
 
 from nomad.app.v1.models import HTTPExceptionModel
 from nomad.app.v1.utils import create_responses
-from nomad.config import config
 from nomad.metainfo import Package
-from nomad.metainfo.metainfo import JSON, Datetime, MSection, Quantity, Section
-from nomad.metainfo.mongoengine_extension import Mongo, MongoDocument
-from nomad.utils import get_logger, strip
+from nomad.metainfo.metainfo import MSection, Section, Quantity, Datetime, JSON
+from nomad.metainfo.mongoengine_extension import MongoDocument, Mongo
+from nomad.utils import strip, get_logger
+from nomad.config import config
 
 logger = get_logger(__name__)
 
diff --git a/nomad/app/v1/routers/north.py b/nomad/app/v1/routers/north.py
index 73c795bcf9..c026348e6e 100644
--- a/nomad/app/v1/routers/north.py
+++ b/nomad/app/v1/routers/north.py
@@ -17,23 +17,23 @@
 #
 
 import os
-from enum import Enum
-
 import requests
-from fastapi import APIRouter, Depends, HTTPException, status
-from mongoengine.queryset.visitor import Q
+
+from enum import Enum
+from nomad.groups import get_group_ids
 from pydantic import BaseModel
+from fastapi import APIRouter, Depends, status, HTTPException
+from mongoengine.queryset.visitor import Q
 
-from nomad.app.v1.routers.auth import generate_simple_token
 from nomad.config import config
 from nomad.config.models.north import NORTHTool
-from nomad.groups import get_group_ids
+from nomad.utils import strip, get_logger, slugify
 from nomad.processing import Upload
-from nomad.utils import get_logger, slugify, strip
-
-from ..models import HTTPExceptionModel, User
-from ..utils import create_responses
+from nomad.app.v1.routers.auth import generate_simple_token
 from .auth import create_user_dependency
+from ..models import User, HTTPExceptionModel
+from ..utils import create_responses
+
 
 TOOLS = {k: v for k, v in config.north.tools.filtered_items()}
 
diff --git a/nomad/app/v1/routers/suggestions.py b/nomad/app/v1/routers/suggestions.py
index 2bd6e515e3..0d0b68229f 100644
--- a/nomad/app/v1/routers/suggestions.py
+++ b/nomad/app/v1/routers/suggestions.py
@@ -17,17 +17,17 @@
 #
 
 from collections import defaultdict
-
-from elasticsearch.exceptions import RequestError
+from pydantic import BaseModel, Field
+from fastapi import APIRouter, Depends, Request, HTTPException, status
 from elasticsearch_dsl import Search
 from elasticsearch_dsl.utils import AttrList
-from fastapi import APIRouter, Depends, HTTPException, Request, status
-from pydantic import BaseModel, Field
+from elasticsearch.exceptions import RequestError
 
 from nomad.metainfo.elasticsearch_extension import entry_index, entry_type
 
-from ..models import User
 from .auth import create_user_dependency
+from ..models import User
+
 
 router = APIRouter()
 
diff --git a/nomad/app/v1/routers/systems.py b/nomad/app/v1/routers/systems.py
index c92e1c44f4..6d56d61d2c 100644
--- a/nomad/app/v1/routers/systems.py
+++ b/nomad/app/v1/routers/systems.py
@@ -15,27 +15,29 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+from io import StringIO, BytesIO
 import sys
 from collections import OrderedDict
 from enum import Enum
-from io import BytesIO, StringIO
 
-import ase.build
-import ase.io
 import numpy as np
-from fastapi import APIRouter, Depends, HTTPException, Path, Query, status
+from fastapi import APIRouter, Depends, Path, Query, status, HTTPException
 from fastapi.responses import Response
+import ase.io
+import ase.build
 
-from nomad.atomutils import Formula, unwrap_positions, wrap_positions
-from nomad.datamodel.metainfo.system import Atoms as NOMADAtoms
-from nomad.normalizing.common import ase_atoms_from_nomad_atoms
 from nomad.units import ureg
-from nomad.utils import deep_get, query_list_to_dict, strip
+from nomad.utils import strip, deep_get, query_list_to_dict
+from nomad.atomutils import Formula, wrap_positions, unwrap_positions
+from nomad.normalizing.common import (
+    ase_atoms_from_nomad_atoms,
+)
+from nomad.datamodel.metainfo.system import Atoms as NOMADAtoms
+from .entries import answer_entry_archive_request
 
-from ..models import HTTPExceptionModel, User
-from ..utils import create_responses
 from .auth import create_user_dependency
-from .entries import answer_entry_archive_request
+from ..utils import create_responses
+from ..models import User, HTTPExceptionModel
 
 router = APIRouter()
 
diff --git a/nomad/app/v1/routers/uploads.py b/nomad/app/v1/routers/uploads.py
index fa6ff235ca..5c54007014 100644
--- a/nomad/app/v1/routers/uploads.py
+++ b/nomad/app/v1/routers/uploads.py
@@ -15,79 +15,92 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-import io
 import os
+import io
 import shutil
-import tarfile
 import zipfile
-from datetime import datetime
+import tarfile
 from enum import Enum
+from datetime import datetime
 from typing import Any, cast
+from pydantic import (
+    field_validator,
+    ConfigDict,
+    BaseModel,
+    Field,
+    model_validator,
+)
+from mongoengine.queryset.visitor import Q
 from urllib.parse import unquote
-
 from fastapi import (
     APIRouter,
-    Body,
-    Depends,
-    File,
-    HTTPException,
-    Path,
     Request,
+    File,
     UploadFile,
     status,
+    Depends,
+    Body,
+    Path,
+    Query as FastApiQuery,
+    HTTPException,
 )
-from fastapi import Query as FastApiQuery
+from fastapi.responses import StreamingResponse, FileResponse
 from fastapi.exceptions import RequestValidationError
-from fastapi.responses import FileResponse, StreamingResponse
-from mongoengine.queryset.visitor import Q
-from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
 from pydantic_core import PydanticCustomError
 
-from nomad import files, utils
-from nomad.bundles import BundleExporter, BundleImporter
-from nomad.common import get_compression_format, is_safe_basename, is_safe_relative_path
+from nomad import utils, files
+from nomad.common import is_safe_relative_path, is_safe_basename
 from nomad.config import config
-from nomad.config.models.config import Reprocess
 from nomad.config.models.plugins import ExampleUploadEntryPoint
-from nomad.files import PublicUploadFiles, StagingUploadFiles
+from nomad.files import (
+    StagingUploadFiles,
+    PublicUploadFiles,
+)
+from nomad.bundles import BundleExporter, BundleImporter
+from nomad.config.models.config import Reprocess
 from nomad.groups import get_group_ids
 from nomad.processing import (
+    Upload,
     Entry,
-    MetadataEditRequestHandler,
     ProcessAlreadyRunning,
     ProcessStatus,
-    Upload,
+    MetadataEditRequestHandler,
 )
-from nomad.search import QueryValidationError, search, search_iterator
-from nomad.search import refresh as search_refresh
+from nomad.common import get_compression_format
 from nomad.utils import strip
+from nomad.search import (
+    search,
+    search_iterator,
+    refresh as search_refresh,
+    QueryValidationError,
+)
 
+from .auth import create_user_dependency, generate_upload_token
 from ..models import (
-    Direction,
-    Files,
-    HTTPExceptionModel,
-    MetadataEditRequest,
     MetadataPagination,
-    MetadataRequired,
-    Owner,
+    User,
+    Direction,
     Pagination,
     PaginationResponse,
-    User,
-    WithQuery,
+    HTTPExceptionModel,
+    Files,
     files_parameters,
+    Owner,
+    WithQuery,
+    MetadataRequired,
+    MetadataEditRequest,
     restrict_query_to_upload,
 )
+from .entries import EntryArchiveResponse, answer_entry_archive_request
 from ..utils import (
+    parameter_dependency_from_model,
+    create_responses,
     DownloadItem,
     browser_download_headers,
-    create_download_stream_raw_file,
     create_download_stream_zipped,
-    create_responses,
+    create_download_stream_raw_file,
     create_stream_from_string,
-    parameter_dependency_from_model,
 )
-from .auth import create_user_dependency, generate_upload_token
-from .entries import EntryArchiveResponse, answer_entry_archive_request
 
 router = APIRouter()
 
diff --git a/nomad/app/v1/routers/users.py b/nomad/app/v1/routers/users.py
index 3e48ee8995..50c003e806 100644
--- a/nomad/app/v1/routers/users.py
+++ b/nomad/app/v1/routers/users.py
@@ -18,16 +18,16 @@
 
 from enum import Enum
 
-from fastapi import APIRouter, Depends, HTTPException, Query, status
+from fastapi import Depends, APIRouter, status, HTTPException, Query
 from pydantic.main import BaseModel
 
-from nomad import datamodel, infrastructure
+from nomad import infrastructure, datamodel
 from nomad.config import config
 from nomad.utils import strip
 
-from ..models import HTTPExceptionModel, User
-from ..utils import create_responses
 from .auth import create_user_dependency
+from ..models import User, HTTPExceptionModel
+from ..utils import create_responses
 
 router = APIRouter()
 
diff --git a/nomad/app/v1/utils.py b/nomad/app/v1/utils.py
index c62316fe4e..1a6b04574c 100644
--- a/nomad/app/v1/utils.py
+++ b/nomad/app/v1/utils.py
@@ -16,21 +16,19 @@
 # limitations under the License.
 #
 
-import gzip
-import inspect
+from typing import Any
+from collections.abc import Iterator
+from types import FunctionType
+import urllib
 import io
 import json
-import lzma
 import os
-import urllib
-from collections.abc import Iterator
-from types import FunctionType
-from typing import Any
-
-from fastapi import HTTPException, Query, Request, status  # noqa: F401
-from pydantic import BaseModel, ValidationError  # noqa: F401
-
-from nomad.files import StreamedFile, UploadFiles, create_zipstream
+import inspect
+from fastapi import Request, Query, HTTPException, status  # noqa: F401
+from pydantic import ValidationError, BaseModel  # noqa: F401
+import gzip
+import lzma
+from nomad.files import UploadFiles, StreamedFile, create_zipstream
 
 
 def parameter_dependency_from_model(
diff --git a/nomad/archive/converter.py b/nomad/archive/converter.py
index 96b6e494fd..b72233f3ff 100644
--- a/nomad/archive/converter.py
+++ b/nomad/archive/converter.py
@@ -21,14 +21,15 @@ import functools
 import hashlib
 import os.path
 import signal
-from collections.abc import Callable, Iterable
 from concurrent.futures import ProcessPoolExecutor
 from multiprocessing import Manager
+from collections.abc import Callable
+from collections.abc import Iterable
 
-from nomad.archive import read_archive, to_json
-from nomad.archive.storage_v2 import ArchiveWriter as ArchiveWriterNew
 from nomad.config import config
-from nomad.files import PublicUploadFiles, StagingUploadFiles
+from nomad.archive import to_json, read_archive
+from nomad.archive.storage_v2 import ArchiveWriter as ArchiveWriterNew
+from nomad.files import StagingUploadFiles, PublicUploadFiles
 from nomad.infrastructure import setup
 from nomad.processing import Upload
 
diff --git a/nomad/archive/partial.py b/nomad/archive/partial.py
index 6d0f4012f0..0f503dbd06 100644
--- a/nomad/archive/partial.py
+++ b/nomad/archive/partial.py
@@ -20,16 +20,16 @@ from typing import Any
 
 from nomad import infrastructure
 from nomad.config import config
-from nomad.datamodel import EntryArchive
-from nomad.datamodel.metainfo.common import FastAccess
 from nomad.metainfo import (
-    Definition,
     MSection,
+    Definition,
     Quantity,
     Reference,
-    Section,
     SubSection,
+    Section,
 )
+from nomad.datamodel import EntryArchive
+from nomad.datamodel.metainfo.common import FastAccess
 
 
 def create_partial_archive(archive: EntryArchive) -> dict:
diff --git a/nomad/archive/query.py b/nomad/archive/query.py
index 09696fcdbc..2097a2f7ba 100644
--- a/nomad/archive/query.py
+++ b/nomad/archive/query.py
@@ -18,13 +18,13 @@
 
 import functools
 import re
+from typing import Any
 from collections.abc import Callable
 from io import BytesIO
-from typing import Any
 
 from nomad import utils
 
-from .storage import ArchiveDict, ArchiveList, ArchiveReader, read_archive, to_json
+from .storage import ArchiveReader, ArchiveList, ArchiveDict, to_json, read_archive
 
 _query_archive_key_pattern = re.compile(r'^([\s\w\-]+)(\[([-?0-9]*)(:([-?0-9]*))?])?$')
 
diff --git a/nomad/archive/required.py b/nomad/archive/required.py
index 402e116ad6..df5fa96f51 100644
--- a/nomad/archive/required.py
+++ b/nomad/archive/required.py
@@ -28,25 +28,24 @@ from fastapi import HTTPException
 from nomad import utils
 from nomad.metainfo import (
     Definition,
-    Package,
+    Section,
     Quantity,
-    QuantityReference,
+    SubSection,
     Reference,
-    Section,
+    QuantityReference,
     SectionReference,
-    SubSection,
+    Package,
 )
-
-from ..datamodel.context import ServerContext, parse_path
 from .query import (
     ArchiveQueryError,
-    _extract_child,
-    _extract_key_and_index,
-    _query_archive_key_pattern,
     to_json,
+    _query_archive_key_pattern,
+    _extract_key_and_index,
+    _extract_child,
 )
-from .storage import ArchiveDict, ArchiveError, ArchiveList, ArchiveReader
+from .storage import ArchiveReader, ArchiveList, ArchiveError, ArchiveDict
 from .storage_v2 import ArchiveDict as NewArchiveDict
+from ..datamodel.context import parse_path, ServerContext
 
 
 class RequiredValidationError(Exception):
diff --git a/nomad/archive/storage.py b/nomad/archive/storage.py
index 29102e1eae..fa90306564 100644
--- a/nomad/archive/storage.py
+++ b/nomad/archive/storage.py
@@ -17,10 +17,12 @@
 #
 from __future__ import annotations
 
-import struct
-from collections.abc import Generator, Mapping, Sequence
-from io import BufferedReader, BytesIO
 from typing import Any, cast
+from collections.abc import Generator
+from io import BytesIO, BufferedReader
+from collections.abc import Mapping, Sequence
+
+import struct
 
 import msgspec
 
@@ -326,8 +328,10 @@ def read_archive(file_or_path: str | BytesIO, **kwargs) -> ArchiveReader:
         will lazily load data as it is used. The mapping needs to be closed or used within
         a 'with' statement to free the underlying file resource after use.
     """
-    from .storage_v2 import ArchiveReader as ArchiveReaderNew
-    from .storage_v2 import ArchiveWriter as ArchiveWriterNew
+    from .storage_v2 import (
+        ArchiveWriter as ArchiveWriterNew,
+        ArchiveReader as ArchiveReaderNew,
+    )
 
     # todo: replace implementation to enable automatic conversion
     # if isinstance(file_or_path, str):
diff --git a/nomad/archive/storage_v2.py b/nomad/archive/storage_v2.py
index ffb8fdaf6f..6a5d1e59af 100644
--- a/nomad/archive/storage_v2.py
+++ b/nomad/archive/storage_v2.py
@@ -27,8 +27,8 @@ from bitarray import bitarray
 from msgpack import Unpacker
 
 from nomad import utils
-from nomad.archive import ArchiveError
 from nomad.config import config
+from nomad.archive import ArchiveError
 
 _packer = msgpack.Packer(autoreset=True, use_bin_type=True)
 
diff --git a/nomad/atomutils.py b/nomad/atomutils.py
index d0deb7ded1..3b7a6f5cc1 100644
--- a/nomad/atomutils.py
+++ b/nomad/atomutils.py
@@ -23,10 +23,14 @@ import itertools
 import logging
 import math
 import re
-from collections.abc import Iterable
 from functools import reduce
 from string import ascii_uppercase
-from typing import TYPE_CHECKING, Any, cast
+from typing import (
+    TYPE_CHECKING,
+    Any,
+    cast,
+)
+from collections.abc import Iterable
 
 import ase.data
 import ase.geometry
diff --git a/nomad/bundles.py b/nomad/bundles.py
index 93c45612e1..9ed5ef6316 100644
--- a/nomad/bundles.py
+++ b/nomad/bundles.py
@@ -8,36 +8,35 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-import json
-import os
+from typing import cast, Any
 from collections.abc import Iterable
+import os
+import json
 from datetime import datetime, timedelta
-from typing import Any, cast
-
-from fastapi import HTTPException, status
 from packaging import version
 
-from nomad import datamodel, search, utils
+from nomad import utils, datamodel, search
 from nomad.config import config
-from nomad.config.models.config import BundleExportSettings, BundleImportSettings
+from nomad.config.models.config import BundleImportSettings, BundleExportSettings
 from nomad.files import (
-    BrowsableFileSource,
-    CombinedFileSource,
-    DiskFileSource,
-    FileSource,
+    zipfile,
     PathObject,
+    UploadFiles,
     PublicUploadFiles,
     StagingUploadFiles,
-    StandardJSONDecoder,
+    FileSource,
+    BrowsableFileSource,
+    CombinedFileSource,
     StreamedFileSource,
-    UploadFiles,
+    DiskFileSource,
     ZipFileSource,
-    bundle_info_filename,
     json_to_streamed_file,
-    zipfile,
+    bundle_info_filename,
+    StandardJSONDecoder,
 )
 from nomad.processing.base import ProcessStatus
-from nomad.processing.data import Entry, Upload, mongo_entry_metadata
+from nomad.processing.data import Upload, Entry, mongo_entry_metadata
+from fastapi import HTTPException, status
 
 
 class BundleExporter:
diff --git a/nomad/cli/admin/admin.py b/nomad/cli/admin/admin.py
index 75f5cc8817..7c02a16cdd 100644
--- a/nomad/cli/admin/admin.py
+++ b/nomad/cli/admin/admin.py
@@ -18,8 +18,8 @@
 
 import click
 
-from nomad.cli.cli import cli
 from nomad.config import config
+from nomad.cli.cli import cli
 
 
 @cli.group(
@@ -68,8 +68,7 @@ def reset(remove, i_am_really_sure):
 def reset_processing(zero_complete_time):
     from datetime import datetime
 
-    from nomad import infrastructure
-    from nomad import processing as proc
+    from nomad import infrastructure, processing as proc
 
     infrastructure.setup_mongo()
 
@@ -110,11 +109,9 @@ def reset_processing(zero_complete_time):
 )
 def lift_embargo(dry, parallel):
     from datetime import datetime
-
     from dateutil.relativedelta import relativedelta
 
-    from nomad import infrastructure
-    from nomad import processing as proc
+    from nomad import infrastructure, processing as proc
     from nomad.search import quantity_values
 
     infrastructure.setup_mongo()
@@ -418,7 +415,6 @@ def migrate_mongo(
     import sys
 
     from pymongo.database import Database
-
     from nomad import infrastructure
     from nomad.cli.admin import migrate
 
@@ -494,10 +490,9 @@ def migrate_mongo(
 )
 def rewrite_doi_urls(dois, dry, save_existing_records):
     import json
-
     import requests
 
-    from nomad.doi import _create_dataset_url, edit_doi_url
+    from nomad.doi import edit_doi_url, _create_dataset_url
 
     existing_records = []
 
diff --git a/nomad/cli/admin/clean.py b/nomad/cli/admin/clean.py
index 2522466c06..6ca3d6c7ca 100644
--- a/nomad/cli/admin/clean.py
+++ b/nomad/cli/admin/clean.py
@@ -39,13 +39,13 @@ from .admin import admin
 def clean(dry, skip_entries, skip_fs, skip_es, staging_too, force):
     import os
     import shutil
-
-    import elasticsearch_dsl
     import tabulate
+    import elasticsearch_dsl
 
     from nomad import infrastructure, processing
     from nomad.config import config as nomad_config
-    from nomad.search import delete_by_query, quantity_values
+    from nomad.search import delete_by_query
+    from nomad.search import quantity_values
 
     mongo_client = infrastructure.setup_mongo()
     infrastructure.setup_elastic()
diff --git a/nomad/cli/admin/entries.py b/nomad/cli/admin/entries.py
index 91728ae86d..54ac693eed 100644
--- a/nomad/cli/admin/entries.py
+++ b/nomad/cli/admin/entries.py
@@ -33,8 +33,7 @@ def entries():
 )
 @click.option('--skip-mongo', help='Keep uploads and entries in mongo.', is_flag=True)
 def rm(entries, skip_es, skip_mongo):
-    from nomad import infrastructure, search
-    from nomad import processing as proc
+    from nomad import processing as proc, infrastructure, search
 
     infrastructure.setup_mongo()
     infrastructure.setup_elastic()
diff --git a/nomad/cli/admin/migrate.py b/nomad/cli/admin/migrate.py
index 5f28df89b1..495423de7c 100644
--- a/nomad/cli/admin/migrate.py
+++ b/nomad/cli/admin/migrate.py
@@ -19,15 +19,15 @@
 import time
 from datetime import datetime
 from typing import Any
-
 from pydantic import BaseModel
-from pymongo import ReplaceOne
-from pymongo.database import Collection, Database
 
+from pymongo import ReplaceOne
+from pymongo.database import Database, Collection
 from nomad import utils
+from nomad.processing import ProcessStatus, Upload, Entry
 from nomad.datamodel import Dataset
 from nomad.parsing.parsers import parser_dict
-from nomad.processing import Entry, ProcessStatus, Upload
+
 
 _upload_keys_to_remove_v0 = (
     'published',
diff --git a/nomad/cli/admin/run.py b/nomad/cli/admin/run.py
index 1739b89c1e..ab846f3e0e 100644
--- a/nomad/cli/admin/run.py
+++ b/nomad/cli/admin/run.py
@@ -75,9 +75,9 @@ def run_app(
     # port = port or config.services.api_port
 
     if with_gui:
-        import glob
         import os
         import os.path
+        import glob
         import shutil
 
         gui_folder = os.path.abspath(
@@ -122,9 +122,8 @@ def run_app(
     from nomad.utils import get_logger
 
     if gunicorn:
-        import logging.config
-
         from gunicorn.app.wsgiapp import WSGIApplication
+        import logging.config
 
         if log_config:
             logging.config.fileConfig(log_config)
@@ -153,7 +152,7 @@ def run_app(
         get_logger(__name__).info('created gunicorn server', data=str(gunicorn_app.cfg))
         gunicorn_app.run()
     else:
-        from uvicorn import Config, Server
+        from uvicorn import Server, Config
 
         kwargs['log_config'] = log_config
 
@@ -183,11 +182,10 @@ def run_worker(*, workers=None):
 
 
 def run_hub():
+    from jupyterhub.app import main
+    import sys
     import os
     import subprocess
-    import sys
-
-    from jupyterhub.app import main
 
     if 'JUPYTERHUB_CRYPT_KEY' not in os.environ:
         crypt_key = config.north.jupyterhub_crypt_key
diff --git a/nomad/cli/admin/springer.py b/nomad/cli/admin/springer.py
index dec3b88fdc..23b3c59e33 100644
--- a/nomad/cli/admin/springer.py
+++ b/nomad/cli/admin/springer.py
@@ -23,18 +23,17 @@ http://materials.springer.com. The database is stuctured as
 space_group_number : normalized_formula : springer_id : entry
 """
 
-import os.path
-import re
-import time
 from typing import Any
-
-import bs4
 import requests
+import re
+import bs4
+import time
+import os.path
 
 import nomad.archive.storage_v2
 from nomad import archive
-from nomad.archive import read_archive
 from nomad.config import config
+from nomad.archive import read_archive
 
 required_items = {
     'Alphabetic Formula:': 'alphabetic_formula',
diff --git a/nomad/cli/admin/uploads.py b/nomad/cli/admin/uploads.py
index c55c64948f..cd1cd9eb7a 100644
--- a/nomad/cli/admin/uploads.py
+++ b/nomad/cli/admin/uploads.py
@@ -25,7 +25,6 @@ import click
 from orjson import dumps
 
 from nomad.config import config
-
 from .admin import admin
 
 
@@ -35,8 +34,7 @@ def _run_parallel(
     import threading
     import time
 
-    from nomad import processing as proc
-    from nomad import utils
+    from nomad import utils, processing as proc
 
     if isinstance(uploads, tuple | list):
         uploads_count = len(uploads)
@@ -239,13 +237,11 @@ def _query_uploads(
     list of upoad ids and further filter parameters.
     """
 
-    import json
     from typing import cast
-
+    import json
     from mongoengine import Q
 
-    from nomad import infrastructure, search
-    from nomad import processing as proc
+    from nomad import infrastructure, processing as proc, search
     from nomad.app.v1 import models
 
     infrastructure.setup_mongo()
@@ -355,13 +351,12 @@ def _query_uploads(
 @click.pass_context
 def export(ctx, uploads, required, output: str):
     import sys
-    import time
-    import zipfile
-
-    from nomad.archive import ArchiveQueryError, RequiredReader
-    from nomad.files import UploadFiles
     from nomad.processing import Entry
     from nomad.utils import get_logger
+    from nomad.files import UploadFiles
+    from nomad.archive import ArchiveQueryError, RequiredReader
+    import time
+    import zipfile
 
     logger = get_logger(__name__)
 
@@ -634,8 +629,7 @@ def index(ctx, uploads, parallel, transformer, skip_materials, print_progress):
 def delete_upload(
     upload, skip_es: bool = False, skip_files: bool = False, skip_mongo: bool = False
 ):
-    from nomad import files, search, utils
-    from nomad import processing as proc
+    from nomad import search, files, utils, processing as proc
 
     # delete elastic
     if not skip_es:
@@ -788,8 +782,7 @@ def re_pack(ctx, uploads):
 def stop(ctx, uploads, entries: bool, kill: bool, no_celery: bool):
     import mongoengine
 
-    from nomad import processing as proc
-    from nomad import utils
+    from nomad import utils, processing as proc
 
     query, _ = _query_uploads(uploads, **ctx.obj.uploads_kwargs)
 
@@ -918,8 +911,9 @@ def integrity(
 ):
     from nomad.app.v1.models import MetadataPagination, MetadataRequired
     from nomad.archive.storage_v2 import ArchiveWriter
-    from nomad.files import PublicUploadFiles, StagingUploadFiles
-    from nomad.processing import Entry, Upload
+    from nomad.files import StagingUploadFiles, PublicUploadFiles
+    from nomad.processing import Entry
+    from nomad.processing import Upload
     from nomad.search import search
 
     def search_params(upload_id: str):
@@ -1306,8 +1300,8 @@ def export_bundle(
 def import_bundle(
     ctx, input_path, multi, settings, embargo_length, use_celery, ignore_errors
 ):
-    from nomad import infrastructure
     from nomad.bundles import BundleImporter
+    from nomad import infrastructure
 
     for key, value in ctx.obj.uploads_kwargs.items():
         if value:
diff --git a/nomad/cli/admin/users.py b/nomad/cli/admin/users.py
index 7752903f29..21253fb313 100644
--- a/nomad/cli/admin/users.py
+++ b/nomad/cli/admin/users.py
@@ -29,10 +29,10 @@ def users():
 @users.command(help='Import users to keycloak from a JSON file.', name='import')
 @click.argument('PATH_TO_USERS_FILE', type=str, nargs=1)
 def import_command(path_to_users_file):
-    import datetime
     import json
+    import datetime
 
-    from nomad import datamodel, infrastructure, utils
+    from nomad import infrastructure, datamodel, utils
 
     with open(path_to_users_file) as f:
         users = json.load(f)
diff --git a/nomad/cli/aflow.py b/nomad/cli/aflow.py
index eec1729ad7..501b5f3764 100644
--- a/nomad/cli/aflow.py
+++ b/nomad/cli/aflow.py
@@ -20,27 +20,26 @@
 # code will fail.
 # TODO The metadata should not be set via API, but added to the uploads as nomad.json.
 
-import io
-import json
-import os
+import requests
 import re
 import subprocess
+from urllib import parse as urllib_parse
+import os
 import tarfile
 import threading
 import time
+import io
+import re
 import uuid
-from urllib import parse as urllib_parse
-
+import json
+import numpy as np
 import ase
 import bs4
 import matid  # pylint: disable=import-error
-import numpy as np
-import requests
 
-from nomad import atomutils, client
-from nomad import processing as proc
-from nomad.client import api, upload_file
+from nomad import atomutils, client, processing as proc
 from nomad.config import config
+from nomad.client import api, upload_file
 
 
 class DbUpdater:
diff --git a/nomad/cli/cli.py b/nomad/cli/cli.py
index 316293d1cb..4120b883cc 100644
--- a/nomad/cli/cli.py
+++ b/nomad/cli/cli.py
@@ -16,11 +16,10 @@
 # limitations under the License.
 #
 
+import click
 import logging
 import os
 
-import click
-
 from nomad import utils
 from nomad.config import config
 
diff --git a/nomad/cli/client/integrationtests.py b/nomad/cli/client/integrationtests.py
index 0f99ca2327..744cba59c8 100644
--- a/nomad/cli/client/integrationtests.py
+++ b/nomad/cli/client/integrationtests.py
@@ -21,9 +21,9 @@ A command that runs some example operations on a working nomad@FAIRDI installati
 as a final integration test.
 """
 
-import json
-import os
 import time
+import os
+import json
 
 from nomad.client import api
 
diff --git a/nomad/cli/dev.py b/nomad/cli/dev.py
index 4491c228e9..7a3b4a11ad 100644
--- a/nomad/cli/dev.py
+++ b/nomad/cli/dev.py
@@ -15,18 +15,17 @@
 # limitations under the License.
 #
 
+from typing import Any
+import sys
 import json
 import os
-import sys
-from typing import Any
-
 import click
+
 from pint import Unit
 from pint.errors import UndefinedUnitError
 
 from nomad.config import config
 from nomad.metainfo.elasticsearch_extension import schema_separator
-
 from .cli import cli
 
 
@@ -81,8 +80,8 @@ def gui_qa(skip_tests: bool):
 @dev.command(help='Export an API model in JSON schema.')
 @click.argument('model')
 def api_model(model):
-    import importlib
     import json
+    import importlib
 
     def remove_null_types(data):
         """
@@ -124,11 +123,11 @@ def api_model(model):
         'nomad.app.v1.models.graph.GraphRequest',
         'nomad.app.v1.models.graph.GraphResponse',
     ]:
-        from nomad.app.v1.models.graph.graph_models import Graph
         from nomad.app.v1.models.graph.utils import (
             generate_request_model,
             generate_response_model,
         )
+        from nomad.app.v1.models.graph.graph_models import Graph
 
         sys.modules['nomad.app.v1.models.graph.utils'].ref_prefix = '#/definitions'
         sys.modules['nomad.app.v1.models.graph.utils'].graph_model_export = True
@@ -189,8 +188,8 @@ def metainfo():
 
 def _generate_search_quantities():
     # Currently only quantities with "entry_type" are included.
+    from nomad.metainfo.elasticsearch_extension import entry_type, Elasticsearch
     from nomad.datamodel import EntryArchive
-    from nomad.metainfo.elasticsearch_extension import Elasticsearch, entry_type
 
     def to_dict(search_quantity, section=False, repeats=False):
         if section:
@@ -350,9 +349,8 @@ def gui_config():
     '--parser', help='Only updated the README of the given parsers subdirctory.'
 )
 def update_parser_readmes(parser):
-    import re
     from glob import glob
-
+    import re
     import yaml
 
     os.chdir(os.path.join(os.path.dirname(__file__), '../..'))
@@ -491,10 +489,8 @@ def example_data(username: str):
 
 
 def _generate_units_json() -> tuple[Any, Any]:
-    from collections import defaultdict
-
     from pint.converters import ScaleConverter
-
+    from collections import defaultdict
     from nomad.units import ureg
 
     # TODO: Check that all units are unambiguously defined, and that there are
diff --git a/nomad/cli/parse.py b/nomad/cli/parse.py
index 275cdf80ce..723796dfba 100644
--- a/nomad/cli/parse.py
+++ b/nomad/cli/parse.py
@@ -84,12 +84,12 @@ def _parse(
     save_plot_dir,
 ):
     import json
-    import os
     import sys
+    import os
 
-    from nomad import utils
     from nomad.client import normalize_all, parse
     from nomad.datamodel.metainfo.plot import resolve_plot_references
+    from nomad import utils
 
     kwargs = dict(
         strict=not not_strict,
diff --git a/nomad/client/api.py b/nomad/client/api.py
index fe85171217..414eb02a03 100644
--- a/nomad/client/api.py
+++ b/nomad/client/api.py
@@ -16,10 +16,9 @@
 # limitations under the License.
 #
 
-import time
-
 import requests
 from keycloak import KeycloakOpenID
+import time
 
 from nomad.config import config
 
diff --git a/nomad/client/archive.py b/nomad/client/archive.py
index 1c0f496e09..971d87ef06 100644
--- a/nomad/client/archive.py
+++ b/nomad/client/archive.py
@@ -18,19 +18,19 @@
 from __future__ import annotations
 
 import asyncio
-import threading
 from asyncio import Semaphore
 from itertools import islice
-from time import monotonic
 from typing import Any
+from time import monotonic
+import threading
 
 from click import progressbar
-from httpx import AsyncClient, Timeout
+from httpx import Timeout, AsyncClient
 from keycloak import KeycloakOpenID
 
 from nomad import metainfo as mi
 from nomad.config import config
-from nomad.datamodel import ClientContext, EntryArchive
+from nomad.datamodel import EntryArchive, ClientContext
 from nomad.utils import dict_to_dataframe
 
 
diff --git a/nomad/client/processing.py b/nomad/client/processing.py
index 03d54ba78c..3445fc8871 100644
--- a/nomad/client/processing.py
+++ b/nomad/client/processing.py
@@ -16,14 +16,15 @@
 # limitations under the License.
 #
 
-import io
 import os
-import sys
+import io
 import typing
+import sys
 
-from nomad import datamodel, utils
+from nomad import utils, datamodel
 from nomad.config import config
 
+
 from .api import Auth
 
 
diff --git a/nomad/client/upload.py b/nomad/client/upload.py
index 8b2c6f4c38..e800b8da04 100644
--- a/nomad/client/upload.py
+++ b/nomad/client/upload.py
@@ -41,8 +41,8 @@ def upload_file(
 
     Returns: The upload_id if successful or None if not.
     """
-    from nomad.client import api
     from nomad.processing import ProcessStatus
+    from nomad.client import api
 
     if local_path:
         response = api.post(
diff --git a/nomad/common.py b/nomad/common.py
index 181c232cbe..e3f7bc67a3 100644
--- a/nomad/common.py
+++ b/nomad/common.py
@@ -24,11 +24,10 @@ source code without circular imports.
 import os
 import pkgutil
 import shutil
-import tarfile
 import zipfile
-from tempfile import TemporaryDirectory
+import tarfile
 from typing import Literal
-
+from tempfile import TemporaryDirectory
 import httpx
 
 
diff --git a/nomad/config/models/common.py b/nomad/config/models/common.py
index 02f68c3814..576c4aa03d 100644
--- a/nomad/config/models/common.py
+++ b/nomad/config/models/common.py
@@ -16,9 +16,8 @@
 # limitations under the License.
 #
 
-from typing import Any, TypeVar, cast
-
-from pydantic import BaseModel, ConfigDict, Field, model_validator  # noqa: F401
+from typing import Any, cast, TypeVar
+from pydantic import ConfigDict, model_validator, BaseModel, Field  # noqa: F401
 
 ConfigBaseModelBound = TypeVar('ConfigBaseModelBound', bound='ConfigBaseModel')
 
diff --git a/nomad/config/models/config.py b/nomad/config/models/config.py
index 385f0d8ba6..ffba90ddc9 100644
--- a/nomad/config/models/config.py
+++ b/nomad/config/models/config.py
@@ -23,7 +23,13 @@ from importlib.metadata import version
 from typing import Any
 
 import yaml
-from pydantic import BaseModel, ConfigDict, Field, field_validator, model_validator
+from pydantic import (
+    BaseModel,
+    field_validator,
+    model_validator,
+    Field,
+    ConfigDict,
+)
 
 try:
     __version__ = version('nomad-lab')
@@ -33,12 +39,15 @@ except Exception:  # noqa
 
 from importlib.metadata import entry_points
 
-from nomad.common import get_package_path
 
-from .common import ConfigBaseModel, Options
+from .common import (
+    ConfigBaseModel,
+    Options,
+)
 from .north import NORTH
 from .plugins import EntryPointType, PluginPackage, Plugins
 from .ui import UI
+from nomad.common import get_package_path
 
 warnings.filterwarnings('ignore', message='numpy.dtype size changed')
 warnings.filterwarnings('ignore', message='numpy.ufunc size changed')
diff --git a/nomad/config/models/plugins.py b/nomad/config/models/plugins.py
index 6ab4180329..d0fe2af9f0 100644
--- a/nomad/config/models/plugins.py
+++ b/nomad/config/models/plugins.py
@@ -16,16 +16,15 @@
 # limitations under the License.
 #
 
-import importlib
 import os
-import shutil
 import sys
+import shutil
 from abc import ABCMeta, abstractmethod
-from typing import TYPE_CHECKING, Literal, Union, cast
-
-from pydantic import BaseModel, Field, model_validator
+import importlib
+from typing import Union, Literal, cast, TYPE_CHECKING
+from pydantic import model_validator, BaseModel, Field
 
-from nomad.common import download_file, get_package_path, is_safe_relative_path, is_url
+from nomad.common import get_package_path, download_file, is_url, is_safe_relative_path
 
 from .common import Options
 from .ui import App
@@ -33,11 +32,10 @@ from .ui import App
 example_prefix = '__examples__'
 
 if TYPE_CHECKING:
-    from fastapi import FastAPI
-
     from nomad.metainfo import SchemaPackage
     from nomad.normalizing import Normalizer as NormalizerBaseClass
     from nomad.parsing import Parser as ParserBaseClass
+    from fastapi import FastAPI
 
 
 class EntryPoint(BaseModel):
@@ -764,8 +762,8 @@ def add_plugin(plugin: Schema) -> None:
 def remove_plugin(plugin) -> None:
     """Function for removing a plugin."""
     from nomad.config import config
-    from nomad.metainfo import Package
     from nomad.metainfo.elasticsearch_extension import entry_type
+    from nomad.metainfo import Package
 
     # Remove from path
     try:
diff --git a/nomad/config/models/ui.py b/nomad/config/models/ui.py
index ed171ebd81..3e42990c93 100644
--- a/nomad/config/models/ui.py
+++ b/nomad/config/models/ui.py
@@ -17,17 +17,18 @@
 #
 
 from enum import Enum
-from typing import Annotated, Literal, Union
-
-from pydantic import BaseModel, ConfigDict, Field, model_validator
+from typing import Union
+from typing import Literal
+from typing import Annotated
+from pydantic import BaseModel, ConfigDict, model_validator, Field
 
 from .common import (
     ConfigBaseModel,
     Options,
-    OptionsBase,
-    OptionsGlob,
-    OptionsMulti,
     OptionsSingle,
+    OptionsMulti,
+    OptionsGlob,
+    OptionsBase,
 )
 
 
@@ -115,9 +116,8 @@ class UnitSystem(ConfigBaseModel):
             values = values.model_dump(exclude_none=True)
         """Adds SI defaults for dimensions that are missing a unit."""
         units = values.get('units', {})
-        from pint import UndefinedUnitError
-
         from nomad.units import ureg
+        from pint import UndefinedUnitError
 
         # Check that only supported dimensions and units are used
         for key in units.keys():
diff --git a/nomad/datamodel/context.py b/nomad/datamodel/context.py
index 3c4529c903..e9ca61a9ee 100644
--- a/nomad/datamodel/context.py
+++ b/nomad/datamodel/context.py
@@ -16,19 +16,24 @@
 # limitations under the License.
 #
 
-import os.path
-import re
 from urllib.parse import urlsplit, urlunsplit
+import re
+import os.path
 
 import requests
 
 from nomad import utils
 from nomad.config import config
-from nomad.datamodel import EntryArchive
-from nomad.datamodel.datamodel import EntryMetadata
 from nomad.datamodel.util import parse_path
-from nomad.metainfo import Context as MetainfoContext
-from nomad.metainfo import MetainfoReferenceError, MSection, Package, Quantity
+from nomad.datamodel.datamodel import EntryMetadata
+from nomad.metainfo import (
+    Context as MetainfoContext,
+    MSection,
+    Quantity,
+    MetainfoReferenceError,
+    Package,
+)
+from nomad.datamodel import EntryArchive
 
 
 class Context(MetainfoContext):
diff --git a/nomad/datamodel/data.py b/nomad/datamodel/data.py
index ca029f8963..595156644c 100644
--- a/nomad/datamodel/data.py
+++ b/nomad/datamodel/data.py
@@ -17,23 +17,24 @@
 #
 
 import os.path
-from typing import Any
 
 from cachetools import TTLCache, cached
+
+from typing import Any
 from pydantic import Field
 
 from nomad.config import config
 from nomad.metainfo.elasticsearch_extension import Elasticsearch, material_entry_type
 from nomad.metainfo.metainfo import (
-    JSON,
-    Capitalized,
     Category,
-    Datetime,
     MCategory,
     MSection,
     Quantity,
-    Reference,
+    Capitalized,
     Section,
+    Datetime,
+    Reference,
+    JSON,
 )
 from nomad.metainfo.pydantic_extension import PydanticModel
 
@@ -95,8 +96,8 @@ class EntryData(ArchiveSection):
     def normalize(self, archive, logger):
         super().normalize(archive, logger)
 
-        from nomad.datamodel import EntryArchive
         from nomad.datamodel.results import Results
+        from nomad.datamodel import EntryArchive
 
         # TODO entry_type should only be assigned if not already defined (done to pass eln test)
         if archive.metadata:
diff --git a/nomad/datamodel/datamodel.py b/nomad/datamodel/datamodel.py
index 3b048eec51..f32012bc14 100644
--- a/nomad/datamodel/datamodel.py
+++ b/nomad/datamodel/datamodel.py
@@ -18,40 +18,39 @@
 
 """All generic entry metadata and related classes."""
 
-import os.path
-from enum import Enum
 from typing import Any
+from enum import Enum
+import os.path
 
 import rfc3161ng
 from elasticsearch_dsl import analyzer, tokenizer
 
 from nomad import utils
 from nomad.datamodel.metainfo.common import FastAccess
+from nomad.metainfo.mongoengine_extension import Mongo, MongoDocument
+from nomad.metainfo.pydantic_extension import PydanticModel
 from nomad.metainfo.elasticsearch_extension import (
     Elasticsearch,
-    create_searchable_quantity,
     material_entry_type,
+    entry_type as es_entry_type,
+    create_searchable_quantity,
 )
-from nomad.metainfo.elasticsearch_extension import entry_type as es_entry_type
-from nomad.metainfo.mongoengine_extension import Mongo, MongoDocument
-from nomad.metainfo.pydantic_extension import PydanticModel
-
+from .util import parse_path
 from ..metainfo import (
-    JSON,
     Bytes,
-    Datetime,
+    Package,
     Definition,
-    MCategory,
-    MEnum,
     MSection,
-    Package,
-    Quantity,
+    MCategory,
     Section,
     SubSection,
+    Quantity,
+    MEnum,
+    Datetime,
+    JSON,
 )
 from ..metainfo.data_type import m_str
 from ..metainfo.metainfo import Reference
-from .util import parse_path
 
 # This is usually defined automatically when the first metainfo definition is evaluated, but
 # due to the next imports requiring the m_package already, this would be too late.
diff --git a/nomad/datamodel/hdf5.py b/nomad/datamodel/hdf5.py
index daf56c68ad..fa04a76f94 100644
--- a/nomad/datamodel/hdf5.py
+++ b/nomad/datamodel/hdf5.py
@@ -17,16 +17,16 @@
 #
 from __future__ import annotations
 
-import re
 from typing import Any
-
 import h5py
+import re
+
 import numpy as np
 import pint
 from h5py import File
 
-from nomad.datamodel.metainfo.annotations import H5WebAnnotation
 from nomad.metainfo.data_type import NonPrimitive
+from nomad.datamodel.metainfo.annotations import H5WebAnnotation
 from nomad.utils import get_logger
 
 LOGGER = get_logger(__name__)
diff --git a/nomad/datamodel/metainfo/action.py b/nomad/datamodel/metainfo/action.py
index 8f219878de..a4c73d3de5 100644
--- a/nomad/datamodel/metainfo/action.py
+++ b/nomad/datamodel/metainfo/action.py
@@ -16,7 +16,7 @@
 # limitations under the License.
 #
 from nomad.datamodel.data import ArchiveSection
-from nomad.metainfo import Package, Quantity
+from nomad.metainfo import Quantity, Package
 
 m_package = Package()
 
diff --git a/nomad/datamodel/metainfo/annotations.py b/nomad/datamodel/metainfo/annotations.py
index ed177b2541..fb9fc11324 100644
--- a/nomad/datamodel/metainfo/annotations.py
+++ b/nomad/datamodel/metainfo/annotations.py
@@ -16,19 +16,18 @@
 # limitations under the License.
 #
 
-import re
-from enum import Enum
 from typing import Any
+from enum import Enum
+from pydantic import field_validator, ConfigDict, Field, model_validator
+import re
 
-from pydantic import ConfigDict, Field, field_validator, model_validator
 from pydantic.main import BaseModel
 
-from nomad.metainfo import AnnotationModel, Datetime, MEnum, Quantity, Reference
 from nomad.utils import strip
-
-from ...metainfo.data_type import Datatype
-from ..data import Query
+from nomad.metainfo import AnnotationModel, MEnum, Datetime, Reference, Quantity
 from .plot import PlotlyError
+from ..data import Query
+from ...metainfo.data_type import Datatype
 
 
 class ELNComponentEnum(str, Enum):
diff --git a/nomad/datamodel/metainfo/basesections/v1.py b/nomad/datamodel/metainfo/basesections/v1.py
index eacde4ab5e..69cebd02de 100644
--- a/nomad/datamodel/metainfo/basesections/v1.py
+++ b/nomad/datamodel/metainfo/basesections/v1.py
@@ -20,8 +20,8 @@ import os
 import random
 import re
 import time
-from collections.abc import Iterable
 from typing import TYPE_CHECKING
+from collections.abc import Iterable
 
 import h5py
 import numpy as np
@@ -29,17 +29,22 @@ import requests
 from ase.data import atomic_masses, atomic_numbers, chemical_symbols
 from unidecode import unidecode
 
-from nomad.datamodel.metainfo.workflow import Link, Task, TaskReference, Workflow
 from nomad.metainfo import SchemaPackage
+from nomad.datamodel.metainfo.workflow import Link, Task, TaskReference, Workflow
 from nomad.metainfo.data_type import m_str
 
 if TYPE_CHECKING:
-    from structlog.stdlib import BoundLogger
+    from structlog.stdlib import (
+        BoundLogger,
+    )
 
 from nomad import utils
 from nomad.atomutils import Formula
 from nomad.datamodel.data import ArchiveSection, EntryData
-from nomad.datamodel.metainfo.annotations import ELNAnnotation, HDF5Annotation
+from nomad.datamodel.metainfo.annotations import (
+    ELNAnnotation,
+    HDF5Annotation,
+)
 from nomad.datamodel.results import ELN, Material, Results
 from nomad.datamodel.results import ElementalComposition as ResultsElementalComposition
 from nomad.datamodel.util import create_custom_mapping
@@ -2034,7 +2039,6 @@ class PublicationReference(ArchiveSection):
         super().normalize(archive, logger)
         import dateutil.parser
         import requests
-
         from nomad.datamodel.datamodel import EntryMetadata
 
         # Parse journal name, lead author and publication date from crossref
diff --git a/nomad/datamodel/metainfo/basesections/v2.py b/nomad/datamodel/metainfo/basesections/v2.py
index 1ad7e401f7..01aad791e1 100644
--- a/nomad/datamodel/metainfo/basesections/v2.py
+++ b/nomad/datamodel/metainfo/basesections/v2.py
@@ -15,39 +15,62 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-import datetime
 import os
+from typing import TYPE_CHECKING
+from collections.abc import Iterable
 import random
-import re
 import time
-from collections.abc import Iterable
-from typing import TYPE_CHECKING
+import datetime
+import re
 
-import h5py
+from unidecode import unidecode
 import numpy as np
+import h5py
+from ase.data import (
+    chemical_symbols,
+    atomic_numbers,
+    atomic_masses,
+)
 import requests
-from ase.data import atomic_masses, atomic_numbers, chemical_symbols
-from unidecode import unidecode
 
 from nomad.datamodel.metainfo.workflow import Link, Task, Workflow
 from nomad.metainfo.data_type import m_str
 
 if TYPE_CHECKING:
-    from structlog.stdlib import BoundLogger
-from nomad import utils
-from nomad.datamodel.data import ArchiveSection
+    from structlog.stdlib import (
+        BoundLogger,
+    )
+from nomad import (
+    utils,
+)
+from nomad.units import (
+    ureg,
+)
+from nomad.metainfo import (
+    Quantity,
+    Datetime,
+    Section,
+    SectionProxy,
+    SubSection,
+)
+from nomad.metainfo.util import MEnum
+from nomad.datamodel.util import create_custom_mapping
+from nomad.datamodel.data import (
+    ArchiveSection,
+)
+from nomad.datamodel.results import (
+    Results,
+    ELN,
+    ElementalComposition as ResultsElementalComposition,
+    Material,
+)
 from nomad.datamodel.metainfo.annotations import (
     ELNAnnotation,
     Filter,
-    HDF5Annotation,
     SectionProperties,
+    HDF5Annotation,
 )
-from nomad.datamodel.results import ELN, Material, Results
-from nomad.datamodel.results import ElementalComposition as ResultsElementalComposition
-from nomad.datamodel.util import create_custom_mapping
-from nomad.metainfo import Datetime, Quantity, Section, SectionProxy, SubSection
-from nomad.metainfo.util import MEnum
-from nomad.units import ureg
+
 
 PUB_CHEM_PUG_PATH = 'https://pubchem.ncbi.nlm.nih.gov/rest/pug/compound'
 CAS_API_PATH = 'https://commonchemistry.cas.org/api'
@@ -385,7 +408,7 @@ class EntityReference(SectionReference):
         """
         super().normalize(archive, logger)
         if self.reference is None and self.lab_id is not None:
-            from nomad.search import MetadataPagination, search
+            from nomad.search import search, MetadataPagination
 
             query = {'results.eln.lab_ids': self.lab_id}
             search_result = search(
@@ -1572,11 +1595,10 @@ class PublicationReference(ArchiveSection):
             logger ('BoundLogger'): A structlog logger.
         """
         super().normalize(archive, logger)
+        from nomad.datamodel.datamodel import EntryMetadata
         import dateutil.parser
         import requests
 
-        from nomad.datamodel.datamodel import EntryMetadata
-
         # Parse journal name, lead author and publication date from crossref
         if self.DOI_number:
             try:
diff --git a/nomad/datamodel/metainfo/common.py b/nomad/datamodel/metainfo/common.py
index beeb755d6d..14bc1024ec 100644
--- a/nomad/datamodel/metainfo/common.py
+++ b/nomad/datamodel/metainfo/common.py
@@ -16,7 +16,8 @@
 # limitations under the License.
 #
 
-from nomad.metainfo import Category, MCategory, MSection, Quantity, Section, SubSection
+from nomad.metainfo import MCategory, Category
+from nomad.metainfo import MSection, Section, SubSection, Quantity
 from nomad.metainfo.elasticsearch_extension import Elasticsearch, material_entry_type
 
 
diff --git a/nomad/datamodel/metainfo/downloads.py b/nomad/datamodel/metainfo/downloads.py
index 8ada69e13b..9ff64389d7 100644
--- a/nomad/datamodel/metainfo/downloads.py
+++ b/nomad/datamodel/metainfo/downloads.py
@@ -18,9 +18,11 @@
 
 import os.path
 
-from nomad.datamodel.data import ArchiveSection
 from nomad.metainfo import MSection, Package, Quantity, SubSection
 
+from nomad.datamodel.data import ArchiveSection
+
+
 m_package = Package(name='downloads')
 
 
@@ -135,8 +137,7 @@ class Downloads(ArchiveSection):
 
         import pathlib
         import urllib.request
-
-        from nomad.common import extract_file, get_compression_format
+        from nomad.common import get_compression_format, extract_file
 
         # download and extract files
         skip_download = True
diff --git a/nomad/datamodel/metainfo/measurements.py b/nomad/datamodel/metainfo/measurements.py
index a6bb1fca5c..c10787470c 100644
--- a/nomad/datamodel/metainfo/measurements.py
+++ b/nomad/datamodel/metainfo/measurements.py
@@ -18,9 +18,10 @@
 
 import numpy as np
 
-from nomad.datamodel import Author
-from nomad.metainfo import Datetime, MSection, Package, Quantity, SubSection
+from nomad.metainfo import MSection, Package, Quantity, SubSection, Datetime
 from nomad.metainfo.metainfo import Reference, SectionProxy
+from nomad.datamodel import Author
+
 
 m_package = Package(name='measurements')
 
diff --git a/nomad/datamodel/metainfo/plot.py b/nomad/datamodel/metainfo/plot.py
index caaf30037f..3618263f8e 100644
--- a/nomad/datamodel/metainfo/plot.py
+++ b/nomad/datamodel/metainfo/plot.py
@@ -15,16 +15,14 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-from copy import deepcopy
-from datetime import datetime
-
-import numpy as np
+from nomad.datamodel.data import ArchiveSection
+from nomad.metainfo import Quantity, SubSection, Package, MSection, JSON, Section
 import plotly.express as px
 import plotly.graph_objs as go
 from plotly.subplots import make_subplots
-
-from nomad.datamodel.data import ArchiveSection
-from nomad.metainfo import JSON, MSection, Package, Quantity, Section, SubSection
+import numpy as np
+from copy import deepcopy
+from datetime import datetime
 
 
 class PlotlyError(Exception):
diff --git a/nomad/datamodel/metainfo/simulation/calculation.py b/nomad/datamodel/metainfo/simulation/calculation.py
index a4ecc90954..1dc907a8ee 100644
--- a/nomad/datamodel/metainfo/simulation/calculation.py
+++ b/nomad/datamodel/metainfo/simulation/calculation.py
@@ -21,27 +21,27 @@
 # https://github.com/nomad-coe/nomad-schema-plugin-run.git
 
 import numpy as np  # noqa: F401
-
-from nomad.datamodel.data import ArchiveSection
-from nomad.datamodel.metainfo.common import PropertySection, ProvenanceTracker
-from nomad.datamodel.metainfo.simulation.method import HoppingMatrix, Method
-from nomad.datamodel.metainfo.simulation.system import AtomsGroup, System
 from nomad.metainfo import (  # noqa: F401
-    Category,
-    MCategory,
-    MEnum,
     MSection,
+    MCategory,
+    Category,
     Package,
     Quantity,
-    Reference,
     Section,
-    SectionProxy,
     SubSection,
+    SectionProxy,
+    Reference,
+    MEnum,
     derived,
 )
+from nomad.datamodel.metainfo.common import ProvenanceTracker, PropertySection
+from nomad.datamodel.metainfo.simulation.system import System, AtomsGroup
+from nomad.datamodel.metainfo.simulation.method import Method, HoppingMatrix
+from nomad.datamodel.data import ArchiveSection
 
 from ..common import FastAccess
 
+
 m_package = Package()
 
 
diff --git a/nomad/datamodel/metainfo/simulation/legacy_workflows.py b/nomad/datamodel/metainfo/simulation/legacy_workflows.py
index 7a4eef3e5d..52a62e4a1f 100644
--- a/nomad/datamodel/metainfo/simulation/legacy_workflows.py
+++ b/nomad/datamodel/metainfo/simulation/legacy_workflows.py
@@ -22,26 +22,26 @@
 
 import numpy as np
 from nptyping import NDArray
-
-from nomad.datamodel.metainfo.common import FastAccess
-from nomad.datamodel.metainfo.simulation.calculation import (
-    BandStructure,
-    Calculation,
-    Dos,
-)
-from nomad.datamodel.metainfo.simulation.run import Run
-from nomad.datamodel.metainfo.simulation.system import Atoms, AtomsGroup, System
 from nomad.metainfo import (
-    MEnum,
     MSection,
-    Package,
+    MEnum,
     Quantity,
-    Reference,
     Section,
-    SectionProxy,
     SubSection,
+    SectionProxy,
+    Reference,
+    Package,
     derived,
 )
+from nomad.datamodel.metainfo.simulation.calculation import (
+    Calculation,
+    Dos,
+    BandStructure,
+)
+from nomad.datamodel.metainfo.simulation.run import Run
+from nomad.datamodel.metainfo.simulation.system import System, Atoms, AtomsGroup
+from nomad.datamodel.metainfo.common import FastAccess
+
 
 m_package = Package()
 
diff --git a/nomad/datamodel/metainfo/simulation/method.py b/nomad/datamodel/metainfo/simulation/method.py
index 0d88668563..165fdfa0ae 100644
--- a/nomad/datamodel/metainfo/simulation/method.py
+++ b/nomad/datamodel/metainfo/simulation/method.py
@@ -20,29 +20,28 @@
 # Only for purpose of compatibility. Use run schema plugin.
 # https://github.com/nomad-coe/nomad-schema-plugin-run.git
 
-import typing
 from logging import Logger
-
 import numpy as np  # noqa: F401
-from pint.util import SharedRegistryObject  # noqa: F401
+import typing
 
+from pint.util import SharedRegistryObject  # noqa: F401
 from nomad.datamodel.data import ArchiveSection
 from nomad.metainfo import (  # noqa: F401
-    Category,
-    MCategory,
-    MEnum,
     MSection,
+    MCategory,
+    Category,
     Package,
     Quantity,
-    Reference,
     Section,
-    SectionProxy,
     SubSection,
+    SectionProxy,
+    Reference,
+    MEnum,
 )
 from nomad.quantum_states import RussellSaundersState
-
 from ..common import FastAccess
 
+
 m_package = Package()
 
 
diff --git a/nomad/datamodel/metainfo/simulation/run.py b/nomad/datamodel/metainfo/simulation/run.py
index 2dd64bf266..93cca85f6a 100644
--- a/nomad/datamodel/metainfo/simulation/run.py
+++ b/nomad/datamodel/metainfo/simulation/run.py
@@ -22,22 +22,22 @@
 
 import numpy as np  # noqa: F401
 
-from nomad.datamodel.data import ArchiveSection
-from nomad.datamodel.metainfo.common import FastAccess
-from nomad.datamodel.metainfo.simulation.calculation import Calculation
-from nomad.datamodel.metainfo.simulation.method import Method
-from nomad.datamodel.metainfo.simulation.system import System
 from nomad.metainfo import (  # noqa: F401
-    Category,
-    MCategory,
     MSection,
+    MCategory,
+    Category,
     Package,
     Quantity,
-    Reference,
     Section,
-    SectionProxy,
     SubSection,
+    SectionProxy,
+    Reference,
 )
+from nomad.datamodel.metainfo.simulation.method import Method
+from nomad.datamodel.metainfo.simulation.system import System
+from nomad.datamodel.metainfo.simulation.calculation import Calculation
+from nomad.datamodel.metainfo.common import FastAccess
+from nomad.datamodel.data import ArchiveSection
 
 m_package = Package()
 
diff --git a/nomad/datamodel/metainfo/simulation/system.py b/nomad/datamodel/metainfo/simulation/system.py
index c5645aebbf..fe4a73deab 100644
--- a/nomad/datamodel/metainfo/simulation/system.py
+++ b/nomad/datamodel/metainfo/simulation/system.py
@@ -20,28 +20,26 @@
 # Only for purpose of compatibility. Use run schema plugin.
 # https://github.com/nomad-coe/nomad-schema-plugin-run.git
 
-import typing  # noqa: F401
-
 import numpy as np  # noqa: F401
-
-from nomad.datamodel.data import ArchiveSection
+import typing  # noqa: F401
 from nomad.metainfo import (  # noqa: F401
-    Category,
-    MCategory,
-    MEnum,
     MSection,
+    MCategory,
+    Category,
     Package,
     Quantity,
-    Reference,
     Section,
-    SectionProxy,
     SubSection,
+    SectionProxy,
+    Reference,
+    MEnum,
     derived,
 )
+from nomad.datamodel.data import ArchiveSection
 from nomad.metainfo.data_type import m_float64
-from nomad.units import ureg
 
 from ..common import FastAccess
+from nomad.units import ureg
 
 m_package = Package()
 
diff --git a/nomad/datamodel/metainfo/simulation/workflow.py b/nomad/datamodel/metainfo/simulation/workflow.py
index aa77ddb2d0..ae5dde4f1b 100644
--- a/nomad/datamodel/metainfo/simulation/workflow.py
+++ b/nomad/datamodel/metainfo/simulation/workflow.py
@@ -27,48 +27,45 @@ from nptyping import NDArray
 
 from nomad.atomutils import get_volume
 from nomad.datamodel.data import ArchiveSection
+from nomad.units import ureg
+from nomad.metainfo import (
+    MSection,
+    SubSection,
+    Section,
+    Quantity,
+    MEnum,
+    Reference,
+    Package,
+    derived,
+)
 from nomad.datamodel.metainfo.common import FastAccess
+from nomad.datamodel.metainfo.workflow import Workflow, Link, Task
+from nomad.datamodel.metainfo.simulation.system import System, AtomsGroup
+from nomad.datamodel.metainfo.simulation.method import (
+    Method,
+    XCFunctional,
+    BasisSetContainer,
+    GW as GWMethodology,
+    TB as TBMethodology,
+    DMFT as DMFTMethodology,
+    BSE as BSEMethodology,
+)
 from nomad.datamodel.metainfo.simulation.calculation import (
-    BandEnergies,
+    Calculation,
     BandGap,
+    Dos,
     BandStructure,
-    Calculation,
+    BandEnergies,
     Density,
-    Dos,
-    ElectronicStructureProvenance,
-    EnergyEntry,
-    GreensFunctions,
     Potential,
     Spectra,
-)
-from nomad.datamodel.metainfo.simulation.calculation import (
+    ElectronicStructureProvenance,
+    GreensFunctions,
     RadiusOfGyration as RadiusOfGyrationCalculation,
-)
-from nomad.datamodel.metainfo.simulation.calculation import (
     RadiusOfGyrationValues as RadiusOfGyrationValuesCalculation,
+    EnergyEntry,
 )
-from nomad.datamodel.metainfo.simulation.method import BSE as BSEMethodology
-from nomad.datamodel.metainfo.simulation.method import DMFT as DMFTMethodology
-from nomad.datamodel.metainfo.simulation.method import GW as GWMethodology
-from nomad.datamodel.metainfo.simulation.method import TB as TBMethodology
-from nomad.datamodel.metainfo.simulation.method import (
-    BasisSetContainer,
-    Method,
-    XCFunctional,
-)
-from nomad.datamodel.metainfo.simulation.system import AtomsGroup, System
-from nomad.datamodel.metainfo.workflow import Link, Task, Workflow
-from nomad.metainfo import (
-    MEnum,
-    MSection,
-    Package,
-    Quantity,
-    Reference,
-    Section,
-    SubSection,
-    derived,
-)
-from nomad.units import ureg
+
 
 # TODO remove this after reprocessing with the new schema defined in
 # simulationworkflowschema plug in https://github.com/nomad-coe/nomad-schema-plugin-simulation-workflow.git
@@ -2205,11 +2202,11 @@ class MolecularDynamicsResults(ThermodynamicsResults):
         super().normalize(archive, logger)
 
         try:
+            from simulationworkflowschema.molecular_dynamics import archive_to_universe
             from simulationworkflowschema.molecular_dynamics import (
-                archive_to_universe,
+                calc_molecular_rdf,
                 calc_molecular_mean_squared_displacements,
                 calc_molecular_radius_of_gyration,
-                calc_molecular_rdf,
             )
 
             universe = archive_to_universe(archive)
diff --git a/nomad/datamodel/metainfo/system.py b/nomad/datamodel/metainfo/system.py
index 05fce8c21c..bcff5a8172 100644
--- a/nomad/datamodel/metainfo/system.py
+++ b/nomad/datamodel/metainfo/system.py
@@ -15,11 +15,11 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-import ase
 import numpy as np
+import ase
 
+from nomad.metainfo import Package, Quantity, Section, SubSection, SectionProxy
 from nomad.datamodel.data import ArchiveSection
-from nomad.metainfo import Package, Quantity, Section, SectionProxy, SubSection
 from nomad.units import ureg
 
 # TODO System should be redefined from base section
diff --git a/nomad/datamodel/metainfo/tabulartree.py b/nomad/datamodel/metainfo/tabulartree.py
index 4960906235..806be1c2c6 100644
--- a/nomad/datamodel/metainfo/tabulartree.py
+++ b/nomad/datamodel/metainfo/tabulartree.py
@@ -20,6 +20,7 @@ import typing
 
 from nomad.metainfo import MSection, Package, Quantity, SubSection
 
+
 m_package = Package(name='tabulartree')
 
 
diff --git a/nomad/datamodel/metainfo/workflow.py b/nomad/datamodel/metainfo/workflow.py
index a1c3fe137a..2f446ebaee 100644
--- a/nomad/datamodel/metainfo/workflow.py
+++ b/nomad/datamodel/metainfo/workflow.py
@@ -16,8 +16,9 @@
 # limitations under the License.
 #
 
+from nomad.metainfo import Quantity, SubSection, Section
+
 from nomad.datamodel.data import ArchiveSection, EntryData, WorkflowsElnCategory
-from nomad.metainfo import Quantity, Section, SubSection
 
 
 class Link(ArchiveSection):
diff --git a/nomad/datamodel/optimade.py b/nomad/datamodel/optimade.py
index 5dfea49688..f72fa69cbf 100644
--- a/nomad/datamodel/optimade.py
+++ b/nomad/datamodel/optimade.py
@@ -16,19 +16,19 @@
 # limitations under the License.
 #
 
-import numpy as np
 from ase.data import chemical_symbols
+import numpy as np
 
+from nomad.units import ureg
 from nomad.metainfo import (
-    DefinitionAnnotation,
-    MEnum,
     MSection,
-    Quantity,
     Section,
+    Quantity,
     SubSection,
+    MEnum,
+    DefinitionAnnotation,
 )
 from nomad.metainfo.elasticsearch_extension import Elasticsearch
-from nomad.units import ureg
 
 
 def optimade_links(section: str):
diff --git a/nomad/datamodel/results.py b/nomad/datamodel/results.py
index 2942b4bd44..f4f090d2ba 100644
--- a/nomad/datamodel/results.py
+++ b/nomad/datamodel/results.py
@@ -18,40 +18,43 @@
 
 from logging import Logger
 from typing import TYPE_CHECKING
-
 import numpy as np
-from ase.data import chemical_symbols
 from elasticsearch_dsl import Text
 
+from ase.data import chemical_symbols
+
 from nomad.config import config
-from nomad.datamodel.metainfo.annotations import H5WebAnnotation
-from nomad.datamodel.metainfo.common import PropertySection, ProvenanceTracker
+from nomad.datamodel.metainfo.common import ProvenanceTracker, PropertySection
 from nomad.datamodel.metainfo.simulation.method import CoreHole as CoreHoleRun
-from nomad.datamodel.optimade import Species as OptimadeSpecies  # noqa
+from nomad.metainfo.elasticsearch_extension import (
+    Elasticsearch,
+    material_type,
+    material_entry_type,
+    get_tokenizer,
+)
+
 from nomad.metainfo import (
-    Datetime,
-    MEnum,
     MSection,
-    Package,
-    Quantity,
-    Reference,
     Section,
     SubSection,
+    Quantity,
+    MEnum,
+    Package,
+    Datetime,
+    Reference,
 )
-from nomad.metainfo.elasticsearch_extension import (
-    Elasticsearch,
-    get_tokenizer,
-    material_entry_type,
-    material_type,
-)
+from nomad.datamodel.metainfo.common import ProvenanceTracker, PropertySection
+from nomad.datamodel.optimade import Species as OptimadeSpecies  # noqa
+from nomad.datamodel.metainfo.annotations import H5WebAnnotation
 
 try:
     import runschema
 
     runschema.run_schema_entry_point.load()
-    import runschema.calculation
     import runschema.method
+    import runschema.calculation
     import runschema.system
+
     import simulationworkflowschema
 
     simulationworkflowschema.simulationworkflow_schema_entry_point.load()
diff --git a/nomad/datamodel/util.py b/nomad/datamodel/util.py
index 6078033824..63ab9e0c48 100644
--- a/nomad/datamodel/util.py
+++ b/nomad/datamodel/util.py
@@ -17,19 +17,19 @@
 #
 import math
 import re
-from collections.abc import Callable
 from typing import Any
+from collections.abc import Callable
 
 import numpy as np
 
 from nomad import utils
 from nomad.metainfo import (
+    Section,
     AnnotationModel,
-    MetainfoError,
     MSection,
-    Property,
-    Section,
     SubSection,
+    Property,
+    MetainfoError,
 )
 from nomad.units import ureg
 
diff --git a/nomad/doi.py b/nomad/doi.py
index fe1df5f049..a755e19c31 100644
--- a/nomad/doi.py
+++ b/nomad/doi.py
@@ -21,18 +21,17 @@ This module contains all functions necessary to manage DOI via datacite.org and
 MDS API (https://support.datacite.org/docs/mds-api-guide).
 """
 
-import datetime
 import xml.etree.ElementTree as ET
-
+import datetime
 import requests
-from fastapi import HTTPException
-from mongoengine import DateTimeField, Document, StringField
-from mongoengine.errors import NotUniqueError
 from requests.auth import HTTPBasicAuth
+from mongoengine import Document, StringField, DateTimeField
+from mongoengine.errors import NotUniqueError
 
-from nomad import utils
-from nomad.config import config
 from nomad.datamodel import User
+from nomad.config import config
+from nomad import utils
+from fastapi import HTTPException
 
 
 class DOIException(Exception):
diff --git a/nomad/files.py b/nomad/files.py
index d40bf0e102..fdf0f0b8ee 100644
--- a/nomad/files.py
+++ b/nomad/files.py
@@ -45,35 +45,40 @@ original mainfile, and vice versa.
 
 from __future__ import annotations
 
+from abc import ABCMeta
+from typing import (
+    IO,
+    Any,
+    NamedTuple,
+)
+from collections.abc import Callable
+from collections.abc import Iterable, Iterator
+from pydantic import BaseModel
+from datetime import datetime
+import os.path
+import os
+import shutil
+import zipstream
 import hashlib
 import io
 import json
-import os
-import os.path
-import shutil
+import yaml
+import magic
 import tarfile  # noqa: F401
 import zipfile
-from abc import ABCMeta
-from collections.abc import Callable, Iterable, Iterator
-from datetime import datetime
-from typing import IO, Any, NamedTuple
 
-import magic
-import yaml
-import zipstream
-from pydantic import BaseModel
 
-from nomad import datamodel, utils
-from nomad.archive import ArchiveReader, read_archive, to_json, write_archive
-from nomad.archive.storage_v2 import combine_archive
+from nomad import utils, datamodel
 from nomad.common import (
-    extract_file,
     get_compression_format,
+    extract_file,
     is_safe_basename,
     is_safe_relative_path,
 )
 from nomad.config import config
-from nomad.config.models.config import BundleExportSettings, BundleImportSettings
+from nomad.archive.storage_v2 import combine_archive
+from nomad.config.models.config import BundleImportSettings, BundleExportSettings
+from nomad.archive import write_archive, read_archive, ArchiveReader, to_json
 
 bundle_info_filename = 'bundle_info.json'
 
diff --git a/nomad/graph/graph_reader.py b/nomad/graph/graph_reader.py
index 24139f7714..d813a8f375 100644
--- a/nomad/graph/graph_reader.py
+++ b/nomad/graph/graph_reader.py
@@ -24,10 +24,11 @@ import functools
 import itertools
 import os
 import re
-from collections.abc import AsyncIterator, Callable, Iterator
+from collections.abc import AsyncIterator, Iterator
 from contextlib import contextmanager
 from threading import Lock
 from typing import Any
+from collections.abc import Callable
 
 import orjson
 from cachetools import TTLCache
@@ -54,10 +55,23 @@ from nomad.app.v1.routers.uploads import (
     get_upload_with_read_access,
     upload_to_pydantic,
 )
-from nomad.archive import ArchiveDict, ArchiveList, to_json
-from nomad.archive.storage_v2 import ArchiveDict as ArchiveDictNew
-from nomad.archive.storage_v2 import ArchiveList as ArchiveListNew
-from nomad.datamodel import Dataset, EntryArchive, ServerContext, User
+from nomad.archive import (
+    ArchiveDict,
+    ArchiveList,
+    to_json,
+)
+from nomad.archive.storage_v2 import (
+    ArchiveDict as ArchiveDictNew,
+)
+from nomad.archive.storage_v2 import (
+    ArchiveList as ArchiveListNew,
+)
+from nomad.datamodel import (
+    Dataset,
+    EntryArchive,
+    ServerContext,
+    User,
+)
 from nomad.datamodel.util import parse_path
 from nomad.files import RawPathInfo, UploadFiles
 from nomad.graph.lazy_wrapper import (
@@ -88,8 +102,8 @@ from nomad.metainfo import (
     SectionReference,
     SubSection,
 )
-from nomad.metainfo.data_type import JSON, Datatype
 from nomad.metainfo.data_type import Any as AnyType
+from nomad.metainfo.data_type import JSON, Datatype
 from nomad.metainfo.util import MSubSectionList, split_python_definition
 from nomad.processing import Entry, ProcessStatus, Upload
 from nomad.utils import timer
diff --git a/nomad/graph/lazy_wrapper.py b/nomad/graph/lazy_wrapper.py
index 148a6c079d..87b777b483 100644
--- a/nomad/graph/lazy_wrapper.py
+++ b/nomad/graph/lazy_wrapper.py
@@ -26,7 +26,6 @@ Different wrappers are catered for different types of objects/operations.
 """
 
 from __future__ import annotations
-
 from functools import cached_property
 
 from nomad.datamodel import User
diff --git a/nomad/graph/model.py b/nomad/graph/model.py
index 669d7f1276..f8bf6f1c38 100644
--- a/nomad/graph/model.py
+++ b/nomad/graph/model.py
@@ -25,15 +25,14 @@ from typing import Annotated, Union
 
 from pydantic import (
     AfterValidator,
-    BaseModel,
+    field_validator,
     ConfigDict,
+    BaseModel,
     Field,
     ValidationError,
-    field_validator,
 )
 
 from nomad.app.v1.models import Direction, Metadata, MetadataPagination, Pagination
-from nomad.app.v1.models.groups import UserGroupPagination, UserGroupQuery
 from nomad.app.v1.routers.datasets import DatasetPagination
 from nomad.app.v1.routers.uploads import (
     EntryProcDataPagination,
@@ -41,6 +40,7 @@ from nomad.app.v1.routers.uploads import (
     UploadProcDataPagination,
     UploadProcDataQuery,
 )
+from nomad.app.v1.models.groups import UserGroupQuery, UserGroupPagination
 
 
 class DatasetQuery(BaseModel):
diff --git a/nomad/infrastructure.py b/nomad/infrastructure.py
index 0d98646a16..5adbf9f90b 100644
--- a/nomad/infrastructure.py
+++ b/nomad/infrastructure.py
@@ -23,34 +23,33 @@ is run once for each *api* and *worker* process. Individual functions for partia
 exist to facilitate testing, aspects of :py:mod:`nomad.cli`, etc.
 """
 
-import json
-import os
 import os.path
-import re
+import os
 import shutil
+from elasticsearch_dsl import connections
+from mongoengine import connect, disconnect
+from mongoengine.connection import ConnectionFailure
 import smtplib
-
-# TODO put somemore thought into warnings
-import warnings
-from datetime import datetime
 from email.mime.text import MIMEText
-
+from keycloak import KeycloakOpenID, KeycloakAdmin
+from keycloak.exceptions import KeycloakAuthenticationError, KeycloakGetError
+import json
 import jwt
+from datetime import datetime
+import re
 import unidecode
-from elasticsearch_dsl import connections
-from keycloak import KeycloakAdmin, KeycloakOpenID
-from keycloak.exceptions import KeycloakAuthenticationError, KeycloakGetError
-from mongoengine import connect, disconnect
-from mongoengine.connection import ConnectionFailure
 
 from nomad import utils
 from nomad.config import config
+from nomad.utils.structlogging import get_logger
 
 # The metainfo is defined and used during imports. This is problematic.
 # We import all parsers very early in the infrastructure setup. This will populate
 # the metainfo with parser specific definitions, before the metainfo might be used.
 from nomad.parsing import parsers  # noqa: F401
-from nomad.utils.structlogging import get_logger
+
+# TODO put somemore thought into warnings
+import warnings
 
 warnings.filterwarnings('ignore')
 
diff --git a/nomad/logtransfer.py b/nomad/logtransfer.py
index f85170d8bd..6c884540c2 100644
--- a/nomad/logtransfer.py
+++ b/nomad/logtransfer.py
@@ -16,15 +16,15 @@
 # limitations under the License.
 #
 
-import os
+import requests
+import zlib
 import os.path
+import os
 import time
-import zlib
 
-import requests
 
-from nomad import utils
 from nomad.config import config
+from nomad import utils
 
 logger = utils.get_logger(__name__)
 
diff --git a/nomad/metainfo/annotation.py b/nomad/metainfo/annotation.py
index 6ee540abe9..b3bec23d57 100644
--- a/nomad/metainfo/annotation.py
+++ b/nomad/metainfo/annotation.py
@@ -20,7 +20,7 @@ from __future__ import annotations
 
 from typing import Any, ClassVar, ForwardRef
 
-from pydantic import BaseModel, ConfigDict, Field
+from pydantic import ConfigDict, BaseModel, Field
 
 
 class Annotation:
diff --git a/nomad/metainfo/data_frames.py b/nomad/metainfo/data_frames.py
index 4f2f1fc7d1..94f510e9b6 100644
--- a/nomad/metainfo/data_frames.py
+++ b/nomad/metainfo/data_frames.py
@@ -1,13 +1,19 @@
-import inspect
 import types
-from collections.abc import Iterable
 from typing import Union, cast
-
+from collections.abc import Iterable
 import numpy as np
-import xarray as xr
+import inspect
 from pydantic import BaseModel
+import xarray as xr
 
-from nomad.metainfo import MSection, Package, Quantity, Section, SubSection, constraint
+from nomad.metainfo import (
+    MSection,
+    Section,
+    Quantity,
+    SubSection,
+    Package,
+    constraint,
+)
 from nomad.metainfo.metainfo import _placeholder_quantity
 from nomad.units import ureg
 
diff --git a/nomad/metainfo/data_type.py b/nomad/metainfo/data_type.py
index 6f9b89f798..04b4c72465 100644
--- a/nomad/metainfo/data_type.py
+++ b/nomad/metainfo/data_type.py
@@ -22,7 +22,7 @@ import importlib
 import re
 import typing
 from base64 import b64decode, b64encode
-from datetime import date, datetime
+from datetime import datetime, date
 from functools import reduce
 from inspect import isclass
 from typing import Any as TypingAny
@@ -1248,12 +1248,12 @@ def to_optimade_type(in_type: Datatype):
 
 def to_mongo_type(in_type: Datatype):
     from mongoengine import (
+        IntField,
+        FloatField,
         BooleanField,
+        StringField,
         DateTimeField,
         DictField,
-        FloatField,
-        IntField,
-        StringField,
     )
 
     standard_type = in_type.standard_type()
diff --git a/nomad/metainfo/elasticsearch_extension.py b/nomad/metainfo/elasticsearch_extension.py
index 9d386d4329..f45f5ece73 100644
--- a/nomad/metainfo/elasticsearch_extension.py
+++ b/nomad/metainfo/elasticsearch_extension.py
@@ -159,15 +159,19 @@ sub-sections as if they were direct sub-sections.
 import math
 import re
 from collections import defaultdict
+from typing import (
+    TYPE_CHECKING,
+    Any,
+    Optional,
+    cast,
+)
 from collections.abc import Callable
-from typing import TYPE_CHECKING, Any, Optional, cast
 
 from elasticsearch_dsl import Q
-from pint import Quantity as PintQuantity
-
 from nomad import utils
 from nomad.config import config
 from nomad.config.models.plugins import Parser, Schema, SchemaPackageEntryPoint
+from pint import Quantity as PintQuantity
 
 from . import DefinitionAnnotation
 from .data_type import Datatype, to_elastic_type
diff --git a/nomad/metainfo/example.py b/nomad/metainfo/example.py
index d7acce8ee9..3e7f7443b4 100644
--- a/nomad/metainfo/example.py
+++ b/nomad/metainfo/example.py
@@ -18,22 +18,21 @@
 
 """An example metainfo package."""
 
-from datetime import datetime
-
 import numpy as np
+from datetime import datetime
 
+from nomad.units import ureg
 from nomad.metainfo import (
-    Datetime,
-    MCategory,
-    MEnum,
     MSection,
-    Package,
-    Quantity,
+    MCategory,
     Section,
+    Quantity,
+    Package,
     SubSection,
+    MEnum,
+    Datetime,
     constraint,
 )
-from nomad.units import ureg
 
 m_package = Package(links=['https://nomad-lab.eu/prod/rae/docs/metainfo.html'])
 
diff --git a/nomad/metainfo/metainfo.py b/nomad/metainfo/metainfo.py
index 67072e835d..1532e571e3 100644
--- a/nomad/metainfo/metainfo.py
+++ b/nomad/metainfo/metainfo.py
@@ -34,7 +34,7 @@ from urllib.parse import urlsplit, urlunsplit
 import docstring_parser
 import jmespath
 import pint
-from pydantic import BaseModel, TypeAdapter, ValidationError
+from pydantic import TypeAdapter, ValidationError, BaseModel
 
 from nomad.config import config
 from nomad.metainfo.data_type import JSON as JSONType
@@ -43,20 +43,14 @@ from nomad.metainfo.data_type import Any as AnyType
 from nomad.metainfo.data_type import Bytes as BytesType
 from nomad.metainfo.data_type import Callable as CallableType
 from nomad.metainfo.data_type import Capitalized as CapitalizedType
-from nomad.metainfo.data_type import (
-    Datatype,
-    Enum,
-    ExactNumber,
-    InexactNumber,
-    Number,
-    check_dimensionality,
-    m_str,
-    normalize_type,
-)
+from nomad.metainfo.data_type import Datatype
 from nomad.metainfo.data_type import Datetime as DatetimeType
 from nomad.metainfo.data_type import Dimension as DimensionType
+from nomad.metainfo.data_type import Enum, ExactNumber
 from nomad.metainfo.data_type import File as FileType
+from nomad.metainfo.data_type import InexactNumber, Number
 from nomad.metainfo.data_type import Unit as UnitType
+from nomad.metainfo.data_type import check_dimensionality, m_str, normalize_type
 from nomad.metainfo.util import (
     MQuantity,
     MSubSectionList,
@@ -68,6 +62,7 @@ from nomad.metainfo.util import (
     to_dict,
 )
 from nomad.units import ureg as units
+from pydantic import TypeAdapter, ValidationError
 
 from .annotation import (
     Annotation,
diff --git a/nomad/metainfo/mongoengine_extension.py b/nomad/metainfo/mongoengine_extension.py
index c7dd4baa97..34c43289bf 100644
--- a/nomad/metainfo/mongoengine_extension.py
+++ b/nomad/metainfo/mongoengine_extension.py
@@ -35,9 +35,12 @@ sections from mongoengine. The annotation key is 'mongo'.
 
 from typing import Any
 
-from . import Annotation, DefinitionAnnotation, SectionAnnotation
 from .data_type import Datatype, to_mongo_type
-from .metainfo import MSection, Quantity
+from .metainfo import (
+    MSection,
+    Quantity,
+)
+from . import Annotation, DefinitionAnnotation, SectionAnnotation
 
 
 class Mongo(DefinitionAnnotation):
diff --git a/nomad/metainfo/pydantic_extension.py b/nomad/metainfo/pydantic_extension.py
index 155140406d..f556768aef 100644
--- a/nomad/metainfo/pydantic_extension.py
+++ b/nomad/metainfo/pydantic_extension.py
@@ -33,12 +33,15 @@ Allows to create pydantic models from section definitions.
 """
 
 from typing import cast
+from pydantic import create_model, Field, BaseModel
 
-from pydantic import BaseModel, Field, create_model
-
-from . import DefinitionAnnotation
 from .data_type import to_pydantic_type
-from .metainfo import Definition, Quantity, Section
+from .metainfo import (
+    Definition,
+    Section,
+    Quantity,
+)
+from . import DefinitionAnnotation
 
 
 class PydanticModel(DefinitionAnnotation):
diff --git a/nomad/metainfo/util.py b/nomad/metainfo/util.py
index a46e70d43c..cbaf0eb3c6 100644
--- a/nomad/metainfo/util.py
+++ b/nomad/metainfo/util.py
@@ -22,7 +22,6 @@ import re
 from typing import Any
 
 import pint
-
 from nomad.metainfo.data_type import Enum
 from nomad.units import ureg
 
diff --git a/nomad/mkdocs/metainfo.py b/nomad/mkdocs/metainfo.py
index 710a6383dc..52c4ea2e3b 100644
--- a/nomad/mkdocs/metainfo.py
+++ b/nomad/mkdocs/metainfo.py
@@ -15,8 +15,8 @@
 #
 
 from nomad import utils
+from nomad.metainfo import Property, Quantity, Datatype, Reference, SubSection
 from nomad.datamodel.data import ArchiveSection
-from nomad.metainfo import Datatype, Property, Quantity, Reference, SubSection
 
 
 def get_reference(section_def, pkg) -> str:
diff --git a/nomad/mkdocs/pydantic.py b/nomad/mkdocs/pydantic.py
index 774843aa3d..eb55aa89b7 100644
--- a/nomad/mkdocs/pydantic.py
+++ b/nomad/mkdocs/pydantic.py
@@ -20,16 +20,19 @@
 Definitions that are used in the documentation via mkdocs-macro-plugin.
 """
 
-from enum import Enum
-from inspect import isclass
 from types import UnionType
-from typing import Annotated, Any, Literal, Union, get_args, get_origin
+from pydantic.fields import FieldInfo
 
+from enum import Enum
 from pydantic import BaseModel
-from pydantic.fields import FieldInfo
+
+from typing import Annotated, Any, Union, get_args, get_origin
+from typing import Literal
+from inspect import isclass
 
 from nomad import utils
 
+
 exported_config_models = set()  # type: ignore
 
 
diff --git a/nomad/normalizing/common.py b/nomad/normalizing/common.py
index f03185579d..9075f97a70 100644
--- a/nomad/normalizing/common.py
+++ b/nomad/normalizing/common.py
@@ -15,24 +15,26 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-from typing import Any
-
-import matid.geometry  # pylint: disable=import-error
 import numpy as np
 from ase import Atoms
-from matid import SymmetryAnalyzer  # pylint: disable=import-error
-from matid.symmetry.wyckoffset import (
-    WyckoffSet as WyckoffSetMatID,  # pylint: disable=import-error
-)
+from typing import Any
 from nptyping import NDArray
+from matid import SymmetryAnalyzer  # pylint: disable=import-error
+from matid.symmetry.wyckoffset import WyckoffSet as WyckoffSetMatID  # pylint: disable=import-error
+import matid.geometry  # pylint: disable=import-error
 
 from nomad import atomutils
 from nomad.config import config
+from nomad.utils import hash
+from nomad.units import ureg
 from nomad.datamodel.metainfo.system import Atoms as NOMADAtoms
 from nomad.datamodel.optimade import Species
-from nomad.datamodel.results import Cell, LatticeParameters, Structure, WyckoffSet
-from nomad.units import ureg
-from nomad.utils import hash
+from nomad.datamodel.results import (
+    Cell,
+    Structure,
+    LatticeParameters,
+    WyckoffSet,
+)
 
 
 def wyckoff_sets_from_matid(wyckoff_sets: list[WyckoffSetMatID]) -> list[WyckoffSet]:
diff --git a/nomad/normalizing/material.py b/nomad/normalizing/material.py
index 9192162c68..f5eed863aa 100644
--- a/nomad/normalizing/material.py
+++ b/nomad/normalizing/material.py
@@ -16,24 +16,24 @@
 #
 
 import re
+from nptyping import NDArray
 
 import ase.data
 from matid.classification.classifications import (
-    Atom,
     Class0D,
+    Atom,
     Class1D,
     Class2D,
-    Class3D,
     Material2D,
     Surface,
+    Class3D,
 )
-from nptyping import NDArray
 
 from nomad import atomutils
 from nomad.atomutils import Formula
-from nomad.datamodel.results import Material, Symmetry, structure_name_map
-from nomad.normalizing.common import material_id_1d, material_id_2d, material_id_bulk
+from nomad.normalizing.common import material_id_bulk, material_id_2d, material_id_1d
 from nomad.normalizing.topology import TopologyNormalizer
+from nomad.datamodel.results import Symmetry, Material, structure_name_map
 
 
 class MaterialNormalizer:
diff --git a/nomad/normalizing/metainfo.py b/nomad/normalizing/metainfo.py
index 73e3ddd018..11238e9224 100644
--- a/nomad/normalizing/metainfo.py
+++ b/nomad/normalizing/metainfo.py
@@ -18,7 +18,7 @@
 
 from nomad.datamodel import EntryArchive
 from nomad.datamodel.data import ArchiveSection
-
+from nomad.datamodel import EntryArchive
 from . import Normalizer
 
 
diff --git a/nomad/normalizing/method.py b/nomad/normalizing/method.py
index 2a3355f8b1..0fc961ec59 100644
--- a/nomad/normalizing/method.py
+++ b/nomad/normalizing/method.py
@@ -15,33 +15,33 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-import re
 from abc import ABC, abstractmethod
+from ase.dft.kpoints import monkhorst_pack, get_monkhorst_pack_size_and_offset
 from collections import OrderedDict
-
+import re
 import numpy as np
-from ase.dft.kpoints import get_monkhorst_pack_size_and_offset, monkhorst_pack
 
+from nomad.datamodel import EntryArchive, ArchiveSection
+from nomad.metainfo import MSection
+from nomad.metainfo.data_type import Number
+from nomad.units import ureg
+from nomad.metainfo import Section
+from nomad.utils import RestrictedDict
 from nomad.config import config
-from nomad.datamodel import ArchiveSection, EntryArchive
 from nomad.datamodel.results import (
-    BSE,
+    Method,
+    Simulation,
+    HubbardKanamoriModel,
     DFT,
-    DMFT,
-    GW,
     TB,
-    HubbardKanamoriModel,
-    Material,
-    Method,
+    GW,
+    BSE,
+    DMFT,
     Precision,
-    Simulation,
+    Material,
     xc_treatments,
     xc_treatments_extended,
 )
-from nomad.metainfo import MSection, Section
-from nomad.metainfo.data_type import Number
-from nomad.units import ureg
-from nomad.utils import RestrictedDict
 
 
 class MethodNormalizer:  # TODO: add normalizer for atom_parameters.label
diff --git a/nomad/normalizing/normalizer.py b/nomad/normalizing/normalizer.py
index 0c3976f297..320571ccba 100644
--- a/nomad/normalizing/normalizer.py
+++ b/nomad/normalizing/normalizer.py
@@ -18,9 +18,9 @@
 
 from abc import ABCMeta, abstractmethod
 
-from nomad.datamodel import EntryArchive
-from nomad.metainfo import MSection
 from nomad.utils import get_logger
+from nomad.metainfo import MSection
+from nomad.datamodel import EntryArchive
 
 
 class Normalizer(metaclass=ABCMeta):
diff --git a/nomad/normalizing/optimade.py b/nomad/normalizing/optimade.py
index 3c78ab4ca5..f6e1913e46 100644
--- a/nomad/normalizing/optimade.py
+++ b/nomad/normalizing/optimade.py
@@ -16,18 +16,19 @@
 # limitations under the License.
 #
 
-import re
 from typing import Any
-
+import numpy as np
+import re
 import ase.data
 import ase.formula
-import numpy as np
 import pint.quantity
 
+from nomad.datamodel import EntryArchive
 from nomad.atomutils import Formula
-from nomad.datamodel import EntryArchive, EntryMetadata, OptimadeEntry, Species
 from nomad.normalizing.normalizer import SystemBasedNormalizer
 from nomad.units import ureg
+from nomad.datamodel import OptimadeEntry, Species, EntryMetadata
+
 
 species_re = re.compile(r'^([A-Z][a-z]?)(\d*)$')
 atom_label_re = re.compile(
diff --git a/nomad/normalizing/results.py b/nomad/normalizing/results.py
index 2316cb4510..85657aa406 100644
--- a/nomad/normalizing/results.py
+++ b/nomad/normalizing/results.py
@@ -17,78 +17,77 @@
 #
 
 import re
+import numpy as np
 from typing import Any
-
 import ase.data
-import matid.geometry  # pylint: disable=import-error
-import numpy as np
 from matid import SymmetryAnalyzer  # pylint: disable=import-error
+import matid.geometry  # pylint: disable=import-error
 
 from nomad import atomutils
-from nomad.atomutils import Formula
 from nomad.config import config
+from nomad.utils import traverse_reversed, extract_section
+from nomad.atomutils import Formula
+from nomad.normalizing.normalizer import Normalizer
+from nomad.normalizing.method import MethodNormalizer
+from nomad.normalizing.material import MaterialNormalizer
 from nomad.datamodel import EntryArchive
-from nomad.datamodel.data import ArchiveSection
 from nomad.datamodel.metainfo.workflow import Workflow
+from nomad.datamodel.data import ArchiveSection
+from nomad.normalizing.common import structures_2d
 from nomad.datamodel.results import (
     BandGap,
     BandGapDeprecated,
+    RadialDistributionFunction,
+    RadiusOfGyration,
+    MeanSquaredDisplacement,
+    Results,
+    Material,
+    Method,
+    GeometryOptimization,
+    Trajectory,
+    MolecularDynamics,
+    MDProvenance,
+    TemperatureDynamic,
+    VolumeDynamic,
+    PressureDynamic,
+    EnergyDynamic,
+    Properties,
+    StructuralProperties,
+    DynamicalProperties,
+    EnergyVolumeCurve,
+    BulkModulus,
+    ShearModulus,
+    MechanicalProperties,
+    ElectronicProperties,
+    VibrationalProperties,
+    ThermodynamicProperties,
     BandStructureElectronic,
     BandStructurePhonon,
-    BulkModulus,
-    DensityCharge,
     DOSElectronic,
-    DOSElectronicNew,
     DOSNew,
+    DOSElectronicNew,
     DOSPhonon,
-    DynamicalProperties,
-    EELSMethodology,
-    ElectricFieldGradient,
-    ElectronicProperties,
-    EnergyDynamic,
-    EnergyFreeHelmholtz,
-    EnergyVolumeCurve,
-    GeometryOptimization,
     GreensFunctionsElectronic,
+    EnergyFreeHelmholtz,
     HeatCapacityConstantVolume,
+    SpectroscopicProperties,
+    EELSMethodology,
+    SpectraProvenance,
+    Spectra,
     MagneticProperties,
     MagneticShielding,
     MagneticSusceptibility,
-    Material,
-    MDProvenance,
-    MeanSquaredDisplacement,
-    MechanicalProperties,
-    Method,
-    MolecularDynamics,
-    PressureDynamic,
-    Properties,
-    RadialDistributionFunction,
-    RadiusOfGyration,
-    Results,
-    ShearModulus,
-    Spectra,
-    SpectraProvenance,
-    SpectroscopicProperties,
+    ElectricFieldGradient,
     SpinSpinCoupling,
-    StructuralProperties,
-    TemperatureDynamic,
-    ThermodynamicProperties,
-    Trajectory,
-    VibrationalProperties,
-    VolumeDynamic,
+    DensityCharge,
 )
-from nomad.normalizing.common import structures_2d
-from nomad.normalizing.material import MaterialNormalizer
-from nomad.normalizing.method import MethodNormalizer
-from nomad.normalizing.normalizer import Normalizer
-from nomad.utils import extract_section, traverse_reversed
 
 try:
     import runschema
 
     runschema.run_schema_entry_point.load()
-    import runschema.calculation
     import runschema.method
+    import runschema.calculation
     import runschema.system
 except Exception as e:
     runschema, simulationworkflowschema = None, None
diff --git a/nomad/normalizing/topology.py b/nomad/normalizing/topology.py
index 2477f91ad6..3a6f4a22e4 100644
--- a/nomad/normalizing/topology.py
+++ b/nomad/normalizing/topology.py
@@ -16,45 +16,46 @@
 # limitations under the License.
 #
 
-import json
-import pathlib
 from collections import defaultdict
+import pathlib
+import json
 
-import numpy as np
 from ase import Atoms
 from ase.data import chemical_symbols
+import numpy as np
+from matid.clustering import SBC, Cluster
+from matid.symmetry.symmetryanalyzer import SymmetryAnalyzer
 from matid.classification.classifications import (
-    Atom,
     Class0D,
+    Atom,
     Class1D,
     Class2D,
-    Class3D,
     Material2D,
     Surface,
+    Class3D,
 )
-from matid.clustering import SBC, Cluster
-from matid.symmetry.symmetryanalyzer import SymmetryAnalyzer
 
-from nomad import atomutils, utils
+from nomad import utils
 from nomad.config import config
-from nomad.datamodel.datamodel import EntryArchive
+from nomad import atomutils
 from nomad.datamodel.results import (
     CoreHole,
+    SymmetryNew as Symmetry,
     Material,
-    Relation,
     System,
+    Relation,
     structure_name_map,
 )
-from nomad.datamodel.results import SymmetryNew as Symmetry
+from nomad.datamodel.datamodel import EntryArchive
 from nomad.normalizing.common import (
-    ase_atoms_from_nomad_atoms,
     cell_from_ase_atoms,
-    material_id_1d,
-    material_id_2d,
-    material_id_bulk,
+    ase_atoms_from_nomad_atoms,
     nomad_atoms_from_ase_atoms,
-    structures_2d,
     wyckoff_sets_from_matid,
+    structures_2d,
+    material_id_bulk,
+    material_id_2d,
+    material_id_1d,
 )
 
 conventional_description = 'The conventional cell of the material from which the subsystem is constructed from.'
diff --git a/nomad/parsing/artificial.py b/nomad/parsing/artificial.py
index ae4f1b74b1..6302b72dde 100644
--- a/nomad/parsing/artificial.py
+++ b/nomad/parsing/artificial.py
@@ -21,20 +21,19 @@ Parser for creating artificial test, brenchmark, and demonstration data.
 """
 
 import json
-import os
 import os.path
 import random
-import signal
+from ase.data import chemical_symbols
+import numpy
 import sys
 import time
-
-import numpy
-from ase.data import chemical_symbols
+import os
+import signal
 
 from nomad.datamodel import EntryArchive
 from nomad.datamodel.metainfo import runschema
 
-from .parser import MatchingParser, Parser
+from .parser import Parser, MatchingParser
 
 
 class EmptyParser(MatchingParser):
diff --git a/nomad/parsing/file_parser/file_parser.py b/nomad/parsing/file_parser/file_parser.py
index b9bef40299..f66274b69b 100644
--- a/nomad/parsing/file_parser/file_parser.py
+++ b/nomad/parsing/file_parser/file_parser.py
@@ -12,21 +12,20 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
-import bz2
+from abc import ABC, abstractmethod
+import os
+import pint
+from typing import Any, IO
+from collections.abc import Callable
 import gzip
+import bz2
 import lzma
-import os
 import tarfile
-from abc import ABC, abstractmethod
-from collections.abc import Callable
 from contextlib import contextmanager
-from typing import IO, Any
-
-import pint
 
-from nomad.datamodel import EntryArchive
 from nomad.metainfo import MSection, SubSection
 from nomad.utils import get_logger
+from nomad.datamodel import EntryArchive
 
 
 class FileParser(ABC):
diff --git a/nomad/parsing/file_parser/mapping_parser.py b/nomad/parsing/file_parser/mapping_parser.py
index 5d0be33bca..d443d93fc0 100644
--- a/nomad/parsing/file_parser/mapping_parser.py
+++ b/nomad/parsing/file_parser/mapping_parser.py
@@ -11,8 +11,6 @@ import jmespath.visitor
 import numpy as np
 from jsonpath_ng.parser import JsonPathParser
 from lxml import etree
-from pydantic import BaseModel, Field, model_validator
-
 from nomad.datamodel import EntryArchive
 from nomad.datamodel.metainfo.annotations import Mapper as MapperAnnotation
 from nomad.metainfo import MSection, SubSection
@@ -20,6 +18,7 @@ from nomad.parsing.file_parser import TextParser as TextFileParser
 from nomad.parsing.parser import ArchiveParser
 from nomad.units import ureg
 from nomad.utils import get_logger
+from pydantic import BaseModel, Field, model_validator
 
 MAPPING_ANNOTATION_KEY = 'mapping'
 
diff --git a/nomad/parsing/file_parser/text_parser.py b/nomad/parsing/file_parser/text_parser.py
index a742e171eb..5010ee1673 100644
--- a/nomad/parsing/file_parser/text_parser.py
+++ b/nomad/parsing/file_parser/text_parser.py
@@ -13,17 +13,16 @@
 # limitations under the License.
 
 
-import io
 import mmap
+import io
 import re
-from collections.abc import Callable
-from typing import Any
-
 import numpy as np
 import pint
+from typing import Any
+from collections.abc import Callable
 
-from nomad.metainfo import Quantity as mQuantity
 from nomad.parsing.file_parser import FileParser
+from nomad.metainfo import Quantity as mQuantity
 from nomad.utils import get_logger
 
 
diff --git a/nomad/parsing/file_parser/xml_parser.py b/nomad/parsing/file_parser/xml_parser.py
index 5739ec9bf3..e1fecc6b3f 100644
--- a/nomad/parsing/file_parser/xml_parser.py
+++ b/nomad/parsing/file_parser/xml_parser.py
@@ -15,9 +15,8 @@
 
 import os
 import re
-from xml.etree import ElementTree
-
 import numpy as np
+from xml.etree import ElementTree
 from lxml import etree
 
 from nomad.parsing.file_parser import FileParser
diff --git a/nomad/parsing/parser.py b/nomad/parsing/parser.py
index 9dd04e06fd..b888236299 100644
--- a/nomad/parsing/parser.py
+++ b/nomad/parsing/parser.py
@@ -16,20 +16,19 @@
 # limitations under the License.
 #
 
-import importlib
-import json
+from typing import Any, IO
+from collections.abc import Iterable
+from abc import ABCMeta, abstractmethod
+import re
 import os
 import os.path
-import re
-from abc import ABCMeta, abstractmethod
-from collections.abc import Iterable
 from functools import lru_cache
-from typing import IO, Any
-
+import importlib
+from pydantic import BaseModel, Extra  # noqa: F401
+import yaml
 import h5py
 import numpy as np
-import yaml
-from pydantic import BaseModel, Extra  # noqa: F401
+import json
 
 from nomad import utils
 from nomad.config import config
diff --git a/nomad/parsing/parsers.py b/nomad/parsing/parsers.py
index 47b3653da3..f6b5acdd54 100644
--- a/nomad/parsing/parsers.py
+++ b/nomad/parsing/parsers.py
@@ -20,30 +20,28 @@ import os.path
 from collections.abc import Iterable
 
 from nomad.config import config
-from nomad.config.models.plugins import Parser as ParserPlugin
-from nomad.config.models.plugins import ParserEntryPoint
+from nomad.config.models.plugins import Parser as ParserPlugin, ParserEntryPoint
 from nomad.datamodel import EntryArchive, EntryMetadata, results
-from nomad.datamodel.context import ClientContext, Context
+from nomad.datamodel.context import Context, ClientContext
 
-from .artificial import ChaosParser, EmptyParser, GenerateRandomParser, TemplateParser
 from .parser import (
-    ArchiveParser,
-    BrokenParser,
-    MatchingParserInterface,
     MissingParser,
+    BrokenParser,
     Parser,
+    ArchiveParser,
+    MatchingParserInterface,
 )
+from .artificial import EmptyParser, GenerateRandomParser, TemplateParser, ChaosParser
 from .tabular import TabularDataParser
 
 try:
     # these packages are not available without parsing extra, which is ok, if the
     # parsers are only initialized to load their metainfo definitions
-    import bz2
+    import magic
     import gzip
+    import bz2
     import lzma
 
-    import magic
-
     _compressions = {
         b'\x1f\x8b\x08': ('gz', gzip.open),
         b'\x42\x5a\x68': ('bz2', bz2.open),
diff --git a/nomad/parsing/tabular.py b/nomad/parsing/tabular.py
index 38082a6d81..ebfd2a873d 100644
--- a/nomad/parsing/tabular.py
+++ b/nomad/parsing/tabular.py
@@ -15,31 +15,32 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-import json
-import math
 import os
-import re
-from collections.abc import Callable, Iterable, Iterator
 from typing import Any
+from collections.abc import Callable
+from collections.abc import Iterator, Iterable
 
-import numpy as np
 import pandas as pd
+import re
+import math
+import numpy as np
+import json
 import yaml
-from cachetools import LRUCache, cached
+from cachetools import cached, LRUCache
 
 from nomad import utils
+from nomad.parsing import MatchingParser
+from nomad.units import ureg
 from nomad.datamodel.data import ArchiveSection
+from nomad.metainfo import Section, Quantity, Package, Reference, MSection, Property
+from nomad.metainfo.metainfo import MetainfoError, SubSection, MProxy
 from nomad.datamodel.metainfo.annotations import (
     TabularAnnotation,
+    TabularParserAnnotation,
     TabularFileModeEnum,
     TabularMode,
-    TabularParserAnnotation,
 )
-from nomad.metainfo import MSection, Package, Property, Quantity, Reference, Section
-from nomad.metainfo.metainfo import MetainfoError, MProxy, SubSection
 from nomad.metainfo.util import MSubSectionList
-from nomad.parsing import MatchingParser
-from nomad.units import ureg
 from nomad.utils import generate_entry_id
 
 # We define a simple base schema for tabular data. The parser will then generate more
diff --git a/nomad/processing/base.py b/nomad/processing/base.py
index 40a93ce18e..17a6d7d682 100644
--- a/nomad/processing/base.py
+++ b/nomad/processing/base.py
@@ -16,42 +16,42 @@
 # limitations under the License.
 #
 
-import functools
+from typing import Any, NamedTuple
 import logging
-import os
 import time
+import os
 from collections import defaultdict
-from datetime import datetime
-from typing import Any, NamedTuple
-
-import billiard
-from billiard.exceptions import WorkerLostError
 from celery import Celery, Task
-from celery.exceptions import SoftTimeLimitExceeded
+from celery.worker.request import Request
 from celery.signals import (
-    after_setup_logger,
     after_setup_task_logger,
-    celeryd_after_setup,
+    after_setup_logger,
     worker_process_init,
+    celeryd_after_setup,
     worker_process_shutdown,
 )
 from celery.utils import worker_direct
-from celery.worker.request import Request
+from celery.exceptions import SoftTimeLimitExceeded
+import billiard
+from billiard.exceptions import WorkerLostError
 from mongoengine import (
-    DateTimeField,
     Document,
-    IntField,
-    ListField,
     StringField,
+    ListField,
+    DateTimeField,
+    IntField,
     ValidationError,
 )
 from mongoengine.connection import ConnectionFailure
+from datetime import datetime
+import functools
 
-import nomad.patch  # noqa: F401
-from nomad import infrastructure, utils
-from nomad.app.v1.routers.info import statistics
+from nomad import utils, infrastructure
 from nomad.config import config
 from nomad.config.models.config import CELERY_WORKER_ROUTING
+from nomad.app.v1.routers.info import statistics
+import nomad.patch  # noqa: F401
+
 
 if config.logstash.enabled:
     from nomad.utils import structlogging
diff --git a/nomad/processing/data.py b/nomad/processing/data.py
index 706ebd80eb..b75902e2c3 100644
--- a/nomad/processing/data.py
+++ b/nomad/processing/data.py
@@ -29,84 +29,96 @@ entries, and files
 """
 
 import base64
-import copy
-import hashlib
-import os.path
-from collections.abc import Iterable, Iterator, Sequence
-from contextlib import contextmanager
-from datetime import datetime
-from typing import Any, Union, cast
-
-import requests
+from typing import (
+    cast,
+    Any,
+    Union,
+)
+from collections.abc import Iterator, Iterable, Sequence
 import rfc3161ng
-import validators
-from fastapi.exceptions import RequestValidationError
 from mongoengine import (
-    BooleanField,
+    StringField,
     DateTimeField,
+    BooleanField,
+    IntField,
+    ListField,
     DictField,
     EmbeddedDocument,
     EmbeddedDocumentField,
-    IntField,
-    ListField,
-    StringField,
 )
 from pymongo import UpdateOne
 from structlog import wrap_logger
-from structlog.processors import StackInfoRenderer, TimeStamper, format_exc_info
+from contextlib import contextmanager
+import copy
+import os.path
+from datetime import datetime
+import hashlib
+from structlog.processors import StackInfoRenderer, format_exc_info, TimeStamper
+import requests
+from fastapi.exceptions import RequestValidationError
+import validators
 
-from nomad import client, datamodel, infrastructure, metainfo, parsing, search, utils
-from nomad.app.v1.models import (
-    Aggregation,
-    MetadataEditRequest,
-    MetadataPagination,
-    MetadataRequired,
-    TermsAggregation,
-    restrict_query_to_upload,
+from nomad import (
+    utils,
+    infrastructure,
+    search,
+    datamodel,
+    metainfo,
+    parsing,
+    client,
 )
-from nomad.app.v1.routers.metainfo import store_package_definition
-from nomad.archive import (
-    delete_partial_archives_from_mongo,
-    to_json,
-    write_partial_archive_to_mongo,
-)
-from nomad.common import is_safe_relative_path
 from nomad.config import config
-from nomad.config.models.config import Reprocess
+from nomad.common import is_safe_relative_path
 from nomad.config.models.plugins import ExampleUploadEntryPoint
-from nomad.datamodel import (
-    AuthLevel,
-    EditableUserMetadata,
-    EntryArchive,
-    EntryMetadata,
-    MongoEntryMetadata,
-    MongoSystemMetadata,
-    MongoUploadMetadata,
-    ServerContext,
-)
+
 from nomad.datamodel.datamodel import RFC3161Timestamp
 from nomad.files import (
+    RawPathInfo,
     PathObject,
+    UploadFiles,
     PublicUploadFiles,
-    RawPathInfo,
     StagingUploadFiles,
-    UploadFiles,
     create_tmp_dir,
 )
-from nomad.groups import get_group_ids, user_group_exists
+from nomad.groups import user_group_exists, get_group_ids
 from nomad.metainfo.data_type import Datatype, Datetime
-from nomad.normalizing import normalizers
-from nomad.parsing import Parser
-from nomad.parsing.parsers import match_parser, parser_dict
 from nomad.processing.base import (
     Proc,
-    ProcessAlreadyRunning,
-    ProcessFailure,
-    ProcessStatus,
     process,
     process_local,
+    ProcessStatus,
+    ProcessFailure,
+    ProcessAlreadyRunning,
+)
+from nomad.parsing import Parser
+from nomad.parsing.parsers import parser_dict, match_parser
+from nomad.normalizing import normalizers
+from nomad.datamodel import (
+    EntryArchive,
+    EntryMetadata,
+    MongoUploadMetadata,
+    MongoEntryMetadata,
+    MongoSystemMetadata,
+    EditableUserMetadata,
+    AuthLevel,
+    ServerContext,
 )
+from nomad.archive import (
+    write_partial_archive_to_mongo,
+    delete_partial_archives_from_mongo,
+    to_json,
+)
+from nomad.app.v1.models import (
+    MetadataEditRequest,
+    Aggregation,
+    TermsAggregation,
+    MetadataPagination,
+    MetadataRequired,
+    restrict_query_to_upload,
+)
+from nomad.app.v1.routers.metainfo import store_package_definition
 from nomad.search import update_metadata as es_update_metadata
+from nomad.config.models.config import Reprocess
 from nomad.utils.pydantic import CustomErrorWrapper
 
 section_metadata = datamodel.EntryArchive.metadata.name
diff --git a/nomad/search.py b/nomad/search.py
index 0a3785622d..52b8a21d85 100644
--- a/nomad/search.py
+++ b/nomad/search.py
@@ -34,9 +34,13 @@ partially implemented.
 
 import json
 import math
-from collections.abc import Callable, Generator, Iterable, Iterator
 from enum import Enum
-from typing import Any, cast
+from typing import (
+    Any,
+    cast,
+)
+from collections.abc import Callable
+from collections.abc import Generator, Iterable, Iterator
 
 import elasticsearch.helpers
 from elasticsearch.exceptions import RequestError, TransportError
@@ -76,7 +80,12 @@ from nomad.app.v1.models.models import (
     Value,
 )
 from nomad.config import config
-from nomad.datamodel import AuthorReference, EntryArchive, EntryMetadata, UserReference
+from nomad.datamodel import (
+    EntryArchive,
+    EntryMetadata,
+    AuthorReference,
+    UserReference,
+)
 from nomad.groups import MongoUserGroup
 from nomad.metainfo import Datetime, Package, Quantity
 from nomad.metainfo.elasticsearch_extension import (
diff --git a/nomad/utils/exampledata.py b/nomad/utils/exampledata.py
index 4603a39b65..7846e8f9fe 100644
--- a/nomad/utils/exampledata.py
+++ b/nomad/utils/exampledata.py
@@ -16,16 +16,16 @@
 # limitations under the License.
 #
 
-import os
-from datetime import datetime, timedelta
 from typing import Any
+from datetime import datetime, timedelta
+import os
 
-from nomad import files, search
-from nomad.datamodel import EntryArchive, EntryMetadata, Results
-from nomad.datamodel.metainfo import runschema
+from nomad import search, files
+from nomad.datamodel import EntryMetadata, EntryArchive, Results
 from nomad.datamodel.metainfo.workflow import Workflow
-from nomad.normalizing import normalizers
 from nomad.processing.data import mongo_upload_metadata
+from nomad.normalizing import normalizers
+from nomad.datamodel.metainfo import runschema
 
 
 class ExampleData:
@@ -61,8 +61,8 @@ class ExampleData:
         es_nomad_version: str = None,
         archive_nomad_version: str = None,
     ):
-        from nomad import processing as proc
         from tests.test_files import create_test_upload_files
+        from nomad import processing as proc
 
         errors = None
 
@@ -145,8 +145,8 @@ class ExampleData:
         parser_name: str | None = None,
     ):
         """Creates an entry from a mainfile which then gets parsed and normalized."""
-        from nomad import parsing
         from nomad.parsing import parsers
+        from nomad import parsing
 
         assert upload_id in self.uploads, 'Must create the upload first'
 
diff --git a/nomad/utils/json_transformer.py b/nomad/utils/json_transformer.py
index 1a59ace792..4d07d68537 100644
--- a/nomad/utils/json_transformer.py
+++ b/nomad/utils/json_transformer.py
@@ -20,7 +20,7 @@ from typing import Any
 
 import jmespath
 
-from nomad.datamodel.metainfo.annotations import Condition, Rule, Rules
+from nomad.datamodel.metainfo.annotations import Rules, Rule, Condition
 
 
 class Transformer:
diff --git a/nomad/utils/structlogging.py b/nomad/utils/structlogging.py
index 3cd4d85ba4..f0303ee1b5 100644
--- a/nomad/utils/structlogging.py
+++ b/nomad/utils/structlogging.py
@@ -25,22 +25,21 @@ take keyword arguments for structured data. Otherwise `get_logger` can
 be used similar to the standard `logging.getLogger`.
 """
 
-import json
+from typing import cast, Any
 import logging
-import os.path
-import re
 from logging.handlers import WatchedFileHandler
-from typing import Any, cast
-
-import logstash
 import structlog
 from structlog.processors import (
-    JSONRenderer,
     StackInfoRenderer,
-    TimeStamper,
     format_exc_info,
+    TimeStamper,
+    JSONRenderer,
 )
 from structlog.stdlib import LoggerFactory
+import logstash
+import json
+import re
+import os.path
 
 from nomad import utils
 from nomad.config import config
diff --git a/pyproject.toml b/pyproject.toml
index a51ecf825c..698b09fa88 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -154,7 +154,6 @@ indent-width = 4
 select = [
     "E",    # pycodestyle
     "F401", # remove unused import
-    "I001", # sort imports
     "PL",   # pylint
     "UP",   # pyupgrade
     "W",    # pycodestyle
@@ -175,10 +174,9 @@ ignore = [
     "PLR5501", # else-if-used
 ]
 fixable = ["ALL"]
-isort.split-on-trailing-comma = false
 
 [tool.ruff.lint.extend-per-file-ignores]
-"__init__.py" = ["F401", "I001"]
+"__init__.py" = ["F401"]
 "nomad/app/v1/models/graph/utils.py" = [
     "UP007",
 ] # causes pydantic model building errors
diff --git a/tests/app/test_app.py b/tests/app/test_app.py
index 6140f085b9..12a36607c0 100644
--- a/tests/app/test_app.py
+++ b/tests/app/test_app.py
@@ -16,9 +16,8 @@
 # limitations under the License.
 #
 
-import os
-
 import pytest
+import os
 
 from nomad.config import config
 
diff --git a/tests/app/test_dcat.py b/tests/app/test_dcat.py
index 1f0ecd7111..4f08b698f2 100644
--- a/tests/app/test_dcat.py
+++ b/tests/app/test_dcat.py
@@ -16,15 +16,14 @@
 # limitations under the License.
 #
 
-from datetime import datetime
-
 import pytest
+from datetime import datetime
 from fastapi.testclient import TestClient
 
 from nomad.app.dcat.main import app
 from nomad.app.dcat.mapping import Mapping
-from nomad.datamodel import Dataset
 from nomad.datamodel.results import Material, Results
+from nomad.datamodel import Dataset
 from nomad.utils.exampledata import ExampleData
 
 
diff --git a/tests/app/test_h5grove.py b/tests/app/test_h5grove.py
index a5b7446b38..592cb623ec 100644
--- a/tests/app/test_h5grove.py
+++ b/tests/app/test_h5grove.py
@@ -15,16 +15,15 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+import pytest
 import os
-
 import h5py
-import pytest
 from fastapi.testclient import TestClient
 
 from nomad.app import h5grove_app
-from nomad.config import config
-from nomad.files import StagingUploadFiles
 from nomad.utils.exampledata import ExampleData
+from nomad.files import StagingUploadFiles
+from nomad.config import config
 
 
 @pytest.fixture
diff --git a/tests/app/test_optimade.py b/tests/app/test_optimade.py
index 3b95f9173b..a7841ff89a 100644
--- a/tests/app/test_optimade.py
+++ b/tests/app/test_optimade.py
@@ -17,15 +17,15 @@
 #
 
 import json
-
 import pytest
 
+from nomad.processing import Upload
 from nomad import utils
+from nomad.search import search
 from nomad.app.optimade import parse_filter
 from nomad.app.optimade.common import provider_specific_fields
-from nomad.processing import Upload
-from nomad.search import search
 from nomad.utils.exampledata import ExampleData
+
 from tests.fixtures.infrastructure import clear_elastic, clear_raw_files
 
 
diff --git a/tests/app/test_resources.py b/tests/app/test_resources.py
index 4f1b3929fa..e76d787079 100644
--- a/tests/app/test_resources.py
+++ b/tests/app/test_resources.py
@@ -15,22 +15,21 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+import pytest
 import json
-import time
+from fastapi.testclient import TestClient
+import httpx
 from urllib.parse import urlencode
-
+import time
 import dateutil.parser
-import httpx
-import pytest
-from fastapi.testclient import TestClient
 
+from nomad.config import config
 from nomad.app.resources.main import app, remove_mongo
 from nomad.app.resources.routers.resources import (
     aflow_prototypes_db,
-    optimade_providers,
     springer_materials_db,
+    optimade_providers,
 )
-from nomad.config import config
 
 
 def _to_datetime(datetime_str):
diff --git a/tests/app/v1/routers/common.py b/tests/app/v1/routers/common.py
index 20f17289dd..55a522a635 100644
--- a/tests/app/v1/routers/common.py
+++ b/tests/app/v1/routers/common.py
@@ -16,16 +16,17 @@
 # limitations under the License.
 #
 
+import pytest
+from typing import Literal, Any
 import json
 import re
-from typing import Any, Literal
+from devtools import debug
 from urllib.parse import urlencode
 
-import pytest
-from devtools import debug
+from nomad.utils import deep_get
 
 from nomad.datamodel import results
-from nomad.utils import deep_get
+
 from tests.utils import assert_at_least, assert_url_query_args, build_url
 
 n_code_names = results.Simulation.program_name.a_elasticsearch[
diff --git a/tests/app/v1/routers/test_auth.py b/tests/app/v1/routers/test_auth.py
index 2c5e3e67c8..c814260a3c 100644
--- a/tests/app/v1/routers/test_auth.py
+++ b/tests/app/v1/routers/test_auth.py
@@ -16,9 +16,8 @@
 # limitations under the License.
 #
 
-from urllib.parse import urlencode
-
 import pytest
+from urllib.parse import urlencode
 
 
 def perform_get_token_test(client, http_method, status_code, username, password):
diff --git a/tests/app/v1/routers/test_datasets.py b/tests/app/v1/routers/test_datasets.py
index 7153ee770a..36cd3de91c 100644
--- a/tests/app/v1/routers/test_datasets.py
+++ b/tests/app/v1/routers/test_datasets.py
@@ -16,16 +16,16 @@
 # limitations under the License.
 #
 
-from datetime import datetime
-from urllib.parse import urlencode
-
 import pytest
+from urllib.parse import urlencode
+from datetime import datetime
 
-from nomad import processing
-from nomad.app.v1.models import Any_, Query
 from nomad.datamodel import Dataset
+from nomad import processing
 from nomad.search import search
+from nomad.app.v1.models import Query, Any_
 from nomad.utils.exampledata import ExampleData
+
 from tests.fixtures.users import admin_user_id
 
 from .common import assert_response
diff --git a/tests/app/v1/routers/test_entries.py b/tests/app/v1/routers/test_entries.py
index 36985eb08f..fbdfaaae17 100644
--- a/tests/app/v1/routers/test_entries.py
+++ b/tests/app/v1/routers/test_entries.py
@@ -16,37 +16,37 @@
 # limitations under the License.
 #
 
+import pytest
+from urllib.parse import urlencode
+import zipfile
 import io
 import json
-import zipfile
-from urllib.parse import urlencode
-
-import pytest
 
 from nomad.metainfo.elasticsearch_extension import entry_type, schema_separator
 from nomad.utils.exampledata import ExampleData
-from tests.test_files import append_raw_files, example_mainfile_contents  # noqa: F401
+
+from tests.test_files import example_mainfile_contents, append_raw_files  # noqa: F401
 from tests.variables import python_schema_name
 
 from .common import (
     aggregation_exclude_from_search_test_parameters,
-    aggregation_test_parameters,
-    aggregation_test_parameters_default,
-    assert_aggregation_response,
-    assert_aggregations,
+    assert_response,
     assert_base_metadata_response,
-    assert_browser_download_headers,
-    assert_metadata_response,
-    assert_pagination,
     assert_query_response,
+    assert_metadata_response,
     assert_required,
-    assert_response,
+    assert_aggregations,
+    assert_pagination,
+    assert_browser_download_headers,
+    post_query_test_parameters,
     get_query_test_parameters,
+    perform_owner_test,
     owner_test_parameters,
     pagination_test_parameters,
+    aggregation_test_parameters,
+    aggregation_test_parameters_default,
+    assert_aggregation_response,
     perform_entries_metadata_test,
-    perform_owner_test,
-    post_query_test_parameters,
 )
 
 """
diff --git a/tests/app/v1/routers/test_entries_archive_edit.py b/tests/app/v1/routers/test_entries_archive_edit.py
index ba9903ebde..8a2e90107d 100644
--- a/tests/app/v1/routers/test_entries_archive_edit.py
+++ b/tests/app/v1/routers/test_entries_archive_edit.py
@@ -17,7 +17,6 @@
 #
 
 import json
-
 import pytest
 
 from nomad.datamodel.datamodel import EntryArchive, EntryMetadata
diff --git a/tests/app/v1/routers/test_entries_edit.py b/tests/app/v1/routers/test_entries_edit.py
index 1d3db4a4df..cd793d3fb4 100644
--- a/tests/app/v1/routers/test_entries_edit.py
+++ b/tests/app/v1/routers/test_entries_edit.py
@@ -16,22 +16,22 @@
 # limitations under the License.
 #
 
-from datetime import datetime
-
 import pytest
+from datetime import datetime
 
-from nomad import processing as proc
-from nomad import utils
-from nomad.datamodel import Dataset
 from nomad.search import search
+from nomad.datamodel import Dataset
+from nomad import processing as proc, utils
 from nomad.utils.exampledata import ExampleData
+
 from tests.app.v1.routers.common import assert_response
 from tests.processing.test_edit_metadata import (
-    all_admin_entry_metadata,
-    all_coauthor_entry_metadata,
     assert_metadata_edited,
+    all_coauthor_entry_metadata,
+    all_admin_entry_metadata,
 )
 
+
 logger = utils.get_logger(__name__)
 
 
diff --git a/tests/app/v1/routers/test_federation.py b/tests/app/v1/routers/test_federation.py
index 3b8d8284b5..cb990557fa 100644
--- a/tests/app/v1/routers/test_federation.py
+++ b/tests/app/v1/routers/test_federation.py
@@ -1,10 +1,9 @@
+import requests
 import json
+import pytest
+from copy import deepcopy
 import logging
 import zlib
-from copy import deepcopy
-
-import pytest
-import requests
 
 from nomad.config import config
 from nomad.utils.structlogging import LogstashFormatter
diff --git a/tests/app/v1/routers/test_graph.py b/tests/app/v1/routers/test_graph.py
index 5a12924f66..38f0670da8 100644
--- a/tests/app/v1/routers/test_graph.py
+++ b/tests/app/v1/routers/test_graph.py
@@ -18,11 +18,11 @@
 
 import pytest
 
-from nomad.datamodel import EntryArchive
-from nomad.datamodel.metainfo import SCHEMA_IMPORT_ERROR, simulationworkflowschema
 from nomad.graph.graph_reader import EntryReader, Token
+from nomad.datamodel import EntryArchive
 from nomad.utils.exampledata import ExampleData
 from tests.archive.test_archive import assert_dict
+from nomad.datamodel.metainfo import simulationworkflowschema, SCHEMA_IMPORT_ERROR
 
 # try:
 #     from rich.pretty import pprint
diff --git a/tests/app/v1/routers/test_materials.py b/tests/app/v1/routers/test_materials.py
index a1e998720b..8490f39724 100644
--- a/tests/app/v1/routers/test_materials.py
+++ b/tests/app/v1/routers/test_materials.py
@@ -16,27 +16,27 @@
 # limitations under the License.
 #
 
-from urllib.parse import urlencode
-
 import pytest
+from urllib.parse import urlencode
 
-from nomad.datamodel import results
 from nomad.metainfo.elasticsearch_extension import material_entry_type
+from nomad.datamodel import results
+
 from tests.test_files import example_mainfile_contents  # noqa: F401
 
 from .common import (
     aggregation_exclude_from_search_test_parameters,
-    aggregation_test_parameters_default,
-    assert_aggregation_response,
-    assert_metadata_response,
     assert_pagination,
+    assert_metadata_response,
     assert_required,
-    get_query_test_parameters,
-    owner_test_parameters,
-    pagination_test_parameters,
     perform_metadata_test,
     perform_owner_test,
+    owner_test_parameters,
     post_query_test_parameters,
+    get_query_test_parameters,
+    pagination_test_parameters,
+    aggregation_test_parameters_default,
+    assert_aggregation_response,
 )
 
 """
diff --git a/tests/app/v1/routers/test_metainfo.py b/tests/app/v1/routers/test_metainfo.py
index a34cb5be58..8d4e2e78a4 100644
--- a/tests/app/v1/routers/test_metainfo.py
+++ b/tests/app/v1/routers/test_metainfo.py
@@ -21,11 +21,11 @@ from zipfile import ZipFile
 
 import pytest
 
-from nomad.app.v1.routers.metainfo import store_package_definition
 from nomad.config import config
-from nomad.datamodel import ClientContext, EntryArchive
-from nomad.metainfo import MetainfoReferenceError, MSection
-from nomad.utils import create_uuid, generate_entry_id
+from nomad.app.v1.routers.metainfo import store_package_definition
+from nomad.datamodel import EntryArchive, ClientContext
+from nomad.metainfo import MSection, MetainfoReferenceError
+from nomad.utils import generate_entry_id, create_uuid
 from tests.processing.test_data import run_processing
 
 
diff --git a/tests/app/v1/routers/test_suggestions.py b/tests/app/v1/routers/test_suggestions.py
index 093c20ed7e..937aad115a 100644
--- a/tests/app/v1/routers/test_suggestions.py
+++ b/tests/app/v1/routers/test_suggestions.py
@@ -27,10 +27,8 @@ to assert for certain aspects in the responses.
 """
 
 import pytest
-
 from nomad.metainfo.elasticsearch_extension import entry_type
 from nomad.utils.exampledata import ExampleData
-
 from .common import assert_response
 
 
diff --git a/tests/app/v1/routers/test_systems.py b/tests/app/v1/routers/test_systems.py
index 6b76eb777c..debb8bdef0 100644
--- a/tests/app/v1/routers/test_systems.py
+++ b/tests/app/v1/routers/test_systems.py
@@ -19,21 +19,21 @@
 import re
 from io import BytesIO, StringIO
 
-import ase.io
-import numpy as np
 import pytest
+import numpy as np
+import ase.io
 from ase import Atoms as ASEAtoms
 
-from nomad.app.v1.routers.systems import FormatFeature, WrapModeEnum, format_map
+from nomad.units import ureg
+from nomad.normalizing.common import ase_atoms_from_nomad_atoms
 from nomad.datamodel.datamodel import EntryArchive
+from nomad.datamodel.results import Results, Material, System
 from nomad.datamodel.metainfo import runschema
 from nomad.datamodel.metainfo.system import Atoms
-from nomad.datamodel.results import Material, Results, System
-from nomad.normalizing.common import ase_atoms_from_nomad_atoms
-from nomad.units import ureg
 from nomad.utils.exampledata import ExampleData
+from nomad.app.v1.routers.systems import format_map, FormatFeature, WrapModeEnum
 
-from .common import assert_browser_download_headers, assert_response
+from .common import assert_response, assert_browser_download_headers
 
 
 def ase_atoms(content, format):
diff --git a/tests/app/v1/routers/uploads/test_basic_uploads.py b/tests/app/v1/routers/uploads/test_basic_uploads.py
index a31f7ca2c2..6546dd8b7d 100644
--- a/tests/app/v1/routers/uploads/test_basic_uploads.py
+++ b/tests/app/v1/routers/uploads/test_basic_uploads.py
@@ -18,12 +18,12 @@
 
 import io
 import os
-import tempfile
 import time
 import zipfile
-from collections.abc import Iterable
 from datetime import datetime
+import tempfile
 from typing import Any
+from collections.abc import Iterable
 
 import pytest
 import requests
@@ -41,15 +41,15 @@ from tests.app.v1.routers.common import (
     assert_response,
     perform_get,
 )
-from tests.config.models.test_plugins import (
-    mock_example_upload_entry_point,
-    mock_plugin_package,
-)
 from tests.processing.test_edit_metadata import (
     all_admin_metadata,
     all_coauthor_metadata,
     assert_metadata_edited,
 )
+from tests.config.models.test_plugins import (
+    mock_plugin_package,
+    mock_example_upload_entry_point,
+)
 from tests.test_files import (
     assert_upload_files,
     empty_file,
diff --git a/tests/app/v1/test_models.py b/tests/app/v1/test_models.py
index 9210f75d21..7328abd093 100644
--- a/tests/app/v1/test_models.py
+++ b/tests/app/v1/test_models.py
@@ -17,16 +17,14 @@
 #
 
 from __future__ import annotations
-
-import sys
-
 import pytest
-import yaml
 from pydantic import BaseModel, Field, ValidationError
+import yaml
+import sys
 
+from nomad.utils import strip
 from nomad.app.v1.models.graph import GraphRequest
 from nomad.app.v1.models.graph.utils import generate_request_model, mapped
-from nomad.utils import strip
 
 
 @pytest.fixture()
diff --git a/tests/app/v1/test_utils.py b/tests/app/v1/test_utils.py
index 5ed2c55176..ba6fd19fcf 100644
--- a/tests/app/v1/test_utils.py
+++ b/tests/app/v1/test_utils.py
@@ -1,5 +1,4 @@
 import pytest
-
 from nomad.app.v1.utils import get_query_keys
 
 
diff --git a/tests/archive/test_archive.py b/tests/archive/test_archive.py
index 0c35c9b5b0..84e133d29a 100644
--- a/tests/archive/test_archive.py
+++ b/tests/archive/test_archive.py
@@ -15,42 +15,42 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-import json
-import os.path
 from datetime import datetime
-from io import BytesIO
 from typing import Any
-
-import msgpack
 import pytest
+import msgpack
+from io import BytesIO
+import os.path
+import json
+
 import yaml
 
 from nomad import utils
-from nomad.archive import (
-    ArchiveQueryError,
-    RequiredReader,
-    compute_required_with_referenced,
-    create_partial_archive,
-    query_archive,
-    read_archive,
-    read_partial_archive_from_mongo,
-    read_partial_archives_from_mongo,
-    write_archive,
-    write_partial_archive_to_mongo,
-)
-from nomad.archive.converter import convert_archive
-from nomad.archive.storage import _decode, _entries_per_block, to_json
 from nomad.config import config
-from nomad.datamodel import ClientContext, EntryArchive
+from nomad.archive.converter import convert_archive
 from nomad.metainfo import (
-    Context,
-    MetainfoError,
-    MProxy,
     MSection,
     Quantity,
-    QuantityReference,
     Reference,
     SubSection,
+    QuantityReference,
+    MetainfoError,
+    Context,
+    MProxy,
+)
+from nomad.datamodel import EntryArchive, ClientContext
+from nomad.archive.storage import _decode, _entries_per_block, to_json
+from nomad.archive import (
+    write_archive,
+    read_archive,
+    ArchiveQueryError,
+    query_archive,
+    write_partial_archive_to_mongo,
+    read_partial_archive_from_mongo,
+    read_partial_archives_from_mongo,
+    create_partial_archive,
+    compute_required_with_referenced,
+    RequiredReader,
 )
 from nomad.utils.exampledata import ExampleData
 
diff --git a/tests/archive/test_storage.py b/tests/archive/test_storage.py
index 6ce614b53e..4a2de3dbf6 100644
--- a/tests/archive/test_storage.py
+++ b/tests/archive/test_storage.py
@@ -5,7 +5,10 @@ import msgpack
 import msgspec.msgpack
 import pytest
 
-from nomad.archive.storage_v2 import ArchiveDict, ArchiveList
+from nomad.archive.storage_v2 import (
+    ArchiveList,
+    ArchiveDict,
+)
 
 
 def generate_random_json(depth=10, width=4, simple=False):
diff --git a/tests/config/models/test_plugins.py b/tests/config/models/test_plugins.py
index 7d702f33e7..a7d2f42ebb 100644
--- a/tests/config/models/test_plugins.py
+++ b/tests/config/models/test_plugins.py
@@ -18,13 +18,12 @@
 
 import os
 import tempfile
-
 import pytest
-
 from nomad.config import Config
+
 from nomad.config.models.plugins import (
-    APIEntryPoint,
     ExampleUploadEntryPoint,
+    APIEntryPoint,
     UploadResource,
 )
 
diff --git a/tests/config/models/test_ui.py b/tests/config/models/test_ui.py
index 606e9af0fb..ce0626c7c8 100644
--- a/tests/config/models/test_ui.py
+++ b/tests/config/models/test_ui.py
@@ -22,13 +22,13 @@ from nomad.config.models.ui import (
     App,
     Axis,
     AxisQuantity,
-    Column,
     Columns,
+    Column,
+    Rows,
     RowActions,
-    RowActionURL,
     RowDetails,
-    Rows,
     RowSelection,
+    RowActionURL,
 )
 
 
diff --git a/tests/conftest.py b/tests/conftest.py
index a72d3e2687..66c1faa36e 100644
--- a/tests/conftest.py
+++ b/tests/conftest.py
@@ -16,17 +16,17 @@
 # limitations under the License.
 #
 import builtins
-import logging
-import os
-import socketserver
-import tempfile
+from pathlib import Path
+from io import StringIO
+import pytest
 import time
+import os
+import logging
 import warnings
-from io import StringIO
-from pathlib import Path
+import tempfile
 
-import pytest
 from fastapi.testclient import TestClient
+import socketserver
 
 from nomad.config import config
 from nomad.config.models.plugins import Schema, add_plugin, remove_plugin
@@ -35,8 +35,8 @@ from nomad.config.models.plugins import Schema, add_plugin, remove_plugin
 config.logstash.enabled = False  # noqa: E402  # this must be set *before* the other modules are imported
 
 from nomad import utils
-from nomad.app.main import app
 from nomad.utils import structlogging
+from nomad.app.main import app
 
 # Set up pytest to pass control to the debugger on an exception.
 if os.getenv('_PYTEST_RAISE', '0') != '0':
@@ -68,8 +68,8 @@ pytest_plugins = (
 )
 
 
-import structlog
 from structlog.testing import LogCapture
+import structlog
 
 
 @pytest.fixture(scope='function')
diff --git a/tests/data/schemas/nomadschemaexample/schema.py b/tests/data/schemas/nomadschemaexample/schema.py
index 2f076b6d57..2bf501f006 100644
--- a/tests/data/schemas/nomadschemaexample/schema.py
+++ b/tests/data/schemas/nomadschemaexample/schema.py
@@ -1,17 +1,16 @@
-import numpy as np
-
-from nomad.datamodel.data import EntryData
-from nomad.datamodel.metainfo.annotations import ELNAnnotation, ELNComponentEnum
 from nomad.metainfo import (
-    Datetime,
-    MEnum,
-    MSection,
-    Package,
     Quantity,
+    Package,
     Section,
-    SectionProxy,
+    MEnum,
+    Datetime,
+    MSection,
     SubSection,
+    SectionProxy,
 )
+from nomad.datamodel.data import EntryData
+from nomad.datamodel.metainfo.annotations import ELNAnnotation, ELNComponentEnum
+import numpy as np
 
 m_package = Package()
 
diff --git a/tests/datamodel/metainfo/test_annotations.py b/tests/datamodel/metainfo/test_annotations.py
index fb1208394b..2d0f472f42 100644
--- a/tests/datamodel/metainfo/test_annotations.py
+++ b/tests/datamodel/metainfo/test_annotations.py
@@ -19,13 +19,13 @@
 import pytest
 from pydantic import ValidationError
 
+from nomad.metainfo import Quantity
 from nomad.datamodel.metainfo.annotations import (
-    ELNAnnotation,
     PlotAnnotation,
+    ELNAnnotation,
     PlotlyGraphObjectAnnotation,
 )
 from nomad.datamodel.metainfo.plot import PlotlyError
-from nomad.metainfo import Quantity
 
 
 @pytest.mark.parametrize(
diff --git a/tests/datamodel/metainfo/test_plotly.py b/tests/datamodel/metainfo/test_plotly.py
index 038cffbd0e..63d6daf217 100644
--- a/tests/datamodel/metainfo/test_plotly.py
+++ b/tests/datamodel/metainfo/test_plotly.py
@@ -1,5 +1,4 @@
 import json
-
 from tests.normalizing.conftest import run_processing
 
 
diff --git a/tests/datamodel/metainfo/test_substance.py b/tests/datamodel/metainfo/test_substance.py
index 6b30e54d32..78c63e39a5 100644
--- a/tests/datamodel/metainfo/test_substance.py
+++ b/tests/datamodel/metainfo/test_substance.py
@@ -16,13 +16,12 @@
 # limitations under the License.
 #
 
-import json
 from collections.abc import Iterable
-
 import pytest
+import json
 
-from nomad.datamodel.metainfo.basesections import v1 as basesections
 from tests.normalizing.conftest import run_processing
+from nomad.datamodel.metainfo.basesections import v1 as basesections
 
 
 class MockResponse:
diff --git a/tests/datamodel/test_context.py b/tests/datamodel/test_context.py
index f8250df5fb..189753fec5 100644
--- a/tests/datamodel/test_context.py
+++ b/tests/datamodel/test_context.py
@@ -16,20 +16,20 @@
 # limitations under the License.
 #
 
-import json
 import os
-import re
 
 import pytest
+import json
+import re
 
-from nomad import files, processing, utils
+from nomad import utils, files, processing
+from nomad.metainfo.metainfo import MSection
+from nomad.parsing.parser import ArchiveParser
 from nomad.datamodel import Context
-from nomad.datamodel.context import ClientContext, ServerContext, parse_path
+from nomad.datamodel.context import ServerContext, ClientContext, parse_path
 from nomad.datamodel.datamodel import EntryArchive, EntryMetadata
+from nomad.processing import Upload, Entry, ProcessStatus
 from nomad.datamodel.metainfo import runschema
-from nomad.metainfo.metainfo import MSection
-from nomad.parsing.parser import ArchiveParser
-from nomad.processing import Entry, ProcessStatus, Upload
 
 
 @pytest.fixture(scope='module')
diff --git a/tests/datamodel/test_datamodel.py b/tests/datamodel/test_datamodel.py
index e0b263d41e..306f2ad7c9 100644
--- a/tests/datamodel/test_datamodel.py
+++ b/tests/datamodel/test_datamodel.py
@@ -21,12 +21,11 @@ A generator for random test calculations.
 """
 
 import random
-
-import pytest
 from essential_generators import DocumentGenerator
+import pytest
 
-from nomad.datamodel.metainfo import SCHEMA_IMPORT_ERROR, runschema
 from nomad.parsing.parsers import parser_dict
+from nomad.datamodel.metainfo import runschema, SCHEMA_IMPORT_ERROR
 
 number_of = 20
 
@@ -73,7 +72,7 @@ low_numbers_for_geometries = [1, 2, 2, 3, 3, 4, 4]
 @pytest.mark.skipif(runschema is None, reason=SCHEMA_IMPORT_ERROR)
 def test_common_metainfo():
     from runschema.run import Run
-    from runschema.system import Atoms, System
+    from runschema.system import System, Atoms
 
     run = Run()
     system = run.m_create(System)
@@ -84,8 +83,8 @@ def test_common_metainfo():
 
 @pytest.mark.skipif(runschema is None, reason=SCHEMA_IMPORT_ERROR)
 def test_vasp_metainfo():
-    from electronicparsers.vasp.metainfo import vasp  # noqa: F401
     from runschema.run import Run
+    from electronicparsers.vasp.metainfo import vasp  # noqa: F401
 
     run = Run()
     assert 'vasp_src_date' in run.m_def.all_quantities
diff --git a/tests/datamodel/test_hdf5.py b/tests/datamodel/test_hdf5.py
index 427b20ccd2..bbdb88e143 100644
--- a/tests/datamodel/test_hdf5.py
+++ b/tests/datamodel/test_hdf5.py
@@ -16,18 +16,19 @@
 # limitations under the License.
 #
 
+import pytest
+import numpy as np
 import os
-
 import h5py
-import numpy as np
-import pytest
 
 from nomad import files, processing
-from nomad.datamodel import EntryArchive, EntryData, EntryMetadata
+from nomad.datamodel import EntryData, EntryArchive, EntryMetadata
 from nomad.datamodel.context import ServerContext
-from nomad.datamodel.hdf5 import HDF5Dataset, HDF5Reference
 from nomad.metainfo import Quantity
 
+from nomad.datamodel.hdf5 import HDF5Reference, HDF5Dataset
+
+
 external_file = 'tests/data/datamodel/context.h5'
 
 
diff --git a/tests/datamodel/test_metadata.py b/tests/datamodel/test_metadata.py
index 0d6c40fd9f..09cc397ba5 100644
--- a/tests/datamodel/test_metadata.py
+++ b/tests/datamodel/test_metadata.py
@@ -16,16 +16,15 @@
 # limitations under the License.
 #
 
-from datetime import datetime
-
-import numpy as np
 import pytest
+import numpy as np
+from datetime import datetime
 import pytz
 
-from nomad.datamodel import EntryData
-from nomad.datamodel.datamodel import EntryArchive, EntryMetadata, SearchableQuantity
-from nomad.metainfo import Datetime, MEnum, MSection, Quantity, SubSection
+from nomad.metainfo import Quantity, MSection, SubSection, Datetime, MEnum
+from nomad.datamodel.datamodel import EntryMetadata, SearchableQuantity, EntryArchive
 from nomad.metainfo.elasticsearch_extension import schema_separator
+from nomad.datamodel import EntryData
 from tests.variables import python_schema_name
 
 
diff --git a/tests/datamodel/test_schema.py b/tests/datamodel/test_schema.py
index c06f260122..17ccdea3ab 100644
--- a/tests/datamodel/test_schema.py
+++ b/tests/datamodel/test_schema.py
@@ -17,21 +17,21 @@
 #
 
 import os.path
-
 import pytest
 
+from nomad.metainfo import MetainfoError
 from nomad.datamodel.context import ServerContext
-from nomad.datamodel.data import AuthorReference, Query, UserReference
 from nomad.datamodel.datamodel import EntryArchive, EntryMetadata
-from nomad.datamodel.metainfo.annotations import valid_eln_components, valid_eln_types
-from nomad.metainfo import MetainfoError
+from nomad.datamodel.data import UserReference, AuthorReference, Query
+from nomad.datamodel.metainfo.annotations import valid_eln_types, valid_eln_components
 from nomad.metainfo.data_type import Datatype
 from nomad.parsing.parser import ArchiveParser
 from nomad.processing.data import Upload
 from nomad.utils import get_logger, strip
-from tests.metainfo.test_yaml_schema import yaml_to_package
+
 from tests.normalizing.conftest import run_normalize
 from tests.test_files import create_test_upload_files
+from tests.metainfo.test_yaml_schema import yaml_to_package
 
 
 def test_schema_processing(raw_files_function, no_warn):
diff --git a/tests/examples/test_archive_query.py b/tests/examples/test_archive_query.py
index 5cad68b2d0..86c0eaf844 100644
--- a/tests/examples/test_archive_query.py
+++ b/tests/examples/test_archive_query.py
@@ -16,13 +16,14 @@
 # limitations under the License.
 #
 
-import importlib
 import os.path
+import importlib
 import sys
 
 from nomad.utils.exampledata import ExampleData
-from tests.normalizing.conftest import run_normalize
+
 from tests.parsing.test_parsing import run_singular_parser
+from tests.normalizing.conftest import run_normalize
 from tests.test_client import async_api_v1  # noqa: F401
 
 
diff --git a/tests/examples/test_docs.py b/tests/examples/test_docs.py
index ef1a43720d..e8b737a9fb 100644
--- a/tests/examples/test_docs.py
+++ b/tests/examples/test_docs.py
@@ -1,12 +1,12 @@
+import yaml
 import json
 import os.path
 
-import yaml
-
 from nomad.metainfo import Package
 from nomad.units import ureg
-from tests.normalizing.conftest import run_normalize
+
 from tests.parsing.test_parsing import run_singular_parser
+from tests.normalizing.conftest import run_normalize
 
 
 def _file(path):
diff --git a/tests/examples/test_metainfo.py b/tests/examples/test_metainfo.py
index 7392808678..3c42051e03 100644
--- a/tests/examples/test_metainfo.py
+++ b/tests/examples/test_metainfo.py
@@ -1,7 +1,7 @@
-import os
 import runpy
-
 import pytest
+import os
+
 
 prefix = os.path.join(__file__, '../../../examples/metainfo')
 
diff --git a/tests/fixtures/data.py b/tests/fixtures/data.py
index d5000b0c38..a041704c35 100644
--- a/tests/fixtures/data.py
+++ b/tests/fixtures/data.py
@@ -17,6 +17,7 @@ from nomad.datamodel.datamodel import SearchableQuantity
 from nomad.metainfo.elasticsearch_extension import schema_separator
 from nomad.processing import ProcessStatus
 from nomad.utils.exampledata import ExampleData
+from tests.variables import python_schema_name, yaml_schema_name, yaml_schema_root
 from tests.normalizing.conftest import run_normalize
 from tests.parsing import test_parsing
 from tests.processing import test_data as test_processing
@@ -26,7 +27,6 @@ from tests.utils import (
     create_template_upload_file,
     set_upload_entry_metadata,
 )
-from tests.variables import python_schema_name, yaml_schema_name, yaml_schema_root
 
 
 @pytest.fixture(scope='session')
diff --git a/tests/fixtures/group_uploads.py b/tests/fixtures/group_uploads.py
index 290b2b6d0b..b0d8109c89 100644
--- a/tests/fixtures/group_uploads.py
+++ b/tests/fixtures/group_uploads.py
@@ -11,7 +11,6 @@ Values:
 """
 
 from collections.abc import Sequence
-
 import pytest
 
 from nomad.utils.exampledata import ExampleData
diff --git a/tests/graph/test_definition_reader.py b/tests/graph/test_definition_reader.py
index 354f9fc00e..f67385897f 100644
--- a/tests/graph/test_definition_reader.py
+++ b/tests/graph/test_definition_reader.py
@@ -21,8 +21,8 @@ import pytest
 
 from nomad.graph.graph_reader import DefinitionReader
 from nomad.metainfo import (
-    MSection,
     Package,
+    MSection,
     Quantity,
     Reference,
     SectionProxy,
diff --git a/tests/graph/test_graph_reader.py b/tests/graph/test_graph_reader.py
index d6f9d75cd2..ebcdc887ca 100644
--- a/tests/graph/test_graph_reader.py
+++ b/tests/graph/test_graph_reader.py
@@ -22,17 +22,17 @@ from datetime import datetime
 import pytest
 import yaml
 
-from nomad.datamodel import EntryArchive
 from nomad.graph.graph_reader import (
     EntryReader,
+    UploadReader,
+    UserReader,
     FileSystemReader,
-    GeneralReader,
     MongoReader,
+    GeneralReader,
     Token,
-    UploadReader,
-    UserReader,
 )
 from nomad.graph.lazy_wrapper import LazyWrapper
+from nomad.datamodel import EntryArchive
 from nomad.utils.exampledata import ExampleData
 from tests.normalizing.conftest import simulationworkflowschema
 
diff --git a/tests/metainfo/test_attributes.py b/tests/metainfo/test_attributes.py
index 32db3438de..13edf2b9d0 100644
--- a/tests/metainfo/test_attributes.py
+++ b/tests/metainfo/test_attributes.py
@@ -18,20 +18,20 @@
 
 import datetime
 
-import numpy as np
 import pytest
+import numpy as np
 import pytz
 
 from nomad.metainfo import (
-    Attribute,
-    Datetime,
-    MEnum,
     MSection,
     Quantity,
+    Attribute,
+    MEnum,
     Reference,
+    Datetime,
     Section,
 )
-from nomad.metainfo.metainfo import Definition, MQuantity
+from nomad.metainfo.metainfo import MQuantity, Definition
 from nomad.metainfo.util import validate_allowable_unit
 from nomad.units import ureg
 
diff --git a/tests/metainfo/test_data_frames.py b/tests/metainfo/test_data_frames.py
index 9f1ee88851..b32aff0867 100644
--- a/tests/metainfo/test_data_frames.py
+++ b/tests/metainfo/test_data_frames.py
@@ -2,13 +2,22 @@ import datetime
 
 import numpy as np
 import pandas as pd
-import pytest
 import xarray as xr
+import pytest
 
-from nomad.metainfo.data_frames import DataFrameTemplate, ValuesTemplate
-from nomad.metainfo.metainfo import Datetime, MEnum, MSection, Package
+from nomad.metainfo.metainfo import (
+    MSection,
+    Package,
+    MEnum,
+    Datetime,
+)
+from nomad.metainfo.data_frames import (
+    ValuesTemplate,
+    DataFrameTemplate,
+)
 from nomad.units import ureg
 
+
 m_package = Package()
 
 # Values
diff --git a/tests/metainfo/test_elasticsearch_extension.py b/tests/metainfo/test_elasticsearch_extension.py
index e9aafb1575..6001560fb8 100644
--- a/tests/metainfo/test_elasticsearch_extension.py
+++ b/tests/metainfo/test_elasticsearch_extension.py
@@ -17,28 +17,28 @@
 #
 
 from datetime import date
-
-import numpy as np
 import pytest
+import numpy as np
 from elasticsearch_dsl import Keyword
 
 from nomad.config import config
+from nomad.utils.exampledata import ExampleData
 from nomad.datamodel.datamodel import SearchableQuantity
-from nomad.metainfo import Datetime, MEnum, MSection, Quantity, SubSection, Unit
+from nomad.metainfo import MSection, Quantity, SubSection, Datetime, Unit, MEnum
 from nomad.metainfo.elasticsearch_extension import (
     Elasticsearch,
     create_indices,
-    create_searchable_quantity,
-    entry_index,
-    entry_type,
     index_entries_with_materials,
+    entry_type,
+    material_type,
     material_entry_type,
+    entry_index,
     material_index,
-    material_type,
+    create_searchable_quantity,
 )
-from nomad.utils.exampledata import ExampleData
-from tests.app.v1.routers.common import perform_quantity_search_test
+
 from tests.fixtures.infrastructure import clear_elastic_infra
+from tests.app.v1.routers.common import perform_quantity_search_test
 
 
 @pytest.fixture(scope='module')
diff --git a/tests/metainfo/test_full_storage_quantity.py b/tests/metainfo/test_full_storage_quantity.py
index e08520aad6..9acb42dcf1 100644
--- a/tests/metainfo/test_full_storage_quantity.py
+++ b/tests/metainfo/test_full_storage_quantity.py
@@ -18,12 +18,12 @@
 import pytest
 
 from nomad.metainfo import (
-    Attribute,
-    MetainfoError,
     MSection,
     Quantity,
-    Section,
+    Attribute,
     SubSection,
+    MetainfoError,
+    Section,
 )
 from nomad.metainfo.util import MQuantity
 from nomad.units import ureg
diff --git a/tests/metainfo/test_hash_id.py b/tests/metainfo/test_hash_id.py
index 6e2b678431..3c3e44bb2e 100644
--- a/tests/metainfo/test_hash_id.py
+++ b/tests/metainfo/test_hash_id.py
@@ -1,4 +1,4 @@
-from nomad.metainfo import MEnum, MSection, Quantity
+from nomad.metainfo import Quantity, MSection, MEnum
 
 
 def simple_quantity():
diff --git a/tests/metainfo/test_metainfo.py b/tests/metainfo/test_metainfo.py
index 394d44b588..ea08bba6ca 100644
--- a/tests/metainfo/test_metainfo.py
+++ b/tests/metainfo/test_metainfo.py
@@ -20,33 +20,40 @@
 # in-depth tests in test_* files of the same module.
 
 from math import isnan
-
+import pytest
 import numpy as np
 import pandas as pd
 import pint.quantity
-import pytest
 
-from nomad.metainfo import (
-    Annotation,
-    AnnotationModel,
-    DefinitionAnnotation,
-    SectionAnnotation,
-)
-from nomad.metainfo.example import SCC, Parsing, Run, System, SystemHash, VaspRun
-from nomad.metainfo.example import m_package as example_package
 from nomad.metainfo.metainfo import (
-    Definition,
-    DeriveError,
-    MCategory,
-    MetainfoError,
     MSection,
-    Package,
-    Quantity,
+    MCategory,
     Section,
+    Quantity,
     SubSection,
+    Definition,
+    Package,
+    DeriveError,
+    MetainfoError,
     derived,
 )
+from nomad.metainfo import (
+    Annotation,
+    DefinitionAnnotation,
+    SectionAnnotation,
+    AnnotationModel,
+)
+from nomad.metainfo.example import (
+    Run,
+    VaspRun,
+    System,
+    SystemHash,
+    Parsing,
+    SCC,
+    m_package as example_package,
+)
 from nomad.units import ureg
+
 from tests.metainfo import MTypes
 
 
diff --git a/tests/metainfo/test_mongodb_extension.py b/tests/metainfo/test_mongodb_extension.py
index ff1687b766..3f03c65a6d 100644
--- a/tests/metainfo/test_mongodb_extension.py
+++ b/tests/metainfo/test_mongodb_extension.py
@@ -17,11 +17,9 @@
 #
 
 import json
-
 import numpy as np
-
-from nomad.metainfo import MSection, Quantity, Section, SubSection
-from nomad.metainfo.mongoengine_extension import Mongo, MongoDocument
+from nomad.metainfo import MSection, Section, Quantity, SubSection
+from nomad.metainfo.mongoengine_extension import MongoDocument, Mongo
 
 
 class B(MSection):
diff --git a/tests/metainfo/test_package.py b/tests/metainfo/test_package.py
index 583ccb35e6..75d70c3d2c 100644
--- a/tests/metainfo/test_package.py
+++ b/tests/metainfo/test_package.py
@@ -16,7 +16,7 @@
 # limitations under the License.
 #
 
-from nomad.metainfo import MSection, Package
+from nomad.metainfo import Package, MSection
 
 m_package = Package(aliases=['nomad.datamodel.test_package'])
 
diff --git a/tests/metainfo/test_quantities.py b/tests/metainfo/test_quantities.py
index 0e6842b2d3..ad39b0e063 100644
--- a/tests/metainfo/test_quantities.py
+++ b/tests/metainfo/test_quantities.py
@@ -24,14 +24,14 @@ import pytest
 import pytz
 
 from nomad.metainfo.metainfo import (
-    JSON,
-    URL,
     Bytes,
     Capitalized,
     Datetime,
     Dimension,
+    JSON,
     MSection,
     Quantity,
+    URL,
     Unit,
     units,
 )
diff --git a/tests/metainfo/test_references.py b/tests/metainfo/test_references.py
index 8a7f14a00a..c9f20fcc98 100644
--- a/tests/metainfo/test_references.py
+++ b/tests/metainfo/test_references.py
@@ -16,26 +16,25 @@
 # limitations under the License.
 #
 
-import os.path
 from typing import cast
-
 import pytest
+import os.path
 
-from nomad.datamodel import AuthorReference, UserReference
+from nomad.datamodel import UserReference, AuthorReference
 from nomad.metainfo import (
-    Context,
-    File,
-    MetainfoReferenceError,
-    MProxy,
     MSection,
-    Package,
     Quantity,
-    QuantityReference,
-    Reference,
     Section,
     SubSection,
+    MProxy,
+    Reference,
+    QuantityReference,
+    File,
+    MetainfoReferenceError,
+    Package as MetainfoPackage,
+    Context,
+    Package,
 )
-from nomad.metainfo import Package as MetainfoPackage
 
 
 class Referenced(MSection):
@@ -384,7 +383,7 @@ def test_def_reference():
 
 @pytest.mark.parametrize('mainfile', ['intra-entry', 'inter-entry'])
 def test_parse_with_references(mainfile):
-    from nomad.client import normalize_all, parse
+    from nomad.client import parse, normalize_all
 
     entry_archive = parse(
         os.path.join(
diff --git a/tests/metainfo/test_sections.py b/tests/metainfo/test_sections.py
index 7ed0276321..04de671f98 100644
--- a/tests/metainfo/test_sections.py
+++ b/tests/metainfo/test_sections.py
@@ -22,7 +22,7 @@
 import pytest
 
 from nomad.metainfo import MSection
-from nomad.metainfo.metainfo import Package, Quantity, Section, SubSection
+from nomad.metainfo.metainfo import Package, Quantity, SubSection, Section
 
 
 def test_base_section():
@@ -251,7 +251,7 @@ def test_path():
     assert SubSection.used_sections[ChildSection.m_def] == [EntryArchive.child]
     assert ChildSection.m_def.path == 'child'
 
-    from nomad.datamodel.metainfo.workflow import Task, Workflow
+    from nomad.datamodel.metainfo.workflow import Workflow, Task
 
     assert Workflow.m_def.path == 'workflow2'
     assert Task.m_def.path == '__no_archive_path__'
diff --git a/tests/metainfo/test_to_dict.py b/tests/metainfo/test_to_dict.py
index 8c296a8868..91e2288fab 100644
--- a/tests/metainfo/test_to_dict.py
+++ b/tests/metainfo/test_to_dict.py
@@ -16,16 +16,16 @@
 # limitations under the License.
 #
 
-import numpy as np
 import pytest
+import numpy as np
 import yaml
 
 from nomad.app.v1.routers.metainfo import (
     get_package_by_section_definition_id,
     store_package_definition,
 )
-from nomad.metainfo import MCategory, MSection, Quantity, SubSection
-from nomad.metainfo.metainfo import Definition, MEnum, Package, Reference
+from nomad.metainfo import MSection, MCategory, Quantity, SubSection
+from nomad.metainfo.metainfo import Package, MEnum, Reference, Definition
 
 # resolve_references are tested in .test_references
 # type specific serialization is tested in .test_quantities
diff --git a/tests/metainfo/test_yaml_schema.py b/tests/metainfo/test_yaml_schema.py
index 950d8927c6..67df990850 100644
--- a/tests/metainfo/test_yaml_schema.py
+++ b/tests/metainfo/test_yaml_schema.py
@@ -20,18 +20,18 @@ import numpy as np
 import pytest
 import yaml
 
+from nomad.utils import strip
 from nomad.metainfo import (
-    Context,
-    MetainfoError,
-    MProxy,
-    MSection,
     Package,
+    MSection,
     Quantity,
     Reference,
-    Section,
     SubSection,
+    Section,
+    MProxy,
+    MetainfoError,
+    Context,
 )
-from nomad.utils import strip
 
 m_package = Package()
 
diff --git a/tests/mkdocs/test_mkdocs_metainfo.py b/tests/mkdocs/test_mkdocs_metainfo.py
index 368288ff1c..0ddda157da 100644
--- a/tests/mkdocs/test_mkdocs_metainfo.py
+++ b/tests/mkdocs/test_mkdocs_metainfo.py
@@ -19,7 +19,7 @@
 
 import pytest
 
-from nomad.metainfo import Datetime, MSection, Package, Quantity, Reference
+from nomad.metainfo import MSection, Quantity, Datetime, Reference, Package
 from nomad.mkdocs.metainfo import (
     get_property_description,
     get_property_type_info,
diff --git a/tests/mkdocs/test_mkdocs_pydantic.py b/tests/mkdocs/test_mkdocs_pydantic.py
index 15a9bda32e..1183cde07a 100644
--- a/tests/mkdocs/test_mkdocs_pydantic.py
+++ b/tests/mkdocs/test_mkdocs_pydantic.py
@@ -17,18 +17,17 @@
 #
 
 from enum import Enum
-from typing import Annotated, Literal, Optional, Union  # type: ignore
-
 import pytest
+from typing import Union, Optional
+from typing import Literal, Annotated  # type: ignore
 from pydantic import BaseModel, Field
-
 from nomad.config.models.ui import WidgetHistogram, WidgetTerms
 from nomad.mkdocs.pydantic import (
-    get_field_default,
-    get_field_deprecated,
+    get_field_type_info,
     get_field_description,
+    get_field_default,
     get_field_options,
-    get_field_type_info,
+    get_field_deprecated,
 )
 
 
diff --git a/tests/normalizing/conftest.py b/tests/normalizing/conftest.py
index c9c926b861..eac8d840ec 100644
--- a/tests/normalizing/conftest.py
+++ b/tests/normalizing/conftest.py
@@ -15,47 +15,53 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-import re
 from collections import defaultdict
-from typing import Any
-from warnings import warn
-
-import ase.build
 import numpy as np
+from typing import Any
 import pytest
 from ase import Atoms
+import ase.build
+import re
+from warnings import warn
 
-from nomad.datamodel import ArchiveSection, EntryArchive
-from nomad.datamodel.context import ServerContext
-from nomad.datamodel.datamodel import EntryArchive, EntryMetadata
-from nomad.datamodel.metainfo import runschema, simulationworkflowschema
+from nomad.units import ureg
+from nomad.utils import get_logger
+from nomad.normalizing import normalizers
+from nomad.metainfo import SubSection, Quantity
+from nomad.datamodel import EntryArchive, ArchiveSection
+from nomad.datamodel.results import (
+    Relation,
+    SymmetryNew as Symmetry,
+    Cell,
+    WyckoffSet,
+    System as ResultSystem,
+)
+from nomad.datamodel.optimade import Species
+from nomad.normalizing.common import cell_from_ase_atoms, nomad_atoms_from_ase_atoms
+from nomad.datamodel.metainfo.simulation.method import CoreHole
+from nomad.datamodel.metainfo.workflow import Workflow
 from nomad.datamodel.metainfo.measurements import (
-    EELSMeasurement,
-    Instrument,
     Measurement,
     Sample,
+    EELSMeasurement,
     Spectrum,
+    Instrument,
 )
-from nomad.datamodel.metainfo.simulation.method import CoreHole
-from nomad.datamodel.metainfo.workflow import Workflow
-from nomad.datamodel.optimade import Species
-from nomad.datamodel.results import Cell, EELSInstrument, Relation, WyckoffSet
-from nomad.datamodel.results import SymmetryNew as Symmetry
-from nomad.datamodel.results import System as ResultSystem
-from nomad.metainfo import Quantity, SubSection
-from nomad.normalizing import normalizers
-from nomad.normalizing.common import cell_from_ase_atoms, nomad_atoms_from_ase_atoms
+from nomad.datamodel.results import EELSInstrument
+
+from nomad.datamodel.context import ServerContext
+from nomad.datamodel.datamodel import EntryArchive, EntryMetadata
 from nomad.parsing.parser import ArchiveParser
 from nomad.processing.data import Upload
-from nomad.units import ureg
-from nomad.utils import get_logger
-from tests.parsing.test_parsing import (
-    parse_file,
-    parsed_example,  # noqa: F401
-    parsed_template_example,  # noqa: F401
-    parsed_vasp_example,  # noqa: F401
-)
+from tests.parsing.test_parsing import parsed_vasp_example  # noqa: F401
+from tests.parsing.test_parsing import parsed_template_example  # noqa: F401
+from tests.parsing.test_parsing import parsed_example  # noqa: F401
+from tests.parsing.test_parsing import parse_file
 from tests.test_files import create_test_upload_files
+from nomad.datamodel.metainfo import (
+    simulationworkflowschema,
+    runschema,
+)
 
 
 def run_normalize(entry_archive: EntryArchive) -> EntryArchive:
diff --git a/tests/normalizing/test_entry_type_and_name.py b/tests/normalizing/test_entry_type_and_name.py
index dffa84450d..c0b4ba6a32 100644
--- a/tests/normalizing/test_entry_type_and_name.py
+++ b/tests/normalizing/test_entry_type_and_name.py
@@ -16,9 +16,7 @@
 # limitations under the License.
 #
 import pytest
-
 import tests
-
 from .conftest import run_normalize
 
 
diff --git a/tests/normalizing/test_material.py b/tests/normalizing/test_material.py
index ab422266ef..c2b9289da2 100644
--- a/tests/normalizing/test_material.py
+++ b/tests/normalizing/test_material.py
@@ -16,18 +16,18 @@
 # limitations under the License.
 #
 
-import ase.build
 import numpy as np
 import pytest
 from ase import Atoms
+import ase.build
 from matid.symmetry.wyckoffset import WyckoffSet  # pylint: disable=import-error
 
+from nomad.units import ureg
 from nomad import atomutils
 from nomad.config import config
-from nomad.datamodel.results import ElementalComposition
-from nomad.normalizing.common import ase_atoms_from_nomad_atoms
-from nomad.units import ureg
 from nomad.utils import hash
+from nomad.normalizing.common import ase_atoms_from_nomad_atoms
+from nomad.datamodel.results import ElementalComposition
 from tests.normalizing.conftest import get_template_for_structure
 
 
diff --git a/tests/normalizing/test_metainfo.py b/tests/normalizing/test_metainfo.py
index 815ad7df3a..6fc097c053 100644
--- a/tests/normalizing/test_metainfo.py
+++ b/tests/normalizing/test_metainfo.py
@@ -17,9 +17,9 @@
 #
 import numpy as np
 
-from nomad.client import normalize_all
-from nomad.datamodel import EntryArchive, EntryData
+from nomad.datamodel import EntryData, EntryArchive
 from nomad.metainfo import Quantity, SubSection
+from nomad.client import normalize_all
 
 
 def test_normalizer_level():
diff --git a/tests/normalizing/test_method.py b/tests/normalizing/test_method.py
index 1f9992a15b..483753d8e6 100644
--- a/tests/normalizing/test_method.py
+++ b/tests/normalizing/test_method.py
@@ -17,9 +17,8 @@
 #
 
 import numpy as np
-import pytest
-
 from nomad.units import ureg
+import pytest
 
 
 def approx(value, abs=0, rel=1e-6):
diff --git a/tests/normalizing/test_properties.py b/tests/normalizing/test_properties.py
index 9ad5ae24b2..ad82111b39 100644
--- a/tests/normalizing/test_properties.py
+++ b/tests/normalizing/test_properties.py
@@ -19,20 +19,20 @@
 import numpy as np
 import pytest
 
-from nomad.datamodel.metainfo import SCHEMA_IMPORT_ERROR, simulationworkflowschema
 from nomad.units import ureg
 
 from .conftest import (
-    add_template_band_structure,
+    get_template_dft,
     add_template_dos,
+    get_template_dos,
+    add_template_band_structure,
+    get_template_band_structure,
     add_template_magnetic_shielding,
-    add_template_magnetic_susceptibility,
     add_template_spin_spin_coupling,
-    get_template_band_structure,
-    get_template_dft,
-    get_template_dos,
+    add_template_magnetic_susceptibility,
     run_normalize,
 )
+from nomad.datamodel.metainfo import simulationworkflowschema, SCHEMA_IMPORT_ERROR
 
 
 def test_eels(eels):
diff --git a/tests/normalizing/test_topology.py b/tests/normalizing/test_topology.py
index 5940d8e8e9..552949f140 100644
--- a/tests/normalizing/test_topology.py
+++ b/tests/normalizing/test_topology.py
@@ -16,35 +16,34 @@
 # limitations under the License.
 #
 
-from collections import defaultdict
-
 import numpy as np
+from collections import defaultdict
 import pytest
-
 from nomad.datamodel.metainfo import runschema
+
 from nomad.units import ureg
 from tests.normalizing.conftest import (  # noqa: F401
-    boron_nitride,
-    boron_nitride_topology,
-    check_template_active_orbitals,
-    conv_bcc,
-    conv_fcc,
-    get_template_active_orbitals,
-    get_template_computation,
     get_template_for_structure,
     get_template_topology,
-    graphene,
-    graphene_topology,
-    mos2,
-    mos2_topology,
+    conv_bcc,
+    conv_fcc,
     rattle,
     run_normalize,
-    single_cr_surface_topology,
-    single_cu_surface_topology,
     stack,
+    surf,
+    single_cu_surface_topology,
+    single_cr_surface_topology,
     stacked_cu_ni_surface_topology,
+    graphene,
+    graphene_topology,
+    boron_nitride,
+    boron_nitride_topology,
+    mos2,
+    mos2_topology,
     stacked_graphene_boron_nitride_topology,
-    surf,
+    get_template_active_orbitals,
+    check_template_active_orbitals,
+    get_template_computation,
 )
 
 
diff --git a/tests/parsing/test_archive_parser.py b/tests/parsing/test_archive_parser.py
index e577bbb068..b9666aa564 100644
--- a/tests/parsing/test_archive_parser.py
+++ b/tests/parsing/test_archive_parser.py
@@ -16,15 +16,14 @@
 # limitations under the License.
 #
 
+import pytest
 import json
 import os
 import os.path
 
-import pytest
-
 from nomad.config import config
-from nomad.datamodel import Context, EntryArchive
 from nomad.parsing.parser import ArchiveParser
+from nomad.datamodel import EntryArchive, Context
 
 
 def test_archive_parser(raw_files_function):
diff --git a/tests/parsing/test_file_parser.py b/tests/parsing/test_file_parser.py
index d3a6e0a32c..b9ffdb65d3 100644
--- a/tests/parsing/test_file_parser.py
+++ b/tests/parsing/test_file_parser.py
@@ -1,15 +1,14 @@
+import pytest
 import numpy as np
 import pint
-import pytest
-
-from nomad.datamodel.metainfo.system import Atoms
 from nomad.parsing.file_parser import (
-    FileParser,
-    ParsePattern,
-    Quantity,
     TextParser,
+    Quantity,
+    ParsePattern,
     XMLParser,
+    FileParser,
 )
+from nomad.datamodel.metainfo.system import Atoms
 
 
 class TestFileParser:
diff --git a/tests/parsing/test_mapping_parser.py b/tests/parsing/test_mapping_parser.py
index a772a8b08c..555587fab2 100644
--- a/tests/parsing/test_mapping_parser.py
+++ b/tests/parsing/test_mapping_parser.py
@@ -1,27 +1,28 @@
-from copy import deepcopy
-from typing import Any
-
-import numpy as np
 import pytest
+import numpy as np
+from typing import Any
+from copy import deepcopy
 
-from nomad.datamodel import ArchiveSection
-from nomad.datamodel.metainfo.annotations import Mapper as MapperAnnotation
 from nomad.metainfo import Quantity, SubSection
+from nomad.datamodel.metainfo.annotations import Mapper as MapperAnnotation
 from nomad.parsing.file_parser.mapping_parser import (
-    MAPPING_ANNOTATION_KEY,
-    Data,
-    HDF5Parser,
-    Mapper,
     MappingParser,
+    XMLParser,
     MetainfoParser,
-    Path,
-    PathParser,
+    HDF5Parser,
     TextParser,
+    Path,
     Transformer,
-    XMLParser,
+    Data,
+    Mapper,
+    PathParser,
+    MAPPING_ANNOTATION_KEY,
+)
+from nomad.parsing.file_parser.text_parser import (
+    TextParser as TextFileParser,
+    Quantity as TextQuantity,
 )
-from nomad.parsing.file_parser.text_parser import Quantity as TextQuantity
-from nomad.parsing.file_parser.text_parser import TextParser as TextFileParser
+from nomad.datamodel import ArchiveSection
 
 
 class BSection(ArchiveSection):
diff --git a/tests/parsing/test_parsing.py b/tests/parsing/test_parsing.py
index 176679775b..adfbece737 100644
--- a/tests/parsing/test_parsing.py
+++ b/tests/parsing/test_parsing.py
@@ -19,13 +19,13 @@
 import json
 import os
 from shutil import copyfile
-from unittest.mock import MagicMock, patch
+from unittest.mock import patch, MagicMock
 
 import pytest
 
 from nomad import files, utils
 from nomad.datamodel import EntryArchive
-from nomad.parsing import BrokenParser, MatchingParser, MatchingParserInterface
+from nomad.parsing import BrokenParser, MatchingParserInterface, MatchingParser
 from nomad.parsing.parsers import match_parser, parser_dict, parsers, run_parser
 from nomad.utils import dump_json
 
diff --git a/tests/parsing/test_tabular.py b/tests/parsing/test_tabular.py
index 7acf5017b8..50572e427e 100644
--- a/tests/parsing/test_tabular.py
+++ b/tests/parsing/test_tabular.py
@@ -16,23 +16,23 @@
 # limitations under the License.
 #
 
-import datetime
+import pytest
 import os
 import os.path
 import re
-
-import pytest
+import datetime
 import yaml
 
-from nomad import files
 from nomad.config import config
-from nomad.datamodel.context import ClientContext
 from nomad.datamodel.datamodel import EntryArchive, EntryMetadata
-from nomad.parsing.parser import ArchiveParser
+from nomad.datamodel.context import ClientContext
 from nomad.parsing.tabular import read_table_data
-from nomad.processing import Entry, ProcessStatus, Upload
 from nomad.utils import generate_entry_id, strip
+from nomad.parsing.parser import ArchiveParser
 from tests.normalizing.conftest import run_normalize
+from nomad.processing import Upload, Entry
+from nomad.processing import ProcessStatus
+from nomad import files
 
 
 def quantity_generator(quantity_name, header_name, shape, to_dict=False):
diff --git a/tests/processing/test_base.py b/tests/processing/test_base.py
index 45fbe45603..d1e2cf8ca3 100644
--- a/tests/processing/test_base.py
+++ b/tests/processing/test_base.py
@@ -15,20 +15,20 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+import pytest
 import random
-import threading
 import time
+import threading
 from typing import Any
 
-import pytest
-from mongoengine import IntField, ListField, StringField
+from mongoengine import StringField, IntField, ListField
 
 from nomad.processing.base import (
     Proc,
     ProcessAlreadyRunning,
-    ProcessStatus,
     process,
     process_local,
+    ProcessStatus,
 )
 
 random.seed(0)
diff --git a/tests/processing/test_data.py b/tests/processing/test_data.py
index d538f39a91..f32e0f1469 100644
--- a/tests/processing/test_data.py
+++ b/tests/processing/test_data.py
@@ -16,39 +16,39 @@
 # limitations under the License.
 #
 
-import json
+from collections.abc import Generator
+import pytest
 import os.path
 import re
 import shutil
 import zipfile
-from collections.abc import Generator
-
-import pytest
+import json
 import yaml
 
-from nomad import infrastructure, utils
-from nomad.archive import read_partial_archive_from_mongo, to_json
+from nomad import utils, infrastructure
 from nomad.config import config
 from nomad.config.models.config import BundleImportSettings
+from nomad.archive import read_partial_archive_from_mongo, to_json
+from nomad.files import UploadFiles, StagingUploadFiles, PublicUploadFiles
+from nomad.parsing.parser import Parser
+from nomad.parsing import parsers
 from nomad.datamodel import ServerContext
 from nomad.datamodel.data import EntryData
-from nomad.datamodel.datamodel import ArchiveSection, EntryArchive, EntryData
-from nomad.files import PublicUploadFiles, StagingUploadFiles, UploadFiles
 from nomad.metainfo import Package, Quantity, Reference, SubSection
-from nomad.parsing import parsers
-from nomad.parsing.parser import Parser
-from nomad.processing import Entry, ProcessStatus, Upload
-from nomad.search import refresh as search_refresh
-from nomad.search import search
+from nomad.processing import Upload, Entry, ProcessStatus
+from nomad.search import search, refresh as search_refresh
 from nomad.utils.exampledata import ExampleData
+from nomad.datamodel.datamodel import EntryArchive, EntryData, ArchiveSection
+
+from tests.test_search import assert_search_upload
 from tests.test_files import (
     assert_upload_files,
-    example_file_aux,
     example_file_mainfile,
+    example_file_aux,
 )
-from tests.test_search import assert_search_upload
 from tests.utils import create_template_upload_file, set_upload_entry_metadata
 
+
 # Package with some metainfo schemas used only for testing.
 m_package = Package(name='test_schemas')
 
diff --git a/tests/processing/test_edit_metadata.py b/tests/processing/test_edit_metadata.py
index 96963944b8..6d53da2b89 100644
--- a/tests/processing/test_edit_metadata.py
+++ b/tests/processing/test_edit_metadata.py
@@ -15,17 +15,18 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+import pytest
 from datetime import datetime
 
-import pytest
 from fastapi.exceptions import RequestValidationError
 
 from nomad import datamodel, metainfo
 from nomad.metainfo.data_type import Datatype
-from nomad.processing import MetadataEditRequestHandler, Upload
+from nomad.processing import Upload, MetadataEditRequestHandler
 from nomad.processing.data import editable_metadata, mongo_upload_metadata
 from nomad.search import search
 
+
 all_coauthor_metadata = dict(
     # All attributes which a coauthor+ can edit
     upload_name='a humble upload name',
diff --git a/tests/processing/test_rfc3161.py b/tests/processing/test_rfc3161.py
index 28f1bcc80b..e559a53246 100644
--- a/tests/processing/test_rfc3161.py
+++ b/tests/processing/test_rfc3161.py
@@ -23,9 +23,9 @@ import httpx
 import pytest
 import rfc3161ng
 
-from nomad.archive import read_archive, to_json, write_archive
+from nomad.archive import write_archive, read_archive, to_json
 from nomad.datamodel.datamodel import RFC3161Timestamp
-from nomad.processing.data import Entry, get_rfc3161_token
+from nomad.processing.data import get_rfc3161_token, Entry
 
 
 @pytest.mark.parametrize(
diff --git a/tests/states/archives/create_archives.py b/tests/states/archives/create_archives.py
index 0b53682f6d..bcee46b0a3 100644
--- a/tests/states/archives/create_archives.py
+++ b/tests/states/archives/create_archives.py
@@ -17,7 +17,6 @@
 #
 
 import math
-
 from nomad.utils.exampledata import create_entry_archive
 
 
diff --git a/tests/states/entry.py b/tests/states/entry.py
index bbd97182e0..767a77b370 100644
--- a/tests/states/entry.py
+++ b/tests/states/entry.py
@@ -17,12 +17,10 @@
 #
 
 import json
-
-from nomad import files, infrastructure
-from nomad.processing import Upload
+from nomad import infrastructure, files
 from nomad.utils.exampledata import ExampleData, create_entry_archive
-
 from .archives.create_archives import archive_dft_bulk
+from nomad.processing import Upload
 
 
 def dft():
diff --git a/tests/states/search.py b/tests/states/search.py
index 6a53a211cc..e3ef1fc19c 100644
--- a/tests/states/search.py
+++ b/tests/states/search.py
@@ -16,11 +16,10 @@
 # limitations under the License.
 #
 from datetime import datetime, timedelta
-
 from nomad import infrastructure
-from nomad.atomutils import chemical_symbols
-from nomad.units import ureg
 from nomad.utils import create_uuid
+from nomad.units import ureg
+from nomad.atomutils import chemical_symbols
 from nomad.utils.exampledata import ExampleData
 
 material_h2o = {
diff --git a/tests/states/uploads.py b/tests/states/uploads.py
index a79aa893b8..52ae1ed4e9 100644
--- a/tests/states/uploads.py
+++ b/tests/states/uploads.py
@@ -16,12 +16,11 @@
 # limitations under the License.
 #
 
-from nomad import files, infrastructure
+from nomad import infrastructure, files
 from nomad.processing import Upload
 from nomad.utils.exampledata import ExampleData
-
 from .archives.create_archives import archive_dft_bulk
-from .groups import delete_group, init_gui_test_groups
+from .groups import init_gui_test_groups, delete_group
 
 default_access = {'coauthors': ['scooper'], 'reviewers': ['ttester']}
 twin_access = {
diff --git a/tests/test_atomutils.py b/tests/test_atomutils.py
index e9dc5f5561..97655c0ede 100644
--- a/tests/test_atomutils.py
+++ b/tests/test_atomutils.py
@@ -16,9 +16,8 @@
 # limitations under the License.
 #
 import pytest
-
 from nomad.atomutils import Formula
-from nomad.datamodel.results import ElementalComposition, Material
+from nomad.datamodel.results import Material, ElementalComposition
 
 
 @pytest.mark.parametrize(
diff --git a/tests/test_cli.py b/tests/test_cli.py
index 1350894136..3ee028698b 100644
--- a/tests/test_cli.py
+++ b/tests/test_cli.py
@@ -16,22 +16,20 @@
 # limitations under the License.
 #
 
-import datetime
+import pytest
+import click.testing
 import json
 import os
-import tempfile
+import datetime
 import time
+import tempfile
 
-import click.testing
-import pytest
-
-from nomad import files
-from nomad import processing as proc
-from nomad.cli import cli
-from nomad.cli.cli import POPO
+from nomad import processing as proc, files
 from nomad.config import config
-from nomad.processing import Entry, ProcessStatus, Upload
 from nomad.search import search
+from nomad.cli import cli
+from nomad.cli.cli import POPO
+from nomad.processing import Upload, Entry, ProcessStatus
 from nomad.utils.exampledata import ExampleData
 
 # TODO there is much more to test
diff --git a/tests/test_client.py b/tests/test_client.py
index 35211bf701..ce2f246cf5 100644
--- a/tests/test_client.py
+++ b/tests/test_client.py
@@ -15,23 +15,28 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-import json
 import os
 
-import pytest
 from httpx import AsyncClient
+import pytest
+import json
+
 from pydantic import ValidationError
 
 from nomad.app.main import app
 from nomad.client.archive import ArchiveQuery
 from nomad.datamodel import EntryArchive, User
-from nomad.datamodel.metainfo import SCHEMA_IMPORT_ERROR, runschema
-from nomad.datamodel.metainfo.annotations import Rule, Rules
+from nomad.datamodel.metainfo import runschema, SCHEMA_IMPORT_ERROR
+from nomad.datamodel.metainfo.annotations import (
+    Rule,
+    Rules,
+)
 from nomad.metainfo import MSection, SubSection
 from nomad.utils.json_transformer import Transformer
 from tests.fixtures.users import users
 from tests.processing import test_data as test_processing
 
+
 # TODO: more tests
 
 
diff --git a/tests/test_common.py b/tests/test_common.py
index 432be865b7..919538e69e 100644
--- a/tests/test_common.py
+++ b/tests/test_common.py
@@ -17,8 +17,7 @@
 #
 
 import pytest
-
-from nomad.common import is_safe_path, is_safe_relative_path
+from nomad.common import is_safe_relative_path, is_safe_path
 
 
 @pytest.mark.parametrize(
diff --git a/tests/test_config.py b/tests/test_config.py
index 20fbe5d18f..7cc0f50705 100644
--- a/tests/test_config.py
+++ b/tests/test_config.py
@@ -18,13 +18,12 @@
 
 import os
 import re
-
 import pytest
 import yaml
 from pydantic import ValidationError
 
 from nomad.config import load_config
-from nomad.config.models.plugins import Parser, ParserEntryPoint, Schema
+from nomad.config.models.plugins import Parser, Schema, ParserEntryPoint
 from nomad.utils import flatten_dict
 
 from .utils import assert_log
diff --git a/tests/test_doi.py b/tests/test_doi.py
index bcb4e61df0..60498040f7 100644
--- a/tests/test_doi.py
+++ b/tests/test_doi.py
@@ -15,12 +15,10 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
-from unittest.mock import MagicMock
-
-import pytest
-
 from nomad.config import config
 from nomad.doi import DOI, DOIException
+import pytest
+from unittest.mock import MagicMock
 
 
 def test_create(mongo_function, user1, no_warn):
diff --git a/tests/test_files.py b/tests/test_files.py
index e2ca1d432f..519be1ec04 100644
--- a/tests/test_files.py
+++ b/tests/test_files.py
@@ -16,33 +16,31 @@
 # limitations under the License.
 #
 
-import itertools
+from typing import Any
+from collections.abc import Generator, Iterable
+from datetime import datetime
 import os
 import os.path
-import pathlib
-import re
 import shutil
-import zipfile
-from collections.abc import Generator, Iterable
-from datetime import datetime
-from typing import Any
-
 import pytest
+import itertools
+import zipfile
+import re
+import pathlib
 
 from nomad import datamodel, utils
-from nomad.archive import to_json
 from nomad.config import config
+from nomad.archive import to_json
 from nomad.files import (
     DirectoryObject,
     PathObject,
-    PublicUploadFiles,
-    StagingUploadFiles,
-    UploadFiles,
-    empty_archive_file_size,
     empty_zip_file_size,
+    empty_archive_file_size,
 )
+from nomad.files import StagingUploadFiles, PublicUploadFiles, UploadFiles
 from nomad.processing import Upload
 
+
 EntryWithFiles = tuple[datamodel.EntryMetadata, str]
 UploadWithFiles = tuple[str, list[datamodel.EntryMetadata], UploadFiles]
 StagingUploadWithFiles = tuple[str, list[datamodel.EntryMetadata], StagingUploadFiles]
diff --git a/tests/test_logtransfer.py b/tests/test_logtransfer.py
index 122c727b07..b67262fbee 100644
--- a/tests/test_logtransfer.py
+++ b/tests/test_logtransfer.py
@@ -1,12 +1,11 @@
-import json
 import logging
-import os.path
-
+import json
 import pytest
+import os.path
 
 from nomad import config, utils
-from nomad.logtransfer import transfer_logs
 from nomad.utils import structlogging
+from nomad.logtransfer import transfer_logs
 
 
 @pytest.fixture(scope='function')
diff --git a/tests/test_search.py b/tests/test_search.py
index 0e6eeb1f70..319dcbac43 100644
--- a/tests/test_search.py
+++ b/tests/test_search.py
@@ -17,9 +17,9 @@
 #
 
 import json
-from collections.abc import Iterable
 from datetime import datetime
 from typing import Any
+from collections.abc import Iterable
 
 import pytest
 
@@ -41,8 +41,15 @@ from nomad.metainfo.elasticsearch_extension import (
 )
 from nomad.metainfo.metainfo import Datetime, Quantity
 from nomad.metainfo.util import MEnum
-from nomad.search import AuthenticationRequiredError as ARE
-from nomad.search import quantity_values, refresh, search, update_by_query
+from nomad.search import (
+    AuthenticationRequiredError as ARE,
+)
+from nomad.search import (
+    quantity_values,
+    refresh,
+    search,
+    update_by_query,
+)
 from nomad.utils import deep_get
 from nomad.utils.exampledata import ExampleData
 from tests.variables import python_schema_name, yaml_schema_name
diff --git a/tests/test_test.py b/tests/test_test.py
index ef2353b7ac..bbca3fb469 100644
--- a/tests/test_test.py
+++ b/tests/test_test.py
@@ -16,9 +16,8 @@
 # limitations under the License.
 #
 
-import logging
-
 import pytest
+import logging
 
 
 @pytest.fixture()
diff --git a/tests/test_utils.py b/tests/test_utils.py
index 11f38f65f1..5d7339d68e 100644
--- a/tests/test_utils.py
+++ b/tests/test_utils.py
@@ -16,24 +16,24 @@
 # limitations under the License.
 #
 
-import time
 from importlib.metadata import PackageNotFoundError
-
-import pandas as pd
+import time
 import pytest
+import pandas as pd
 
-from nomad import files, utils
+from nomad import utils
 from nomad.metainfo.metainfo import MSection, Quantity, SubSection
+from nomad import files
 from nomad.processing import Upload
 from nomad.utils import (
-    dataframe_to_dict,
-    deep_get,
-    dict_to_dataframe,
-    flatten_dict,
     nomad_distro_metadata,
-    prune_dict,
-    rebuild_dict,
     structlogging,
+    flatten_dict,
+    rebuild_dict,
+    prune_dict,
+    deep_get,
+    dict_to_dataframe,
+    dataframe_to_dict,
 )
 
 
diff --git a/tests/utils.py b/tests/utils.py
index c24fe47595..253200de91 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -23,7 +23,6 @@ import urllib.parse
 import zipfile
 from logging import LogRecord
 from typing import Any
-
 import pytest
 
 
-- 
GitLab