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
build
dist
.coverage
.vagrant
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.
"""
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:

View File

@ -11,6 +11,7 @@ from typing import Any, Mapping, IO
import logging
import os
import subprocess
import shutil
import urllib.request as urlrequest
from nominatim.typing import StrPath
@ -30,7 +31,14 @@ def run_osm2pgsql(options: Mapping[str, Any]) -> None:
""" 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']),

View File

@ -33,6 +33,12 @@ class NominatimVersion(NamedTuple):
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)

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))