]> git.openstreetmap.org Git - nominatim.git/commitdiff
split code into submodules
authorSarah Hoffmann <lonvia@denofr.de>
Thu, 16 May 2024 09:55:17 +0000 (11:55 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 26 Jun 2024 09:52:47 +0000 (11:52 +0200)
137 files changed:
nominatim/__main__.py [deleted file]
nominatim/clicmd/__init__.py [deleted file]
nominatim/paths.py [deleted file]
src/nominatim_api/__init__.py [moved from nominatim/api/__init__.py with 96% similarity]
src/nominatim_api/connection.py [moved from nominatim/api/connection.py with 94% similarity]
src/nominatim_api/core.py [moved from nominatim/api/core.py with 98% similarity]
src/nominatim_api/localization.py [moved from nominatim/api/localization.py with 98% similarity]
src/nominatim_api/logging.py [moved from nominatim/api/logging.py with 99% similarity]
src/nominatim_api/lookup.py [moved from nominatim/api/lookup.py with 97% similarity]
src/nominatim_api/py.typed [moved from nominatim/__init__.py with 100% similarity]
src/nominatim_api/result_formatting.py [moved from nominatim/api/result_formatting.py with 94% similarity]
src/nominatim_api/results.py [moved from nominatim/api/results.py with 98% similarity]
src/nominatim_api/reverse.py [moved from nominatim/api/reverse.py with 98% similarity]
src/nominatim_api/search/__init__.py [moved from nominatim/api/search/__init__.py with 88% similarity]
src/nominatim_api/search/db_search_builder.py [moved from nominatim/api/search/db_search_builder.py with 97% similarity]
src/nominatim_api/search/db_search_fields.py [moved from nominatim/api/search/db_search_fields.py with 96% similarity]
src/nominatim_api/search/db_search_lookups.py [moved from nominatim/api/search/db_search_lookups.py with 96% similarity]
src/nominatim_api/search/db_searches.py [moved from nominatim/api/search/db_searches.py with 98% similarity]
src/nominatim_api/search/geocoder.py [moved from nominatim/api/search/geocoder.py with 94% similarity]
src/nominatim_api/search/icu_tokenizer.py [moved from nominatim/api/search/icu_tokenizer.py with 97% similarity]
src/nominatim_api/search/legacy_tokenizer.py [moved from nominatim/api/search/legacy_tokenizer.py with 97% similarity]
src/nominatim_api/search/query.py [moved from nominatim/api/search/query.py with 99% similarity]
src/nominatim_api/search/query_analyzer_factory.py [moved from nominatim/api/search/query_analyzer_factory.py with 88% similarity]
src/nominatim_api/search/token_assignment.py [moved from nominatim/api/search/token_assignment.py with 99% similarity]
src/nominatim_api/server/__init__.py [moved from nominatim/data/__init__.py with 100% similarity]
src/nominatim_api/server/falcon/__init__.py [moved from nominatim/db/__init__.py with 100% similarity]
src/nominatim_api/server/falcon/server.py [moved from nominatim/server/falcon/server.py with 96% similarity]
src/nominatim_api/server/starlette/__init__.py [moved from nominatim/indexer/__init__.py with 100% similarity]
src/nominatim_api/server/starlette/server.py [moved from nominatim/server/starlette/server.py with 95% similarity]
src/nominatim_api/sql/sqlalchemy_functions.py [moved from nominatim/db/sqlalchemy_functions.py with 98% similarity]
src/nominatim_api/sql/sqlite_functions.py [moved from nominatim/db/sqlite_functions.py with 98% similarity]
src/nominatim_api/status.py [moved from nominatim/api/status.py with 71% similarity]
src/nominatim_api/types.py [moved from nominatim/api/types.py with 99% similarity]
src/nominatim_api/v1/__init__.py [moved from nominatim/api/v1/__init__.py with 51% similarity]
src/nominatim_api/v1/classtypes.py [moved from nominatim/api/v1/classtypes.py with 96% similarity]
src/nominatim_api/v1/format.py [moved from nominatim/api/v1/format.py with 76% similarity]
src/nominatim_api/v1/format_json.py [moved from nominatim/api/v1/format_json.py with 94% similarity]
src/nominatim_api/v1/format_xml.py [moved from nominatim/api/v1/format_xml.py with 91% similarity]
src/nominatim_api/v1/helpers.py [moved from nominatim/api/v1/helpers.py with 97% similarity]
src/nominatim_api/v1/server_glue.py [moved from nominatim/api/v1/server_glue.py with 85% similarity]
src/nominatim_api/version.py [new file with mode: 0644]
src/nominatim_core/__init__.py [moved from nominatim/server/__init__.py with 100% similarity]
src/nominatim_core/config.py [moved from nominatim/config.py with 97% similarity]
src/nominatim_core/db/__init__.py [moved from nominatim/server/falcon/__init__.py with 100% similarity]
src/nominatim_core/db/async_connection.py [moved from nominatim/db/async_connection.py with 98% similarity]
src/nominatim_core/db/async_core_library.py [moved from nominatim/db/async_core_library.py with 89% similarity]
src/nominatim_core/db/connection.py [moved from nominatim/db/connection.py with 97% similarity]
src/nominatim_core/db/properties.py [moved from nominatim/db/properties.py with 90% similarity]
src/nominatim_core/db/sql_preprocessor.py [moved from nominatim/db/sql_preprocessor.py with 95% similarity]
src/nominatim_core/db/sqlalchemy_schema.py [moved from nominatim/db/sqlalchemy_schema.py with 96% similarity]
src/nominatim_core/db/sqlalchemy_types/__init__.py [moved from nominatim/db/sqlalchemy_types/__init__.py with 88% similarity]
src/nominatim_core/db/sqlalchemy_types/geometry.py [moved from nominatim/db/sqlalchemy_types/geometry.py with 99% similarity]
src/nominatim_core/db/sqlalchemy_types/int_array.py [moved from nominatim/db/sqlalchemy_types/int_array.py with 97% similarity]
src/nominatim_core/db/sqlalchemy_types/json.py [moved from nominatim/db/sqlalchemy_types/json.py with 88% similarity]
src/nominatim_core/db/sqlalchemy_types/key_value.py [moved from nominatim/db/sqlalchemy_types/key_value.py with 95% similarity]
src/nominatim_core/db/status.py [moved from nominatim/db/status.py with 94% similarity]
src/nominatim_core/db/utils.py [moved from nominatim/db/utils.py with 95% similarity]
src/nominatim_core/errors.py [moved from nominatim/errors.py with 77% similarity]
src/nominatim_core/paths.py [new file with mode: 0644]
src/nominatim_core/py.typed [moved from nominatim/server/starlette/__init__.py with 100% similarity]
src/nominatim_core/typing.py [moved from nominatim/typing.py with 95% similarity]
src/nominatim_core/utils/__init__.py [moved from nominatim/tokenizer/__init__.py with 100% similarity]
src/nominatim_core/utils/centroid.py [moved from nominatim/utils/centroid.py with 93% similarity]
src/nominatim_core/utils/json_writer.py [moved from nominatim/utils/json_writer.py with 98% similarity]
src/nominatim_core/utils/url_utils.py [new file with mode: 0644]
src/nominatim_core/version.py [new file with mode: 0644]
src/nominatim_db/__init__.py [moved from nominatim/tokenizer/sanitizers/__init__.py with 100% similarity]
src/nominatim_db/cli.py [moved from nominatim/cli.py with 95% similarity]
src/nominatim_db/clicmd/__init__.py [new file with mode: 0644]
src/nominatim_db/clicmd/add_data.py [moved from nominatim/clicmd/add_data.py with 94% similarity]
src/nominatim_db/clicmd/admin.py [moved from nominatim/clicmd/admin.py with 95% similarity]
src/nominatim_db/clicmd/api.py [moved from nominatim/clicmd/api.py with 97% similarity]
src/nominatim_db/clicmd/args.py [moved from nominatim/clicmd/args.py with 96% similarity]
src/nominatim_db/clicmd/convert.py [moved from nominatim/clicmd/convert.py with 96% similarity]
src/nominatim_db/clicmd/export.py [moved from nominatim/clicmd/export.py with 96% similarity]
src/nominatim_db/clicmd/freeze.py [moved from nominatim/clicmd/freeze.py with 85% similarity]
src/nominatim_db/clicmd/index.py [moved from nominatim/clicmd/index.py with 91% similarity]
src/nominatim_db/clicmd/refresh.py [moved from nominatim/clicmd/refresh.py with 96% similarity]
src/nominatim_db/clicmd/replication.py [moved from nominatim/clicmd/replication.py with 96% similarity]
src/nominatim_db/clicmd/setup.py [moved from nominatim/clicmd/setup.py with 96% similarity]
src/nominatim_db/clicmd/special_phrases.py [moved from nominatim/clicmd/special_phrases.py with 88% similarity]
src/nominatim_db/data/__init__.py [moved from nominatim/tokenizer/token_analysis/__init__.py with 100% similarity]
src/nominatim_db/data/country_info.py [moved from nominatim/data/country_info.py with 94% similarity]
src/nominatim_db/data/place_info.py [moved from nominatim/data/place_info.py with 96% similarity]
src/nominatim_db/data/place_name.py [moved from nominatim/data/place_name.py with 96% similarity]
src/nominatim_db/data/postcode_format.py [moved from nominatim/data/postcode_format.py with 95% similarity]
src/nominatim_db/indexer/__init__.py [moved from nominatim/tools/special_phrases/__init__.py with 100% similarity]
src/nominatim_db/indexer/indexer.py [moved from nominatim/indexer/indexer.py with 95% similarity]
src/nominatim_db/indexer/progress.py [moved from nominatim/indexer/progress.py with 95% similarity]
src/nominatim_db/indexer/runners.py [moved from nominatim/indexer/runners.py with 95% similarity]
src/nominatim_db/tokenizer/__init__.py [moved from nominatim/utils/__init__.py with 100% similarity]
src/nominatim_db/tokenizer/base.py [moved from nominatim/tokenizer/base.py with 96% similarity]
src/nominatim_db/tokenizer/factory.py [moved from nominatim/tokenizer/factory.py with 90% similarity]
src/nominatim_db/tokenizer/icu_rule_loader.py [moved from nominatim/tokenizer/icu_rule_loader.py with 91% similarity]
src/nominatim_db/tokenizer/icu_token_analysis.py [moved from nominatim/tokenizer/icu_token_analysis.py with 85% similarity]
src/nominatim_db/tokenizer/icu_tokenizer.py [moved from nominatim/tokenizer/icu_tokenizer.py with 98% similarity]
src/nominatim_db/tokenizer/legacy_tokenizer.py [moved from nominatim/tokenizer/legacy_tokenizer.py with 98% similarity]
src/nominatim_db/tokenizer/place_sanitizer.py [moved from nominatim/tokenizer/place_sanitizer.py with 79% similarity]
src/nominatim_db/tokenizer/sanitizers/__init__.py [new file with mode: 0644]
src/nominatim_db/tokenizer/sanitizers/base.py [moved from nominatim/tokenizer/sanitizers/base.py with 86% similarity]
src/nominatim_db/tokenizer/sanitizers/clean_housenumbers.py [moved from nominatim/tokenizer/sanitizers/clean_housenumbers.py with 91% similarity]
src/nominatim_db/tokenizer/sanitizers/clean_postcodes.py [moved from nominatim/tokenizer/sanitizers/clean_postcodes.py with 90% similarity]
src/nominatim_db/tokenizer/sanitizers/clean_tiger_tags.py [moved from nominatim/tokenizer/sanitizers/clean_tiger_tags.py with 83% similarity]
src/nominatim_db/tokenizer/sanitizers/config.py [moved from nominatim/tokenizer/sanitizers/config.py with 97% similarity]
src/nominatim_db/tokenizer/sanitizers/delete_tags.py [moved from nominatim/tokenizer/sanitizers/delete_tags.py with 92% similarity]
src/nominatim_db/tokenizer/sanitizers/split_name_list.py [moved from nominatim/tokenizer/sanitizers/split_name_list.py with 81% similarity]
src/nominatim_db/tokenizer/sanitizers/strip_brace_terms.py [moved from nominatim/tokenizer/sanitizers/strip_brace_terms.py with 81% similarity]
src/nominatim_db/tokenizer/sanitizers/tag_analyzer_by_language.py [moved from nominatim/tokenizer/sanitizers/tag_analyzer_by_language.py with 93% similarity]
src/nominatim_db/tokenizer/sanitizers/tag_japanese.py [moved from nominatim/tokenizer/sanitizers/tag_japanese.py with 93% similarity]
src/nominatim_db/tokenizer/token_analysis/__init__.py [new file with mode: 0644]
src/nominatim_db/tokenizer/token_analysis/base.py [moved from nominatim/tokenizer/token_analysis/base.py with 95% similarity]
src/nominatim_db/tokenizer/token_analysis/config_variants.py [moved from nominatim/tokenizer/token_analysis/config_variants.py with 95% similarity]
src/nominatim_db/tokenizer/token_analysis/generic.py [moved from nominatim/tokenizer/token_analysis/generic.py with 93% similarity]
src/nominatim_db/tokenizer/token_analysis/generic_mutation.py [moved from nominatim/tokenizer/token_analysis/generic_mutation.py with 92% similarity]
src/nominatim_db/tokenizer/token_analysis/housenumbers.py [moved from nominatim/tokenizer/token_analysis/housenumbers.py with 90% similarity]
src/nominatim_db/tokenizer/token_analysis/postcodes.py [moved from nominatim/tokenizer/token_analysis/postcodes.py with 92% similarity]
src/nominatim_db/tools/__init__.py [moved from nominatim/tools/__init__.py with 68% similarity]
src/nominatim_db/tools/add_osm_data.py [moved from nominatim/tools/add_osm_data.py with 89% similarity]
src/nominatim_db/tools/admin.py [moved from nominatim/tools/admin.py with 90% similarity]
src/nominatim_db/tools/check_database.py [moved from nominatim/tools/check_database.py with 96% similarity]
src/nominatim_db/tools/collect_os_info.py [moved from nominatim/tools/collect_os_info.py with 95% similarity]
src/nominatim_db/tools/convert_sqlite.py [moved from nominatim/tools/convert_sqlite.py with 97% similarity]
src/nominatim_db/tools/database_import.py [moved from nominatim/tools/database_import.py with 94% similarity]
src/nominatim_db/tools/exec_utils.py [moved from nominatim/tools/exec_utils.py with 78% similarity]
src/nominatim_db/tools/freeze.py [moved from nominatim/tools/freeze.py with 89% similarity]
src/nominatim_db/tools/migration.py [moved from nominatim/tools/migration.py with 97% similarity]
src/nominatim_db/tools/postcodes.py [moved from nominatim/tools/postcodes.py with 96% similarity]
src/nominatim_db/tools/refresh.py [moved from nominatim/tools/refresh.py with 97% similarity]
src/nominatim_db/tools/replication.py [moved from nominatim/tools/replication.py with 96% similarity]
src/nominatim_db/tools/special_phrases/__init__.py [new file with mode: 0644]
src/nominatim_db/tools/special_phrases/importer_statistics.py [moved from nominatim/tools/special_phrases/importer_statistics.py with 95% similarity]
src/nominatim_db/tools/special_phrases/sp_csv_loader.py [moved from nominatim/tools/special_phrases/sp_csv_loader.py with 84% similarity]
src/nominatim_db/tools/special_phrases/sp_importer.py [moved from nominatim/tools/special_phrases/sp_importer.py with 96% similarity]
src/nominatim_db/tools/special_phrases/sp_wiki_loader.py [moved from nominatim/tools/special_phrases/sp_wiki_loader.py with 89% similarity]
src/nominatim_db/tools/special_phrases/special_phrase.py [moved from nominatim/tools/special_phrases/special_phrase.py with 92% similarity]
src/nominatim_db/tools/tiger_data.py [moved from nominatim/tools/tiger_data.py with 90% similarity]
src/nominatim_db/version.py [moved from nominatim/version.py with 95% similarity]

diff --git a/nominatim/__main__.py b/nominatim/__main__.py
deleted file mode 100644 (file)
index b211afa..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-if __name__ == '__main__':
-    from nominatim import cli
-
-    exit(cli.nominatim(module_dir=None, osm2pgsql_path=None))
diff --git a/nominatim/clicmd/__init__.py b/nominatim/clicmd/__init__.py
deleted file mode 100644 (file)
index c8de68c..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-only
-#
-# 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.
-"""
-Subcommand definitions for the command-line tool.
-"""
-# mypy and pylint disagree about the style of explicit exports,
-# see https://github.com/PyCQA/pylint/issues/6006.
-# pylint: disable=useless-import-alias
-
-from nominatim.clicmd.setup import SetupAll as SetupAll
-from nominatim.clicmd.replication import UpdateReplication as UpdateReplication
-from nominatim.clicmd.api import (APISearch as APISearch,
-                                  APIReverse as APIReverse,
-                                  APILookup as APILookup,
-                                  APIDetails as APIDetails,
-                                  APIStatus as APIStatus)
-from nominatim.clicmd.index import UpdateIndex as UpdateIndex
-from nominatim.clicmd.refresh import UpdateRefresh as UpdateRefresh
-from nominatim.clicmd.add_data import UpdateAddData as UpdateAddData
-from nominatim.clicmd.admin import AdminFuncs as AdminFuncs
-from nominatim.clicmd.freeze import SetupFreeze as SetupFreeze
-from nominatim.clicmd.special_phrases import ImportSpecialPhrases as ImportSpecialPhrases
-from nominatim.clicmd.export import QueryExport as QueryExport
-from nominatim.clicmd.convert import ConvertDB as ConvertDB
diff --git a/nominatim/paths.py b/nominatim/paths.py
deleted file mode 100644 (file)
index a34628d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# SPDX-License-Identifier: GPL-2.0-only
-#
-# This file is part of Nominatim. (https://nominatim.org)
-#
-# Copyright (C) 2022 by the Nominatim developer community.
-# For a full list of authors see the git log.
-"""
-Path settings for extra data used by Nominatim.
-"""
-from pathlib import Path
-
-PHPLIB_DIR = (Path(__file__) / '..' / '..' / 'lib-php').resolve()
-SQLLIB_DIR = (Path(__file__) / '..' / '..' / 'lib-sql').resolve()
-DATA_DIR = (Path(__file__) / '..' / '..' / 'data').resolve()
-CONFIG_DIR = (Path(__file__) / '..' / '..' / 'settings').resolve()
similarity index 96%
rename from nominatim/api/__init__.py
rename to src/nominatim_api/__init__.py
index 9e3d6a1dcfc9496df468b050b480c5c492c7d6dc..02cde0b283e625ce5ecd3087772e5d2c9ca46c36 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 The public interface of the Nominatim library.
similarity index 94%
rename from nominatim/api/connection.py
rename to src/nominatim_api/connection.py
index 405213e97659d32fb9ff9d56c2478219690af6a4..66b00ac8138f955056d523fc23f9764f93a62b2b 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Extended SQLAlchemy connection class that also includes access to the schema.
@@ -14,16 +14,16 @@ import asyncio
 import sqlalchemy as sa
 from sqlalchemy.ext.asyncio import AsyncConnection
 
-from nominatim.typing import SaFromClause
-from nominatim.db.sqlalchemy_schema import SearchTables
-from nominatim.db.sqlalchemy_types import Geometry
-from nominatim.api.logging import log
+from nominatim_core.typing import SaFromClause
+from nominatim_core.db.sqlalchemy_schema import SearchTables
+from nominatim_core.db.sqlalchemy_types import Geometry
+from .logging import log
 
 T = TypeVar('T')
 
 class SearchConnection:
     """ An extended SQLAlchemy connection class, that also contains
-        then table definitions. The underlying asynchronous SQLAlchemy
+        the table definitions. The underlying asynchronous SQLAlchemy
         connection can be accessed with the 'connection' property.
         The 't' property is the collection of Nominatim tables.
     """
similarity index 98%
rename from nominatim/api/core.py
rename to src/nominatim_api/core.py
index 333833b030f2d4b2d3775a91f64599768d0d7073..6f91e7a8e4a1574f8cc44d2975a9f57e609d2cf3 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of classes for API access via libraries.
@@ -16,18 +16,18 @@ from pathlib import Path
 import sqlalchemy as sa
 import sqlalchemy.ext.asyncio as sa_asyncio
 
-from nominatim.errors import UsageError
-from nominatim.db.sqlalchemy_schema import SearchTables
-from nominatim.db.async_core_library import PGCORE_LIB, PGCORE_ERROR
-import nominatim.db.sqlite_functions
-from nominatim.config import Configuration
-from nominatim.api.connection import SearchConnection
-from nominatim.api.status import get_status, StatusResult
-from nominatim.api.lookup import get_detailed_place, get_simple_place
-from nominatim.api.reverse import ReverseGeocoder
-from nominatim.api.search import ForwardGeocoder, Phrase, PhraseType, make_query_analyzer
-import nominatim.api.types as ntyp
-from nominatim.api.results import DetailedResult, ReverseResult, SearchResults
+from nominatim_core.errors import UsageError
+from nominatim_core.db.sqlalchemy_schema import SearchTables
+from nominatim_core.db.async_core_library import PGCORE_LIB, PGCORE_ERROR
+from nominatim_core.config import Configuration
+from .sql import sqlite_functions, sqlalchemy_functions #pylint: disable=unused-import
+from .connection import SearchConnection
+from .status import get_status, StatusResult
+from .lookup import get_detailed_place, get_simple_place
+from .reverse import ReverseGeocoder
+from .search import ForwardGeocoder, Phrase, PhraseType, make_query_analyzer
+from . import types as ntyp
+from .results import DetailedResult, ReverseResult, SearchResults
 
 
 class NominatimAPIAsync: #pylint: disable=too-many-instance-attributes
@@ -127,7 +127,7 @@ class NominatimAPIAsync: #pylint: disable=too-many-instance-attributes
                 @sa.event.listens_for(engine.sync_engine, "connect")
                 def _on_sqlite_connect(dbapi_con: Any, _: Any) -> None:
                     dbapi_con.run_async(lambda conn: conn.enable_load_extension(True))
-                    nominatim.db.sqlite_functions.install_custom_functions(dbapi_con)
+                    sqlite_functions.install_custom_functions(dbapi_con)
                     cursor = dbapi_con.cursor()
                     cursor.execute("SELECT load_extension('mod_spatialite')")
                     cursor.execute('SELECT SetDecimalPrecision(7)')
similarity index 98%
rename from nominatim/api/localization.py
rename to src/nominatim_api/localization.py
index 09fe27c50acf8b4f55cfd8342ae1a76097f4ccfe..5964bbee8d1084af8291da8a52184c776e814b3b 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Helper functions for localizing names of results.
similarity index 99%
rename from nominatim/api/logging.py
rename to src/nominatim_api/logging.py
index 30999a3f31282a085520baabf1a6b308f9d6ed7b..7df36ec12f21e0717497272743ff7c22d0b71a02 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for specialised logging with HTML output.
similarity index 97%
rename from nominatim/api/lookup.py
rename to src/nominatim_api/lookup.py
index 402b85316853173967c13c73f7f0a30aabc97c92..e451edbee0a4af36e53bee3687082d1a6f6e803c 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of place lookup by ID.
@@ -12,18 +12,17 @@ import datetime as dt
 
 import sqlalchemy as sa
 
-from nominatim.typing import SaColumn, SaRow, SaSelect
-from nominatim.api.connection import SearchConnection
-import nominatim.api.types as ntyp
-import nominatim.api.results as nres
-from nominatim.api.logging import log
+from nominatim_core.typing import SaColumn, SaRow, SaSelect
+from .connection import SearchConnection
+from .logging import log
+from . import types as ntyp
+from . import results as nres
 
 RowFunc = Callable[[Optional[SaRow], Type[nres.BaseResultT]], Optional[nres.BaseResultT]]
 
 GeomFunc = Callable[[SaSelect, SaColumn], SaSelect]
 
 
-
 async def find_in_placex(conn: SearchConnection, place: ntyp.PlaceRef,
                          add_geometries: GeomFunc) -> Optional[SaRow]:
     """ Search for the given place in the placex table and return the
similarity index 94%
rename from nominatim/api/result_formatting.py
rename to src/nominatim_api/result_formatting.py
index 4670a1d6d16a2766d8a589a60d25169cdf9b4beb..fc22fc0f28ba4c1c430d78601aa7d92d9b258904 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Helper classes and functions for formatting results into API responses.
similarity index 98%
rename from nominatim/api/results.py
rename to src/nominatim_api/results.py
index 47fb85114634de804f36fa569dc79986894dccc4..4256e0b7f8b09f770d38c944bcfd5380dfca544e 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Dataclasses for search results and helper functions to fill them.
@@ -18,12 +18,12 @@ import datetime as dt
 
 import sqlalchemy as sa
 
-from nominatim.typing import SaSelect, SaRow
-from nominatim.db.sqlalchemy_types import Geometry
-from nominatim.api.types import Point, Bbox, LookupDetails
-from nominatim.api.connection import SearchConnection
-from nominatim.api.logging import log
-from nominatim.api.localization import Locales
+from nominatim_core.typing import SaSelect, SaRow
+from nominatim_core.db.sqlalchemy_types import Geometry
+from .types import Point, Bbox, LookupDetails
+from .connection import SearchConnection
+from .logging import log
+from .localization import Locales
 
 # This file defines complex result data classes.
 # pylint: disable=too-many-instance-attributes
similarity index 98%
rename from nominatim/api/reverse.py
rename to src/nominatim_api/reverse.py
index 5471455962e991aabf728aa8448568eff2bd876f..83b0983af62958c25f8628b90c116bdbbe091da9 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of reverse geocoding.
@@ -12,13 +12,13 @@ import functools
 
 import sqlalchemy as sa
 
-from nominatim.typing import SaColumn, SaSelect, SaFromClause, SaLabel, SaRow,\
-                             SaBind, SaLambdaSelect
-from nominatim.api.connection import SearchConnection
-import nominatim.api.results as nres
-from nominatim.api.logging import log
-from nominatim.api.types import AnyPoint, DataLayer, ReverseDetails, GeometryFormat, Bbox
-from nominatim.db.sqlalchemy_types import Geometry
+from nominatim_core.typing import SaColumn, SaSelect, SaFromClause, SaLabel, SaRow,\
+                                  SaBind, SaLambdaSelect
+from nominatim_core.db.sqlalchemy_types import Geometry
+from .connection import SearchConnection
+from . import results as nres
+from .logging import log
+from .types import AnyPoint, DataLayer, ReverseDetails, GeometryFormat, Bbox
 
 # In SQLAlchemy expression which compare with NULL need to be expressed with
 # the equal sign.
similarity index 88%
rename from nominatim/api/search/__init__.py
rename to src/nominatim_api/search/__init__.py
index f60cbe1e22c629d62a7c6d5690b3ad5af79cd045..91be4253f1ccc8af2ed4ecf033b6dbe6cce686dc 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Module for forward search.
similarity index 97%
rename from nominatim/api/search/db_search_builder.py
rename to src/nominatim_api/search/db_search_builder.py
index c2f98c4775621719faa359f72b8c36137613edee..29a853a0f387504db8ed651655256e66b54ea363 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Conversion from token assignment to an abstract DB search.
@@ -10,12 +10,12 @@ Conversion from token assignment to an abstract DB search.
 from typing import Optional, List, Tuple, Iterator, Dict
 import heapq
 
-from nominatim.api.types import SearchDetails, DataLayer
-from nominatim.api.search.query import QueryStruct, Token, TokenType, TokenRange, BreakType
-from nominatim.api.search.token_assignment import TokenAssignment
-import nominatim.api.search.db_search_fields as dbf
-import nominatim.api.search.db_searches as dbs
-import nominatim.api.search.db_search_lookups as lookups
+from ..types import SearchDetails, DataLayer
+from .query import QueryStruct, Token, TokenType, TokenRange, BreakType
+from .token_assignment import TokenAssignment
+from . import db_search_fields as dbf
+from . import db_searches as dbs
+from . import db_search_lookups as lookups
 
 
 def wrap_near_search(categories: List[Tuple[str, str]],
similarity index 96%
rename from nominatim/api/search/db_search_fields.py
rename to src/nominatim_api/search/db_search_fields.py
index 7f775277e6960a7dc37d76a7181b5ad4e4273084..df2b32a77a9d61afeb12d1df3b238163c129c0e2 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Data structures for more complex fields in abstract search descriptions.
@@ -12,10 +12,10 @@ import dataclasses
 
 import sqlalchemy as sa
 
-from nominatim.typing import SaFromClause, SaColumn, SaExpression
-from nominatim.api.search.query import Token
-import nominatim.api.search.db_search_lookups as lookups
-from nominatim.utils.json_writer import JsonWriter
+from nominatim_core.typing import SaFromClause, SaColumn, SaExpression
+from .query import Token
+from . import db_search_lookups as lookups
+from nominatim_core.utils.json_writer import JsonWriter
 
 
 @dataclasses.dataclass
similarity index 96%
rename from nominatim/api/search/db_search_lookups.py
rename to src/nominatim_api/search/db_search_lookups.py
index aa5cef5f47e491d68fa6b69961f303fcb3b8dcb0..faabd82794c0ac1979e464809815da569ab9a1ad 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of lookup functions for the search_name table.
@@ -12,8 +12,8 @@ from typing import List, Any
 import sqlalchemy as sa
 from sqlalchemy.ext.compiler import compiles
 
-from nominatim.typing import SaFromClause
-from nominatim.db.sqlalchemy_types import IntArray
+from nominatim_core.typing import SaFromClause
+from nominatim_core.db.sqlalchemy_types import IntArray
 
 # pylint: disable=consider-using-f-string
 
similarity index 98%
rename from nominatim/api/search/db_searches.py
rename to src/nominatim_api/search/db_searches.py
index d74812e682a3453a55ea209c83ebf22a61e75a31..f5c431460d6a34677d37c645e32c047c60c753ac 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of the actual database accesses for forward search.
@@ -12,13 +12,13 @@ import abc
 
 import sqlalchemy as sa
 
-from nominatim.typing import SaFromClause, SaScalarSelect, SaColumn, \
-                             SaExpression, SaSelect, SaLambdaSelect, SaRow, SaBind
-from nominatim.api.connection import SearchConnection
-from nominatim.api.types import SearchDetails, DataLayer, GeometryFormat, Bbox
-import nominatim.api.results as nres
-from nominatim.api.search.db_search_fields import SearchData, WeightedCategories
-from nominatim.db.sqlalchemy_types import Geometry, IntArray
+from nominatim_core.typing import SaFromClause, SaScalarSelect, SaColumn, \
+                                  SaExpression, SaSelect, SaLambdaSelect, SaRow, SaBind
+from nominatim_core.db.sqlalchemy_types import Geometry, IntArray
+from ..connection import SearchConnection
+from ..types import SearchDetails, DataLayer, GeometryFormat, Bbox
+from .. import results as nres
+from .db_search_fields import SearchData, WeightedCategories
 
 #pylint: disable=singleton-comparison,not-callable
 #pylint: disable=too-many-branches,too-many-arguments,too-many-locals,too-many-statements
similarity index 94%
rename from nominatim/api/search/geocoder.py
rename to src/nominatim_api/search/geocoder.py
index 775606aab755d6f68180e696828115c285a99f11..b5fd1f002e8483ed070dcad714351e04cdeefb64 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Public interface to the search code.
@@ -13,15 +13,15 @@ import re
 import datetime as dt
 import difflib
 
-from nominatim.api.connection import SearchConnection
-from nominatim.api.types import SearchDetails
-from nominatim.api.results import SearchResult, SearchResults, add_result_details
-from nominatim.api.search.token_assignment import yield_token_assignments
-from nominatim.api.search.db_search_builder import SearchBuilder, build_poi_search, wrap_near_search
-from nominatim.api.search.db_searches import AbstractSearch
-from nominatim.api.search.query_analyzer_factory import make_query_analyzer, AbstractQueryAnalyzer
-from nominatim.api.search.query import Phrase, QueryStruct
-from nominatim.api.logging import log
+from ..connection import SearchConnection
+from ..types import SearchDetails
+from ..results import SearchResult, SearchResults, add_result_details
+from ..logging import log
+from .token_assignment import yield_token_assignments
+from .db_search_builder import SearchBuilder, build_poi_search, wrap_near_search
+from .db_searches import AbstractSearch
+from .query_analyzer_factory import make_query_analyzer, AbstractQueryAnalyzer
+from .query import Phrase, QueryStruct
 
 class ForwardGeocoder:
     """ Main class responsible for place search.
similarity index 97%
rename from nominatim/api/search/icu_tokenizer.py
rename to src/nominatim_api/search/icu_tokenizer.py
index eb90c122eb43277a18b2d71bf48eb9ab99a375ac..426656797c873b2a4419c3913d4ac3f66d5c4610 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of query analysis for the ICU tokenizer.
@@ -16,12 +16,12 @@ from icu import Transliterator
 
 import sqlalchemy as sa
 
-from nominatim.typing import SaRow
-from nominatim.api.connection import SearchConnection
-from nominatim.api.logging import log
-from nominatim.api.search import query as qmod
-from nominatim.api.search.query_analyzer_factory import AbstractQueryAnalyzer
-from nominatim.db.sqlalchemy_types import Json
+from nominatim_core.typing import SaRow
+from nominatim_core.db.sqlalchemy_types import Json
+from ..connection import SearchConnection
+from ..logging import log
+from ..search import query as qmod
+from ..search.query_analyzer_factory import AbstractQueryAnalyzer
 
 
 DB_TO_TOKEN_TYPE = {
similarity index 97%
rename from nominatim/api/search/legacy_tokenizer.py
rename to src/nominatim_api/search/legacy_tokenizer.py
index 031f2456c455d108c21e1ea14a048b9f6d396df2..b49d3ae6b200832b2fcce1f81f997c16d7776827 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of query analysis for the legacy tokenizer.
@@ -14,11 +14,11 @@ import dataclasses
 
 import sqlalchemy as sa
 
-from nominatim.typing import SaRow
-from nominatim.api.connection import SearchConnection
-from nominatim.api.logging import log
-from nominatim.api.search import query as qmod
-from nominatim.api.search.query_analyzer_factory import AbstractQueryAnalyzer
+from nominatim_core.typing import SaRow
+from ..connection import SearchConnection
+from ..logging import log
+from . import query as qmod
+from .query_analyzer_factory import AbstractQueryAnalyzer
 
 def yield_words(terms: List[str], start: int) -> Iterator[Tuple[str, qmod.TokenRange]]:
     """ Return all combinations of words in the terms list after the
similarity index 99%
rename from nominatim/api/search/query.py
rename to src/nominatim_api/search/query.py
index a0d7add1b70118e32d628b4894a893386d09d996..04b7f1b8a1e6cf695ccbd881a6f034332727036a 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Datastructures for a tokenized query.
similarity index 88%
rename from nominatim/api/search/query_analyzer_factory.py
rename to src/nominatim_api/search/query_analyzer_factory.py
index 3666b7fcf5c33cf33cd5ab416ede48a7d22f4d34..ec8154ef3a568353ff31b6c60e5694adeee3a96c 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Factory for creating a query analyzer for the configured tokenizer.
@@ -12,11 +12,11 @@ from abc import ABC, abstractmethod
 from pathlib import Path
 import importlib
 
-from nominatim.api.logging import log
-from nominatim.api.connection import SearchConnection
+from ..logging import log
+from ..connection import SearchConnection
 
 if TYPE_CHECKING:
-    from nominatim.api.search.query import Phrase, QueryStruct
+    from .query import Phrase, QueryStruct
 
 class AbstractQueryAnalyzer(ABC):
     """ Class for analysing incoming queries.
similarity index 99%
rename from nominatim/api/search/token_assignment.py
rename to src/nominatim_api/search/token_assignment.py
index 95eb7f7059cd4c3339cbb75c903be6df536cd41d..5ac63d6f844e013cbfc94e50eae7e830cd68f262 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Create query interpretations where each vertice in the query is assigned
@@ -11,8 +11,8 @@ a specific function (expressed as a token type).
 from typing import Optional, List, Iterator
 import dataclasses
 
-import nominatim.api.search.query as qmod
-from nominatim.api.logging import log
+from ..logging import log
+from . import query as qmod
 
 # pylint: disable=too-many-return-statements,too-many-branches
 
similarity index 96%
rename from nominatim/server/falcon/server.py
rename to src/nominatim_api/server/falcon/server.py
index bdae350744e6774ff927f8bec597da8b05ee90e6..851b096437d4d5730ed2e7c4f5da9f60d1caf8c6 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Server implementation using the falcon webserver framework.
@@ -14,10 +14,10 @@ import asyncio
 
 from falcon.asgi import App, Request, Response
 
-from nominatim.api import NominatimAPIAsync
-import nominatim.api.v1 as api_impl
-import nominatim.api.logging as loglib
-from nominatim.config import Configuration
+from nominatim_core.config import Configuration
+from ...core import NominatimAPIAsync
+from ... import v1 as api_impl
+from ... import logging as loglib
 
 class HTTPNominatimError(Exception):
     """ A special exception class for errors raised during processing.
similarity index 95%
rename from nominatim/server/starlette/server.py
rename to src/nominatim_api/server/starlette/server.py
index c98289915269fbefa8f56dea30f25e74a7893d3b..dd35cd6e9e55072408bd77ed23636ed1c3d90fd0 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Server implementation using the starlette webserver framework.
@@ -21,10 +21,10 @@ from starlette.middleware import Middleware
 from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
 from starlette.middleware.cors import CORSMiddleware
 
-from nominatim.api import NominatimAPIAsync
-import nominatim.api.v1 as api_impl
-import nominatim.api.logging as loglib
-from nominatim.config import Configuration
+from nominatim_core.config import Configuration
+from ...core import NominatimAPIAsync
+from ... import v1 as api_impl
+from ... import logging as loglib
 
 class ParamWrapper(api_impl.ASGIAdaptor):
     """ Adaptor class for server glue to Starlette framework.
similarity index 98%
rename from nominatim/db/sqlalchemy_functions.py
rename to src/nominatim_api/sql/sqlalchemy_functions.py
index f576d32f06a175191823e2375dfb29a57630966b..402027493f086645e1b572411127e08f33f509db 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Custom functions and expressions for SQLAlchemy.
@@ -13,7 +13,7 @@ from typing import Any
 import sqlalchemy as sa
 from sqlalchemy.ext.compiler import compiles
 
-from nominatim.typing import SaColumn
+from nominatim_core.typing import SaColumn
 
 # pylint: disable=all
 
similarity index 98%
rename from nominatim/db/sqlite_functions.py
rename to src/nominatim_api/sql/sqlite_functions.py
index a56c04edc8f6a1eb2a1d3933cc4b5924a26cb38c..43865e951ef0e4d26361d5476830da0d5016fd1a 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Custom functions for SQLite.
similarity index 71%
rename from nominatim/api/status.py
rename to src/nominatim_api/status.py
index 1069184c88e8bc9655111b737b3a060731d931e6..ea88a467d08b0646a0c3a1226309a9284326d2f1 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Classes and function related to status call.
@@ -13,8 +13,8 @@ import dataclasses
 
 import sqlalchemy as sa
 
-from nominatim.api.connection import SearchConnection
-from nominatim import version
+from .connection import SearchConnection
+from .version import NOMINATIM_API_VERSION
 
 @dataclasses.dataclass
 class StatusResult:
@@ -22,9 +22,9 @@ class StatusResult:
     """
     status: int
     message: str
-    software_version = version.NOMINATIM_VERSION
+    software_version = NOMINATIM_API_VERSION
     data_updated: Optional[dt.datetime] = None
-    database_version: Optional[version.NominatimVersion] = None
+    database_version: Optional[str] = None
 
 
 async def get_status(conn: SearchConnection) -> StatusResult:
@@ -44,8 +44,7 @@ async def get_status(conn: SearchConnection) -> StatusResult:
 
     # Database version
     try:
-        verstr = await conn.get_property('database_version')
-        status.database_version = version.parse_version(verstr)
+        status.database_version = await conn.get_property('database_version')
     except ValueError:
         pass
 
similarity index 99%
rename from nominatim/api/types.py
rename to src/nominatim_api/types.py
index e93015fcd0a8ce9cbfa67b2cb602674695b4bb11..f2ad4f356e0c5c8e2ecf0029d4da4b234dd76250 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Complex datatypes used by the Nominatim API.
@@ -16,8 +16,8 @@ import math
 from struct import unpack
 from binascii import unhexlify
 
-from nominatim.errors import UsageError
-from nominatim.api.localization import Locales
+from nominatim_core.errors import UsageError
+from .localization import Locales
 
 # pylint: disable=no-member,too-many-boolean-expressions,too-many-instance-attributes
 
similarity index 51%
rename from nominatim/api/v1/__init__.py
rename to src/nominatim_api/v1/__init__.py
index 8c00af2db7c891d23c6e0677cb1eeca0a34f5858..87e8e1c53cbb4f06c19039332d9107ee2c59ec5e 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of API version v1 (aka the legacy version).
@@ -10,11 +10,11 @@ Implementation of API version v1 (aka the legacy version).
 
 #pylint: disable=useless-import-alias
 
-from nominatim.api.v1.server_glue import (ASGIAdaptor as ASGIAdaptor,
-                                          EndpointFunc as EndpointFunc,
-                                          ROUTES as ROUTES)
+from .server_glue import (ASGIAdaptor as ASGIAdaptor,
+                          EndpointFunc as EndpointFunc,
+                          ROUTES as ROUTES)
 
-import nominatim.api.v1.format as _format
+from . import format as _format
 
 list_formats = _format.dispatch.list_formats
 supports_format = _format.dispatch.supports_format
similarity index 96%
rename from nominatim/api/v1/classtypes.py
rename to src/nominatim_api/v1/classtypes.py
index b85d54011f5fc6c4eab0dd0a2681a5215dbaa52f..66708593b331ec9bcab8a492925b0a03aa63c5a8 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Hard-coded information about tag categories.
@@ -12,7 +12,8 @@ version a more flexible formatting is required.
 """
 from typing import Tuple, Optional, Mapping, Union
 
-import nominatim.api as napi
+from ..results import ReverseResult, SearchResult
+from ..types import Bbox
 
 def get_label_tag(category: Tuple[str, str], extratags: Optional[Mapping[str, str]],
                   rank: int, country: Optional[str]) -> str:
@@ -41,7 +42,7 @@ def get_label_tag(category: Tuple[str, str], extratags: Optional[Mapping[str, st
     return label.lower().replace(' ', '_')
 
 
-def bbox_from_result(result: Union[napi.ReverseResult, napi.SearchResult]) -> napi.Bbox:
+def bbox_from_result(result: Union[ReverseResult, SearchResult]) -> Bbox:
     """ Compute a bounding box for the result. For ways and relations
         a given boundingbox is used. For all other object, a box is computed
         around the centroid according to dimensions derived from the
@@ -49,7 +50,7 @@ def bbox_from_result(result: Union[napi.ReverseResult, napi.SearchResult]) -> na
     """
     if (result.osm_object and result.osm_object[0] == 'N') or result.bbox is None:
         extent = NODE_EXTENT.get(result.category, 0.00005)
-        return napi.Bbox.from_point(result.centroid, extent)
+        return Bbox.from_point(result.centroid, extent)
 
     return result.bbox
 
similarity index 76%
rename from nominatim/api/v1/format.py
rename to src/nominatim_api/v1/format.py
index 53156fdd41132ada43139546d36ec0e470590858..d8faa482c3cbf609c1b0e11c78d2b8d9a648f42e 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Output formatters for API version v1.
@@ -11,11 +11,14 @@ from typing import List, Dict, Mapping, Any
 import collections
 import datetime as dt
 
-import nominatim.api as napi
-from nominatim.api.result_formatting import FormatDispatcher
-from nominatim.api.v1.classtypes import ICONS
-from nominatim.api.v1 import format_json, format_xml
-from nominatim.utils.json_writer import JsonWriter
+from nominatim_core.utils.json_writer import JsonWriter
+from ..status import StatusResult
+from ..results import DetailedResult, ReverseResults, SearchResults, \
+                      AddressLines, AddressLine
+from ..localization import Locales
+from ..result_formatting import FormatDispatcher
+from .classtypes import ICONS
+from . import format_json, format_xml
 
 class RawDataList(List[Dict[str, Any]]):
     """ Data type for formatting raw data lists 'as is' in json.
@@ -23,16 +26,16 @@ class RawDataList(List[Dict[str, Any]]):
 
 dispatch = FormatDispatcher()
 
-@dispatch.format_func(napi.StatusResult, 'text')
-def _format_status_text(result: napi.StatusResult, _: Mapping[str, Any]) -> str:
+@dispatch.format_func(StatusResult, 'text')
+def _format_status_text(result: StatusResult, _: Mapping[str, Any]) -> str:
     if result.status:
         return f"ERROR: {result.message}"
 
     return 'OK'
 
 
-@dispatch.format_func(napi.StatusResult, 'json')
-def _format_status_json(result: napi.StatusResult, _: Mapping[str, Any]) -> str:
+@dispatch.format_func(StatusResult, 'json')
+def _format_status_json(result: StatusResult, _: Mapping[str, Any]) -> str:
     out = JsonWriter()
 
     out.start_object()\
@@ -47,8 +50,8 @@ def _format_status_json(result: napi.StatusResult, _: Mapping[str, Any]) -> str:
     return out()
 
 
-def _add_address_row(writer: JsonWriter, row: napi.AddressLine,
-                     locales: napi.Locales) -> None:
+def _add_address_row(writer: JsonWriter, row: AddressLine,
+                     locales: Locales) -> None:
     writer.start_object()\
             .keyval('localname', locales.display_name(row.names))\
             .keyval_not_none('place_id', row.place_id)
@@ -69,8 +72,8 @@ def _add_address_row(writer: JsonWriter, row: napi.AddressLine,
         .end_object()
 
 
-def _add_address_rows(writer: JsonWriter, section: str, rows: napi.AddressLines,
-                      locales: napi.Locales) -> None:
+def _add_address_rows(writer: JsonWriter, section: str, rows: AddressLines,
+                      locales: Locales) -> None:
     writer.key(section).start_array()
     for row in rows:
         _add_address_row(writer, row, locales)
@@ -78,8 +81,8 @@ def _add_address_rows(writer: JsonWriter, section: str, rows: napi.AddressLines,
     writer.end_array().next()
 
 
-def _add_parent_rows_grouped(writer: JsonWriter, rows: napi.AddressLines,
-                             locales: napi.Locales) -> None:
+def _add_parent_rows_grouped(writer: JsonWriter, rows: AddressLines,
+                             locales: Locales) -> None:
     # group by category type
     data = collections.defaultdict(list)
     for row in rows:
@@ -98,9 +101,9 @@ def _add_parent_rows_grouped(writer: JsonWriter, rows: napi.AddressLines,
     writer.end_object().next()
 
 
-@dispatch.format_func(napi.DetailedResult, 'json')
-def _format_details_json(result: napi.DetailedResult, options: Mapping[str, Any]) -> str:
-    locales = options.get('locales', napi.Locales())
+@dispatch.format_func(DetailedResult, 'json')
+def _format_details_json(result: DetailedResult, options: Mapping[str, Any]) -> str:
+    locales = options.get('locales', Locales())
     geom = result.geometry.get('geojson')
     centroid = result.centroid.to_geojson()
 
@@ -169,41 +172,41 @@ def _format_details_json(result: napi.DetailedResult, options: Mapping[str, Any]
     return out()
 
 
-@dispatch.format_func(napi.ReverseResults, 'xml')
-def _format_reverse_xml(results: napi.ReverseResults, options: Mapping[str, Any]) -> str:
+@dispatch.format_func(ReverseResults, 'xml')
+def _format_reverse_xml(results: ReverseResults, options: Mapping[str, Any]) -> str:
     return format_xml.format_base_xml(results,
                                       options, True, 'reversegeocode',
                                       {'querystring': options.get('query', '')})
 
 
-@dispatch.format_func(napi.ReverseResults, 'geojson')
-def _format_reverse_geojson(results: napi.ReverseResults,
+@dispatch.format_func(ReverseResults, 'geojson')
+def _format_reverse_geojson(results: ReverseResults,
                             options: Mapping[str, Any]) -> str:
     return format_json.format_base_geojson(results, options, True)
 
 
-@dispatch.format_func(napi.ReverseResults, 'geocodejson')
-def _format_reverse_geocodejson(results: napi.ReverseResults,
+@dispatch.format_func(ReverseResults, 'geocodejson')
+def _format_reverse_geocodejson(results: ReverseResults,
                                 options: Mapping[str, Any]) -> str:
     return format_json.format_base_geocodejson(results, options, True)
 
 
-@dispatch.format_func(napi.ReverseResults, 'json')
-def _format_reverse_json(results: napi.ReverseResults,
+@dispatch.format_func(ReverseResults, 'json')
+def _format_reverse_json(results: ReverseResults,
                          options: Mapping[str, Any]) -> str:
     return format_json.format_base_json(results, options, True,
                                         class_label='class')
 
 
-@dispatch.format_func(napi.ReverseResults, 'jsonv2')
-def _format_reverse_jsonv2(results: napi.ReverseResults,
+@dispatch.format_func(ReverseResults, 'jsonv2')
+def _format_reverse_jsonv2(results: ReverseResults,
                            options: Mapping[str, Any]) -> str:
     return format_json.format_base_json(results, options, True,
                                         class_label='category')
 
 
-@dispatch.format_func(napi.SearchResults, 'xml')
-def _format_search_xml(results: napi.SearchResults, options: Mapping[str, Any]) -> str:
+@dispatch.format_func(SearchResults, 'xml')
+def _format_search_xml(results: SearchResults, options: Mapping[str, Any]) -> str:
     extra = {'querystring': options.get('query', '')}
     for attr in ('more_url', 'exclude_place_ids', 'viewbox'):
         if options.get(attr):
@@ -213,27 +216,27 @@ def _format_search_xml(results: napi.SearchResults, options: Mapping[str, Any])
 
 
 
-@dispatch.format_func(napi.SearchResults, 'geojson')
-def _format_search_geojson(results: napi.SearchResults,
+@dispatch.format_func(SearchResults, 'geojson')
+def _format_search_geojson(results: SearchResults,
                             options: Mapping[str, Any]) -> str:
     return format_json.format_base_geojson(results, options, False)
 
 
-@dispatch.format_func(napi.SearchResults, 'geocodejson')
-def _format_search_geocodejson(results: napi.SearchResults,
+@dispatch.format_func(SearchResults, 'geocodejson')
+def _format_search_geocodejson(results: SearchResults,
                                 options: Mapping[str, Any]) -> str:
     return format_json.format_base_geocodejson(results, options, False)
 
 
-@dispatch.format_func(napi.SearchResults, 'json')
-def _format_search_json(results: napi.SearchResults,
+@dispatch.format_func(SearchResults, 'json')
+def _format_search_json(results: SearchResults,
                          options: Mapping[str, Any]) -> str:
     return format_json.format_base_json(results, options, False,
                                         class_label='class')
 
 
-@dispatch.format_func(napi.SearchResults, 'jsonv2')
-def _format_search_jsonv2(results: napi.SearchResults,
+@dispatch.format_func(SearchResults, 'jsonv2')
+def _format_search_jsonv2(results: SearchResults,
                            options: Mapping[str, Any]) -> str:
     return format_json.format_base_json(results, options, False,
                                         class_label='category')
similarity index 94%
rename from nominatim/api/v1/format_json.py
rename to src/nominatim_api/v1/format_json.py
index 1c17a032c586c6308023da8927dcbb0c8edef407..2c50dec42578d144fe794be67b31045c554c7b92 100644 (file)
@@ -2,16 +2,16 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Helper functions for output of results in json formats.
 """
 from typing import Mapping, Any, Optional, Tuple, Union
 
-import nominatim.api as napi
-import nominatim.api.v1.classtypes as cl
-from nominatim.utils.json_writer import JsonWriter
+from nominatim_core.utils.json_writer import JsonWriter
+from ..results import AddressLines, ReverseResults, SearchResults
+from . import classtypes as cl
 
 #pylint: disable=too-many-branches
 
@@ -21,7 +21,7 @@ def _write_osm_id(out: JsonWriter, osm_object: Optional[Tuple[str, int]]) -> Non
            .keyval('osm_id', osm_object[1])
 
 
-def _write_typed_address(out: JsonWriter, address: Optional[napi.AddressLines],
+def _write_typed_address(out: JsonWriter, address: Optional[AddressLines],
                                country_code: Optional[str]) -> None:
     parts = {}
     for line in (address or []):
@@ -42,7 +42,7 @@ def _write_typed_address(out: JsonWriter, address: Optional[napi.AddressLines],
 
 
 def _write_geocodejson_address(out: JsonWriter,
-                               address: Optional[napi.AddressLines],
+                               address: Optional[AddressLines],
                                obj_place_id: Optional[int],
                                country_code: Optional[str]) -> None:
     extra = {}
@@ -66,7 +66,7 @@ def _write_geocodejson_address(out: JsonWriter,
         out.keyval('country_code', country_code)
 
 
-def format_base_json(results: Union[napi.ReverseResults, napi.SearchResults],
+def format_base_json(results: Union[ReverseResults, SearchResults],
                      options: Mapping[str, Any], simple: bool,
                      class_label: str) -> str:
     """ Return the result list as a simple json string in custom Nominatim format.
@@ -142,7 +142,7 @@ def format_base_json(results: Union[napi.ReverseResults, napi.SearchResults],
     return out()
 
 
-def format_base_geojson(results: Union[napi.ReverseResults, napi.SearchResults],
+def format_base_geojson(results: Union[ReverseResults, SearchResults],
                         options: Mapping[str, Any],
                         simple: bool) -> str:
     """ Return the result list as a geojson string.
@@ -204,7 +204,7 @@ def format_base_geojson(results: Union[napi.ReverseResults, napi.SearchResults],
     return out()
 
 
-def format_base_geocodejson(results: Union[napi.ReverseResults, napi.SearchResults],
+def format_base_geocodejson(results: Union[ReverseResults, SearchResults],
                             options: Mapping[str, Any], simple: bool) -> str:
     """ Return the result list as a geocodejson string.
     """
similarity index 91%
rename from nominatim/api/v1/format_xml.py
rename to src/nominatim_api/v1/format_xml.py
index c6ea17c01f9a4559bfb7ca1529a4212059daac65..aafaec35ab9502e3686a51274e3896d62f1fd88e 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Helper functions for output of results in XML format.
@@ -11,12 +11,13 @@ from typing import Mapping, Any, Optional, Union
 import datetime as dt
 import xml.etree.ElementTree as ET
 
-import nominatim.api as napi
-import nominatim.api.v1.classtypes as cl
+from ..results import AddressLines, ReverseResult, ReverseResults, \
+                      SearchResult, SearchResults
+from . import classtypes as cl
 
 #pylint: disable=too-many-branches
 
-def _write_xml_address(root: ET.Element, address: napi.AddressLines,
+def _write_xml_address(root: ET.Element, address: AddressLines,
                        country_code: Optional[str]) -> None:
     parts = {}
     for line in address:
@@ -36,7 +37,7 @@ def _write_xml_address(root: ET.Element, address: napi.AddressLines,
         ET.SubElement(root, 'country_code').text = country_code
 
 
-def _create_base_entry(result: Union[napi.ReverseResult, napi.SearchResult],
+def _create_base_entry(result: Union[ReverseResult, SearchResult],
                        root: ET.Element, simple: bool) -> ET.Element:
     place = ET.SubElement(root, 'result' if simple else 'place')
     if result.place_id is not None:
@@ -82,7 +83,7 @@ def _create_base_entry(result: Union[napi.ReverseResult, napi.SearchResult],
     return place
 
 
-def format_base_xml(results: Union[napi.ReverseResults, napi.SearchResults],
+def format_base_xml(results: Union[ReverseResults, SearchResults],
                     options: Mapping[str, Any],
                     simple: bool, xml_root_tag: str,
                     xml_extra_info: Mapping[str, str]) -> str:
similarity index 97%
rename from nominatim/api/v1/helpers.py
rename to src/nominatim_api/v1/helpers.py
index ffd06a6a35e3439d4b47ae92a4bcd4d321506521..9c2208348c9926573e31584f918786a2068ab19f 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Helper function for parsing parameters and and outputting data
@@ -12,8 +12,8 @@ from typing import Tuple, Optional, Any, Dict, Iterable
 from itertools import chain
 import re
 
-from nominatim.api.results import SearchResult, SearchResults, SourceTable
-from nominatim.api.types import SearchDetails, GeometryFormat
+from ..results import SearchResult, SearchResults, SourceTable
+from ..types import SearchDetails, GeometryFormat
 
 REVERSE_MAX_RANKS = [2, 2, 2,   # 0-2   Continent/Sea
                      4, 4,      # 3-4   Country
similarity index 85%
rename from nominatim/api/v1/server_glue.py
rename to src/nominatim_api/v1/server_glue.py
index f08e804292a4e674a0266e9c4454b00dbd8d8feb..67def74e135adbcf5a6c515560af1620dca01be6 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Generic part of the server implementation of the v1 API.
@@ -17,13 +17,17 @@ from urllib.parse import urlencode
 
 import sqlalchemy as sa
 
-from nominatim.errors import UsageError
-from nominatim.config import Configuration
-import nominatim.api as napi
-import nominatim.api.logging as loglib
-from nominatim.api.v1.format import dispatch as formatting
-from nominatim.api.v1.format import RawDataList
-from nominatim.api.v1 import helpers
+from nominatim_core.errors import UsageError
+from nominatim_core.config import Configuration
+from .. import logging as loglib
+from ..core import NominatimAPIAsync
+from .format import dispatch as formatting
+from .format import RawDataList
+from ..types import DataLayer, GeometryFormat, PlaceRef, PlaceID, OsmID, Point
+from ..status import StatusResult
+from ..results import DetailedResult, ReverseResults, SearchResult, SearchResults
+from ..localization import Locales
+from . import helpers
 
 CONTENT_TEXT = 'text/plain; charset=utf-8'
 CONTENT_XML = 'text/xml; charset=utf-8'
@@ -211,16 +215,16 @@ class ASGIAdaptor(abc.ABC):
         return False
 
 
-    def get_layers(self) -> Optional[napi.DataLayer]:
+    def get_layers(self) -> Optional[DataLayer]:
         """ Return a parsed version of the layer parameter.
         """
         param = self.get('layer', None)
         if param is None:
             return None
 
-        return cast(napi.DataLayer,
-                    reduce(napi.DataLayer.__or__,
-                           (getattr(napi.DataLayer, s.upper()) for s in param.split(','))))
+        return cast(DataLayer,
+                    reduce(DataLayer.__or__,
+                           (getattr(DataLayer, s.upper()) for s in param.split(','))))
 
 
     def parse_format(self, result_type: Type[Any], default: str) -> str:
@@ -243,19 +247,19 @@ class ASGIAdaptor(abc.ABC):
         """ Create details structure from the supplied geometry parameters.
         """
         numgeoms = 0
-        output = napi.GeometryFormat.NONE
+        output = GeometryFormat.NONE
         if self.get_bool('polygon_geojson', False):
-            output |= napi.GeometryFormat.GEOJSON
+            output |= GeometryFormat.GEOJSON
             numgeoms += 1
         if fmt not in ('geojson', 'geocodejson'):
             if self.get_bool('polygon_text', False):
-                output |= napi.GeometryFormat.TEXT
+                output |= GeometryFormat.TEXT
                 numgeoms += 1
             if self.get_bool('polygon_kml', False):
-                output |= napi.GeometryFormat.KML
+                output |= GeometryFormat.KML
                 numgeoms += 1
             if self.get_bool('polygon_svg', False):
-                output |= napi.GeometryFormat.SVG
+                output |= GeometryFormat.SVG
                 numgeoms += 1
 
         if numgeoms > self.config().get_int('POLYGON_OUTPUT_MAX_TYPES'):
@@ -267,12 +271,12 @@ class ASGIAdaptor(abc.ABC):
                }
 
 
-async def status_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> Any:
+async def status_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
     """ Server glue for /status endpoint. See API docs for details.
     """
     result = await api.status()
 
-    fmt = params.parse_format(napi.StatusResult, 'text')
+    fmt = params.parse_format(StatusResult, 'text')
 
     if fmt == 'text' and result.status:
         status_code = 500
@@ -283,32 +287,32 @@ async def status_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> A
                                  status=status_code)
 
 
-async def details_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> Any:
+async def details_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
     """ Server glue for /details endpoint. See API docs for details.
     """
-    fmt = params.parse_format(napi.DetailedResult, 'json')
+    fmt = params.parse_format(DetailedResult, 'json')
     place_id = params.get_int('place_id', 0)
-    place: napi.PlaceRef
+    place: PlaceRef
     if place_id:
-        place = napi.PlaceID(place_id)
+        place = PlaceID(place_id)
     else:
         osmtype = params.get('osmtype')
         if osmtype is None:
             params.raise_error("Missing ID parameter 'place_id' or 'osmtype'.")
-        place = napi.OsmID(osmtype, params.get_int('osmid'), params.get('class'))
+        place = OsmID(osmtype, params.get_int('osmid'), params.get('class'))
 
     debug = params.setup_debugging()
 
-    locales = napi.Locales.from_accept_languages(params.get_accepted_languages())
+    locales = Locales.from_accept_languages(params.get_accepted_languages())
 
     result = await api.details(place,
                                address_details=params.get_bool('addressdetails', False),
                                linked_places=params.get_bool('linkedplaces', True),
                                parented_places=params.get_bool('hierarchy', False),
                                keywords=params.get_bool('keywords', False),
-                               geometry_output = napi.GeometryFormat.GEOJSON
+                               geometry_output = GeometryFormat.GEOJSON
                                                  if params.get_bool('polygon_geojson', False)
-                                                 else napi.GeometryFormat.NONE,
+                                                 else GeometryFormat.NONE,
                                locales=locales
                               )
 
@@ -326,17 +330,17 @@ async def details_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) ->
     return params.build_response(output, num_results=1)
 
 
-async def reverse_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> Any:
+async def reverse_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
     """ Server glue for /reverse endpoint. See API docs for details.
     """
-    fmt = params.parse_format(napi.ReverseResults, 'xml')
+    fmt = params.parse_format(ReverseResults, 'xml')
     debug = params.setup_debugging()
-    coord = napi.Point(params.get_float('lon'), params.get_float('lat'))
+    coord = Point(params.get_float('lon'), params.get_float('lat'))
 
     details = params.parse_geometry_details(fmt)
     details['max_rank'] = helpers.zoom_to_rank(params.get_int('zoom', 18))
     details['layers'] = params.get_layers()
-    details['locales'] = napi.Locales.from_accept_languages(params.get_accepted_languages())
+    details['locales'] = Locales.from_accept_languages(params.get_accepted_languages())
 
     result = await api.reverse(coord, **details)
 
@@ -357,25 +361,25 @@ async def reverse_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) ->
                    'namedetails': params.get_bool('namedetails', False),
                    'addressdetails': params.get_bool('addressdetails', True)}
 
-    output = formatting.format_result(napi.ReverseResults([result] if result else []),
+    output = formatting.format_result(ReverseResults([result] if result else []),
                                       fmt, fmt_options)
 
     return params.build_response(output, num_results=1 if result else 0)
 
 
-async def lookup_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> Any:
+async def lookup_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
     """ Server glue for /lookup endpoint. See API docs for details.
     """
-    fmt = params.parse_format(napi.SearchResults, 'xml')
+    fmt = params.parse_format(SearchResults, 'xml')
     debug = params.setup_debugging()
     details = params.parse_geometry_details(fmt)
-    details['locales'] = napi.Locales.from_accept_languages(params.get_accepted_languages())
+    details['locales'] = Locales.from_accept_languages(params.get_accepted_languages())
 
     places = []
     for oid in (params.get('osm_ids') or '').split(','):
         oid = oid.strip()
         if len(oid) > 1 and oid[0] in 'RNWrnw' and oid[1:].isdigit():
-            places.append(napi.OsmID(oid[0].upper(), int(oid[1:])))
+            places.append(OsmID(oid[0].upper(), int(oid[1:])))
 
     if len(places) > params.config().get_int('LOOKUP_MAX_COUNT'):
         params.raise_error('Too many object IDs.')
@@ -383,7 +387,7 @@ async def lookup_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> A
     if places:
         results = await api.lookup(places, **details)
     else:
-        results = napi.SearchResults()
+        results = SearchResults()
 
     if debug:
         return params.build_response(loglib.get_and_disable(), num_results=len(results))
@@ -397,28 +401,28 @@ async def lookup_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> A
     return params.build_response(output, num_results=len(results))
 
 
-async def _unstructured_search(query: str, api: napi.NominatimAPIAsync,
-                              details: Dict[str, Any]) -> napi.SearchResults:
+async def _unstructured_search(query: str, api: NominatimAPIAsync,
+                              details: Dict[str, Any]) -> SearchResults:
     if not query:
-        return napi.SearchResults()
+        return SearchResults()
 
     # Extract special format for coordinates from query.
     query, x, y = helpers.extract_coords_from_query(query)
     if x is not None:
         assert y is not None
-        details['near'] = napi.Point(x, y)
+        details['near'] = Point(x, y)
         details['near_radius'] = 0.1
 
     # If no query is left, revert to reverse search.
     if x is not None and not query:
         result = await api.reverse(details['near'], **details)
         if not result:
-            return napi.SearchResults()
+            return SearchResults()
 
-        return napi.SearchResults(
-                  [napi.SearchResult(**{f.name: getattr(result, f.name)
-                                        for f in dataclasses.fields(napi.SearchResult)
-                                        if hasattr(result, f.name)})])
+        return SearchResults(
+                  [SearchResult(**{f.name: getattr(result, f.name)
+                                   for f in dataclasses.fields(SearchResult)
+                                   if hasattr(result, f.name)})])
 
     query, cls, typ = helpers.extract_category_from_query(query)
     if cls is not None:
@@ -428,10 +432,10 @@ async def _unstructured_search(query: str, api: napi.NominatimAPIAsync,
     return await api.search(query, **details)
 
 
-async def search_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> Any:
+async def search_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
     """ Server glue for /search endpoint. See API docs for details.
     """
-    fmt = params.parse_format(napi.SearchResults, 'jsonv2')
+    fmt = params.parse_format(SearchResults, 'jsonv2')
     debug = params.setup_debugging()
     details = params.parse_geometry_details(fmt)
 
@@ -448,11 +452,11 @@ async def search_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> A
     details['min_rank'], details['max_rank'] = \
         helpers.feature_type_to_rank(params.get('featureType', ''))
     if params.get('featureType', None) is not None:
-        details['layers'] = napi.DataLayer.ADDRESS
+        details['layers'] = DataLayer.ADDRESS
     else:
         details['layers'] = params.get_layers()
 
-    details['locales'] = napi.Locales.from_accept_languages(params.get_accepted_languages())
+    details['locales'] = Locales.from_accept_languages(params.get_accepted_languages())
 
     # unstructured query parameters
     query = params.get('q', None)
@@ -508,7 +512,7 @@ async def search_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> A
     return params.build_response(output, num_results=len(results))
 
 
-async def deletable_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> Any:
+async def deletable_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
     """ Server glue for /deletable endpoint.
         This is a special endpoint that shows polygons that have been
         deleted or are broken in the OSM data but are kept in the
@@ -528,7 +532,7 @@ async def deletable_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -
     return params.build_response(formatting.format_result(results, fmt, {}))
 
 
-async def polygons_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) -> Any:
+async def polygons_endpoint(api: NominatimAPIAsync, params: ASGIAdaptor) -> Any:
     """ Server glue for /polygons endpoint.
         This is a special endpoint that shows polygons that have changed
         their size but are kept in the Nominatim database with their
@@ -560,7 +564,7 @@ async def polygons_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) ->
     return params.build_response(formatting.format_result(results, fmt, {}))
 
 
-EndpointFunc = Callable[[napi.NominatimAPIAsync, ASGIAdaptor], Any]
+EndpointFunc = Callable[[NominatimAPIAsync, ASGIAdaptor], Any]
 
 ROUTES = [
     ('status', status_endpoint),
diff --git a/src/nominatim_api/version.py b/src/nominatim_api/version.py
new file mode 100644 (file)
index 0000000..d275f4f
--- /dev/null
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of Nominatim. (https://nominatim.org)
+#
+# Copyright (C) 2024 by the Nominatim developer community.
+# For a full list of authors see the git log.
+"""
+Version information for the Nominatim API.
+"""
+
+NOMINATIM_API_VERSION = '4.4.99'
similarity index 97%
rename from nominatim/config.py
rename to src/nominatim_core/config.py
index 6bfc6076a89fe799170af016cd42e8894edb5c8f..5393b543e01dd0e09cdc49fd5b1f4f3f3200a2b8 100644 (file)
@@ -1,4 +1,4 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
@@ -19,9 +19,9 @@ import yaml
 from dotenv import dotenv_values
 from psycopg2.extensions import parse_dsn
 
-from nominatim.typing import StrPath
-from nominatim.errors import UsageError
-import nominatim.paths
+from .typing import StrPath
+from .errors import UsageError
+from . import paths
 
 LOG = logging.getLogger()
 CONFIG_CACHE : Dict[str, Any] = {}
@@ -62,7 +62,7 @@ class Configuration:
                  environ: Optional[Mapping[str, str]] = None) -> None:
         self.environ = environ or os.environ
         self.project_dir = project_dir
-        self.config_dir = nominatim.paths.CONFIG_DIR
+        self.config_dir = paths.CONFIG_DIR
         self._config = dotenv_values(str(self.config_dir / 'env.defaults'))
         if self.project_dir is not None and (self.project_dir / '.env').is_file():
             self.project_dir = self.project_dir.resolve()
@@ -71,9 +71,9 @@ class Configuration:
         class _LibDirs:
             module: Path
             osm2pgsql: Path
-            php = nominatim.paths.PHPLIB_DIR
-            sql = nominatim.paths.SQLLIB_DIR
-            data = nominatim.paths.DATA_DIR
+            php = paths.PHPLIB_DIR
+            sql = paths.SQLLIB_DIR
+            data = paths.DATA_DIR
 
         self.lib_dir = _LibDirs()
         self._private_plugins: Dict[str, object] = {}
similarity index 98%
rename from nominatim/db/async_connection.py
rename to src/nominatim_core/db/async_connection.py
index 07767e48ad8934c5dc831c16e9c0040e9a3a6d01..83e4c865ad26b48fa56be1b16521553cbe57136b 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """ Non-blocking database connections.
 """
@@ -22,7 +22,7 @@ try:
 except ImportError:
     __has_psycopg2_errors__ = False
 
-from nominatim.typing import T_cursor, Query
+from ..typing import T_cursor, Query
 
 LOG = logging.getLogger()
 
similarity index 89%
rename from nominatim/db/async_core_library.py
rename to src/nominatim_core/db/async_core_library.py
index 4a4b9f290fc323dee3ce37e3509f1b48d49ba448..c26846fbeb5a22b7b931f2f3e9fc1746774c6753 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Import the base library to use with asynchronous SQLAlchemy.
similarity index 97%
rename from nominatim/db/connection.py
rename to src/nominatim_core/db/connection.py
index d686083697f03d03bec86ed061e509884a9905b2..19fcddd44c7bd790c2b77224a7dbad58a48f3063 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Specialised connection and cursor functions.
@@ -17,8 +17,8 @@ import psycopg2.extensions
 import psycopg2.extras
 from psycopg2 import sql as pysql
 
-from nominatim.typing import SysEnv, Query, T_cursor
-from nominatim.errors import UsageError
+from ..typing import SysEnv, Query, T_cursor
+from ..errors import UsageError
 
 LOG = logging.getLogger()
 
similarity index 90%
rename from nominatim/db/properties.py
rename to src/nominatim_core/db/properties.py
index e8d5e0ca5c47194f7e72402f3c6b541a251c6a2a..3549382f944ad9e7f998b08190d2190b9c124d97 100644 (file)
@@ -1,15 +1,15 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Query and access functions for the in-database property table.
 """
 from typing import Optional, cast
 
-from nominatim.db.connection import Connection
+from .connection import Connection
 
 def set_property(conn: Connection, name: str, value: str) -> None:
     """ Add or replace the property with the given name.
similarity index 95%
rename from nominatim/db/sql_preprocessor.py
rename to src/nominatim_core/db/sql_preprocessor.py
index af5bc3357959abf52b9518e83144403e2150564b..468f35107b8f5188a3cbc9b93c9fb3353ef5e322 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Preprocessing of SQL files.
@@ -10,9 +10,9 @@ Preprocessing of SQL files.
 from typing import Set, Dict, Any, cast
 import jinja2
 
-from nominatim.db.connection import Connection
-from nominatim.db.async_connection import WorkerPool
-from nominatim.config import Configuration
+from .connection import Connection
+from .async_connection import WorkerPool
+from ..config import Configuration
 
 def _get_partitions(conn: Connection) -> Set[int]:
     """ Get the set of partitions currently in use.
similarity index 96%
rename from nominatim/db/sqlalchemy_schema.py
rename to src/nominatim_core/db/sqlalchemy_schema.py
index 0ec22b7e1fa322469a2ea75d38642c3b75f02aa8..0dfb63e7b83ad4ce09f371aa00a1aaede883d688 100644 (file)
@@ -2,15 +2,14 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 SQLAlchemy definitions for all tables used by the frontend.
 """
 import sqlalchemy as sa
 
-import nominatim.db.sqlalchemy_functions #pylint: disable=unused-import
-from nominatim.db.sqlalchemy_types import Geometry, KeyValueStore, IntArray
+from .sqlalchemy_types import Geometry, KeyValueStore, IntArray
 
 #pylint: disable=too-many-instance-attributes
 class SearchTables:
similarity index 88%
rename from nominatim/db/sqlalchemy_types/__init__.py
rename to src/nominatim_core/db/sqlalchemy_types/__init__.py
index dc417995d2dc10e7eef6c089ad4c36a25acb61ff..1383b5ee5df8340affee54cead982689bca9faf0 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Module with custom types for SQLAlchemy
similarity index 99%
rename from nominatim/db/sqlalchemy_types/geometry.py
rename to src/nominatim_core/db/sqlalchemy_types/geometry.py
index 0731b0b796337869c495b10cb7a112df4a4dcc8c..48c82ee0cc6b2e82c05e595e07ad2a48456a22d9 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Custom types for SQLAlchemy.
@@ -15,7 +15,7 @@ import sqlalchemy as sa
 from sqlalchemy.ext.compiler import compiles
 from sqlalchemy import types
 
-from nominatim.typing import SaColumn, SaBind
+from ...typing import SaColumn, SaBind
 
 #pylint: disable=all
 
similarity index 97%
rename from nominatim/db/sqlalchemy_types/int_array.py
rename to src/nominatim_core/db/sqlalchemy_types/int_array.py
index a31793f3f523a686d8698854487e6d779f331ab8..c76bc9fac0b08eb15b2967dd30fa5b2edc7c2476 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Custom type for an array of integers.
@@ -13,7 +13,7 @@ import sqlalchemy as sa
 from sqlalchemy.ext.compiler import compiles
 from sqlalchemy.dialects.postgresql import ARRAY
 
-from nominatim.typing import SaDialect, SaColumn
+from ...typing import SaDialect, SaColumn
 
 # pylint: disable=all
 
similarity index 88%
rename from nominatim/db/sqlalchemy_types/json.py
rename to src/nominatim_core/db/sqlalchemy_types/json.py
index 31635fd518f6eea3366f966ea3fa5d7322415fea..825fd1f2f6f57296c51ba7ff85915d3318d3e47b 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Common json type for different dialects.
@@ -13,7 +13,7 @@ import sqlalchemy as sa
 from sqlalchemy.dialects.postgresql import JSONB
 from sqlalchemy.dialects.sqlite import JSON as sqlite_json
 
-from nominatim.typing import SaDialect
+from ...typing import SaDialect
 
 # pylint: disable=all
 
similarity index 95%
rename from nominatim/db/sqlalchemy_types/key_value.py
rename to src/nominatim_core/db/sqlalchemy_types/key_value.py
index 937caa021b1058b9f3757db587dc589e0a5ca69c..15e1f6c50fd4236c804fca07805597156eb33e59 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 A custom type that implements a simple key-value store of strings.
@@ -14,7 +14,7 @@ from sqlalchemy.ext.compiler import compiles
 from sqlalchemy.dialects.postgresql import HSTORE
 from sqlalchemy.dialects.sqlite import JSON as sqlite_json
 
-from nominatim.typing import SaDialect, SaColumn
+from ...typing import SaDialect, SaColumn
 
 # pylint: disable=all
 
similarity index 94%
rename from nominatim/db/status.py
rename to src/nominatim_core/db/status.py
index 5f92d9599ce2577ffcc5373256d5b85c17b06529..1278359cc02ebae2ac1513162a0b49a0ef37d211 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Access and helper functions for the status and status log table.
@@ -12,10 +12,10 @@ import datetime as dt
 import logging
 import re
 
-from nominatim.db.connection import Connection
-from nominatim.tools.exec_utils import get_url
-from nominatim.errors import UsageError
-from nominatim.typing import TypedDict
+from .connection import Connection
+from ..utils.url_utils import get_url
+from ..errors import UsageError
+from ..typing import TypedDict
 
 LOG = logging.getLogger()
 ISODATE_FORMAT = '%Y-%m-%dT%H:%M:%S'
similarity index 95%
rename from nominatim/db/utils.py
rename to src/nominatim_core/db/utils.py
index 57048da3f20e0a2e612b496ac99242b44155b4e7..32bf79acd93f04e951e56fa0861eea1445f24090 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Helper functions for handling DB accesses.
@@ -14,8 +14,8 @@ import gzip
 import io
 from pathlib import Path
 
-from nominatim.db.connection import get_pg_env, Cursor
-from nominatim.errors import UsageError
+from .connection import get_pg_env, Cursor
+from ..errors import UsageError
 
 LOG = logging.getLogger()
 
similarity index 77%
rename from nominatim/errors.py
rename to src/nominatim_core/errors.py
index 26752aa2a52c4930abdc1b24c9eb29b441e5174a..c7331a89f7519d06f85ac34a8d4f61ad1299d6e7 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Custom exception and error classes for Nominatim.
diff --git a/src/nominatim_core/paths.py b/src/nominatim_core/paths.py
new file mode 100644 (file)
index 0000000..aa28970
--- /dev/null
@@ -0,0 +1,15 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of Nominatim. (https://nominatim.org)
+#
+# Copyright (C) 2024 by the Nominatim developer community.
+# For a full list of authors see the git log.
+"""
+Path settings for extra data used by Nominatim.
+"""
+from pathlib import Path
+
+PHPLIB_DIR = (Path(__file__) / '..' / '..' / '..' / 'lib-php').resolve()
+SQLLIB_DIR = (Path(__file__) / '..' / '..' / '..' / 'lib-sql').resolve()
+DATA_DIR = (Path(__file__) / '..' / '..' / '..' / 'data').resolve()
+CONFIG_DIR = (Path(__file__) / '..' / '..' / '..' / 'settings').resolve()
similarity index 95%
rename from nominatim/typing.py
rename to src/nominatim_core/typing.py
index 62ecd8c3e169ce7340dca7c6eb6a83a7881cd3d5..1f4f1fd7d2b8ba6c432001f4e3b57b6adab59f9b 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Type definitions for typing annotations.
similarity index 93%
rename from nominatim/utils/centroid.py
rename to src/nominatim_core/utils/centroid.py
index 218231768fb2294b213feb49543cdf35dcdc378f..21a7c7799a40f5adaf9841a5df43edbe4018a0ec 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for computation of centroids.
similarity index 98%
rename from nominatim/utils/json_writer.py
rename to src/nominatim_core/utils/json_writer.py
index fcc355d5eee9fa2331ad47e47eb2a4ac18dac078..c3d17a841db859c1a3817f69c664cb4590890b00 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Streaming JSON encoder.
diff --git a/src/nominatim_core/utils/url_utils.py b/src/nominatim_core/utils/url_utils.py
new file mode 100644 (file)
index 0000000..d768918
--- /dev/null
@@ -0,0 +1,31 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of Nominatim. (https://nominatim.org)
+#
+# Copyright (C) 2024 by the Nominatim developer community.
+# For a full list of authors see the git log.
+"""
+Helper functions for accessing URL.
+"""
+from typing import IO
+import logging
+import urllib.request as urlrequest
+
+from ..version import NOMINATIM_CORE_VERSION
+
+LOG = logging.getLogger()
+
+def get_url(url: str) -> str:
+    """ Get the contents from the given URL and return it as a UTF-8 string.
+
+        This version makes sure that an appropriate user agent is sent.
+    """
+    headers = {"User-Agent": f"Nominatim/{NOMINATIM_CORE_VERSION!s}"}
+
+    try:
+        request = urlrequest.Request(url, headers=headers)
+        with urlrequest.urlopen(request) as response: # type: IO[bytes]
+            return response.read().decode('utf-8')
+    except Exception:
+        LOG.fatal('Failed to load URL: %s', url)
+        raise
diff --git a/src/nominatim_core/version.py b/src/nominatim_core/version.py
new file mode 100644 (file)
index 0000000..bf35aeb
--- /dev/null
@@ -0,0 +1,11 @@
+# SPDX-License-Identifier: GPL-3.0-or-later
+#
+# This file is part of Nominatim. (https://nominatim.org)
+#
+# Copyright (C) 2024 by the Nominatim developer community.
+# For a full list of authors see the git log.
+"""
+Version information for the Nominatim core package.
+"""
+
+NOMINATIM_CORE_VERSION = '4.4.99'
similarity index 95%
rename from nominatim/cli.py
rename to src/nominatim_db/cli.py
index 720a8ece33e8e126422490735cdd7c055653ea4c..548f116598caadcd7b324b9516af7d97eb91c6b2 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Command-line interface to the Nominatim functions for import, update,
@@ -16,12 +16,12 @@ import sys
 import argparse
 from pathlib import Path
 
-from nominatim.config import Configuration
-from nominatim.tools.exec_utils import run_php_server
-from nominatim.errors import UsageError
-from nominatim import clicmd
-from nominatim import version
-from nominatim.clicmd.args import NominatimArgs, Subcommand
+from nominatim_core.config import Configuration
+from nominatim_core.errors import UsageError
+from .tools.exec_utils import run_php_server
+from . import clicmd
+from . import version
+from .clicmd.args import NominatimArgs, Subcommand
 
 LOG = logging.getLogger()
 
diff --git a/src/nominatim_db/clicmd/__init__.py b/src/nominatim_db/clicmd/__init__.py
new file mode 100644 (file)
index 0000000..0481a45
--- /dev/null
@@ -0,0 +1,28 @@
+# SPDX-License-Identifier: GPL-2.0-only
+#
+# 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.
+"""
+Subcommand definitions for the command-line tool.
+"""
+# mypy and pylint disagree about the style of explicit exports,
+# see https://github.com/PyCQA/pylint/issues/6006.
+# pylint: disable=useless-import-alias
+
+from .setup import SetupAll as SetupAll
+from .replication import UpdateReplication as UpdateReplication
+from .api import (APISearch as APISearch,
+                  APIReverse as APIReverse,
+                  APILookup as APILookup,
+                  APIDetails as APIDetails,
+                  APIStatus as APIStatus)
+from .index import UpdateIndex as UpdateIndex
+from .refresh import UpdateRefresh as UpdateRefresh
+from .add_data import UpdateAddData as UpdateAddData
+from .admin import AdminFuncs as AdminFuncs
+from .freeze import SetupFreeze as SetupFreeze
+from .special_phrases import ImportSpecialPhrases as ImportSpecialPhrases
+from .export import QueryExport as QueryExport
+from .convert import ConvertDB as ConvertDB
similarity index 94%
rename from nominatim/clicmd/add_data.py
rename to src/nominatim_db/clicmd/add_data.py
index 3f31d216b45a9dce1299b47c2767d226aca07e06..eced99070ba0c42aa2322111d310b103a3876f8e 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of the 'add-data' subcommand.
@@ -13,7 +13,7 @@ import logging
 
 import psutil
 
-from nominatim.clicmd.args import NominatimArgs
+from .args import NominatimArgs
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
@@ -64,8 +64,8 @@ class UpdateAddData:
 
 
     def run(self, args: NominatimArgs) -> int:
-        from nominatim.tokenizer import factory as tokenizer_factory
-        from nominatim.tools import tiger_data, add_osm_data
+        from ..tokenizer import factory as tokenizer_factory
+        from ..tools import tiger_data, add_osm_data
 
         if args.tiger_data:
             tokenizer = tokenizer_factory.get_tokenizer_for_db(args.config)
similarity index 95%
rename from nominatim/clicmd/admin.py
rename to src/nominatim_db/clicmd/admin.py
index 9557dc988c94712f446f8c21c8f167d69639747f..66dbbe99a04134ebb4d64e85987f3aec57ed270e 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of the 'admin' subcommand.
@@ -11,9 +11,9 @@ import logging
 import argparse
 import random
 
-from nominatim.db.connection import connect
-from nominatim.clicmd.args import NominatimArgs
-import nominatim.api as napi
+import nominatim_api as napi
+from nominatim_core.db.connection import connect
+from .args import NominatimArgs
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
similarity index 97%
rename from nominatim/clicmd/api.py
rename to src/nominatim_db/clicmd/api.py
index 3c5416fea4fd1ed92373d18c187eea2c29f4d287..20553b403dd05fabef15c9e5a344908a09489b91 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Subcommand definitions for API calls from the command line.
@@ -13,12 +13,12 @@ import logging
 import json
 import sys
 
-from nominatim.clicmd.args import NominatimArgs
-import nominatim.api as napi
-import nominatim.api.v1 as api_output
-from nominatim.api.v1.helpers import zoom_to_rank, deduplicate_results
-from nominatim.api.v1.format import dispatch as formatting
-import nominatim.api.logging as loglib
+import nominatim_api as napi
+import nominatim_api.v1 as api_output
+from nominatim_api.v1.helpers import zoom_to_rank, deduplicate_results
+from nominatim_api.v1.format import dispatch as formatting
+import nominatim_api.logging as loglib
+from .args import NominatimArgs
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
similarity index 96%
rename from nominatim/clicmd/args.py
rename to src/nominatim_db/clicmd/args.py
index 433435bc6f37dd1735078f807e599a42d05fdaa7..ab93863d33de93729fc15ec044ab6ebc4fe6c7fc 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Provides custom functions over command-line arguments.
@@ -13,10 +13,10 @@ import logging
 from functools import reduce
 from pathlib import Path
 
-from nominatim.errors import UsageError
-from nominatim.config import Configuration
-from nominatim.typing import Protocol
-import nominatim.api as napi
+from nominatim_core.errors import UsageError
+from nominatim_core.config import Configuration
+from nominatim_core.typing import Protocol
+import nominatim_api as napi
 
 LOG = logging.getLogger()
 
similarity index 96%
rename from nominatim/clicmd/convert.py
rename to src/nominatim_db/clicmd/convert.py
index 7ba77172bdf7853031fb29b8154ccae9870cf827..51db848c068711d739b902d64f18e3e451ff38dd 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of the 'convert' subcommand.
@@ -12,8 +12,8 @@ import argparse
 import asyncio
 from pathlib import Path
 
-from nominatim.clicmd.args import NominatimArgs
-from nominatim.errors import UsageError
+from nominatim_core.errors import UsageError
+from .args import NominatimArgs
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
similarity index 96%
rename from nominatim/clicmd/export.py
rename to src/nominatim_db/clicmd/export.py
index f935a5579b70ae94814cd7e9aa0a42471935fcbb..460d27d656a533374e85d81dbf262fc1c948f5dd 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of the 'export' subcommand.
@@ -16,11 +16,11 @@ import sys
 
 import sqlalchemy as sa
 
-from nominatim.clicmd.args import NominatimArgs
-import nominatim.api as napi
-from nominatim.api.results import create_from_placex_row, ReverseResult, add_result_details
-from nominatim.api.types import LookupDetails
-from nominatim.errors import UsageError
+import nominatim_api as napi
+from nominatim_api.results import create_from_placex_row, ReverseResult, add_result_details
+from nominatim_api.types import LookupDetails
+from nominatim_core.errors import UsageError
+from .args import NominatimArgs
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
similarity index 85%
rename from nominatim/clicmd/freeze.py
rename to src/nominatim_db/clicmd/freeze.py
index 5dfdd255c8736768713ee3f3532ffb3bf2b3dbb0..83b84b17fd498d4ce904664fbb89038e5b90378d 100644 (file)
@@ -1,16 +1,16 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of the 'freeze' subcommand.
 """
 import argparse
 
-from nominatim.db.connection import connect
-from nominatim.clicmd.args import NominatimArgs
+from nominatim_core.db.connection import connect
+from .args import NominatimArgs
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
similarity index 91%
rename from nominatim/clicmd/index.py
rename to src/nominatim_db/clicmd/index.py
index 86a504e71f15b56e53d9886cabcde14fee849cb5..7766a1d10b4f3a7e9cb968194495bba1092aedac 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of the 'index' subcommand.
@@ -11,9 +11,9 @@ import argparse
 
 import psutil
 
-from nominatim.db import status
-from nominatim.db.connection import connect
-from nominatim.clicmd.args import NominatimArgs
+from nominatim_core.db import status
+from nominatim_core.db.connection import connect
+from .args import NominatimArgs
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
similarity index 96%
rename from nominatim/clicmd/refresh.py
rename to src/nominatim_db/clicmd/refresh.py
index 5eac53da14cebbaa7e44f81861b882c3c68e26f6..ceead2583f82d9563ee38fd1ee6dfefde8c46ba7 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of 'refresh' subcommand.
@@ -12,10 +12,10 @@ import argparse
 import logging
 from pathlib import Path
 
-from nominatim.config import Configuration
-from nominatim.db.connection import connect
-from nominatim.tokenizer.base import AbstractTokenizer
-from nominatim.clicmd.args import NominatimArgs
+from nominatim_core.config import Configuration
+from nominatim_core.db.connection import connect
+from ..tokenizer.base import AbstractTokenizer
+from .args import NominatimArgs
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
similarity index 96%
rename from nominatim/clicmd/replication.py
rename to src/nominatim_db/clicmd/replication.py
index 192a9314268816e28a7eb72fda93b123bbeedf50..6fc4dc302a0921cb86fd844a8d52aca0dda65329 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of the 'replication' sub-command.
@@ -14,10 +14,10 @@ import logging
 import socket
 import time
 
-from nominatim.db import status
-from nominatim.db.connection import connect
-from nominatim.errors import UsageError
-from nominatim.clicmd.args import NominatimArgs
+from nominatim_core.db import status
+from nominatim_core.db.connection import connect
+from nominatim_core.errors import UsageError
+from .args import NominatimArgs
 
 LOG = logging.getLogger()
 
similarity index 96%
rename from nominatim/clicmd/setup.py
rename to src/nominatim_db/clicmd/setup.py
index ccd6bd788ed315a45bc8d2e7b2d872bdb64c8de5..af586d49f17eaf3b6c36df205dda66897c0df5af 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Implementation of the 'import' subcommand.
@@ -14,13 +14,13 @@ from pathlib import Path
 
 import psutil
 
-from nominatim.config import Configuration
-from nominatim.db.connection import connect
-from nominatim.db import status, properties
-from nominatim.tokenizer.base import AbstractTokenizer
-from nominatim.version import NOMINATIM_VERSION
-from nominatim.clicmd.args import NominatimArgs
-from nominatim.errors import UsageError
+from nominatim_core.errors import UsageError
+from nominatim_core.config import Configuration
+from nominatim_core.db.connection import connect
+from nominatim_core.db import status, properties
+from ..tokenizer.base import AbstractTokenizer
+from ..version import NOMINATIM_VERSION
+from .args import NominatimArgs
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
similarity index 88%
rename from nominatim/clicmd/special_phrases.py
rename to src/nominatim_db/clicmd/special_phrases.py
index beac0c84f6ffcbaf57434e3ea59c6e2c1681834e..1e0f2d764c75bf797253af9978eeec1c7f8d33ad 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
     Implementation of the 'special-phrases' command.
@@ -11,12 +11,12 @@ import argparse
 import logging
 from pathlib import Path
 
-from nominatim.errors import UsageError
-from nominatim.db.connection import connect
-from nominatim.tools.special_phrases.sp_importer import SPImporter, SpecialPhraseLoader
-from nominatim.tools.special_phrases.sp_wiki_loader import SPWikiLoader
-from nominatim.tools.special_phrases.sp_csv_loader import SPCsvLoader
-from nominatim.clicmd.args import NominatimArgs
+from nominatim_core.errors import UsageError
+from nominatim_core.db.connection import connect
+from ..tools.special_phrases.sp_importer import SPImporter, SpecialPhraseLoader
+from ..tools.special_phrases.sp_wiki_loader import SPWikiLoader
+from ..tools.special_phrases.sp_csv_loader import SPCsvLoader
+from .args import NominatimArgs
 
 LOG = logging.getLogger()
 
similarity index 94%
rename from nominatim/data/country_info.py
rename to src/nominatim_db/data/country_info.py
index eb0190b54e7b3928b61016604c7b1fc049e255b2..35943a50d3ed08cf0a46a7658fafeffac0db2674 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for importing and managing static country information.
@@ -11,11 +11,11 @@ from typing import Dict, Any, Iterable, Tuple, Optional, Container, overload
 from pathlib import Path
 import psycopg2.extras
 
-from nominatim.db import utils as db_utils
-from nominatim.db.connection import connect, Connection
-from nominatim.errors import UsageError
-from nominatim.config import Configuration
-from nominatim.tokenizer.base import AbstractTokenizer
+from nominatim_core.db import utils as db_utils
+from nominatim_core.db.connection import connect, Connection
+from nominatim_core.errors import UsageError
+from nominatim_core.config import Configuration
+from ..tokenizer.base import AbstractTokenizer
 
 def _flatten_name_list(names: Any) -> Dict[str, str]:
     if names is None:
similarity index 96%
rename from nominatim/data/place_info.py
rename to src/nominatim_db/data/place_info.py
index 91e77a588514ca4c2cd457d95286ca49883dd7e0..5b5ef57f91bccb72e031059b73797a9579b0696e 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Wrapper around place information the indexer gets from the database and hands to
similarity index 96%
rename from nominatim/data/place_name.py
rename to src/nominatim_db/data/place_name.py
index abba3544e5025b09051a7ae220ec2e77d3fa2930..cb1705e9794a789d21678122f69a262df99e4067 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Data class for a single name of a place.
similarity index 95%
rename from nominatim/data/postcode_format.py
rename to src/nominatim_db/data/postcode_format.py
index 132dd41fe97df9ff9c86fa8ca37869e7d1aeb76b..670827ee4cf7e42e5f8a55b1e802385156dc761a 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for formatting postcodes according to their country-specific
@@ -11,8 +11,8 @@ format.
 from typing import Any, Mapping, Optional, Set, Match
 import re
 
-from nominatim.errors import UsageError
-from nominatim.data import country_info
+from nominatim_core.errors import UsageError
+from . import country_info
 
 class CountryPostcodeMatcher:
     """ Matches and formats a postcode according to a format definition
similarity index 95%
rename from nominatim/indexer/indexer.py
rename to src/nominatim_db/indexer/indexer.py
index 233423f03c6a202ec088cfeb0fe7ac26c79db01f..4f9c05755414f123ac619df0a17002decbce3855 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Main work horse for indexing (computing addresses) the database.
@@ -13,12 +13,12 @@ import time
 
 import psycopg2.extras
 
-from nominatim.tokenizer.base import AbstractTokenizer
-from nominatim.indexer.progress import ProgressLogger
-from nominatim.indexer import runners
-from nominatim.db.async_connection import DBConnection, WorkerPool
-from nominatim.db.connection import connect, Connection, Cursor
-from nominatim.typing import DictCursorResults
+from nominatim_core.typing import DictCursorResults
+from nominatim_core.db.async_connection import DBConnection, WorkerPool
+from nominatim_core.db.connection import connect, Connection, Cursor
+from ..tokenizer.base import AbstractTokenizer
+from .progress import ProgressLogger
+from . import runners
 
 LOG = logging.getLogger()
 
similarity index 95%
rename from nominatim/indexer/progress.py
rename to src/nominatim_db/indexer/progress.py
index 33df37fbaec06df141462adafa14be012a95f043..668dbd59f2ac068bb07eb82208556e6401cefc15 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Helpers for progress logging.
similarity index 95%
rename from nominatim/indexer/runners.py
rename to src/nominatim_db/indexer/runners.py
index bbadd282ec96c538baa7ff3926e75bd5bd6cbe69..4d6a28e4de64540f72fd68e748d46362bee89c01 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Mix-ins that provide the actual commands for the indexer for various indexing
@@ -14,10 +14,10 @@ import functools
 from psycopg2 import sql as pysql
 import psycopg2.extras
 
-from nominatim.data.place_info import PlaceInfo
-from nominatim.tokenizer.base import AbstractAnalyzer
-from nominatim.db.async_connection import DBConnection
-from nominatim.typing import Query, DictCursorResult, DictCursorResults, Protocol
+from nominatim_core.typing import Query, DictCursorResult, DictCursorResults, Protocol
+from nominatim_core.db.async_connection import DBConnection
+from ..data.place_info import PlaceInfo
+from ..tokenizer.base import AbstractAnalyzer
 
 # pylint: disable=C0111
 
similarity index 96%
rename from nominatim/tokenizer/base.py
rename to src/nominatim_db/tokenizer/base.py
index 12c826eb21b19da1b1ad989d4cc5ede9f0c699cf..0ca7e1d19f6723af08af9f0c561aad84f31453df 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Abstract class definitions for tokenizers. These base classes are here
@@ -12,10 +12,10 @@ from abc import ABC, abstractmethod
 from typing import List, Tuple, Dict, Any, Optional, Iterable
 from pathlib import Path
 
-from nominatim.config import Configuration
-from nominatim.db.connection import Connection
-from nominatim.data.place_info import PlaceInfo
-from nominatim.typing import Protocol
+from nominatim_core.typing import Protocol
+from nominatim_core.config import Configuration
+from nominatim_core.db.connection import Connection
+from ..data.place_info import PlaceInfo
 
 class AbstractAnalyzer(ABC):
     """ The analyzer provides the functions for analysing names and building
similarity index 90%
rename from nominatim/tokenizer/factory.py
rename to src/nominatim_db/tokenizer/factory.py
index d6bc51638019cd31281260a68402348f03954a13..d43929f0306999d83c1bfefd984c274be0a5b298 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for creating a tokenizer or initialising the right one for an
@@ -24,11 +24,11 @@ import logging
 import importlib
 from pathlib import Path
 
-from nominatim.errors import UsageError
-from nominatim.db import properties
-from nominatim.db.connection import connect
-from nominatim.config import Configuration
-from nominatim.tokenizer.base import AbstractTokenizer, TokenizerModule
+from nominatim_core.errors import UsageError
+from nominatim_core.db import properties
+from nominatim_core.db.connection import connect
+from nominatim_core.config import Configuration
+from ..tokenizer.base import AbstractTokenizer, TokenizerModule
 
 LOG = logging.getLogger()
 
similarity index 91%
rename from nominatim/tokenizer/icu_rule_loader.py
rename to src/nominatim_db/tokenizer/icu_rule_loader.py
index 4c36282ca54bfbd3526d24ead471a3e9fe9dbc33..9e7f00b4054b824fa65d4fe5eb83b660663c6b14 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Helper class to create ICU rules from a configuration file.
@@ -14,14 +14,14 @@ import logging
 
 from icu import Transliterator
 
-from nominatim.config import flatten_config_list, Configuration
-from nominatim.db.properties import set_property, get_property
-from nominatim.db.connection import Connection
-from nominatim.errors import UsageError
-from nominatim.tokenizer.place_sanitizer import PlaceSanitizer
-from nominatim.tokenizer.icu_token_analysis import ICUTokenAnalysis
-from nominatim.tokenizer.token_analysis.base import AnalysisModule, Analyzer
-import nominatim.data.country_info
+from nominatim_core.config import flatten_config_list, Configuration
+from nominatim_core.db.properties import set_property, get_property
+from nominatim_core.db.connection import Connection
+from nominatim_core.errors import UsageError
+from .place_sanitizer import PlaceSanitizer
+from .icu_token_analysis import ICUTokenAnalysis
+from .token_analysis.base import AnalysisModule, Analyzer
+from ..data import country_info
 
 LOG = logging.getLogger()
 
@@ -51,7 +51,7 @@ class ICURuleLoader:
                                               config='TOKENIZER_CONFIG')
 
         # Make sure country information is available to analyzers and sanitizers.
-        nominatim.data.country_info.setup_country_config(config)
+        country_info.setup_country_config(config)
 
         self.normalization_rules = self._cfg_to_icu_rules(rules, 'normalization')
         self.transliteration_rules = self._cfg_to_icu_rules(rules, 'transliteration')
similarity index 85%
rename from nominatim/tokenizer/icu_token_analysis.py
rename to src/nominatim_db/tokenizer/icu_token_analysis.py
index 7ea31e8ea1eb21b20f3e8dd8b3c3f12cdc7cee83..fe6704d4249158526ababae3b4910da1f013cd30 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Container class collecting all components required to transform an OSM name
@@ -11,11 +11,11 @@ into a Nominatim token.
 from typing import Mapping, Optional, TYPE_CHECKING
 from icu import Transliterator
 
-from nominatim.tokenizer.token_analysis.base import Analyzer
+from .token_analysis.base import Analyzer
 
 if TYPE_CHECKING:
     from typing import Any
-    from nominatim.tokenizer.icu_rule_loader import TokenAnalyzerRule # pylint: disable=cyclic-import
+    from .icu_rule_loader import TokenAnalyzerRule # pylint: disable=cyclic-import
 
 class ICUTokenAnalysis:
     """ Container class collecting the transliterators and token analysis
similarity index 98%
rename from nominatim/tokenizer/icu_tokenizer.py
rename to src/nominatim_db/tokenizer/icu_tokenizer.py
index 4b9dac69e18eb63760c07ff71a981f1343ab6ac3..af03bd39811a7ce327f5b154c17e21b0b6698b6c 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Tokenizer implementing normalisation as used before Nominatim 4 but using
@@ -16,16 +16,16 @@ import logging
 from pathlib import Path
 from textwrap import dedent
 
-from nominatim.db.connection import connect, Connection, Cursor
-from nominatim.config import Configuration
-from nominatim.db.utils import CopyBuffer
-from nominatim.db.sql_preprocessor import SQLPreprocessor
-from nominatim.data.place_info import PlaceInfo
-from nominatim.tokenizer.icu_rule_loader import ICURuleLoader
-from nominatim.tokenizer.place_sanitizer import PlaceSanitizer
-from nominatim.data.place_name import PlaceName
-from nominatim.tokenizer.icu_token_analysis import ICUTokenAnalysis
-from nominatim.tokenizer.base import AbstractAnalyzer, AbstractTokenizer
+from nominatim_core.db.connection import connect, Connection, Cursor
+from nominatim_core.config import Configuration
+from nominatim_core.db.utils import CopyBuffer
+from nominatim_core.db.sql_preprocessor import SQLPreprocessor
+from ..data.place_info import PlaceInfo
+from ..data.place_name import PlaceName
+from .icu_rule_loader import ICURuleLoader
+from .place_sanitizer import PlaceSanitizer
+from .icu_token_analysis import ICUTokenAnalysis
+from .base import AbstractAnalyzer, AbstractTokenizer
 
 DBCFG_TERM_NORMALIZATION = "tokenizer_term_normalization"
 
similarity index 98%
rename from nominatim/tokenizer/legacy_tokenizer.py
rename to src/nominatim_db/tokenizer/legacy_tokenizer.py
index 93808cc39f3407458bb2d570d2a8740128f2c168..5c6ba7434d45c66f719af254a7cf895dfe5dd9fb 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Tokenizer implementing normalisation as used before Nominatim 4.
@@ -20,14 +20,14 @@ from icu import Transliterator
 import psycopg2
 import psycopg2.extras
 
-from nominatim.db.connection import connect, Connection
-from nominatim.config import Configuration
-from nominatim.db import properties
-from nominatim.db import utils as db_utils
-from nominatim.db.sql_preprocessor import SQLPreprocessor
-from nominatim.data.place_info import PlaceInfo
-from nominatim.errors import UsageError
-from nominatim.tokenizer.base import AbstractAnalyzer, AbstractTokenizer
+from nominatim_core.errors import UsageError
+from nominatim_core.db.connection import connect, Connection
+from nominatim_core.config import Configuration
+from nominatim_core.db import properties
+from nominatim_core.db import utils as db_utils
+from nominatim_core.db.sql_preprocessor import SQLPreprocessor
+from ..data.place_info import PlaceInfo
+from .base import AbstractAnalyzer, AbstractTokenizer
 
 DBCFG_NORMALIZATION = "tokenizer_normalization"
 DBCFG_MAXWORDFREQ = "tokenizer_maxwordfreq"
similarity index 79%
rename from nominatim/tokenizer/place_sanitizer.py
rename to src/nominatim_db/tokenizer/place_sanitizer.py
index 2f76fe344a518c96ca030edf6610a5088844e724..da41692bfed2fa4a7d5853c75184744c47d19c1c 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Handler for cleaning name and address tags in place information before it
@@ -10,12 +10,12 @@ is handed to the token analysis.
 """
 from typing import Optional, List, Mapping, Sequence, Callable, Any, Tuple
 
-from nominatim.errors import UsageError
-from nominatim.config import Configuration
-from nominatim.tokenizer.sanitizers.config import SanitizerConfig
-from nominatim.tokenizer.sanitizers.base import SanitizerHandler, ProcessInfo
-from nominatim.data.place_name import PlaceName
-from nominatim.data.place_info import PlaceInfo
+from nominatim_core.errors import UsageError
+from nominatim_core.config import Configuration
+from .sanitizers.config import SanitizerConfig
+from .sanitizers.base import SanitizerHandler, ProcessInfo
+from ..data.place_name import PlaceName
+from ..data.place_info import PlaceInfo
 
 
 class PlaceSanitizer:
diff --git a/src/nominatim_db/tokenizer/sanitizers/__init__.py b/src/nominatim_db/tokenizer/sanitizers/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
similarity index 86%
rename from nominatim/tokenizer/sanitizers/base.py
rename to src/nominatim_db/tokenizer/sanitizers/base.py
index ac8d90e4677e726449f3a1889cdcae10ae12a1b7..a28f86b503ac047fa555a2d4a78a73d1c2bcbe58 100644 (file)
@@ -1,18 +1,18 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Common data types and protocols for sanitizers.
 """
 from typing import Optional, List, Mapping, Callable
 
-from nominatim.tokenizer.sanitizers.config import SanitizerConfig
-from nominatim.data.place_info import PlaceInfo
-from nominatim.data.place_name import PlaceName
-from nominatim.typing import Protocol, Final
+from nominatim_core.typing import Protocol, Final
+from ...data.place_info import PlaceInfo
+from ...data.place_name import PlaceName
+from .config import SanitizerConfig
 
 
 class ProcessInfo:
similarity index 91%
rename from nominatim/tokenizer/sanitizers/clean_housenumbers.py
rename to src/nominatim_db/tokenizer/sanitizers/clean_housenumbers.py
index ae6349a9c846cba2d9fa403471fe0c0f5b335e17..20443616a70540ab520e372f400857ceb840f485 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Sanitizer that preprocesses address tags for house numbers. The sanitizer
@@ -26,9 +26,9 @@ Arguments:
 """
 from typing import Callable, Iterator, List
 
-from nominatim.tokenizer.sanitizers.base import ProcessInfo
-from nominatim.data.place_name import PlaceName
-from nominatim.tokenizer.sanitizers.config import SanitizerConfig
+from ...data.place_name import PlaceName
+from .base import ProcessInfo
+from .config import SanitizerConfig
 
 class _HousenumberSanitizer:
 
similarity index 90%
rename from nominatim/tokenizer/sanitizers/clean_postcodes.py
rename to src/nominatim_db/tokenizer/sanitizers/clean_postcodes.py
index 5eaea3917c7aea9a2e8047f773cd03ac17990d34..5340dc8ce26aaba436832abf11a9c7cfc672edd4 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Sanitizer that filters postcodes by their officially allowed pattern.
@@ -22,9 +22,9 @@ Arguments:
 """
 from typing import Callable, Optional, Tuple
 
-from nominatim.data.postcode_format import PostcodeFormatter
-from nominatim.tokenizer.sanitizers.base import ProcessInfo
-from nominatim.tokenizer.sanitizers.config import SanitizerConfig
+from ...data.postcode_format import PostcodeFormatter
+from .base import ProcessInfo
+from .config import SanitizerConfig
 
 class _PostcodeSanitizer:
 
similarity index 83%
rename from nominatim/tokenizer/sanitizers/clean_tiger_tags.py
rename to src/nominatim_db/tokenizer/sanitizers/clean_tiger_tags.py
index 8b4d337d5f8b68c1db6c082e08e5330f18185d22..714a9256bd5cdf015771c6d23d0fcb6739b76cd2 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Sanitizer that preprocesses tags from the TIGER import.
@@ -14,8 +14,8 @@ It makes the following changes:
 from typing import Callable
 import re
 
-from nominatim.tokenizer.sanitizers.base import ProcessInfo
-from nominatim.tokenizer.sanitizers.config import SanitizerConfig
+from .base import ProcessInfo
+from .config import SanitizerConfig
 
 COUNTY_MATCH = re.compile('(.*), [A-Z][A-Z]')
 
similarity index 97%
rename from nominatim/tokenizer/sanitizers/config.py
rename to src/nominatim_db/tokenizer/sanitizers/config.py
index 79396a75a6893fe968e6c613873097301a2cedc0..1ce1a1b72a995095f35e2cb930d67025fa3b552a 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Configuration for Sanitizers.
@@ -11,7 +11,7 @@ from typing import Sequence, Union, Optional, Pattern, Callable, Any, TYPE_CHECK
 from collections import UserDict
 import re
 
-from nominatim.errors import UsageError
+from nominatim_core.errors import UsageError
 
 # working around missing generics in Python < 3.8
 # See https://github.com/python/typing/issues/60#issuecomment-869757075
similarity index 92%
rename from nominatim/tokenizer/sanitizers/delete_tags.py
rename to src/nominatim_db/tokenizer/sanitizers/delete_tags.py
index f18a894b07e480fdab61251dba246a4f65c925ad..7856862c67488ab1d34400a89dad8026a84e20cc 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only\r
+# SPDX-License-Identifier: GPL-3.0-or-later\r
 #\r
 # This file is part of Nominatim. (https://nominatim.org)\r
 #\r
-# Copyright (C) 2023 by the Nominatim developer community.\r
+# Copyright (C) 2024 by the Nominatim developer community.\r
 # For a full list of authors see the git log.\r
 """\r
 Sanitizer which prevents certain tags from getting into the search index.\r
@@ -56,9 +56,9 @@ Arguments:
 """\r
 from typing import Callable, List, Tuple, Sequence\r
 \r
-from nominatim.tokenizer.sanitizers.base import ProcessInfo\r
-from nominatim.data.place_name import PlaceName\r
-from nominatim.tokenizer.sanitizers.config import SanitizerConfig\r
+from ...data.place_name import PlaceName\r
+from .base import ProcessInfo\r
+from .config import SanitizerConfig\r
 \r
 class _TagSanitizer:\r
 \r
similarity index 81%
rename from nominatim/tokenizer/sanitizers/split_name_list.py
rename to src/nominatim_db/tokenizer/sanitizers/split_name_list.py
index 7d0667b4e323ce1aa060c3f0ae2738505173a476..bb261359ce097a12b52d341586e07462be157115 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Sanitizer that splits lists of names into their components.
@@ -13,8 +13,8 @@ Arguments:
 """
 from typing import Callable
 
-from nominatim.tokenizer.sanitizers.base import ProcessInfo
-from nominatim.tokenizer.sanitizers.config import SanitizerConfig
+from .base import ProcessInfo
+from .config import SanitizerConfig
 
 def create(config: SanitizerConfig) -> Callable[[ProcessInfo], None]:
     """ Create a name processing function that splits name values with
similarity index 81%
rename from nominatim/tokenizer/sanitizers/strip_brace_terms.py
rename to src/nominatim_db/tokenizer/sanitizers/strip_brace_terms.py
index 119d5693a58beee7ebfa2fa852b03cb312a5b441..166ba865db0fd174ec243725e4cc6b2426cc6602 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 This sanitizer creates additional name variants for names that have
@@ -11,8 +11,8 @@ only the main name part with the bracket part removed.
 """
 from typing import Callable
 
-from nominatim.tokenizer.sanitizers.base import ProcessInfo
-from nominatim.tokenizer.sanitizers.config import SanitizerConfig
+from .base import ProcessInfo
+from .config import SanitizerConfig
 
 
 def create(_: SanitizerConfig) -> Callable[[ProcessInfo], None]:
similarity index 93%
rename from nominatim/tokenizer/sanitizers/tag_analyzer_by_language.py
rename to src/nominatim_db/tokenizer/sanitizers/tag_analyzer_by_language.py
index f3bc26248bffc94d2e4916852633a9e39293f442..db585a50f4887dd921c8e57484c1ac3874e89c49 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 This sanitizer sets the `analyzer` property depending on the
@@ -32,9 +32,9 @@ Arguments:
 """
 from typing import Callable, Dict, Optional, List
 
-from nominatim.data import country_info
-from nominatim.tokenizer.sanitizers.base import ProcessInfo
-from nominatim.tokenizer.sanitizers.config import SanitizerConfig
+from ...data import country_info
+from .base import ProcessInfo
+from .config import SanitizerConfig
 
 class _AnalyzerByLanguage:
     """ Processor for tagging the language of names in a place.
similarity index 93%
rename from nominatim/tokenizer/sanitizers/tag_japanese.py
rename to src/nominatim_db/tokenizer/sanitizers/tag_japanese.py
index 3663860af9ca55bcbe7c8e1b12a9577752d4fbc3..c4dc1c1b12a0bf4c0018b454d6ee921e05eddd4c 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 This sanitizer maps OSM data to Japanese block addresses.
@@ -14,9 +14,9 @@ and quarter and neighbourhood with place.
 from typing import Callable
 from typing import List, Optional
 
-from nominatim.tokenizer.sanitizers.base import ProcessInfo
-from nominatim.tokenizer.sanitizers.config import SanitizerConfig
-from nominatim.data.place_name import PlaceName
+from .base import ProcessInfo
+from .config import SanitizerConfig
+from ...data.place_name import PlaceName
 
 def create(_: SanitizerConfig) -> Callable[[ProcessInfo], None]:
     """Set up the sanitizer
diff --git a/src/nominatim_db/tokenizer/token_analysis/__init__.py b/src/nominatim_db/tokenizer/token_analysis/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
similarity index 95%
rename from nominatim/tokenizer/token_analysis/base.py
rename to src/nominatim_db/tokenizer/token_analysis/base.py
index c7ec61c9fd683c7b105b2ccb3c750995dd435e09..fc6734911f42dd2e1dc53343c2ef5dbb6bd2504b 100644 (file)
@@ -1,16 +1,16 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Common data types and protocols for analysers.
 """
 from typing import Mapping, List, Any
 
-from nominatim.typing import Protocol
-from nominatim.data.place_name import PlaceName
+from nominatim_core.typing import Protocol
+from ...data.place_name import PlaceName
 
 class Analyzer(Protocol):
     """ The `create()` function of an analysis module needs to return an
similarity index 95%
rename from nominatim/tokenizer/token_analysis/config_variants.py
rename to src/nominatim_db/tokenizer/token_analysis/config_variants.py
index 1258373eea9230ff3552e243ae726f4c0a4b2b2b..b455a8a5dfdbaa8d8081f9db96ca08dafe6ffb62 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Parser for configuration for variants.
@@ -12,8 +12,8 @@ from collections import defaultdict
 import itertools
 import re
 
-from nominatim.config import flatten_config_list
-from nominatim.errors import UsageError
+from nominatim_core.config import flatten_config_list
+from nominatim_core.errors import UsageError
 
 class ICUVariant(NamedTuple):
     """ A single replacement rule for variant creation.
similarity index 93%
rename from nominatim/tokenizer/token_analysis/generic.py
rename to src/nominatim_db/tokenizer/token_analysis/generic.py
index 1ed9bf4d383107e0c00a071d3f768057499f432e..cd649e62f54a4fd37a430a7d1822b99d89aeba40 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Generic processor for names that creates abbreviation variants.
@@ -12,10 +12,10 @@ import itertools
 
 import datrie
 
-from nominatim.errors import UsageError
-from nominatim.data.place_name import PlaceName
-from nominatim.tokenizer.token_analysis.config_variants import get_variant_config
-from nominatim.tokenizer.token_analysis.generic_mutation import MutationVariantGenerator
+from nominatim_core.errors import UsageError
+from ...data.place_name import PlaceName
+from .config_variants import get_variant_config
+from .generic_mutation import MutationVariantGenerator
 
 ### Configuration section
 
similarity index 92%
rename from nominatim/tokenizer/token_analysis/generic_mutation.py
rename to src/nominatim_db/tokenizer/token_analysis/generic_mutation.py
index 612f558a46ae290fd383d66ecf4a34643d478836..03cc63db0a7acbbdfce2cd22e75ecb86f8e6f490 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Creator for mutation variants for the generic token analysis.
@@ -12,7 +12,7 @@ import itertools
 import logging
 import re
 
-from nominatim.errors import UsageError
+from nominatim_core.errors import UsageError
 
 LOG = logging.getLogger()
 
similarity index 90%
rename from nominatim/tokenizer/token_analysis/housenumbers.py
rename to src/nominatim_db/tokenizer/token_analysis/housenumbers.py
index a8ad3ecb3658d6f74a55caa305160477f081159e..5b1236f7433ef5dc4881ff0158ed4b6de0627ff5 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Specialized processor for housenumbers. Analyses common housenumber patterns
@@ -11,8 +11,8 @@ and creates variants for them.
 from typing import Any, List, cast
 import re
 
-from nominatim.data.place_name import PlaceName
-from nominatim.tokenizer.token_analysis.generic_mutation import MutationVariantGenerator
+from ...data.place_name import PlaceName
+from .generic_mutation import MutationVariantGenerator
 
 RE_NON_DIGIT = re.compile('[^0-9]')
 RE_DIGIT_ALPHA = re.compile(r'(\d)\s*([^\d\s␣])')
similarity index 92%
rename from nominatim/tokenizer/token_analysis/postcodes.py
rename to src/nominatim_db/tokenizer/token_analysis/postcodes.py
index 94e936459c0e12ad18aaf8025f73e4468e8ec8d1..17c4e2a6e81a83a9bfaecc24d1e4072e693feb99 100644 (file)
@@ -1,4 +1,4 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
@@ -10,8 +10,8 @@ token, which produces variants with optional spaces.
 """
 from typing import Any, List
 
-from nominatim.tokenizer.token_analysis.generic_mutation import MutationVariantGenerator
-from nominatim.data.place_name import PlaceName
+from ...data.place_name import PlaceName
+from .generic_mutation import MutationVariantGenerator
 
 ### Configuration section
 
similarity index 68%
rename from nominatim/tools/__init__.py
rename to src/nominatim_db/tools/__init__.py
index acf0a96976329a34f6e179628e796b05a73e483c..8f9dce6d5881c1aa1bcbc23fccd741bf2b21961e 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Module with functions for importing, updating Nominatim databases
similarity index 89%
rename from nominatim/tools/add_osm_data.py
rename to src/nominatim_db/tools/add_osm_data.py
index 1814b921e79dcaae29abddca708ba632872756f1..44ff21975d6e60332ba28c3e85dcad61e23040a6 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Function to add additional OSM data from a file or the API into the database.
@@ -12,8 +12,9 @@ from pathlib import Path
 import logging
 import urllib
 
-from nominatim.db.connection import connect
-from nominatim.tools.exec_utils import run_osm2pgsql, get_url
+from nominatim_core.db.connection import connect
+from nominatim_core.utils.url_utils import get_url
+from .exec_utils import run_osm2pgsql
 
 LOG = logging.getLogger()
 
similarity index 90%
rename from nominatim/tools/admin.py
rename to src/nominatim_db/tools/admin.py
index c37d0811ff84b0ebb7276c4b90293f8bf71369d6..7cc0f04794e306b076f36ea4a6ba6683a1b16248 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for database analysis and maintenance.
@@ -13,12 +13,12 @@ import logging
 from psycopg2.extras import Json, register_hstore
 from psycopg2 import DataError
 
-from nominatim.config import Configuration
-from nominatim.db.connection import connect, Cursor
-from nominatim.tokenizer import factory as tokenizer_factory
-from nominatim.errors import UsageError
-from nominatim.data.place_info import PlaceInfo
-from nominatim.typing import DictCursorResult
+from nominatim_core.typing import DictCursorResult
+from nominatim_core.config import Configuration
+from nominatim_core.db.connection import connect, Cursor
+from nominatim_core.errors import UsageError
+from ..tokenizer import factory as tokenizer_factory
+from ..data.place_info import PlaceInfo
 
 LOG = logging.getLogger()
 
similarity index 96%
rename from nominatim/tools/check_database.py
rename to src/nominatim_db/tools/check_database.py
index 288eb916dfdf909021edffb89828da5efaf34394..d2659877c50ca93e922d5e83ce6732b28f251168 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Collection of functions that check if the database is complete and functional.
@@ -11,13 +11,13 @@ from typing import Callable, Optional, Any, Union, Tuple, Mapping, List
 from enum import Enum
 from textwrap import dedent
 
-from nominatim.config import Configuration
-from nominatim.db.connection import connect, Connection
-from nominatim.db import properties
-from nominatim.errors import UsageError
-from nominatim.tokenizer import factory as tokenizer_factory
-from nominatim.tools import freeze
-from nominatim.version import NOMINATIM_VERSION, parse_version
+from nominatim_core.config import Configuration
+from nominatim_core.db.connection import connect, Connection
+from nominatim_core.db import properties
+from nominatim_core.errors import UsageError
+from ..tokenizer import factory as tokenizer_factory
+from . import freeze
+from ..version import NOMINATIM_VERSION, parse_version
 
 CHECKLIST = []
 
similarity index 95%
rename from nominatim/tools/collect_os_info.py
rename to src/nominatim_db/tools/collect_os_info.py
index 779c55c7b00d835fd26eb6287674e8d1115e89c5..5096ce69ebcfabbe406e178c0907d08cd47b64c8 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Collection of host system information including software versions, memory,
@@ -17,9 +17,9 @@ from typing import List, Optional, Tuple, Union
 import psutil
 from psycopg2.extensions import make_dsn, parse_dsn
 
-from nominatim.config import Configuration
-from nominatim.db.connection import connect
-from nominatim.version import NOMINATIM_VERSION
+from nominatim_core.config import Configuration
+from nominatim_core.db.connection import connect
+from ..version import NOMINATIM_VERSION
 
 
 def convert_version(ver_tup: Tuple[int, int]) -> str:
similarity index 97%
rename from nominatim/tools/convert_sqlite.py
rename to src/nominatim_db/tools/convert_sqlite.py
index 1e7beae57645c172e15f72f999ce178a0ea4beeb..47ab63b718f872a121cffd2ca5173915c64d93da 100644 (file)
@@ -2,7 +2,7 @@
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2023 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Exporting a Nominatim database to SQlite.
@@ -14,10 +14,10 @@ from pathlib import Path
 
 import sqlalchemy as sa
 
-from nominatim.typing import SaSelect, SaRow
-from nominatim.db.sqlalchemy_types import Geometry, IntArray
-from nominatim.api.search.query_analyzer_factory import make_query_analyzer
-import nominatim.api as napi
+import nominatim_api as napi
+from nominatim_api.search.query_analyzer_factory import make_query_analyzer
+from nominatim_core.typing import SaSelect, SaRow
+from nominatim_core.db.sqlalchemy_types import Geometry, IntArray
 
 LOG = logging.getLogger()
 
similarity index 94%
rename from nominatim/tools/database_import.py
rename to src/nominatim_db/tools/database_import.py
index de7e6a4aa2018c06e7284b4120973351b8a04ea5..84f2f32542680d5510373ebfd3bffc36c14a259a 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for setting up and importing a new Nominatim database.
@@ -17,14 +17,13 @@ from pathlib import Path
 import psutil
 from psycopg2 import sql as pysql
 
-from nominatim.config import Configuration
-from nominatim.db.connection import connect, get_pg_env, Connection
-from nominatim.db.async_connection import DBConnection
-from nominatim.db.sql_preprocessor import SQLPreprocessor
-from nominatim.tools.exec_utils import run_osm2pgsql
-from nominatim.errors import UsageError
-from nominatim.version import POSTGRESQL_REQUIRED_VERSION, \
-                              POSTGIS_REQUIRED_VERSION
+from nominatim_core.errors import UsageError
+from nominatim_core.config import Configuration
+from nominatim_core.db.connection import connect, get_pg_env, Connection
+from nominatim_core.db.async_connection import DBConnection
+from nominatim_core.db.sql_preprocessor import SQLPreprocessor
+from .exec_utils import run_osm2pgsql
+from ..version import POSTGRESQL_REQUIRED_VERSION, POSTGIS_REQUIRED_VERSION
 
 LOG = logging.getLogger()
 
similarity index 78%
rename from nominatim/tools/exec_utils.py
rename to src/nominatim_db/tools/exec_utils.py
index 9bf28a03c3f924ee58e801803d40f527bafc1f74..5450c43bb36f66eda9fccb41d1dff8d272195e08 100644 (file)
@@ -1,22 +1,20 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Helper functions for executing external programs.
 """
-from typing import Any, Mapping, IO
+from typing import Any, Mapping
 import logging
 import os
 import subprocess
 import shutil
-import urllib.request as urlrequest
 
-from nominatim.typing import StrPath
-from nominatim.version import NOMINATIM_VERSION
-from nominatim.db.connection import get_pg_env
+from nominatim_core.typing import StrPath
+from nominatim_core.db.connection import get_pg_env
 
 LOG = logging.getLogger()
 
@@ -84,17 +82,3 @@ def run_osm2pgsql(options: Mapping[str, Any]) -> None:
     subprocess.run(cmd, cwd=options.get('cwd', '.'),
                    input=options.get('import_data'),
                    env=env, check=True)
-
-
-def get_url(url: str) -> str:
-    """ Get the contents from the given URL and return it as a UTF-8 string.
-    """
-    headers = {"User-Agent": f"Nominatim/{NOMINATIM_VERSION!s}"}
-
-    try:
-        request = urlrequest.Request(url, headers=headers)
-        with urlrequest.urlopen(request) as response: # type: IO[bytes]
-            return response.read().decode('utf-8')
-    except Exception:
-        LOG.fatal('Failed to load URL: %s', url)
-        raise
similarity index 89%
rename from nominatim/tools/freeze.py
rename to src/nominatim_db/tools/freeze.py
index 602def55b55ac3bb8b52212d43cab04d2361f37b..2023bb8ac44833664afcfec87535f38041cecba6 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for removing unnecessary data from the database.
@@ -12,7 +12,7 @@ from pathlib import Path
 
 from psycopg2 import sql as pysql
 
-from nominatim.db.connection import Connection
+from nominatim_core.db.connection import Connection
 
 UPDATE_TABLES = [
     'address_levels',
similarity index 97%
rename from nominatim/tools/migration.py
rename to src/nominatim_db/tools/migration.py
index 02b7d19a0033213971c0326c6372aad4155ff0b0..0712f187ff51dd1b659b2995c3789387d5b2b75b 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for database migration to newer software versions.
@@ -12,13 +12,13 @@ import logging
 
 from psycopg2 import sql as pysql
 
-from nominatim.config import Configuration
-from nominatim.db import properties
-from nominatim.db.connection import connect, Connection
-from nominatim.version import NominatimVersion, NOMINATIM_VERSION, parse_version
-from nominatim.tools import refresh
-from nominatim.tokenizer import factory as tokenizer_factory
-from nominatim.errors import UsageError
+from nominatim_core.errors import UsageError
+from nominatim_core.config import Configuration
+from nominatim_core.db import properties
+from nominatim_core.db.connection import connect, Connection
+from ..version import NominatimVersion, NOMINATIM_VERSION, parse_version
+from ..tokenizer import factory as tokenizer_factory
+from . import refresh
 
 LOG = logging.getLogger()
 
similarity index 96%
rename from nominatim/tools/postcodes.py
rename to src/nominatim_db/tools/postcodes.py
index 7171e25d169d0af7b625430fafefdfba183c4df4..772651b37d49de89ace4453f11577f9ed0ae3567 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for importing, updating and otherwise maintaining the table
@@ -18,10 +18,10 @@ from math import isfinite
 
 from psycopg2 import sql as pysql
 
-from nominatim.db.connection import connect, Connection
-from nominatim.utils.centroid import PointsCentroid
-from nominatim.data.postcode_format import PostcodeFormatter, CountryPostcodeMatcher
-from nominatim.tokenizer.base import AbstractAnalyzer, AbstractTokenizer
+from nominatim_core.db.connection import connect, Connection
+from nominatim_core.utils.centroid import PointsCentroid
+from ..data.postcode_format import PostcodeFormatter, CountryPostcodeMatcher
+from ..tokenizer.base import AbstractAnalyzer, AbstractTokenizer
 
 LOG = logging.getLogger()
 
similarity index 97%
rename from nominatim/tools/refresh.py
rename to src/nominatim_db/tools/refresh.py
index a200ee1348b9fdc717cd8db39c3e7bffd1438a64..966080976febd42b35ef8dee293aa52df4a72628 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for bringing auxiliary data in the database up-to-date.
@@ -16,11 +16,11 @@ from pathlib import Path
 
 from psycopg2 import sql as pysql
 
-from nominatim.config import Configuration
-from nominatim.db.connection import Connection, connect
-from nominatim.db.utils import execute_file, CopyBuffer
-from nominatim.db.sql_preprocessor import SQLPreprocessor
-from nominatim.version import NOMINATIM_VERSION
+from nominatim_core.config import Configuration
+from nominatim_core.db.connection import Connection, connect
+from nominatim_core.db.utils import execute_file, CopyBuffer
+from nominatim_core.db.sql_preprocessor import SQLPreprocessor
+from ..version import NOMINATIM_VERSION
 
 LOG = logging.getLogger()
 
similarity index 96%
rename from nominatim/tools/replication.py
rename to src/nominatim_db/tools/replication.py
index edd63e49a15931d289b2fd488737ad8d105dc532..f9421bb88e2cd5b5023aa2ebdffb0fc2308c4a26 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for updating a database from a replication source.
@@ -17,10 +17,11 @@ import types
 import urllib.request as urlrequest
 
 import requests
-from nominatim.db import status
-from nominatim.db.connection import Connection, connect
-from nominatim.tools.exec_utils import run_osm2pgsql
-from nominatim.errors import UsageError
+
+from nominatim_core.errors import UsageError
+from nominatim_core.db import status
+from nominatim_core.db.connection import Connection, connect
+from .exec_utils import run_osm2pgsql
 
 try:
     from osmium.replication.server import ReplicationServer
diff --git a/src/nominatim_db/tools/special_phrases/__init__.py b/src/nominatim_db/tools/special_phrases/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
similarity index 95%
rename from nominatim/tools/special_phrases/importer_statistics.py
rename to src/nominatim_db/tools/special_phrases/importer_statistics.py
index 0bb118c856a921777ea336060fe887f1a2d129e3..b197b8356762ac2e492c17605f3d21717267687c 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
     Contains the class which handles statistics for the
similarity index 84%
rename from nominatim/tools/special_phrases/sp_csv_loader.py
rename to src/nominatim_db/tools/special_phrases/sp_csv_loader.py
index 400f9fa91aa3efec500a8e40b3e7f1df08e609bf..9f472e682f37085775bd73b7fb1d3dbdebe1083b 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
     Module containing the SPCsvLoader class.
@@ -12,8 +12,9 @@
 from typing import Iterable
 import csv
 import os
-from nominatim.tools.special_phrases.special_phrase import SpecialPhrase
-from nominatim.errors import UsageError
+
+from nominatim_core.errors import UsageError
+from .special_phrase import SpecialPhrase
 
 class SPCsvLoader:
     """
similarity index 96%
rename from nominatim/tools/special_phrases/sp_importer.py
rename to src/nominatim_db/tools/special_phrases/sp_importer.py
index 06b59fd003d5e3022b3e32cd458936152aaeb669..9749db3e69761b9e0517eb1f17528b00ca9f9332 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
     Module containing the class handling the import
@@ -19,12 +19,12 @@ import re
 
 from psycopg2.sql import Identifier, SQL
 
-from nominatim.config import Configuration
-from nominatim.db.connection import Connection
-from nominatim.tools.special_phrases.importer_statistics import SpecialPhrasesImporterStatistics
-from nominatim.tools.special_phrases.special_phrase import SpecialPhrase
-from nominatim.tokenizer.base import AbstractTokenizer
-from nominatim.typing import Protocol
+from nominatim_core.typing import Protocol
+from nominatim_core.config import Configuration
+from nominatim_core.db.connection import Connection
+from .importer_statistics import SpecialPhrasesImporterStatistics
+from .special_phrase import SpecialPhrase
+from ...tokenizer.base import AbstractTokenizer
 
 LOG = logging.getLogger()
 
similarity index 89%
rename from nominatim/tools/special_phrases/sp_wiki_loader.py
rename to src/nominatim_db/tools/special_phrases/sp_wiki_loader.py
index cbeaeabfdfae752b11825b33c544e4d6476f3b8f..c7e383360639f2b435973edf52588fb1da6fd873 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
     Module containing the SPWikiLoader class.
@@ -11,9 +11,9 @@ from typing import Iterable
 import re
 import logging
 
-from nominatim.config import Configuration
-from nominatim.tools.special_phrases.special_phrase import SpecialPhrase
-from nominatim.tools.exec_utils import get_url
+from nominatim_core.config import Configuration
+from nominatim_core.utils.url_utils import get_url
+from .special_phrase import SpecialPhrase
 
 LOG = logging.getLogger()
 
similarity index 92%
rename from nominatim/tools/special_phrases/special_phrase.py
rename to src/nominatim_db/tools/special_phrases/special_phrase.py
index 40f6a9e4cb57112736dab4381ba1fdcd41b19b9b..cf5c504848f8407eb9d9994a9cb8957dd57e1e6d 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
     Module containing the class SpecialPhrase.
similarity index 90%
rename from nominatim/tools/tiger_data.py
rename to src/nominatim_db/tools/tiger_data.py
index 70cecae58648997f0bc6a81a863fee7b420432f5..6030a38aef8fdf63f73a699a59bf00fa7647bb83 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# SPDX-License-Identifier: GPL-3.0-or-later
 #
 # This file is part of Nominatim. (https://nominatim.org)
 #
-# Copyright (C) 2022 by the Nominatim developer community.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Functions for importing tiger data and handling tarbar and directory files
@@ -16,14 +16,14 @@ import tarfile
 
 from psycopg2.extras import Json
 
-from nominatim.config import Configuration
-from nominatim.db.connection import connect
-from nominatim.db.async_connection import WorkerPool
-from nominatim.db.sql_preprocessor import SQLPreprocessor
-from nominatim.errors import UsageError
-from nominatim.data.place_info import PlaceInfo
-from nominatim.tokenizer.base import AbstractAnalyzer, AbstractTokenizer
-from nominatim.tools import freeze
+from nominatim_core.config import Configuration
+from nominatim_core.db.connection import connect
+from nominatim_core.db.async_connection import WorkerPool
+from nominatim_core.db.sql_preprocessor import SQLPreprocessor
+from nominatim_core.errors import UsageError
+from ..data.place_info import PlaceInfo
+from ..tokenizer.base import AbstractAnalyzer, AbstractTokenizer
+from . import freeze
 
 LOG = logging.getLogger()
 
similarity index 95%
rename from nominatim/version.py
rename to src/nominatim_db/version.py
index 2ece2d795ab90112f64b9c4ad3dc7a4999b4cb7d..ca383c859c2ad99b5067779d7741939001823ad1 100644 (file)
@@ -1,8 +1,8 @@
-# SPDX-License-Identifier: GPL-2.0-only
+# 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.
+# Copyright (C) 2024 by the Nominatim developer community.
 # For a full list of authors see the git log.
 """
 Version information for Nominatim.