From 32c1e59622a8e9f76c351160e7150e625e3238a3 Mon Sep 17 00:00:00 2001 From: Sarah Hoffmann Date: Tue, 24 Jan 2023 13:28:04 +0100 Subject: [PATCH] reorganize api submodule Use a directory for the submodule where the __init__ file contains the public API. This makes it easier to separate public interface from the internal implementation. --- nominatim/api/__init__.py | 19 +++++++++++++++++++ nominatim/{api.py => api/core.py} | 2 +- nominatim/{apicmd => api}/status.py | 0 nominatim/apicmd/__init__.py | 0 nominatim/clicmd/api.py | 5 ++--- nominatim/result_formatter/v1.py | 4 ++-- nominatim/server/falcon/server.py | 5 ++--- nominatim/server/sanic/server.py | 5 ++--- nominatim/server/starlette/server.py | 5 ++--- test/python/cli/test_cmd_api.py | 9 ++++----- test/python/result_formatter/test_v1.py | 4 ++-- 11 files changed, 36 insertions(+), 22 deletions(-) create mode 100644 nominatim/api/__init__.py rename nominatim/{api.py => api/core.py} (98%) rename nominatim/{apicmd => api}/status.py (100%) delete mode 100644 nominatim/apicmd/__init__.py diff --git a/nominatim/api/__init__.py b/nominatim/api/__init__.py new file mode 100644 index 00000000..f418e663 --- /dev/null +++ b/nominatim/api/__init__.py @@ -0,0 +1,19 @@ +# SPDX-License-Identifier: GPL-3.0-or-later +# +# This file is part of Nominatim. (https://nominatim.org) +# +# Copyright (C) 2023 by the Nominatim developer community. +# For a full list of authors see the git log. +""" +The public interface of the Nominatim library. + +Classes and functions defined in this file are considered stable. Always +import from this file, not from the source files directly. +""" + +# See also https://github.com/PyCQA/pylint/issues/6006 +# pylint: disable=useless-import-alias + +from nominatim.api.core import (NominatimAPI as NominatimAPI, + NominatimAPIAsync as NominatimAPIAsync) +from nominatim.api.status import (StatusResult as StatusResult) diff --git a/nominatim/api.py b/nominatim/api/core.py similarity index 98% rename from nominatim/api.py rename to nominatim/api/core.py index 4ce89595..159229dd 100644 --- a/nominatim/api.py +++ b/nominatim/api/core.py @@ -17,7 +17,7 @@ import sqlalchemy.ext.asyncio as sa_asyncio import asyncpg from nominatim.config import Configuration -from nominatim.apicmd.status import get_status, StatusResult +from nominatim.api.status import get_status, StatusResult class NominatimAPIAsync: """ API loader asynchornous version. diff --git a/nominatim/apicmd/status.py b/nominatim/api/status.py similarity index 100% rename from nominatim/apicmd/status.py rename to nominatim/api/status.py diff --git a/nominatim/apicmd/__init__.py b/nominatim/apicmd/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/nominatim/clicmd/api.py b/nominatim/clicmd/api.py index e2b903c7..050665f8 100644 --- a/nominatim/clicmd/api.py +++ b/nominatim/clicmd/api.py @@ -2,7 +2,7 @@ # # This file is part of Nominatim. (https://nominatim.org) # -# Copyright (C) 2022 by the Nominatim developer community. +# Copyright (C) 2023 by the Nominatim developer community. # For a full list of authors see the git log. """ Subcommand definitions for API calls from the command line. @@ -14,8 +14,7 @@ import logging from nominatim.tools.exec_utils import run_api_script from nominatim.errors import UsageError from nominatim.clicmd.args import NominatimArgs -from nominatim.api import NominatimAPI -from nominatim.apicmd.status import StatusResult +from nominatim.api import NominatimAPI, StatusResult import nominatim.result_formatter.v1 as formatting # Do not repeat documentation of subcommand classes. diff --git a/nominatim/result_formatter/v1.py b/nominatim/result_formatter/v1.py index 1d437af7..9114d45f 100644 --- a/nominatim/result_formatter/v1.py +++ b/nominatim/result_formatter/v1.py @@ -2,7 +2,7 @@ # # This file is part of Nominatim. (https://nominatim.org) # -# Copyright (C) 2022 by the Nominatim developer community. +# Copyright (C) 2023 by the Nominatim developer community. # For a full list of authors see the git log. """ Output formatters for API version v1. @@ -12,7 +12,7 @@ from collections import OrderedDict import json from nominatim.result_formatter.base import FormatDispatcher -from nominatim.apicmd.status import StatusResult +from nominatim.api import StatusResult create = FormatDispatcher() diff --git a/nominatim/server/falcon/server.py b/nominatim/server/falcon/server.py index 81e6ed39..c56034b5 100644 --- a/nominatim/server/falcon/server.py +++ b/nominatim/server/falcon/server.py @@ -2,7 +2,7 @@ # # This file is part of Nominatim. (https://nominatim.org) # -# Copyright (C) 2022 by the Nominatim developer community. +# Copyright (C) 2023 by the Nominatim developer community. # For a full list of authors see the git log. """ Server implementation using the falcon webserver framework. @@ -13,8 +13,7 @@ from pathlib import Path import falcon import falcon.asgi -from nominatim.api import NominatimAPIAsync -from nominatim.apicmd.status import StatusResult +from nominatim.api import NominatimAPIAsync, StatusResult import nominatim.result_formatter.v1 as formatting CONTENT_TYPE = { diff --git a/nominatim/server/sanic/server.py b/nominatim/server/sanic/server.py index 74841f3f..797157af 100644 --- a/nominatim/server/sanic/server.py +++ b/nominatim/server/sanic/server.py @@ -2,7 +2,7 @@ # # This file is part of Nominatim. (https://nominatim.org) # -# Copyright (C) 2022 by the Nominatim developer community. +# Copyright (C) 2023 by the Nominatim developer community. # For a full list of authors see the git log. """ Server implementation using the sanic webserver framework. @@ -12,8 +12,7 @@ from pathlib import Path import sanic -from nominatim.api import NominatimAPIAsync -from nominatim.apicmd.status import StatusResult +from nominatim.api import NominatimAPIAsync, StatusResult import nominatim.result_formatter.v1 as formatting api = sanic.Blueprint('NominatimAPI') diff --git a/nominatim/server/starlette/server.py b/nominatim/server/starlette/server.py index 41ad899c..e6dbbc78 100644 --- a/nominatim/server/starlette/server.py +++ b/nominatim/server/starlette/server.py @@ -2,7 +2,7 @@ # # This file is part of Nominatim. (https://nominatim.org) # -# Copyright (C) 2022 by the Nominatim developer community. +# Copyright (C) 2023 by the Nominatim developer community. # For a full list of authors see the git log. """ Server implementation using the starlette webserver framework. @@ -16,8 +16,7 @@ from starlette.exceptions import HTTPException from starlette.responses import Response from starlette.requests import Request -from nominatim.api import NominatimAPIAsync -from nominatim.apicmd.status import StatusResult +from nominatim.api import NominatimAPIAsync, StatusResult import nominatim.result_formatter.v1 as formatting CONTENT_TYPE = { diff --git a/test/python/cli/test_cmd_api.py b/test/python/cli/test_cmd_api.py index 4031441f..b0c2411f 100644 --- a/test/python/cli/test_cmd_api.py +++ b/test/python/cli/test_cmd_api.py @@ -2,7 +2,7 @@ # # This file is part of Nominatim. (https://nominatim.org) # -# Copyright (C) 2022 by the Nominatim developer community. +# Copyright (C) 2023 by the Nominatim developer community. # For a full list of authors see the git log. """ Tests for API access commands of command-line interface wrapper. @@ -11,8 +11,7 @@ import json import pytest import nominatim.clicmd.api -import nominatim.api -from nominatim.apicmd.status import StatusResult +import nominatim.api as napi @pytest.mark.parametrize("endpoint", (('search', 'reverse', 'lookup', 'details', 'status'))) @@ -61,8 +60,8 @@ class TestCliStatusCall: @pytest.fixture(autouse=True) def setup_status_mock(self, monkeypatch): - monkeypatch.setattr(nominatim.api.NominatimAPI, 'status', - lambda self: StatusResult(200, 'OK')) + monkeypatch.setattr(napi.NominatimAPI, 'status', + lambda self: napi.StatusResult(200, 'OK')) def test_status_simple(self, cli_call, tmp_path): diff --git a/test/python/result_formatter/test_v1.py b/test/python/result_formatter/test_v1.py index 919f5b80..fc5a3671 100644 --- a/test/python/result_formatter/test_v1.py +++ b/test/python/result_formatter/test_v1.py @@ -2,7 +2,7 @@ # # This file is part of Nominatim. (https://nominatim.org) # -# Copyright (C) 2022 by the Nominatim developer community. +# Copyright (C) 2023 by the Nominatim developer community. # For a full list of authors see the git log. """ Tests for formatting results for the V1 API. @@ -11,7 +11,7 @@ import datetime as dt import pytest import nominatim.result_formatter.v1 as format_module -from nominatim.apicmd.status import StatusResult +from nominatim.api import StatusResult from nominatim.version import NOMINATIM_VERSION STATUS_FORMATS = {'text', 'json'} -- 2.39.5