reduce from 3 to 2 packages

This commit is contained in:
Sarah Hoffmann
2024-06-27 21:26:12 +02:00
parent 139cea5720
commit 4da4cbfe27
149 changed files with 419 additions and 422 deletions

View File

@@ -221,22 +221,22 @@ if (BUILD_IMPORTER)
DESTINATION ${CMAKE_INSTALL_BINDIR} DESTINATION ${CMAKE_INSTALL_BINDIR}
RENAME nominatim) RENAME nominatim)
foreach (submodule nominatim_core nominatim_db nominatim_api)
install(DIRECTORY src/${submodule}
DESTINATION ${NOMINATIM_LIBDIR}/lib-python
FILES_MATCHING PATTERN "*.py"
PATTERN "paths.py" EXCLUDE
PATTERN __pycache__ EXCLUDE)
endforeach()
if (EXISTS ${PHP_BIN}) if (EXISTS ${PHP_BIN})
configure_file(${PROJECT_SOURCE_DIR}/cmake/paths-py.tmpl paths-py.installed) configure_file(${PROJECT_SOURCE_DIR}/cmake/paths-py.tmpl paths-py.installed)
else() else()
configure_file(${PROJECT_SOURCE_DIR}/cmake/paths-py-no-php.tmpl paths-py.installed) configure_file(${PROJECT_SOURCE_DIR}/cmake/paths-py-no-php.tmpl paths-py.installed)
endif() endif()
install(FILES ${PROJECT_BINARY_DIR}/paths-py.installed
DESTINATION ${NOMINATIM_LIBDIR}/lib-python/nominatim_core foreach (submodule nominatim_db nominatim_api)
RENAME paths.py) install(DIRECTORY src/${submodule}
DESTINATION ${NOMINATIM_LIBDIR}/lib-python
FILES_MATCHING PATTERN "*.py"
PATTERN "paths.py" EXCLUDE
PATTERN __pycache__ EXCLUDE)
install(FILES ${PROJECT_BINARY_DIR}/paths-py.installed
DESTINATION ${NOMINATIM_LIBDIR}/lib-python/${submodule}
RENAME paths.py)
endforeach()
install(DIRECTORY lib-sql DESTINATION ${NOMINATIM_LIBDIR}) install(DIRECTORY lib-sql DESTINATION ${NOMINATIM_LIBDIR})

View File

@@ -2,10 +2,10 @@ all:
# Building of wheels # Building of wheels
build: build-core build-db build-api build: clean-build build-db build-api
build-core: clean-build:
python3 -m build packaging/nominatim-core --outdir dist/ rm -f dist/*
build-db: build-db:
python3 -m build packaging/nominatim-db --outdir dist/ python3 -m build packaging/nominatim-db --outdir dist/
@@ -29,4 +29,4 @@ lint:
bdd: bdd:
cd test/bdd; behave -DREMOVE_TEMPLATE=1 cd test/bdd; behave -DREMOVE_TEMPLATE=1
.PHONY: tests mypy pytest lint bdd build build-core build-db build-api .PHONY: tests mypy pytest lint bdd build clean-build build-db build-api

View File

@@ -162,7 +162,7 @@ Nominatim is easiest to run from its own virtual environment. To create one, run
To install Nominatim directly from the source tree into the virtual environment, run: To install Nominatim directly from the source tree into the virtual environment, run:
/srv/nominatim-venv/bin/pip install packaging/nominatim-{core,db,api} /srv/nominatim-venv/bin/pip install packaging/nominatim-{db,api}
#### Building in legacy CMake mode #### Building in legacy CMake mode

View File

@@ -20,7 +20,7 @@ configuration parameters, see the [Configuration page](../customize/Settings.md)
## `Configuration` class ## `Configuration` class
::: nominatim_core.config.Configuration ::: nominatim_api.Configuration
options: options:
members: members:
- get_bool - get_bool

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

View File

@@ -14,7 +14,8 @@ classifiers = [
"Operating System :: OS Independent", "Operating System :: OS Independent",
] ]
dependencies = [ dependencies = [
"nominatim-core", "python-dotenv",
"pyYAML>=5.1",
"SQLAlchemy>=1.4.31", "SQLAlchemy>=1.4.31",
"psycopg", "psycopg",
"PyICU" "PyICU"
@@ -34,8 +35,21 @@ path = "src/nominatim_api/version.py"
pattern = "NOMINATIM_API_VERSION = '(?P<version>[^']+)'" pattern = "NOMINATIM_API_VERSION = '(?P<version>[^']+)'"
[tool.hatch.build.targets.sdist] [tool.hatch.build.targets.sdist]
include = ["src/nominatim_api"] include = [
"src/nominatim_api",
"src/nominatim_db/config.py",
"settings",
"extra_src/paths.py"
]
exclude = [
"src/nominatim_api/config.py"
]
[tool.hatch.build.targets.wheel] [tool.hatch.build.targets.wheel]
packages = ["src/nominatim_api"] packages = ["src/nominatim_api"]
[tool.hatch.build.targets.wheel.force-include]
"src/nominatim_db/config.py" = "nominatim_api/config.py"
"extra_src/paths.py" = "nominatim_api/paths.py"
"settings" = "nominatim_api/resources/settings"

View File

@@ -1 +0,0 @@
../../COPYING

View File

@@ -1,24 +0,0 @@
Nominatim - Core Package
=========
Nominatim is a tool to search OpenStreetMap data
by name and address (geocoding) and to generate synthetic addresses of
OSM points (reverse geocoding).
This is the core pacakage containing resources and code shared by
Nominatim's frontend `nominatim-api` and backend `nominatim-db`. You
usually don't want to install this package directly.
Documentation
=============
The documentation of the latest development version is in the
`docs/` subdirectory. A HTML version can be found at
https://nominatim.org/release-docs/develop/ .
License
=======
The Python source code is available under a GPL license version 3 or later.
The Lua configuration files for osm2pgsql are released under the
Apache License, Version 2.0. All other files are under a GPLv2 license.

View File

@@ -1 +0,0 @@
../../data

View File

@@ -1,60 +0,0 @@
[project]
name = "nominatim-core"
description = "A tool for building a database of OpenStreetMap for geocoding and for searching the database. Base package for common resources for the project."
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 = [
"python-dotenv",
"jinja2",
"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 = "src/nominatim_core/version.py"
expression = "NOMINATIM_CORE_VERSION"
[tool.hatch.build.targets.sdist]
include = [
"src/nominatim_core",
"lib-sql/**.sql",
"settings",
"data/words.sql",
"extra_src/nominatim_core/paths.py"
]
artifacts = [
"data/country_osm_grid.sql.gz"
]
exclude = [
"src/nominatim_core/paths.py"
]
[tool.hatch.build.targets.wheel]
packages = ["src/nominatim_core"]
[tool.hatch.build.targets.wheel.force-include]
"lib-sql" = "nominatim_core/resources/lib-sql"
"settings" = "nominatim_core/resources/settings"
"data/country_osm_grid.sql.gz" = "nominatim_core/resources/country_osm_grid.sql.gz"
"data/words.sql" = "nominatim_core/resources/words.sql"
"extra_src/nominatim_core/paths.py" = "nominatim_core/paths.py"

View File

@@ -1 +0,0 @@
../../src

1
packaging/nominatim-db/data Symbolic link
View File

@@ -0,0 +1 @@
../../data/

View File

@@ -14,8 +14,11 @@ classifiers = [
"Operating System :: OS Independent", "Operating System :: OS Independent",
] ]
dependencies = [ dependencies = [
"nominatim-core",
"psycopg2-binary", "psycopg2-binary",
"python-dotenv",
"jinja2",
"pyYAML>=5.1",
"datrie",
"psutil", "psutil",
"PyICU" "PyICU"
] ]
@@ -24,6 +27,7 @@ dynamic = ["version"]
[project.urls] [project.urls]
Homepage = "https://nominatim.org" Homepage = "https://nominatim.org"
Issues = "https://github.com/osm-search/Nominatim/issues" Issues = "https://github.com/osm-search/Nominatim/issues"
Documentation = "https://nominatim.org/release-docs/latest/"
[build-system] [build-system]
requires = ["hatchling"] requires = ["hatchling"]
@@ -34,10 +38,32 @@ path = "src/nominatim_db/version.py"
pattern = "NOMINATIM_VERSION = parse_version.'(?P<version>[^-]+)" pattern = "NOMINATIM_VERSION = parse_version.'(?P<version>[^-]+)"
[tool.hatch.build.targets.sdist] [tool.hatch.build.targets.sdist]
include = ["src/nominatim_db", "scripts"] include = [
"src/nominatim_db",
"scripts",
"lib-sql/**/*.sql",
"settings",
"data/words.sql",
"extra_src/nominatim_db/paths.py"
]
artifacts = [
"data/country_osm_grid.sql.gz"
]
exclude = [
"src/nominatim_db/paths.py"
]
[tool.hatch.build.targets.wheel] [tool.hatch.build.targets.wheel]
packages = ["src/nominatim_db"] packages = ["src/nominatim_db"]
[tool.hatch.build.targets.wheel.shared-scripts] [tool.hatch.build.targets.wheel.shared-scripts]
"scripts" = "/" "scripts" = "/"
[tool.hatch.build.targets.wheel.force-include]
"lib-sql" = "nominatim_db/resources/lib-sql"
"settings" = "nominatim_db/resources/settings"
"data/country_osm_grid.sql.gz" = "nominatim_db/resources/country_osm_grid.sql.gz"
"data/words.sql" = "nominatim_db/resources/words.sql"
"extra_src/nominatim_db/paths.py" = "nominatim_db/paths.py"

View File

@@ -0,0 +1 @@
../../settings/

View File

@@ -14,8 +14,8 @@ import from this file, not from the source files directly.
# See also https://github.com/PyCQA/pylint/issues/6006 # See also https://github.com/PyCQA/pylint/issues/6006
# pylint: disable=useless-import-alias # pylint: disable=useless-import-alias
from nominatim_core.errors import (UsageError as UsageError) from .errors import (UsageError as UsageError)
from nominatim_core.config import (Configuration as Configuration) from .config import (Configuration as Configuration)
from .core import (NominatimAPI as NominatimAPI, from .core import (NominatimAPI as NominatimAPI,
NominatimAPIAsync as NominatimAPIAsync) NominatimAPIAsync as NominatimAPIAsync)

View File

@@ -0,0 +1,12 @@
# 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.
# This file is just a placeholder to make the config module available
# during development. It will be replaced by nominatim_db/config.py on
# installation.
# pylint: skip-file
from nominatim_db.config import *

View File

@@ -14,9 +14,9 @@ import asyncio
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy.ext.asyncio import AsyncConnection from sqlalchemy.ext.asyncio import AsyncConnection
from nominatim_core.typing import SaFromClause from .typing import SaFromClause
from nominatim_core.db.sqlalchemy_schema import SearchTables from .sql.sqlalchemy_schema import SearchTables
from nominatim_core.db.sqlalchemy_types import Geometry from .sql.sqlalchemy_types import Geometry
from .logging import log from .logging import log
T = TypeVar('T') T = TypeVar('T')

View File

@@ -16,10 +16,10 @@ from pathlib import Path
import sqlalchemy as sa import sqlalchemy as sa
import sqlalchemy.ext.asyncio as sa_asyncio import sqlalchemy.ext.asyncio as sa_asyncio
from nominatim_core.errors import UsageError from .errors import UsageError
from nominatim_core.db.sqlalchemy_schema import SearchTables from .sql.sqlalchemy_schema import SearchTables
from nominatim_core.db.async_core_library import PGCORE_LIB, PGCORE_ERROR from .sql.async_core_library import PGCORE_LIB, PGCORE_ERROR
from nominatim_core.config import Configuration from .config import Configuration
from .sql import sqlite_functions, sqlalchemy_functions #pylint: disable=unused-import from .sql import sqlite_functions, sqlalchemy_functions #pylint: disable=unused-import
from .connection import SearchConnection from .connection import SearchConnection
from .status import get_status, StatusResult from .status import get_status, StatusResult

View File

@@ -12,7 +12,7 @@ import datetime as dt
import sqlalchemy as sa import sqlalchemy as sa
from nominatim_core.typing import SaColumn, SaRow, SaSelect from .typing import SaColumn, SaRow, SaSelect
from .connection import SearchConnection from .connection import SearchConnection
from .logging import log from .logging import log
from . import types as ntyp from . import types as ntyp

View File

@@ -18,8 +18,8 @@ import datetime as dt
import sqlalchemy as sa import sqlalchemy as sa
from nominatim_core.typing import SaSelect, SaRow from .typing import SaSelect, SaRow
from nominatim_core.db.sqlalchemy_types import Geometry from .sql.sqlalchemy_types import Geometry
from .types import Point, Bbox, LookupDetails from .types import Point, Bbox, LookupDetails
from .connection import SearchConnection from .connection import SearchConnection
from .logging import log from .logging import log

View File

@@ -12,9 +12,9 @@ import functools
import sqlalchemy as sa import sqlalchemy as sa
from nominatim_core.typing import SaColumn, SaSelect, SaFromClause, SaLabel, SaRow,\ from .typing import SaColumn, SaSelect, SaFromClause, SaLabel, SaRow,\
SaBind, SaLambdaSelect SaBind, SaLambdaSelect
from nominatim_core.db.sqlalchemy_types import Geometry from .sql.sqlalchemy_types import Geometry
from .connection import SearchConnection from .connection import SearchConnection
from . import results as nres from . import results as nres
from .logging import log from .logging import log

View File

@@ -12,8 +12,8 @@ import dataclasses
import sqlalchemy as sa import sqlalchemy as sa
from nominatim_core.typing import SaFromClause, SaColumn, SaExpression from ..typing import SaFromClause, SaColumn, SaExpression
from nominatim_core.utils.json_writer import JsonWriter from ..utils.json_writer import JsonWriter
from .query import Token from .query import Token
from . import db_search_lookups as lookups from . import db_search_lookups as lookups

View File

@@ -12,8 +12,8 @@ from typing import List, Any
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy.ext.compiler import compiles from sqlalchemy.ext.compiler import compiles
from nominatim_core.typing import SaFromClause from ..typing import SaFromClause
from nominatim_core.db.sqlalchemy_types import IntArray from ..sql.sqlalchemy_types import IntArray
# pylint: disable=consider-using-f-string # pylint: disable=consider-using-f-string

View File

@@ -12,9 +12,9 @@ import abc
import sqlalchemy as sa import sqlalchemy as sa
from nominatim_core.typing import SaFromClause, SaScalarSelect, SaColumn, \ from ..typing import SaFromClause, SaScalarSelect, SaColumn, \
SaExpression, SaSelect, SaLambdaSelect, SaRow, SaBind SaExpression, SaSelect, SaLambdaSelect, SaRow, SaBind
from nominatim_core.db.sqlalchemy_types import Geometry, IntArray from ..sql.sqlalchemy_types import Geometry, IntArray
from ..connection import SearchConnection from ..connection import SearchConnection
from ..types import SearchDetails, DataLayer, GeometryFormat, Bbox from ..types import SearchDetails, DataLayer, GeometryFormat, Bbox
from .. import results as nres from .. import results as nres

View File

@@ -16,8 +16,8 @@ from icu import Transliterator
import sqlalchemy as sa import sqlalchemy as sa
from nominatim_core.typing import SaRow from ..typing import SaRow
from nominatim_core.db.sqlalchemy_types import Json from ..sql.sqlalchemy_types import Json
from ..connection import SearchConnection from ..connection import SearchConnection
from ..logging import log from ..logging import log
from ..search import query as qmod from ..search import query as qmod

View File

@@ -14,7 +14,7 @@ import dataclasses
import sqlalchemy as sa import sqlalchemy as sa
from nominatim_core.typing import SaRow from ..typing import SaRow
from ..connection import SearchConnection from ..connection import SearchConnection
from ..logging import log from ..logging import log
from . import query as qmod from . import query as qmod

View File

@@ -14,7 +14,7 @@ import asyncio
from falcon.asgi import App, Request, Response from falcon.asgi import App, Request, Response
from nominatim_core.config import Configuration from ...config import Configuration
from ...core import NominatimAPIAsync from ...core import NominatimAPIAsync
from ... import v1 as api_impl from ... import v1 as api_impl
from ... import logging as loglib from ... import logging as loglib

View File

@@ -21,7 +21,7 @@ from starlette.middleware import Middleware
from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint from starlette.middleware.base import BaseHTTPMiddleware, RequestResponseEndpoint
from starlette.middleware.cors import CORSMiddleware from starlette.middleware.cors import CORSMiddleware
from nominatim_core.config import Configuration from ...config import Configuration
from ...core import NominatimAPIAsync from ...core import NominatimAPIAsync
from ... import v1 as api_impl from ... import v1 as api_impl
from ... import logging as loglib from ... import logging as loglib

View File

@@ -13,7 +13,7 @@ from typing import Any
import sqlalchemy as sa import sqlalchemy as sa
from sqlalchemy.ext.compiler import compiles from sqlalchemy.ext.compiler import compiles
from nominatim_core.typing import SaColumn from ..typing import SaColumn
# pylint: disable=all # pylint: disable=all

View File

@@ -14,7 +14,7 @@ import dataclasses
import sqlalchemy as sa import sqlalchemy as sa
from .connection import SearchConnection from .connection import SearchConnection
from .version import NOMINATIM_API_VERSION, NominatimVersion, parse_version from .version import NOMINATIM_API_VERSION
@dataclasses.dataclass @dataclasses.dataclass
class StatusResult: class StatusResult:
@@ -24,7 +24,7 @@ class StatusResult:
message: str message: str
software_version = NOMINATIM_API_VERSION software_version = NOMINATIM_API_VERSION
data_updated: Optional[dt.datetime] = None data_updated: Optional[dt.datetime] = None
database_version: Optional[NominatimVersion] = None database_version: Optional[str] = None
async def get_status(conn: SearchConnection) -> StatusResult: async def get_status(conn: SearchConnection) -> StatusResult:
@@ -44,7 +44,7 @@ async def get_status(conn: SearchConnection) -> StatusResult:
# Database version # Database version
try: try:
status.database_version = parse_version(await conn.get_property('database_version')) status.database_version = await conn.get_property('database_version')
except ValueError: except ValueError:
pass pass

View File

@@ -16,7 +16,7 @@ import math
from struct import unpack from struct import unpack
from binascii import unhexlify from binascii import unhexlify
from nominatim_core.errors import UsageError from .errors import UsageError
from .localization import Locales 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

View File

@@ -0,0 +1,40 @@
# 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.
"""
Type definitions for typing annotations.
Complex type definitions are moved here, to keep the source files readable.
"""
from typing import Union, TYPE_CHECKING
# pylint: disable=missing-class-docstring,useless-import-alias
# SQLAlchemy introduced generic types in version 2.0 making typing
# incompatible with older versions. Add wrappers here so we don't have
# to litter the code with bare-string types.
if TYPE_CHECKING:
from typing import Any
import sqlalchemy as sa
import os
from typing_extensions import (TypeAlias as TypeAlias)
else:
TypeAlias = str
StrPath = Union[str, 'os.PathLike[str]']
SaLambdaSelect: TypeAlias = 'Union[sa.Select[Any], sa.StatementLambdaElement]'
SaSelect: TypeAlias = 'sa.Select[Any]'
SaScalarSelect: TypeAlias = 'sa.ScalarSelect[Any]'
SaRow: TypeAlias = 'sa.Row[Any]'
SaColumn: TypeAlias = 'sa.ColumnElement[Any]'
SaExpression: TypeAlias = 'sa.ColumnElement[bool]'
SaLabel: TypeAlias = 'sa.Label[Any]'
SaFromClause: TypeAlias = 'sa.FromClause'
SaSelectable: TypeAlias = 'sa.Selectable'
SaBind: TypeAlias = 'sa.BindParameter[Any]'
SaDialect: TypeAlias = 'sa.Dialect'

View File

@@ -11,7 +11,7 @@ from typing import List, Dict, Mapping, Any
import collections import collections
import datetime as dt import datetime as dt
from nominatim_core.utils.json_writer import JsonWriter from ..utils.json_writer import JsonWriter
from ..status import StatusResult from ..status import StatusResult
from ..results import DetailedResult, ReverseResults, SearchResults, \ from ..results import DetailedResult, ReverseResults, SearchResults, \
AddressLines, AddressLine AddressLines, AddressLine

View File

@@ -9,7 +9,7 @@ Helper functions for output of results in json formats.
""" """
from typing import Mapping, Any, Optional, Tuple, Union from typing import Mapping, Any, Optional, Tuple, Union
from nominatim_core.utils.json_writer import JsonWriter from ..utils.json_writer import JsonWriter
from ..results import AddressLines, ReverseResults, SearchResults from ..results import AddressLines, ReverseResults, SearchResults
from . import classtypes as cl from . import classtypes as cl

View File

@@ -17,8 +17,8 @@ from urllib.parse import urlencode
import sqlalchemy as sa import sqlalchemy as sa
from nominatim_core.errors import UsageError from ..errors import UsageError
from nominatim_core.config import Configuration from ..config import Configuration
from .. import logging as loglib from .. import logging as loglib
from ..core import NominatimAPIAsync from ..core import NominatimAPIAsync
from .format import dispatch as formatting from .format import dispatch as formatting

View File

@@ -8,10 +8,4 @@
Version information for the Nominatim API. Version information for the Nominatim API.
""" """
# See also https://github.com/PyCQA/pylint/issues/6006
# pylint: disable=useless-import-alias,unused-import
from nominatim_core.version import (NominatimVersion as NominatimVersion,
parse_version as parse_version)
NOMINATIM_API_VERSION = '4.4.99' NOMINATIM_API_VERSION = '4.4.99'

View File

@@ -1,57 +0,0 @@
# 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.
"""
from typing import NamedTuple, Optional
__version__ = '4.4.99'
NOMINATIM_CORE_VERSION = __version__
class NominatimVersion(NamedTuple):
""" Version information for Nominatim. We follow semantic versioning.
Major, minor and patch_level refer to the last released version.
The database patch level tracks important changes between releases
and must always be increased when there is a change to the database or code
that requires a migration.
When adding a migration on the development branch, raise the patch level
to 99 to make sure that the migration is applied when updating from a
patch release to the next minor version. Patch releases usually shouldn't
have migrations in them. When they are needed, then make sure that the
migration can be reapplied and set the migration version to the appropriate
patch level when cherry-picking the commit with the migration.
"""
major: int
minor: int
patch_level: int
db_patch_level: Optional[int]
def __str__(self) -> str:
if self.db_patch_level is None:
return f"{self.major}.{self.minor}.{self.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}"
def parse_version(version: str) -> NominatimVersion:
""" Parse a version string into a version consisting of a tuple of
four ints: major, minor, patch level, database patch level
This is the reverse operation of `version_str()`.
"""
parts = version.split('.')
return NominatimVersion(*[int(x) for x in parts[:2] + parts[2].split('-')])

View File

@@ -16,8 +16,8 @@ import sys
import argparse import argparse
from pathlib import Path from pathlib import Path
from nominatim_core.config import Configuration from .config import Configuration
from nominatim_core.errors import UsageError from .errors import UsageError
from .tools.exec_utils import run_php_server from .tools.exec_utils import run_php_server
from . import clicmd from . import clicmd
from . import version from . import version

View File

@@ -11,8 +11,8 @@ import logging
import argparse import argparse
import random import random
from nominatim_core.errors import UsageError from ..errors import UsageError
from nominatim_core.db.connection import connect from ..db.connection import connect
from .args import NominatimArgs from .args import NominatimArgs
# Do not repeat documentation of subcommand classes. # Do not repeat documentation of subcommand classes.

View File

@@ -14,12 +14,12 @@ import json
import sys import sys
from functools import reduce from functools import reduce
from nominatim_core.errors import UsageError
import nominatim_api as napi import nominatim_api as napi
import nominatim_api.v1 as api_output import nominatim_api.v1 as api_output
from nominatim_api.v1.helpers import zoom_to_rank, deduplicate_results from nominatim_api.v1.helpers import zoom_to_rank, deduplicate_results
from nominatim_api.v1.format import dispatch as formatting from nominatim_api.v1.format import dispatch as formatting
import nominatim_api.logging as loglib import nominatim_api.logging as loglib
from ..errors import UsageError
from .args import NominatimArgs from .args import NominatimArgs
# Do not repeat documentation of subcommand classes. # Do not repeat documentation of subcommand classes.

View File

@@ -12,9 +12,9 @@ import argparse
import logging import logging
from pathlib import Path from pathlib import Path
from nominatim_core.errors import UsageError from ..errors import UsageError
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.typing import Protocol from ..typing import Protocol
LOG = logging.getLogger() LOG = logging.getLogger()

View File

@@ -12,7 +12,7 @@ import argparse
import asyncio import asyncio
from pathlib import Path from pathlib import Path
from nominatim_core.errors import UsageError from ..errors import UsageError
from .args import NominatimArgs from .args import NominatimArgs
# Do not repeat documentation of subcommand classes. # Do not repeat documentation of subcommand classes.

View File

@@ -14,12 +14,13 @@ import asyncio
import csv import csv
import sys import sys
import sqlalchemy as sa
import nominatim_api as napi import nominatim_api as napi
from nominatim_api.results import create_from_placex_row, ReverseResult, add_result_details from nominatim_api.results import create_from_placex_row, ReverseResult, add_result_details
from nominatim_api.types import LookupDetails from nominatim_api.types import LookupDetails
from nominatim_core.errors import UsageError
import sqlalchemy as sa # pylint: disable=C0411
from ..errors import UsageError
from .args import NominatimArgs from .args import NominatimArgs
# Do not repeat documentation of subcommand classes. # Do not repeat documentation of subcommand classes.

View File

@@ -9,7 +9,7 @@ Implementation of the 'freeze' subcommand.
""" """
import argparse import argparse
from nominatim_core.db.connection import connect from ..db.connection import connect
from .args import NominatimArgs from .args import NominatimArgs
# Do not repeat documentation of subcommand classes. # Do not repeat documentation of subcommand classes.

View File

@@ -11,8 +11,8 @@ import argparse
import psutil import psutil
from nominatim_core.db import status from ..db import status
from nominatim_core.db.connection import connect from ..db.connection import connect
from .args import NominatimArgs from .args import NominatimArgs
# Do not repeat documentation of subcommand classes. # Do not repeat documentation of subcommand classes.

View File

@@ -12,8 +12,8 @@ import argparse
import logging import logging
from pathlib import Path from pathlib import Path
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.db.connection import connect from ..db.connection import connect
from ..tokenizer.base import AbstractTokenizer from ..tokenizer.base import AbstractTokenizer
from .args import NominatimArgs from .args import NominatimArgs

View File

@@ -14,9 +14,9 @@ import logging
import socket import socket
import time import time
from nominatim_core.db import status from ..db import status
from nominatim_core.db.connection import connect from ..db.connection import connect
from nominatim_core.errors import UsageError from ..errors import UsageError
from .args import NominatimArgs from .args import NominatimArgs
LOG = logging.getLogger() LOG = logging.getLogger()

View File

@@ -14,10 +14,10 @@ from pathlib import Path
import psutil import psutil
from nominatim_core.errors import UsageError from ..errors import UsageError
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.db.connection import connect from ..db.connection import connect
from nominatim_core.db import status, properties from ..db import status, properties
from ..tokenizer.base import AbstractTokenizer from ..tokenizer.base import AbstractTokenizer
from ..version import NOMINATIM_VERSION from ..version import NOMINATIM_VERSION
from .args import NominatimArgs from .args import NominatimArgs

View File

@@ -11,8 +11,8 @@ import argparse
import logging import logging
from pathlib import Path from pathlib import Path
from nominatim_core.errors import UsageError from ..errors import UsageError
from nominatim_core.db.connection import connect from ..db.connection import connect
from ..tools.special_phrases.sp_importer import SPImporter, SpecialPhraseLoader from ..tools.special_phrases.sp_importer import SPImporter, SpecialPhraseLoader
from ..tools.special_phrases.sp_wiki_loader import SPWikiLoader from ..tools.special_phrases.sp_wiki_loader import SPWikiLoader
from ..tools.special_phrases.sp_csv_loader import SPCsvLoader from ..tools.special_phrases.sp_csv_loader import SPCsvLoader

View File

@@ -17,7 +17,11 @@ import json
import yaml import yaml
from dotenv import dotenv_values from dotenv import dotenv_values
from psycopg2.extensions import parse_dsn
try:
from psycopg2.extensions import parse_dsn
except ModuleNotFoundError:
from psycopg.conninfo import conninfo_to_dict as parse_dsn # type: ignore[assignment]
from .typing import StrPath from .typing import StrPath
from .errors import UsageError from .errors import UsageError

View File

@@ -11,10 +11,10 @@ from typing import Dict, Any, Iterable, Tuple, Optional, Container, overload
from pathlib import Path from pathlib import Path
import psycopg2.extras import psycopg2.extras
from nominatim_core.db import utils as db_utils from ..db import utils as db_utils
from nominatim_core.db.connection import connect, Connection from ..db.connection import connect, Connection
from nominatim_core.errors import UsageError from ..errors import UsageError
from nominatim_core.config import Configuration from ..config import Configuration
from ..tokenizer.base import AbstractTokenizer from ..tokenizer.base import AbstractTokenizer
def _flatten_name_list(names: Any) -> Dict[str, str]: def _flatten_name_list(names: Any) -> Dict[str, str]:

View File

@@ -11,7 +11,7 @@ format.
from typing import Any, Mapping, Optional, Set, Match from typing import Any, Mapping, Optional, Set, Match
import re import re
from nominatim_core.errors import UsageError from ..errors import UsageError
from . import country_info from . import country_info
class CountryPostcodeMatcher: class CountryPostcodeMatcher:

View File

@@ -0,0 +1,14 @@
# 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.
"""
Custom exception and error classes for Nominatim.
"""
class UsageError(Exception):
""" An error raised because of bad user input. This error will usually
not cause a stack trace to be printed unless debugging is enabled.
"""

View File

@@ -13,9 +13,9 @@ import time
import psycopg2.extras import psycopg2.extras
from nominatim_core.typing import DictCursorResults from ..typing import DictCursorResults
from nominatim_core.db.async_connection import DBConnection, WorkerPool from ..db.async_connection import DBConnection, WorkerPool
from nominatim_core.db.connection import connect, Connection, Cursor from ..db.connection import connect, Connection, Cursor
from ..tokenizer.base import AbstractTokenizer from ..tokenizer.base import AbstractTokenizer
from .progress import ProgressLogger from .progress import ProgressLogger
from . import runners from . import runners

View File

@@ -14,8 +14,8 @@ import functools
from psycopg2 import sql as pysql from psycopg2 import sql as pysql
import psycopg2.extras import psycopg2.extras
from nominatim_core.typing import Query, DictCursorResult, DictCursorResults, Protocol from ..typing import Query, DictCursorResult, DictCursorResults, Protocol
from nominatim_core.db.async_connection import DBConnection from ..db.async_connection import DBConnection
from ..data.place_info import PlaceInfo from ..data.place_info import PlaceInfo
from ..tokenizer.base import AbstractAnalyzer from ..tokenizer.base import AbstractAnalyzer

View File

@@ -12,9 +12,9 @@ from abc import ABC, abstractmethod
from typing import List, Tuple, Dict, Any, Optional, Iterable from typing import List, Tuple, Dict, Any, Optional, Iterable
from pathlib import Path from pathlib import Path
from nominatim_core.typing import Protocol from ..typing import Protocol
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.db.connection import Connection from ..db.connection import Connection
from ..data.place_info import PlaceInfo from ..data.place_info import PlaceInfo
class AbstractAnalyzer(ABC): class AbstractAnalyzer(ABC):

View File

@@ -24,10 +24,10 @@ import logging
import importlib import importlib
from pathlib import Path from pathlib import Path
from nominatim_core.errors import UsageError from ..errors import UsageError
from nominatim_core.db import properties from ..db import properties
from nominatim_core.db.connection import connect from ..db.connection import connect
from nominatim_core.config import Configuration from ..config import Configuration
from ..tokenizer.base import AbstractTokenizer, TokenizerModule from ..tokenizer.base import AbstractTokenizer, TokenizerModule
LOG = logging.getLogger() LOG = logging.getLogger()

View File

@@ -14,10 +14,10 @@ import logging
from icu import Transliterator from icu import Transliterator
from nominatim_core.config import flatten_config_list, Configuration from ..config import flatten_config_list, Configuration
from nominatim_core.db.properties import set_property, get_property from ..db.properties import set_property, get_property
from nominatim_core.db.connection import Connection from ..db.connection import Connection
from nominatim_core.errors import UsageError from ..errors import UsageError
from .place_sanitizer import PlaceSanitizer from .place_sanitizer import PlaceSanitizer
from .icu_token_analysis import ICUTokenAnalysis from .icu_token_analysis import ICUTokenAnalysis
from .token_analysis.base import AnalysisModule, Analyzer from .token_analysis.base import AnalysisModule, Analyzer

View File

@@ -16,10 +16,10 @@ import logging
from pathlib import Path from pathlib import Path
from textwrap import dedent from textwrap import dedent
from nominatim_core.db.connection import connect, Connection, Cursor from ..db.connection import connect, Connection, Cursor
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.db.utils import CopyBuffer from ..db.utils import CopyBuffer
from nominatim_core.db.sql_preprocessor import SQLPreprocessor from ..db.sql_preprocessor import SQLPreprocessor
from ..data.place_info import PlaceInfo from ..data.place_info import PlaceInfo
from ..data.place_name import PlaceName from ..data.place_name import PlaceName
from .icu_rule_loader import ICURuleLoader from .icu_rule_loader import ICURuleLoader

View File

@@ -20,12 +20,12 @@ from icu import Transliterator
import psycopg2 import psycopg2
import psycopg2.extras import psycopg2.extras
from nominatim_core.errors import UsageError from ..errors import UsageError
from nominatim_core.db.connection import connect, Connection from ..db.connection import connect, Connection
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.db import properties from ..db import properties
from nominatim_core.db import utils as db_utils from ..db import utils as db_utils
from nominatim_core.db.sql_preprocessor import SQLPreprocessor from ..db.sql_preprocessor import SQLPreprocessor
from ..data.place_info import PlaceInfo from ..data.place_info import PlaceInfo
from .base import AbstractAnalyzer, AbstractTokenizer from .base import AbstractAnalyzer, AbstractTokenizer

View File

@@ -10,8 +10,8 @@ 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_core.errors import UsageError from ..errors import UsageError
from nominatim_core.config import Configuration from ..config import Configuration
from .sanitizers.config import SanitizerConfig from .sanitizers.config import SanitizerConfig
from .sanitizers.base import SanitizerHandler, ProcessInfo from .sanitizers.base import SanitizerHandler, ProcessInfo
from ..data.place_name import PlaceName from ..data.place_name import PlaceName

View File

@@ -9,7 +9,7 @@ Common data types and protocols for sanitizers.
""" """
from typing import Optional, List, Mapping, Callable from typing import Optional, List, Mapping, Callable
from nominatim_core.typing import Protocol, Final from ...typing import Protocol, Final
from ...data.place_info import PlaceInfo from ...data.place_info import PlaceInfo
from ...data.place_name import PlaceName from ...data.place_name import PlaceName
from .config import SanitizerConfig from .config import SanitizerConfig

View File

@@ -11,7 +11,7 @@ from typing import Sequence, Union, Optional, Pattern, Callable, Any, TYPE_CHECK
from collections import UserDict from collections import UserDict
import re import re
from nominatim_core.errors import UsageError from ...errors import UsageError
# working around missing generics in Python < 3.8 # working around missing generics in Python < 3.8
# See https://github.com/python/typing/issues/60#issuecomment-869757075 # See https://github.com/python/typing/issues/60#issuecomment-869757075

View File

@@ -9,7 +9,7 @@ Common data types and protocols for analysers.
""" """
from typing import Mapping, List, Any from typing import Mapping, List, Any
from nominatim_core.typing import Protocol from ...typing import Protocol
from ...data.place_name import PlaceName from ...data.place_name import PlaceName
class Analyzer(Protocol): class Analyzer(Protocol):

View File

@@ -12,8 +12,8 @@ from collections import defaultdict
import itertools import itertools
import re import re
from nominatim_core.config import flatten_config_list from ...config import flatten_config_list
from nominatim_core.errors import UsageError from ...errors import UsageError
class ICUVariant(NamedTuple): class ICUVariant(NamedTuple):
""" A single replacement rule for variant creation. """ A single replacement rule for variant creation.

View File

@@ -12,7 +12,7 @@ import itertools
import datrie import datrie
from nominatim_core.errors import UsageError from ...errors import UsageError
from ...data.place_name import PlaceName from ...data.place_name import PlaceName
from .config_variants import get_variant_config from .config_variants import get_variant_config
from .generic_mutation import MutationVariantGenerator from .generic_mutation import MutationVariantGenerator

View File

@@ -12,7 +12,7 @@ import itertools
import logging import logging
import re import re
from nominatim_core.errors import UsageError from ...errors import UsageError
LOG = logging.getLogger() LOG = logging.getLogger()

View File

@@ -12,8 +12,8 @@ from pathlib import Path
import logging import logging
import urllib import urllib
from nominatim_core.db.connection import connect from ..db.connection import connect
from nominatim_core.utils.url_utils import get_url from ..utils.url_utils import get_url
from .exec_utils import run_osm2pgsql from .exec_utils import run_osm2pgsql
LOG = logging.getLogger() LOG = logging.getLogger()

View File

@@ -13,10 +13,10 @@ import logging
from psycopg2.extras import Json, register_hstore from psycopg2.extras import Json, register_hstore
from psycopg2 import DataError from psycopg2 import DataError
from nominatim_core.typing import DictCursorResult from ..typing import DictCursorResult
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.db.connection import connect, Cursor from ..db.connection import connect, Cursor
from nominatim_core.errors import UsageError from ..errors import UsageError
from ..tokenizer import factory as tokenizer_factory from ..tokenizer import factory as tokenizer_factory
from ..data.place_info import PlaceInfo from ..data.place_info import PlaceInfo

View File

@@ -11,10 +11,10 @@ from typing import Callable, Optional, Any, Union, Tuple, Mapping, List
from enum import Enum from enum import Enum
from textwrap import dedent from textwrap import dedent
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.db.connection import connect, Connection from ..db.connection import connect, Connection
from nominatim_core.db import properties from ..db import properties
from nominatim_core.errors import UsageError from ..errors import UsageError
from ..tokenizer import factory as tokenizer_factory from ..tokenizer import factory as tokenizer_factory
from . import freeze from . import freeze
from ..version import NOMINATIM_VERSION, parse_version from ..version import NOMINATIM_VERSION, parse_version

View File

@@ -17,8 +17,8 @@ from typing import List, Optional, Tuple, Union
import psutil import psutil
from psycopg2.extensions import make_dsn, parse_dsn from psycopg2.extensions import make_dsn, parse_dsn
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.db.connection import connect from ..db.connection import connect
from ..version import NOMINATIM_VERSION from ..version import NOMINATIM_VERSION

View File

@@ -16,8 +16,8 @@ import sqlalchemy as sa
import nominatim_api as napi import nominatim_api as napi
from nominatim_api.search.query_analyzer_factory import make_query_analyzer from nominatim_api.search.query_analyzer_factory import make_query_analyzer
from nominatim_core.typing import SaSelect, SaRow from nominatim_api.typing import SaSelect, SaRow
from nominatim_core.db.sqlalchemy_types import Geometry, IntArray from nominatim_api.sql.sqlalchemy_types import Geometry, IntArray
LOG = logging.getLogger() LOG = logging.getLogger()

View File

@@ -17,11 +17,11 @@ from pathlib import Path
import psutil import psutil
from psycopg2 import sql as pysql from psycopg2 import sql as pysql
from nominatim_core.errors import UsageError from ..errors import UsageError
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.db.connection import connect, get_pg_env, Connection from ..db.connection import connect, get_pg_env, Connection
from nominatim_core.db.async_connection import DBConnection from ..db.async_connection import DBConnection
from nominatim_core.db.sql_preprocessor import SQLPreprocessor from ..db.sql_preprocessor import SQLPreprocessor
from .exec_utils import run_osm2pgsql from .exec_utils import run_osm2pgsql
from ..version import POSTGRESQL_REQUIRED_VERSION, POSTGIS_REQUIRED_VERSION from ..version import POSTGRESQL_REQUIRED_VERSION, POSTGIS_REQUIRED_VERSION

View File

@@ -13,8 +13,8 @@ import os
import subprocess import subprocess
import shutil import shutil
from nominatim_core.typing import StrPath from ..typing import StrPath
from nominatim_core.db.connection import get_pg_env from ..db.connection import get_pg_env
LOG = logging.getLogger() LOG = logging.getLogger()

View File

@@ -12,7 +12,7 @@ from pathlib import Path
from psycopg2 import sql as pysql from psycopg2 import sql as pysql
from nominatim_core.db.connection import Connection from ..db.connection import Connection
UPDATE_TABLES = [ UPDATE_TABLES = [
'address_levels', 'address_levels',

View File

@@ -12,10 +12,10 @@ import logging
from psycopg2 import sql as pysql from psycopg2 import sql as pysql
from nominatim_core.errors import UsageError from ..errors import UsageError
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.db import properties from ..db import properties
from nominatim_core.db.connection import connect, Connection from ..db.connection import connect, Connection
from ..version import NominatimVersion, NOMINATIM_VERSION, parse_version from ..version import NominatimVersion, NOMINATIM_VERSION, parse_version
from ..tokenizer import factory as tokenizer_factory from ..tokenizer import factory as tokenizer_factory
from . import refresh from . import refresh

View File

@@ -18,8 +18,8 @@ from math import isfinite
from psycopg2 import sql as pysql from psycopg2 import sql as pysql
from nominatim_core.db.connection import connect, Connection from ..db.connection import connect, Connection
from nominatim_core.utils.centroid import PointsCentroid from ..utils.centroid import PointsCentroid
from ..data.postcode_format import PostcodeFormatter, CountryPostcodeMatcher from ..data.postcode_format import PostcodeFormatter, CountryPostcodeMatcher
from ..tokenizer.base import AbstractAnalyzer, AbstractTokenizer from ..tokenizer.base import AbstractAnalyzer, AbstractTokenizer

View File

@@ -16,10 +16,10 @@ from pathlib import Path
from psycopg2 import sql as pysql from psycopg2 import sql as pysql
from nominatim_core.config import Configuration from ..config import Configuration
from nominatim_core.db.connection import Connection, connect from ..db.connection import Connection, connect
from nominatim_core.db.utils import execute_file, CopyBuffer from ..db.utils import execute_file, CopyBuffer
from nominatim_core.db.sql_preprocessor import SQLPreprocessor from ..db.sql_preprocessor import SQLPreprocessor
from ..version import NOMINATIM_VERSION from ..version import NOMINATIM_VERSION
LOG = logging.getLogger() LOG = logging.getLogger()

Some files were not shown because too many files have changed in this diff Show More