The global configuration builds one large package.
docs/develop/*.png
build
+dist
+.coverage
.vagrant
data/country_osm_grid.sql.gz
--- /dev/null
+if __name__ == '__main__':
+ from nominatim import cli
+
+ exit(cli.nominatim(module_dir=None, osm2pgsql_path=None))
""" Set paths to library functions and data.
"""
for key, value in kwargs.items():
- setattr(self.lib_dir, key, Path(value))
+ setattr(self.lib_dir, key, None if value is None else Path(value))
def __getattr__(self, name: str) -> str:
import logging
import os
import subprocess
+import shutil
import urllib.request as urlrequest
from nominatim.typing import StrPath
""" Run osm2pgsql with the given options.
"""
env = get_pg_env(options['dsn'])
- cmd = [str(options['osm2pgsql']),
+
+ osm2pgsql_cmd = options['osm2pgsql']
+ if osm2pgsql_cmd is None:
+ osm2pgsql_cmd = shutil.which('osm2pgsql')
+ if osm2pgsql_cmd is None:
+ raise RuntimeError('osm2pgsql executable not found. Please install osm2pgsql first.')
+
+ cmd = [str(osm2pgsql_cmd),
'--slim',
'--log-progress', 'true',
'--number-processes', '1' if options['append'] else str(options['threads']),
def __str__(self) -> str:
return f"{self.major}.{self.minor}.{self.patch_level}-{self.db_patch_level}"
+ def release_version(self) -> str:
+ """ Return the release version in semantic versioning format.
+
+ The release version does not include the database patch version.
+ """
+ return f"{self.major}.{self.minor}.{self.patch_level}"
NOMINATIM_VERSION = NominatimVersion(4, 4, 99, 1)
--- /dev/null
+[project]
+name = "nominatim"
+description = "A tool for building a database of OpenStreetMap for geocoding and for searching the database."
+readme = "README.md"
+requires-python = ">=3.7"
+license = 'GPL-3.0-or-later'
+maintainers = [
+ { name = "Sarah Hoffmann", email = "lonvia@denofr.de" }
+]
+keywords = [ "geocoding", "OpenStreetMap", "search" ]
+classifiers = [
+ "Programming Language :: Python :: 3",
+ "License :: OSI Approved :: GNU General Public License (GPL)",
+ "Operating System :: OS Independent",
+]
+dependencies = [
+ "psycopg2",
+ "python-dotenv",
+ "psutil",
+ "jinja2",
+ "SQLAlchemy>=1.4.31",
+ "asyncpg>=0.8",
+ "PyICU",
+ "pyYAML>=5.1",
+ "datrie"
+]
+dynamic = ["version"]
+
+[project.urls]
+Homepage = "https://nominatim.org"
+Issues = "https://github.com/osm-search/Nominatim/issues"
+
+[build-system]
+requires = ["hatchling"]
+build-backend = "hatchling.build"
+
+[tool.hatch.version]
+source = "code"
+path = "nominatim/version.py"
+expression = "NOMINATIM_VERSION.release_version()"
+
+[tool.hatch.build.targets.sdist]
+only-include = ["nominatim", "lib-sql", "settings",
+ "docs", "man", "data", "munin",
+ "test/python", "test/bdd", "test/testdata", "test/testdb"]
+artifacts = ["data/country_osm_grid.sql.gz"]
+
+[tool.hatch.build.targets.wheel]
+only-include = ["nominatim", "lib-sql", "settings",
+ "data/words.sql", "data/country_osm_grid.sql.gz",
+ "wheel_build/nominatim"]
+exclude = ["nominatim/paths.py"]
+
+[tool.hatch.build.targets.wheel.shared-scripts]
+"wheel_build/shared/scripts" = "/"
+
+[tool.hatch.build.targets.wheel.sources]
+"wheel_build/nominatim" = "nominatim"
+"lib-sql" = "nominatim/resources/lib-sql"
+"settings" = "nominatim/resources/settings"
+"data" = "nominatim/resources"
--- /dev/null
+# 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 = None
+DATA_DIR = (Path(__file__) / '..' / 'resources').resolve()
+SQLLIB_DIR = (DATA_DIR / 'lib-sql')
+CONFIG_DIR = (DATA_DIR / 'settings')
--- /dev/null
+#!python3
+
+from nominatim import cli
+
+exit(cli.nominatim(module_dir=None, osm2pgsql_path=None))