]> 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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.
 # 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
 
 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
 
 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.
     """
         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)
 #
 #
 # 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.
 # 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
 
 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
 
 
 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))
                 @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)')
                     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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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.
 # 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
 
 
 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]
 
 
 
 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
 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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.
 # 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
 
 
 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
 
 # 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)
 #
 #
 # 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.
 # For a full list of authors see the git log.
 """
 Implementation of reverse geocoding.
@@ -12,13 +12,13 @@ import functools
 
 import sqlalchemy as sa
 
 
 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.
 
 # 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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.
 # 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 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]],
 
 
 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)
 #
 #
 # 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.
 # 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
 
 
 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
 
 
 @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)
 #
 #
 # 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.
 # 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
 
 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
 
 
 # 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)
 #
 #
 # 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.
 # 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
 
 
 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
 
 #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)
 #
 #
 # 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.
 # 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
 
 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.
 
 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)
 #
 #
 # 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.
 # 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
 
 
 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 = {
 
 
 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)
 #
 #
 # 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.
 # 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
 
 
 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
 
 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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.
 # 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 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:
 
 if TYPE_CHECKING:
-    from nominatim.api.search.query import Phrase, QueryStruct
+    from .query import Phrase, QueryStruct
 
 class AbstractQueryAnalyzer(ABC):
     """ Class for analysing incoming queries.
 
 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)
 #
 #
 # 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
 # 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
 
 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
 
 
 # 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)
 #
 #
 # 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.
 # 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 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.
 
 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)
 #
 #
 # 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.
 # 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 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.
 
 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)
 #
 #
 # 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.
 # 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
 
 import sqlalchemy as sa
 from sqlalchemy.ext.compiler import compiles
 
-from nominatim.typing import SaColumn
+from nominatim_core.typing import SaColumn
 
 # pylint: disable=all
 
 
 # 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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.
 # 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
 
 
 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:
 
 @dataclasses.dataclass
 class StatusResult:
@@ -22,9 +22,9 @@ class StatusResult:
     """
     status: int
     message: str
     """
     status: int
     message: str
-    software_version = version.NOMINATIM_VERSION
+    software_version = NOMINATIM_API_VERSION
     data_updated: Optional[dt.datetime] = None
     data_updated: Optional[dt.datetime] = None
-    database_version: Optional[version.NominatimVersion] = None
+    database_version: Optional[str] = None
 
 
 async def get_status(conn: SearchConnection) -> StatusResult:
 
 
 async def get_status(conn: SearchConnection) -> StatusResult:
@@ -44,8 +44,7 @@ async def get_status(conn: SearchConnection) -> StatusResult:
 
     # Database version
     try:
 
     # 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
 
     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)
 #
 #
 # 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.
 # 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 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
 
 
 # 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)
 #
 #
 # 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).
 # 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
 
 
 #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
 
 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)
 #
 #
 # 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.
 # 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
 
 """
 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:
 
 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(' ', '_')
 
 
     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
     """ 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)
     """
     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
 
 
     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)
 #
 #
 # 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.
 # 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 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.
 
 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 = 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'
 
 
     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()\
     out = JsonWriter()
 
     out.start_object()\
@@ -47,8 +50,8 @@ def _format_status_json(result: napi.StatusResult, _: Mapping[str, Any]) -> str:
     return out()
 
 
     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)
     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()
 
 
         .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)
     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()
 
 
     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:
     # 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()
 
 
     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()
 
     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()
 
 
     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', '')})
 
 
     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)
 
 
                             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)
 
 
                                 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')
 
 
                          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')
 
 
                            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):
     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)
 
 
                             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)
 
 
                                 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')
 
 
                          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')
                            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)
 #
 #
 # 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
 
 # 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
 
 
 #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])
 
 
            .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 []):
                                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,
 
 
 def _write_geocodejson_address(out: JsonWriter,
-                               address: Optional[napi.AddressLines],
+                               address: Optional[AddressLines],
                                obj_place_id: Optional[int],
                                country_code: Optional[str]) -> None:
     extra = {}
                                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)
 
 
         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.
                      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()
 
 
     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.
                         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()
 
 
     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.
     """
                             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)
 #
 #
 # 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.
 # 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 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
 
 
 #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:
                        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
 
 
         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:
                        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
 
 
     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:
                     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)
 #
 #
 # 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
 # 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 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
 
 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)
 #
 #
 # 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.
 # 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
 
 
 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'
 
 CONTENT_TEXT = 'text/plain; charset=utf-8'
 CONTENT_XML = 'text/xml; charset=utf-8'
@@ -211,16 +215,16 @@ class ASGIAdaptor(abc.ABC):
         return False
 
 
         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 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:
 
 
     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
         """ Create details structure from the supplied geometry parameters.
         """
         numgeoms = 0
-        output = napi.GeometryFormat.NONE
+        output = GeometryFormat.NONE
         if self.get_bool('polygon_geojson', False):
         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):
             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):
                 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):
                 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'):
                 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()
 
     """ 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
 
     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)
 
 
                                  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.
     """
     """ 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_id = params.get_int('place_id', 0)
-    place: napi.PlaceRef
+    place: PlaceRef
     if place_id:
     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'.")
     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()
 
 
     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),
 
     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)
                                                  if params.get_bool('polygon_geojson', False)
-                                                 else napi.GeometryFormat.NONE,
+                                                 else GeometryFormat.NONE,
                                locales=locales
                               )
 
                                locales=locales
                               )
 
@@ -326,17 +330,17 @@ async def details_endpoint(api: napi.NominatimAPIAsync, params: ASGIAdaptor) ->
     return params.build_response(output, num_results=1)
 
 
     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.
     """
     """ 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()
     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 = 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)
 
 
     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)}
 
                    '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)
 
 
                                       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.
     """
     """ 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)
     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 = []
     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.')
 
     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:
     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))
 
     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))
 
 
     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:
     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
 
     # 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:
         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:
 
     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)
 
 
     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.
     """
     """ 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)
 
     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['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()
 
     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)
 
     # 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))
 
 
     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
     """ 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, {}))
 
 
     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
     """ 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, {}))
 
 
     return params.build_response(formatting.format_result(results, fmt, {}))
 
 
-EndpointFunc = Callable[[napi.NominatimAPIAsync, ASGIAdaptor], Any]
+EndpointFunc = Callable[[NominatimAPIAsync, ASGIAdaptor], Any]
 
 ROUTES = [
     ('status', status_endpoint),
 
 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)
 #
 #
 # 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 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] = {}
 
 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
                  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()
         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
         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] = {}
 
         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)
 #
 #
 # 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.
 """
 # 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
 
 except ImportError:
     __has_psycopg2_errors__ = False
 
-from nominatim.typing import T_cursor, Query
+from ..typing import T_cursor, Query
 
 LOG = logging.getLogger()
 
 
 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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.
 # 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
 
 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()
 
 
 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)
 #
 #
 # 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
 
 # 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.
 
 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)
 #
 #
 # 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.
 # 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 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.
 
 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)
 #
 #
 # 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
 
 # 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:
 
 #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)
 #
 #
 # 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
 # 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)
 #
 #
 # 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.
 # 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 sqlalchemy.ext.compiler import compiles
 from sqlalchemy import types
 
-from nominatim.typing import SaColumn, SaBind
+from ...typing import SaColumn, SaBind
 
 #pylint: disable=all
 
 
 #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)
 #
 #
 # 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.
 # 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 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
 
 
 # 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)
 #
 #
 # 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.
 # 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 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
 
 
 # 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)
 #
 #
 # 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.
 # 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 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
 
 
 # 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)
 #
 #
 # 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.
 # 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
 
 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'
 
 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)
 #
 #
 # 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.
 # 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
 
 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()
 
 
 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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,
 # 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
 
 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()
 
 
 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)
 #
 #
 # 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.
 # For a full list of authors see the git log.
 """
 Implementation of the 'add-data' subcommand.
@@ -13,7 +13,7 @@ import logging
 
 import psutil
 
 
 import psutil
 
-from nominatim.clicmd.args import NominatimArgs
+from .args import NominatimArgs
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
 
 # Do not repeat documentation of subcommand classes.
 # pylint: disable=C0111
@@ -64,8 +64,8 @@ class UpdateAddData:
 
 
     def run(self, args: NominatimArgs) -> int:
 
 
     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)
 
         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)
 #
 #
 # 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.
 # 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
 
 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
 
 # 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)
 #
 #
 # 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.
 # 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
 
 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
 
 # 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)
 #
 #
 # 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.
 # 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 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()
 
 
 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)
 #
 #
 # 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.
 # 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
 
 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
 
 # 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)
 #
 #
 # 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.
 # 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
 
 
 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
 
 # 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)
 #
 #
 # 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
 
 # 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
 
 # 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)
 #
 #
 # 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.
 # For a full list of authors see the git log.
 """
 Implementation of the 'index' subcommand.
@@ -11,9 +11,9 @@ import argparse
 
 import psutil
 
 
 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
 
 # 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)
 #
 #
 # 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.
 # 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
 
 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
 
 # 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)
 #
 #
 # 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.
 # 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
 
 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()
 
 
 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)
 #
 #
 # 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.
 # 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
 
 
 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
 
 # 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)
 #
 #
 # 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.
 # 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
 
 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()
 
 
 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)
 #
 #
 # 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.
 # 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 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:
 
 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)
 #
 #
 # 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
 # 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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
 # 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 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
 
 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)
 #
 #
 # 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.
 # 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
 
 
 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()
 
 
 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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
 # 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 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
 
 
 # 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)
 #
 #
 # 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
 # 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 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
 
 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)
 #
 #
 # 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
 # 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
 
 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()
 
 
 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)
 #
 #
 # 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.
 # 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 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()
 
 
 LOG = logging.getLogger()
 
@@ -51,7 +51,7 @@ class ICURuleLoader:
                                               config='TOKENIZER_CONFIG')
 
         # Make sure country information is available to analyzers and sanitizers.
                                               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')
 
         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)
 #
 #
 # 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
 # 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 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
 
 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
 
 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)
 #
 #
 # 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
 # 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 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"
 
 
 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)
 #
 #
 # 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.
 # 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
 
 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"
 
 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)
 #
 #
 # 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
 # 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 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:
 
 
 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)
 #
 #
 # 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
 
 # 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:
 
 
 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)
 #
 #
 # 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
 # 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 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:
 
 
 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)
 #
 #
 # 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.
 # 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 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:
 
 
 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)
 #
 #
 # 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.
 # 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 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]')
 
 
 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)
 #
 #
 # 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.
 # 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 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
 
 # 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
 #\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
 # 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
 """\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
 \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)
 #
 #
 # 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.
 # 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 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
 
 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)
 #
 #
 # 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
 # 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 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]:
 
 
 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)
 #
 #
 # 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
 # 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 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.
 
 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)
 #
 #
 # 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.
 # 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 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
 
 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)
 #
 #
 # 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
 
 # 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
 
 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)
 #
 #
 # 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.
 # 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
 
 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.
 
 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)
 #
 #
 # 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.
 # 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
 
 
 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
 
 
 ### 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)
 #
 #
 # 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.
 # 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
 
 import logging
 import re
 
-from nominatim.errors import UsageError
+from nominatim_core.errors import UsageError
 
 LOG = logging.getLogger()
 
 
 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)
 #
 #
 # 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
 # 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 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␣])')
 
 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)
 #
 #
 # 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 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
 
 
 ### 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)
 #
 #
 # 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
 # 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)
 #
 #
 # 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.
 # 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
 
 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()
 
 
 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)
 #
 #
 # 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.
 # 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 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()
 
 
 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)
 #
 #
 # 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.
 # 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 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 = []
 
 
 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)
 #
 #
 # 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,
 # 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
 
 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:
 
 
 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)
 #
 #
 # 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.
 # 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
 
 
 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()
 
 
 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)
 #
 #
 # 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.
 # 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
 
 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()
 
 
 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)
 #
 #
 # 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.
 """
 # 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 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()
 
 
 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)
     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)
 #
 #
 # 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.
 # 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 psycopg2 import sql as pysql
 
-from nominatim.db.connection import Connection
+from nominatim_core.db.connection import Connection
 
 UPDATE_TABLES = [
     'address_levels',
 
 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)
 #
 #
 # 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.
 # 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 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()
 
 
 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)
 #
 #
 # 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
 # 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 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()
 
 
 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)
 #
 #
 # 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.
 # 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 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()
 
 
 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)
 #
 #
 # 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.
 # 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
 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
 
 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)
 #
 #
 # 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
 # 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)
 #
 #
 # 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.
 # 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 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:
     """
 
 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)
 #
 #
 # 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
 # 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 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()
 
 
 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)
 #
 #
 # 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.
 # 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
 
 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()
 
 
 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)
 #
 #
 # 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.
 # 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)
 #
 #
 # 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
 # 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 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()
 
 
 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)
 #
 #
 # 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.
 # For a full list of authors see the git log.
 """
 Version information for Nominatim.