add Python package configuration

The global configuration builds one large package.
This commit is contained in:
Sarah Hoffmann 2024-05-14 00:05:36 +02:00
parent b0067a0345
commit 0fb4fe8e4d
8 changed files with 103 additions and 2 deletions

2
.gitignore vendored
View File

@ -4,6 +4,8 @@
docs/develop/*.png docs/develop/*.png
build build
dist
.coverage
.vagrant .vagrant
data/country_osm_grid.sql.gz data/country_osm_grid.sql.gz

4
nominatim/__main__.py Normal file
View File

@ -0,0 +1,4 @@
if __name__ == '__main__':
from nominatim import cli
exit(cli.nominatim(module_dir=None, osm2pgsql_path=None))

View File

@ -83,7 +83,7 @@ class Configuration:
""" Set paths to library functions and data. """ Set paths to library functions and data.
""" """
for key, value in kwargs.items(): 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: def __getattr__(self, name: str) -> str:

View File

@ -11,6 +11,7 @@ from typing import Any, Mapping, IO
import logging import logging
import os import os
import subprocess import subprocess
import shutil
import urllib.request as urlrequest import urllib.request as urlrequest
from nominatim.typing import StrPath from nominatim.typing import StrPath
@ -30,7 +31,14 @@ def run_osm2pgsql(options: Mapping[str, Any]) -> None:
""" Run osm2pgsql with the given options. """ Run osm2pgsql with the given options.
""" """
env = get_pg_env(options['dsn']) 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', '--slim',
'--log-progress', 'true', '--log-progress', 'true',
'--number-processes', '1' if options['append'] else str(options['threads']), '--number-processes', '1' if options['append'] else str(options['threads']),

View File

@ -33,6 +33,12 @@ class NominatimVersion(NamedTuple):
def __str__(self) -> str: def __str__(self) -> str:
return f"{self.major}.{self.minor}.{self.patch_level}-{self.db_patch_level}" 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) NOMINATIM_VERSION = NominatimVersion(4, 4, 99, 1)

61
pyproject.toml Normal file
View File

@ -0,0 +1,61 @@
[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"

View File

@ -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 = None
DATA_DIR = (Path(__file__) / '..' / 'resources').resolve()
SQLLIB_DIR = (DATA_DIR / 'lib-sql')
CONFIG_DIR = (DATA_DIR / 'settings')

View File

@ -0,0 +1,5 @@
#!python3
from nominatim import cli
exit(cli.nominatim(module_dir=None, osm2pgsql_path=None))