]> git.openstreetmap.org Git - nominatim.git/commitdiff
make use of nominatim-api in db package optional
authorSarah Hoffmann <lonvia@denofr.de>
Tue, 11 Jun 2024 18:21:19 +0000 (20:21 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Wed, 26 Jun 2024 09:52:47 +0000 (11:52 +0200)
packaging/nominatim-api/pyproject.toml
packaging/nominatim-core/pyproject.toml
packaging/nominatim-db/pyproject.toml
src/nominatim_db/cli.py
src/nominatim_db/clicmd/__init__.py
src/nominatim_db/clicmd/admin.py
src/nominatim_db/version.py

index 7e9230e4047b8a58fa52cff1250377cfa36a9d46..0e3f36d9e95a2fb4c645b73058a9519606b71f71 100644 (file)
@@ -30,9 +30,8 @@ requires = ["hatchling"]
 build-backend = "hatchling.build"
 
 [tool.hatch.version]
-source = "code"
 path = "../../src/nominatim_api/version.py"
-expression = "NOMINATIM_API_VERSION"
+pattern = "NOMINATIM_API_VERSION = '(?P<version>[^']+)'"
 
 [tool.hatch.build.targets.sdist.force-include]
 "../../src/nominatim_db" = "nominatim_api"
index 931c857b2498128eb51bbebe5607036512794ec9..19e86cdeb7fb978354f5887674ab7c528a290ee2 100644 (file)
@@ -30,9 +30,8 @@ requires = ["hatchling"]
 build-backend = "hatchling.build"
 
 [tool.hatch.version]
-source = "code"
 path = "../../src/nominatim_core/version.py"
-expression = "NOMINATIM_CORE_VERSION"
+pattern = "NOMINATIM_CORE_VERSION = '(?P<version>[^']+)'"
 
 [tool.hatch.build.targets.sdist.force-include]
 "../../src/nominatim_core" = "nominatim_core"
index 4cad2b8e4d2adc0c2594781e7ac93e4b9e123121..f7d0502b8028e4a01244ee6d86b21b9eefe13f2a 100644 (file)
@@ -30,9 +30,8 @@ requires = ["hatchling"]
 build-backend = "hatchling.build"
 
 [tool.hatch.version]
-source = "code"
 path = "../../src/nominatim_db/version.py"
-expression = "NOMINATIM_VERSION.release_version()"
+pattern = "NOMINATIM_VERSION = parse_version.'(?P<version>[^-]+)"
 
 [tool.hatch.build.targets.sdist.force-include]
 "../../src/nominatim_db" = "nominatim_db"
index 746fbe3297c4ad91f0152ec1836d6ef1dab1b54a..8a85e0e25b9c92fe8efeab272df1a5ae9091c8c2 100644 (file)
@@ -207,15 +207,29 @@ def get_set_parser() -> CommandlineParser:
 
     parser.add_subcommand('admin', clicmd.AdminFuncs())
 
-    parser.add_subcommand('export', clicmd.QueryExport())
-    parser.add_subcommand('convert', clicmd.ConvertDB())
-    parser.add_subcommand('serve', AdminServe())
-
-    parser.add_subcommand('search', clicmd.APISearch())
-    parser.add_subcommand('reverse', clicmd.APIReverse())
-    parser.add_subcommand('lookup', clicmd.APILookup())
-    parser.add_subcommand('details', clicmd.APIDetails())
-    parser.add_subcommand('status', clicmd.APIStatus())
+    try:
+        exportcmd = importlib.import_module('nominatim_db.clicmd.export')
+        apicmd = importlib.import_module('nominatim_db.clicmd.api')
+        convertcmd = importlib.import_module('nominatim_db.clicmd.convert')
+
+        parser.add_subcommand('export', exportcmd.QueryExport())
+        parser.add_subcommand('convert', convertcmd.ConvertDB())
+        parser.add_subcommand('serve', AdminServe())
+
+        parser.add_subcommand('search', apicmd.APISearch())
+        parser.add_subcommand('reverse', apicmd.APIReverse())
+        parser.add_subcommand('lookup', apicmd.APILookup())
+        parser.add_subcommand('details', apicmd.APIDetails())
+        parser.add_subcommand('status', apicmd.APIStatus())
+    except ModuleNotFoundError as ex:
+        if not ex.name or 'nominatim_api' not in ex.name: # pylint: disable=E1135
+            raise ex
+
+        parser.parser.epilog = \
+            '\n\nNominatim API package not found. The following commands are not available:'\
+            '\n    export, convert, serve, search, reverse, lookup, details, status'\
+            "\n\nRun 'pip install nominatim-api' to install the package."
+
 
     return parser
 
index 0481a45e76bd8936b230b828becdcd3084499e20..725b4d6b52cbf92d8e7926855a245c8d51e0464a 100644 (file)
@@ -13,16 +13,9 @@ Subcommand definitions for the command-line tool.
 
 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
index 66dbbe99a04134ebb4d64e85987f3aec57ed270e..7b97557d5925187ab795dca0e43d110f2690e0bf 100644 (file)
@@ -11,7 +11,7 @@ import logging
 import argparse
 import random
 
-import nominatim_api as napi
+from nominatim_core.errors import UsageError
 from nominatim_core.db.connection import connect
 from .args import NominatimArgs
 
@@ -95,6 +95,11 @@ class AdminFuncs:
 
 
     def _warm(self, args: NominatimArgs) -> int:
+        try:
+            import nominatim_api as napi
+        except ModuleNotFoundError as exp:
+            raise UsageError("Warming requires nominatim API. "
+                             "Install with 'pip install nominatim-api'.") from exp
         LOG.warning('Warming database caches')
 
         api = napi.NominatimAPI(args.project_dir)
index 525a0d99ea0ccf3cdd71a6c35e13da055c5b5c57..34e3b432e37e4623c52ab1fece54078f62ccd1ab 100644 (file)
@@ -15,7 +15,7 @@ from typing import Optional
 from nominatim_core.version import (NominatimVersion as NominatimVersion,
                                     parse_version as parse_version)
 
-NOMINATIM_VERSION = NominatimVersion(4, 4, 99, 1)
+NOMINATIM_VERSION = parse_version('4.4.99-1')
 
 POSTGRESQL_REQUIRED_VERSION = (9, 6)
 POSTGIS_REQUIRED_VERSION = (2, 2)