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}
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})
configure_file(${PROJECT_SOURCE_DIR}/cmake/paths-py.tmpl paths-py.installed)
else()
configure_file(${PROJECT_SOURCE_DIR}/cmake/paths-py-no-php.tmpl paths-py.installed)
endif()
install(FILES ${PROJECT_BINARY_DIR}/paths-py.installed
DESTINATION ${NOMINATIM_LIBDIR}/lib-python/nominatim_core
RENAME paths.py)
foreach (submodule nominatim_db nominatim_api)
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})

View File

@ -2,10 +2,10 @@ all:
# Building of wheels
build: build-core build-db build-api
build: clean-build build-db build-api
build-core:
python3 -m build packaging/nominatim-core --outdir dist/
clean-build:
rm -f dist/*
build-db:
python3 -m build packaging/nominatim-db --outdir dist/
@ -29,4 +29,4 @@ lint:
bdd:
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:
/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

View File

@ -20,7 +20,7 @@ configuration parameters, see the [Configuration page](../customize/Settings.md)
## `Configuration` class
::: nominatim_core.config.Configuration
::: nominatim_api.Configuration
options:
members:
- 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",
]
dependencies = [
"nominatim-core",
"python-dotenv",
"pyYAML>=5.1",
"SQLAlchemy>=1.4.31",
"psycopg",
"PyICU"
@ -34,8 +35,21 @@ path = "src/nominatim_api/version.py"
pattern = "NOMINATIM_API_VERSION = '(?P<version>[^']+)'"
[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]
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",
]
dependencies = [
"nominatim-core",
"psycopg2-binary",
"python-dotenv",
"jinja2",
"pyYAML>=5.1",
"datrie",
"psutil",
"PyICU"
]
@ -24,6 +27,7 @@ dynamic = ["version"]
[project.urls]
Homepage = "https://nominatim.org"
Issues = "https://github.com/osm-search/Nominatim/issues"
Documentation = "https://nominatim.org/release-docs/latest/"
[build-system]
requires = ["hatchling"]
@ -34,10 +38,32 @@ path = "src/nominatim_db/version.py"
pattern = "NOMINATIM_VERSION = parse_version.'(?P<version>[^-]+)"
[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]
packages = ["src/nominatim_db"]
[tool.hatch.build.targets.wheel.shared-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
# pylint: disable=useless-import-alias
from nominatim_core.errors import (UsageError as UsageError)
from nominatim_core.config import (Configuration as Configuration)
from .errors import (UsageError as UsageError)
from .config import (Configuration as Configuration)
from .core import (NominatimAPI as NominatimAPI,
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
from sqlalchemy.ext.asyncio import AsyncConnection
from nominatim_core.typing import SaFromClause
from nominatim_core.db.sqlalchemy_schema import SearchTables
from nominatim_core.db.sqlalchemy_types import Geometry
from .typing import SaFromClause
from .sql.sqlalchemy_schema import SearchTables
from .sql.sqlalchemy_types import Geometry
from .logging import log
T = TypeVar('T')

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -14,7 +14,7 @@ import asyncio
from falcon.asgi import App, Request, Response
from nominatim_core.config import Configuration
from ...config import Configuration
from ...core import NominatimAPIAsync
from ... import v1 as api_impl
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.cors import CORSMiddleware
from nominatim_core.config import Configuration
from ...config import Configuration
from ...core import NominatimAPIAsync
from ... import v1 as api_impl
from ... import logging as loglib

View File

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

View File

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

View File

@ -16,7 +16,7 @@ import math
from struct import unpack
from binascii import unhexlify
from nominatim_core.errors import UsageError
from .errors import UsageError
from .localization import Locales
# 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 datetime as dt
from nominatim_core.utils.json_writer import JsonWriter
from ..utils.json_writer import JsonWriter
from ..status import StatusResult
from ..results import DetailedResult, ReverseResults, SearchResults, \
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 nominatim_core.utils.json_writer import JsonWriter
from ..utils.json_writer import JsonWriter
from ..results import AddressLines, ReverseResults, SearchResults
from . import classtypes as cl

View File

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

View File

@ -8,10 +8,4 @@
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'

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
from pathlib import Path
from nominatim_core.config import Configuration
from nominatim_core.errors import UsageError
from .config import Configuration
from .errors import UsageError
from .tools.exec_utils import run_php_server
from . import clicmd
from . import version

View File

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

View File

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

View File

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

View File

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

View File

@ -14,12 +14,13 @@ import asyncio
import csv
import sys
import sqlalchemy as sa
import nominatim_api as napi
from nominatim_api.results import create_from_placex_row, ReverseResult, add_result_details
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
# Do not repeat documentation of subcommand classes.

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -17,7 +17,11 @@ import json
import yaml
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 .errors import UsageError

View File

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

View File

@ -11,7 +11,7 @@ format.
from typing import Any, Mapping, Optional, Set, Match
import re
from nominatim_core.errors import UsageError
from ..errors import UsageError
from . import country_info
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
from nominatim_core.typing import DictCursorResults
from nominatim_core.db.async_connection import DBConnection, WorkerPool
from nominatim_core.db.connection import connect, Connection, Cursor
from ..typing import DictCursorResults
from ..db.async_connection import DBConnection, WorkerPool
from ..db.connection import connect, Connection, Cursor
from ..tokenizer.base import AbstractTokenizer
from .progress import ProgressLogger
from . import runners

View File

@ -14,8 +14,8 @@ import functools
from psycopg2 import sql as pysql
import psycopg2.extras
from nominatim_core.typing import Query, DictCursorResult, DictCursorResults, Protocol
from nominatim_core.db.async_connection import DBConnection
from ..typing import Query, DictCursorResult, DictCursorResults, Protocol
from ..db.async_connection import DBConnection
from ..data.place_info import PlaceInfo
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 pathlib import Path
from nominatim_core.typing import Protocol
from nominatim_core.config import Configuration
from nominatim_core.db.connection import Connection
from ..typing import Protocol
from ..config import Configuration
from ..db.connection import Connection
from ..data.place_info import PlaceInfo
class AbstractAnalyzer(ABC):

View File

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

View File

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

View File

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

View File

@ -20,12 +20,12 @@ from icu import Transliterator
import psycopg2
import psycopg2.extras
from nominatim_core.errors import UsageError
from nominatim_core.db.connection import connect, Connection
from nominatim_core.config import Configuration
from nominatim_core.db import properties
from nominatim_core.db import utils as db_utils
from nominatim_core.db.sql_preprocessor import SQLPreprocessor
from ..errors import UsageError
from ..db.connection import connect, Connection
from ..config import Configuration
from ..db import properties
from ..db import utils as db_utils
from ..db.sql_preprocessor import SQLPreprocessor
from ..data.place_info import PlaceInfo
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 nominatim_core.errors import UsageError
from nominatim_core.config import Configuration
from ..errors import UsageError
from ..config import Configuration
from .sanitizers.config import SanitizerConfig
from .sanitizers.base import SanitizerHandler, ProcessInfo
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 nominatim_core.typing import Protocol, Final
from ...typing import Protocol, Final
from ...data.place_info import PlaceInfo
from ...data.place_name import PlaceName
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
import re
from nominatim_core.errors import UsageError
from ...errors import UsageError
# working around missing generics in Python < 3.8
# 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 nominatim_core.typing import Protocol
from ...typing import Protocol
from ...data.place_name import PlaceName
class Analyzer(Protocol):

View File

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

View File

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

View File

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

View File

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

View File

@ -13,10 +13,10 @@ import logging
from psycopg2.extras import Json, register_hstore
from psycopg2 import DataError
from nominatim_core.typing import DictCursorResult
from nominatim_core.config import Configuration
from nominatim_core.db.connection import connect, Cursor
from nominatim_core.errors import UsageError
from ..typing import DictCursorResult
from ..config import Configuration
from ..db.connection import connect, Cursor
from ..errors import UsageError
from ..tokenizer import factory as tokenizer_factory
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 textwrap import dedent
from nominatim_core.config import Configuration
from nominatim_core.db.connection import connect, Connection
from nominatim_core.db import properties
from nominatim_core.errors import UsageError
from ..config import Configuration
from ..db.connection import connect, Connection
from ..db import properties
from ..errors import UsageError
from ..tokenizer import factory as tokenizer_factory
from . import freeze
from ..version import NOMINATIM_VERSION, parse_version

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

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