port unit tests to new python package layout

This commit is contained in:
Sarah Hoffmann
2024-06-09 14:52:20 +02:00
parent c903559415
commit 2bab0ca060
100 changed files with 570 additions and 557 deletions

View File

@@ -36,3 +36,5 @@ from .results import (SourceTable as SourceTable,
SearchResult as SearchResult, SearchResult as SearchResult,
SearchResults as SearchResults) SearchResults as SearchResults)
from .localization import (Locales as Locales) from .localization import (Locales as Locales)
from .version import NOMINATIM_API_VERSION as __version__

View File

@@ -49,6 +49,6 @@ async def make_query_analyzer(conn: SearchConnection) -> AbstractQueryAnalyzer:
log().comment(f"No tokenizer named '{name}' available. Database not set up properly.") log().comment(f"No tokenizer named '{name}' available. Database not set up properly.")
raise RuntimeError('Tokenizer not found') raise RuntimeError('Tokenizer not found')
module = importlib.import_module(f'nominatim_api.api.search.{name}_tokenizer') module = importlib.import_module(f'nominatim_api.search.{name}_tokenizer')
return cast(AbstractQueryAnalyzer, await module.create_query_analyzer(conn)) return cast(AbstractQueryAnalyzer, await module.create_query_analyzer(conn))

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 from .version import NOMINATIM_API_VERSION, parse_version
@dataclasses.dataclass @dataclasses.dataclass
class StatusResult: class StatusResult:
@@ -44,7 +44,7 @@ async def get_status(conn: SearchConnection) -> StatusResult:
# Database version # Database version
try: try:
status.database_version = await conn.get_property('database_version') status.database_version = parse_version(await conn.get_property('database_version'))
except ValueError: except ValueError:
pass pass

View File

@@ -8,4 +8,6 @@
Version information for the Nominatim API. Version information for the Nominatim API.
""" """
from nominatim_core.version import NominatimVersion, parse_version
NOMINATIM_API_VERSION = '4.4.99' NOMINATIM_API_VERSION = '4.4.99'

View File

@@ -9,7 +9,7 @@ Path settings for extra data used by Nominatim.
""" """
from pathlib import Path from pathlib import Path
PHPLIB_DIR = None PHPLIB_DIR = (Path(__file__) / '..' / '..' / '..' / 'lib-php').resolve()
SQLLIB_DIR = (Path(__file__) / '..' / '..' / '..' / 'lib-sql').resolve() SQLLIB_DIR = (Path(__file__) / '..' / '..' / '..' / 'lib-sql').resolve()
DATA_DIR = (Path(__file__) / '..' / '..' / '..' / 'data').resolve() DATA_DIR = (Path(__file__) / '..' / '..' / '..' / 'data').resolve()
CONFIG_DIR = (Path(__file__) / '..' / '..' / '..' / 'settings').resolve() CONFIG_DIR = (Path(__file__) / '..' / '..' / '..' / 'settings').resolve()

View File

@@ -7,5 +7,50 @@
""" """
Version information for the Nominatim core package. Version information for the Nominatim core package.
""" """
from typing import NamedTuple, Optional
NOMINATIM_CORE_VERSION = '4.4.99' NOMINATIM_CORE_VERSION = '4.4.99'
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

@@ -180,7 +180,7 @@ class AdminServe:
else: else:
port = 8088 port = 8088
server_module = importlib.import_module(f'nominatim_db.server.{args.engine}.server') server_module = importlib.import_module(f'nominatim_api.server.{args.engine}.server')
app = server_module.get_application(args.project_dir) app = server_module.get_application(args.project_dir)
uvicorn.run(app, host=host, port=port) uvicorn.run(app, host=host, port=port)

View File

@@ -7,7 +7,7 @@
""" """
Subcommand definitions for API calls from the command line. Subcommand definitions for API calls from the command line.
""" """
from typing import Dict, Any from typing import Dict, Any, Optional
import argparse import argparse
import logging import logging
import json import json

View File

@@ -7,38 +7,9 @@
""" """
Version information for Nominatim. Version information for Nominatim.
""" """
from typing import Optional, NamedTuple from typing import Optional
class NominatimVersion(NamedTuple): from nominatim_core.version import NominatimVersion, parse_version
""" 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: int
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) NOMINATIM_VERSION = NominatimVersion(4, 4, 99, 1)
@@ -50,13 +21,3 @@ POSTGIS_REQUIRED_VERSION = (2, 2)
# cmake/tool-installed.tmpl is used to build the binary 'nominatim'. Inside # cmake/tool-installed.tmpl is used to build the binary 'nominatim'. Inside
# there is a call to set the variable value below. # there is a call to set the variable value below.
GIT_COMMIT_HASH : Optional[str] = None GIT_COMMIT_HASH : Optional[str] = None
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

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Helper fixtures for API call tests. Helper fixtures for API call tests.
@@ -14,11 +14,11 @@ import datetime as dt
import sqlalchemy as sa import sqlalchemy as sa
import nominatim.api as napi import nominatim_api as napi
from nominatim.db.sql_preprocessor import SQLPreprocessor from nominatim_core.db.sql_preprocessor import SQLPreprocessor
from nominatim.api.search.query_analyzer_factory import make_query_analyzer from nominatim_api.search.query_analyzer_factory import make_query_analyzer
from nominatim.tools import convert_sqlite from nominatim_db.tools import convert_sqlite
import nominatim.api.logging as loglib import nominatim_api.logging as loglib
class APITester: class APITester:

View File

@@ -2,15 +2,15 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Provides dummy implementations of ASGIAdaptor for testing. Provides dummy implementations of ASGIAdaptor for testing.
""" """
from collections import namedtuple from collections import namedtuple
import nominatim.api.v1.server_glue as glue import nominatim_api.v1.server_glue as glue
from nominatim.config import Configuration from nominatim_core.config import Configuration
class FakeError(BaseException): class FakeError(BaseException):

View File

@@ -2,14 +2,14 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for tokenized query data structures. Tests for tokenized query data structures.
""" """
import pytest import pytest
from nominatim.api.search import query from nominatim_api.search import query
class MyToken(query.Token): class MyToken(query.Token):

View File

@@ -9,11 +9,11 @@ Tests for creating abstract searches from token assignments.
""" """
import pytest import pytest
from nominatim.api.search.query import Token, TokenRange, BreakType, PhraseType, TokenType, QueryStruct, Phrase from nominatim_api.search.query import Token, TokenRange, BreakType, PhraseType, TokenType, QueryStruct, Phrase
from nominatim.api.search.db_search_builder import SearchBuilder from nominatim_api.search.db_search_builder import SearchBuilder
from nominatim.api.search.token_assignment import TokenAssignment from nominatim_api.search.token_assignment import TokenAssignment
from nominatim.api.types import SearchDetails from nominatim_api.types import SearchDetails
import nominatim.api.search.db_searches as dbs import nominatim_api.search.db_searches as dbs
class MyToken(Token): class MyToken(Token):
def get_category(self): def get_category(self):

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for query analyzer for ICU tokenizer. Tests for query analyzer for ICU tokenizer.
@@ -12,10 +12,10 @@ from pathlib import Path
import pytest import pytest
import pytest_asyncio import pytest_asyncio
from nominatim.api import NominatimAPIAsync from nominatim_api import NominatimAPIAsync
from nominatim.api.search.query import Phrase, PhraseType, TokenType, BreakType from nominatim_api.search.query import Phrase, PhraseType, TokenType, BreakType
import nominatim.api.search.icu_tokenizer as tok import nominatim_api.search.icu_tokenizer as tok
from nominatim.api.logging import set_log_output, get_and_disable from nominatim_api.logging import set_log_output, get_and_disable
async def add_word(conn, word_id, word_token, wtype, word, info = None): async def add_word(conn, word_id, word_token, wtype, word, info = None):
t = conn.t.meta.tables['word'] t = conn.t.meta.tables['word']

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for query analyzer for legacy tokenizer. Tests for query analyzer for legacy tokenizer.
@@ -12,10 +12,10 @@ from pathlib import Path
import pytest import pytest
import pytest_asyncio import pytest_asyncio
from nominatim.api import NominatimAPIAsync from nominatim_api import NominatimAPIAsync
from nominatim.api.search.query import Phrase, PhraseType, TokenType, BreakType from nominatim_api.search.query import Phrase, PhraseType, TokenType, BreakType
import nominatim.api.search.legacy_tokenizer as tok import nominatim_api.search.legacy_tokenizer as tok
from nominatim.api.logging import set_log_output, get_and_disable from nominatim_api.logging import set_log_output, get_and_disable
async def add_word(conn, word_id, word_token, word, count): async def add_word(conn, word_id, word_token, word, count):

View File

@@ -1,16 +1,15 @@
# SPDX-License-Identifier: GPL-3.0-or-later # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Test data types for search queries. Test data types for search queries.
""" """
import pytest import pytest
import nominatim.api.search.query as nq import nominatim_api.search.query as nq
def test_token_range_equal(): def test_token_range_equal():
assert nq.TokenRange(2, 3) == nq.TokenRange(2, 3) assert nq.TokenRange(2, 3) == nq.TokenRange(2, 3)

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for query analyzer creation. Tests for query analyzer creation.
@@ -11,9 +11,9 @@ from pathlib import Path
import pytest import pytest
from nominatim.api import NominatimAPIAsync from nominatim_api import NominatimAPIAsync
from nominatim.api.search.query_analyzer_factory import make_query_analyzer from nominatim_api.search.query_analyzer_factory import make_query_analyzer
from nominatim.api.search.icu_tokenizer import ICUQueryAnalyzer from nominatim_api.search.icu_tokenizer import ICUQueryAnalyzer
@pytest.mark.asyncio @pytest.mark.asyncio
async def test_import_icu_tokenizer(table_factory): async def test_import_icu_tokenizer(table_factory):

View File

@@ -2,17 +2,17 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for running the country searcher. Tests for running the country searcher.
""" """
import pytest import pytest
import nominatim.api as napi import nominatim_api as napi
from nominatim.api.types import SearchDetails from nominatim_api.types import SearchDetails
from nominatim.api.search.db_searches import CountrySearch from nominatim_api.search.db_searches import CountrySearch
from nominatim.api.search.db_search_fields import WeightedStrings from nominatim_api.search.db_search_fields import WeightedStrings
def run_search(apiobj, frontend, global_penalty, ccodes, def run_search(apiobj, frontend, global_penalty, ccodes,

View File

@@ -2,19 +2,19 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for running the near searcher. Tests for running the near searcher.
""" """
import pytest import pytest
import nominatim.api as napi import nominatim_api as napi
from nominatim.api.types import SearchDetails from nominatim_api.types import SearchDetails
from nominatim.api.search.db_searches import NearSearch, PlaceSearch from nominatim_api.search.db_searches import NearSearch, PlaceSearch
from nominatim.api.search.db_search_fields import WeightedStrings, WeightedCategories,\ from nominatim_api.search.db_search_fields import WeightedStrings, WeightedCategories,\
FieldLookup, FieldRanking, RankedTokens FieldLookup, FieldRanking, RankedTokens
from nominatim.api.search.db_search_lookups import LookupAll from nominatim_api.search.db_search_lookups import LookupAll
def run_search(apiobj, frontend, global_penalty, cat, cat_penalty=None, ccodes=[], def run_search(apiobj, frontend, global_penalty, cat, cat_penalty=None, ccodes=[],

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for running the generic place searcher. Tests for running the generic place searcher.
@@ -11,12 +11,12 @@ import json
import pytest import pytest
import nominatim.api as napi import nominatim_api as napi
from nominatim.api.types import SearchDetails from nominatim_api.types import SearchDetails
from nominatim.api.search.db_searches import PlaceSearch from nominatim_api.search.db_searches import PlaceSearch
from nominatim.api.search.db_search_fields import WeightedStrings, WeightedCategories,\ from nominatim_api.search.db_search_fields import WeightedStrings, WeightedCategories,\
FieldLookup, FieldRanking, RankedTokens FieldLookup, FieldRanking, RankedTokens
from nominatim.api.search.db_search_lookups import LookupAll, LookupAny, Restrict from nominatim_api.search.db_search_lookups import LookupAll, LookupAny, Restrict
APIOPTIONS = ['search'] APIOPTIONS = ['search']

View File

@@ -2,17 +2,17 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for running the POI searcher. Tests for running the POI searcher.
""" """
import pytest import pytest
import nominatim.api as napi import nominatim_api as napi
from nominatim.api.types import SearchDetails from nominatim_api.types import SearchDetails
from nominatim.api.search.db_searches import PoiSearch from nominatim_api.search.db_searches import PoiSearch
from nominatim.api.search.db_search_fields import WeightedStrings, WeightedCategories from nominatim_api.search.db_search_fields import WeightedStrings, WeightedCategories
def run_search(apiobj, frontend, global_penalty, poitypes, poi_penalties=None, def run_search(apiobj, frontend, global_penalty, poitypes, poi_penalties=None,

View File

@@ -2,17 +2,17 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for running the postcode searcher. Tests for running the postcode searcher.
""" """
import pytest import pytest
import nominatim.api as napi import nominatim_api as napi
from nominatim.api.types import SearchDetails from nominatim_api.types import SearchDetails
from nominatim.api.search.db_searches import PostcodeSearch from nominatim_api.search.db_searches import PostcodeSearch
from nominatim.api.search.db_search_fields import WeightedStrings, FieldLookup, \ from nominatim_api.search.db_search_fields import WeightedStrings, FieldLookup, \
FieldRanking, RankedTokens FieldRanking, RankedTokens
def run_search(apiobj, frontend, global_penalty, pcs, pc_penalties=None, def run_search(apiobj, frontend, global_penalty, pcs, pc_penalties=None,

View File

@@ -2,15 +2,15 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Test for creation of token assignments from tokenized queries. Test for creation of token assignments from tokenized queries.
""" """
import pytest import pytest
from nominatim.api.search.query import QueryStruct, Phrase, PhraseType, BreakType, TokenType, TokenRange, Token from nominatim_api.search.query import QueryStruct, Phrase, PhraseType, BreakType, TokenType, TokenRange, Token
from nominatim.api.search.token_assignment import yield_token_assignments, TokenAssignment, PENALTY_TOKENCHANGE from nominatim_api.search.token_assignment import yield_token_assignments, TokenAssignment, PENALTY_TOKENCHANGE
class MyToken(Token): class MyToken(Token):
def get_category(self): def get_category(self):

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for enhanced connection class for API functions. Tests for enhanced connection class for API functions.
@@ -13,7 +13,7 @@ import pytest_asyncio
import sqlalchemy as sa import sqlalchemy as sa
from nominatim.api import NominatimAPIAsync from nominatim_api import NominatimAPIAsync
@pytest_asyncio.fixture @pytest_asyncio.fixture
async def apiobj(temp_db): async def apiobj(temp_db):

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the deletable v1 API call. Tests for the deletable v1 API call.
@@ -17,8 +17,8 @@ import psycopg2.extras
from fake_adaptor import FakeAdaptor, FakeError, FakeResponse from fake_adaptor import FakeAdaptor, FakeError, FakeResponse
import nominatim.api.v1.server_glue as glue import nominatim_api.v1.server_glue as glue
import nominatim.api as napi import nominatim_api as napi
@pytest_asyncio.fixture @pytest_asyncio.fixture
async def api(): async def api():

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for details API call. Tests for details API call.
@@ -11,7 +11,7 @@ import datetime as dt
import pytest import pytest
import nominatim.api as napi import nominatim_api as napi
@pytest.mark.parametrize('idobj', (napi.PlaceID(332), napi.OsmID('W', 4), @pytest.mark.parametrize('idobj', (napi.PlaceID(332), napi.OsmID('W', 4),
napi.OsmID('W', 4, 'highway'))) napi.OsmID('W', 4, 'highway')))

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for lookup API call. Tests for lookup API call.
@@ -11,7 +11,7 @@ import json
import pytest import pytest
import nominatim.api as napi import nominatim_api as napi
def test_lookup_empty_list(apiobj, frontend): def test_lookup_empty_list(apiobj, frontend):
api = frontend(apiobj, options={'details'}) api = frontend(apiobj, options={'details'})

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the deletable v1 API call. Tests for the deletable v1 API call.
@@ -18,8 +18,8 @@ import psycopg2.extras
from fake_adaptor import FakeAdaptor, FakeError, FakeResponse from fake_adaptor import FakeAdaptor, FakeError, FakeResponse
import nominatim.api.v1.server_glue as glue import nominatim_api.v1.server_glue as glue
import nominatim.api as napi import nominatim_api as napi
@pytest_asyncio.fixture @pytest_asyncio.fixture
async def api(): async def api():

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for reverse API call. Tests for reverse API call.
@@ -14,7 +14,7 @@ import json
import pytest import pytest
import nominatim.api as napi import nominatim_api as napi
API_OPTIONS = {'reverse'} API_OPTIONS = {'reverse'}

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for search API calls. Tests for search API calls.
@@ -16,8 +16,8 @@ import pytest
import sqlalchemy as sa import sqlalchemy as sa
import nominatim.api as napi import nominatim_api as napi
import nominatim.api.logging as loglib import nominatim_api.logging as loglib
API_OPTIONS = {'search'} API_OPTIONS = {'search'}

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the status API call. Tests for the status API call.
@@ -11,8 +11,9 @@ from pathlib import Path
import datetime as dt import datetime as dt
import pytest import pytest
from nominatim.version import NOMINATIM_VERSION, NominatimVersion from nominatim_db.version import NominatimVersion
import nominatim.api as napi from nominatim_api.version import NOMINATIM_API_VERSION
import nominatim_api as napi
def test_status_no_extra_info(apiobj, frontend): def test_status_no_extra_info(apiobj, frontend):
api = frontend(apiobj) api = frontend(apiobj)
@@ -20,7 +21,7 @@ def test_status_no_extra_info(apiobj, frontend):
assert result.status == 0 assert result.status == 0
assert result.message == 'OK' assert result.message == 'OK'
assert result.software_version == NOMINATIM_VERSION assert result.software_version == NOMINATIM_API_VERSION
assert result.database_version is None assert result.database_version is None
assert result.data_updated is None assert result.data_updated is None
@@ -37,7 +38,7 @@ def test_status_full(apiobj, frontend):
assert result.status == 0 assert result.status == 0
assert result.message == 'OK' assert result.message == 'OK'
assert result.software_version == NOMINATIM_VERSION assert result.software_version == NOMINATIM_API_VERSION
assert result.database_version == NominatimVersion(99, 5, 4, 2) assert result.database_version == NominatimVersion(99, 5, 4, 2)
assert result.data_updated == import_date assert result.data_updated == import_date
@@ -51,6 +52,6 @@ def test_status_database_not_found(monkeypatch):
assert result.status == 700 assert result.status == 700
assert result.message == 'Database connection failed' assert result.message == 'Database connection failed'
assert result.software_version == NOMINATIM_VERSION assert result.software_version == NOMINATIM_API_VERSION
assert result.database_version is None assert result.database_version is None
assert result.data_updated is None assert result.data_updated is None

View File

@@ -2,15 +2,15 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for loading of parameter dataclasses. Tests for loading of parameter dataclasses.
""" """
import pytest import pytest
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
import nominatim.api.types as typ import nominatim_api.types as typ
def test_no_params_defaults(): def test_no_params_defaults():
params = typ.LookupDetails.from_kwargs({}) params = typ.LookupDetails.from_kwargs({})

View File

@@ -2,22 +2,22 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for export CLI function. Tests for export CLI function.
""" """
import pytest import pytest
import nominatim.cli import nominatim_db.cli
@pytest.fixture @pytest.fixture
def run_export(tmp_path, capsys): def run_export(tmp_path, capsys):
def _exec(args): def _exec(args):
assert 0 == nominatim.cli.nominatim(module_dir='MODULE NOT AVAILABLE', assert 0 == nominatim_db.cli.nominatim(module_dir='MODULE NOT AVAILABLE',
osm2pgsql_path='OSM2PGSQL NOT AVAILABLE', osm2pgsql_path='OSM2PGSQL NOT AVAILABLE',
cli_args=['export', '--project-dir', str(tmp_path)] cli_args=['export', '--project-dir', str(tmp_path)]
+ args) + args)
return capsys.readouterr().out.split('\r\n') return capsys.readouterr().out.split('\r\n')
return _exec return _exec

View File

@@ -2,14 +2,14 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the helper functions for v1 API. Tests for the helper functions for v1 API.
""" """
import pytest import pytest
import nominatim.api.v1.helpers as helper import nominatim_api.v1.helpers as helper
@pytest.mark.parametrize('inp', ['', @pytest.mark.parametrize('inp', ['',
'abc', 'abc',

View File

@@ -2,14 +2,14 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Test functions for adapting results to the user's locale. Test functions for adapting results to the user's locale.
""" """
import pytest import pytest
from nominatim.api import Locales from nominatim_api import Locales
def test_display_name_empty_names(): def test_display_name_empty_names():
l = Locales(['en', 'de']) l = Locales(['en', 'de'])

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for formatting results for the V1 API. Tests for formatting results for the V1 API.
@@ -15,9 +15,8 @@ import json
import pytest import pytest
import nominatim.api.v1 as api_impl import nominatim_api.v1 as api_impl
import nominatim.api as napi import nominatim_api as napi
from nominatim.version import NOMINATIM_VERSION
STATUS_FORMATS = {'text', 'json'} STATUS_FORMATS = {'text', 'json'}
@@ -49,7 +48,8 @@ def test_status_format_json_minimal():
result = api_impl.format_result(status, 'json', {}) result = api_impl.format_result(status, 'json', {})
assert result == '{"status":700,"message":"Bad format.","software_version":"%s"}' % (NOMINATIM_VERSION, ) assert result == \
f'{{"status":700,"message":"Bad format.","software_version":"{napi.__version__}"}}'
def test_status_format_json_full(): def test_status_format_json_full():
@@ -59,7 +59,8 @@ def test_status_format_json_full():
result = api_impl.format_result(status, 'json', {}) result = api_impl.format_result(status, 'json', {})
assert result == '{"status":0,"message":"OK","data_updated":"2010-02-07T20:20:03+00:00","software_version":"%s","database_version":"5.6"}' % (NOMINATIM_VERSION, ) assert result == \
f'{{"status":0,"message":"OK","data_updated":"2010-02-07T20:20:03+00:00","software_version":"{napi.__version__}","database_version":"5.6"}}'
# DetailedResult # DetailedResult

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for formatting reverse results for the V1 API. Tests for formatting reverse results for the V1 API.
@@ -15,8 +15,8 @@ import xml.etree.ElementTree as ET
import pytest import pytest
import nominatim.api.v1 as api_impl import nominatim_api.v1 as api_impl
import nominatim.api as napi import nominatim_api as napi
FORMATS = ['json', 'jsonv2', 'geojson', 'geocodejson', 'xml'] FORMATS = ['json', 'jsonv2', 'geojson', 'geocodejson', 'xml']

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for result datatype helper functions. Tests for result datatype helper functions.
@@ -15,8 +15,8 @@ import pytest_asyncio
import sqlalchemy as sa import sqlalchemy as sa
from nominatim.api import SourceTable, DetailedResult, Point from nominatim_api import SourceTable, DetailedResult, Point
import nominatim.api.results as nresults import nominatim_api.results as nresults
def mkpoint(x, y): def mkpoint(x, y):
return hexlify(struct.pack("=biidd", 1, 0x20000001, 4326, x, y)).decode('utf-8') return hexlify(struct.pack("=biidd", 1, 0x20000001, 4326, x, y)).decode('utf-8')

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the Python web frameworks adaptor, v1 API. Tests for the Python web frameworks adaptor, v1 API.
@@ -15,9 +15,9 @@ import pytest
from fake_adaptor import FakeAdaptor, FakeError, FakeResponse from fake_adaptor import FakeAdaptor, FakeError, FakeResponse
import nominatim.api.v1.server_glue as glue import nominatim_api.v1.server_glue as glue
import nominatim.api as napi import nominatim_api as napi
import nominatim.api.logging as loglib import nominatim_api.logging as loglib
# ASGIAdaptor.get_int/bool() # ASGIAdaptor.get_int/bool()

View File

@@ -2,14 +2,14 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for warm-up CLI function. Tests for warm-up CLI function.
""" """
import pytest import pytest
import nominatim.cli import nominatim_db.cli
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def setup_database_with_context(apiobj, table_factory): def setup_database_with_context(apiobj, table_factory):
@@ -27,7 +27,7 @@ def setup_database_with_context(apiobj, table_factory):
@pytest.mark.parametrize('args', [['--search-only'], ['--reverse-only']]) @pytest.mark.parametrize('args', [['--search-only'], ['--reverse-only']])
def test_warm_all(tmp_path, args): def test_warm_all(tmp_path, args):
assert 0 == nominatim.cli.nominatim(module_dir='MODULE NOT AVAILABLE', assert 0 == nominatim_db.cli.nominatim(module_dir='MODULE NOT AVAILABLE',
osm2pgsql_path='OSM2PGSQL NOT AVAILABLE', osm2pgsql_path='OSM2PGSQL NOT AVAILABLE',
cli_args=['admin', '--project-dir', str(tmp_path), cli_args=['admin', '--project-dir', str(tmp_path),
'--warm'] + args) '--warm'] + args)

View File

@@ -1,12 +1,12 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
import pytest import pytest
import nominatim.cli import nominatim_db.cli
class MockParamCapture: class MockParamCapture:
""" Mock that records the parameters with which a function was called """ Mock that records the parameters with which a function was called
@@ -51,9 +51,9 @@ def cli_call():
Returns a function that can be called with the desired CLI arguments. Returns a function that can be called with the desired CLI arguments.
""" """
def _call_nominatim(*args): def _call_nominatim(*args):
return nominatim.cli.nominatim(module_dir='MODULE NOT AVAILABLE', return nominatim_db.cli.nominatim(module_dir='MODULE NOT AVAILABLE',
osm2pgsql_path='OSM2PGSQL NOT AVAILABLE', osm2pgsql_path='OSM2PGSQL NOT AVAILABLE',
cli_args=args) cli_args=args)
return _call_nominatim return _call_nominatim
@@ -72,9 +72,9 @@ def mock_func_factory(monkeypatch):
@pytest.fixture @pytest.fixture
def cli_tokenizer_mock(monkeypatch): def cli_tokenizer_mock(monkeypatch):
tok = DummyTokenizer() tok = DummyTokenizer()
monkeypatch.setattr(nominatim.tokenizer.factory, 'get_tokenizer_for_db', monkeypatch.setattr(nominatim_db.tokenizer.factory, 'get_tokenizer_for_db',
lambda *args: tok) lambda *args: tok)
monkeypatch.setattr(nominatim.tokenizer.factory, 'create_tokenizer', monkeypatch.setattr(nominatim_db.tokenizer.factory, 'create_tokenizer',
lambda *args: tok) lambda *args: tok)
return tok return tok

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for command line interface wrapper. Tests for command line interface wrapper.
@@ -14,9 +14,9 @@ the actual functions.
import importlib import importlib
import pytest import pytest
import nominatim.indexer.indexer import nominatim_db.indexer.indexer
import nominatim.tools.add_osm_data import nominatim_db.tools.add_osm_data
import nominatim.tools.freeze import nominatim_db.tools.freeze
def test_cli_help(cli_call, capsys): def test_cli_help(cli_call, capsys):
@@ -37,7 +37,7 @@ def test_cli_version(cli_call, capsys):
@pytest.mark.parametrize("name,oid", [('file', 'foo.osm'), ('diff', 'foo.osc')]) @pytest.mark.parametrize("name,oid", [('file', 'foo.osm'), ('diff', 'foo.osc')])
def test_cli_add_data_file_command(cli_call, mock_func_factory, name, oid): def test_cli_add_data_file_command(cli_call, mock_func_factory, name, oid):
mock_run_legacy = mock_func_factory(nominatim.tools.add_osm_data, 'add_data_from_file') mock_run_legacy = mock_func_factory(nominatim_db.tools.add_osm_data, 'add_data_from_file')
assert cli_call('add-data', '--' + name, str(oid)) == 0 assert cli_call('add-data', '--' + name, str(oid)) == 0
assert mock_run_legacy.called == 1 assert mock_run_legacy.called == 1
@@ -45,7 +45,7 @@ def test_cli_add_data_file_command(cli_call, mock_func_factory, name, oid):
@pytest.mark.parametrize("name,oid", [('node', 12), ('way', 8), ('relation', 32)]) @pytest.mark.parametrize("name,oid", [('node', 12), ('way', 8), ('relation', 32)])
def test_cli_add_data_object_command(cli_call, mock_func_factory, name, oid): def test_cli_add_data_object_command(cli_call, mock_func_factory, name, oid):
mock_run_legacy = mock_func_factory(nominatim.tools.add_osm_data, 'add_osm_object') mock_run_legacy = mock_func_factory(nominatim_db.tools.add_osm_data, 'add_osm_object')
assert cli_call('add-data', '--' + name, str(oid)) == 0 assert cli_call('add-data', '--' + name, str(oid)) == 0
assert mock_run_legacy.called == 1 assert mock_run_legacy.called == 1
@@ -53,7 +53,7 @@ def test_cli_add_data_object_command(cli_call, mock_func_factory, name, oid):
def test_cli_add_data_tiger_data(cli_call, cli_tokenizer_mock, mock_func_factory): def test_cli_add_data_tiger_data(cli_call, cli_tokenizer_mock, mock_func_factory):
mock = mock_func_factory(nominatim.tools.tiger_data, 'add_tiger_data') mock = mock_func_factory(nominatim_db.tools.tiger_data, 'add_tiger_data')
assert cli_call('add-data', '--tiger-data', 'somewhere') == 0 assert cli_call('add-data', '--tiger-data', 'somewhere') == 0
@@ -61,7 +61,7 @@ def test_cli_add_data_tiger_data(cli_call, cli_tokenizer_mock, mock_func_factory
def test_cli_serve_php(cli_call, mock_func_factory): def test_cli_serve_php(cli_call, mock_func_factory):
func = mock_func_factory(nominatim.cli, 'run_php_server') func = mock_func_factory(nominatim_db.cli, 'run_php_server')
cli_call('serve', '--engine', 'php') == 0 cli_call('serve', '--engine', 'php') == 0
@@ -110,8 +110,8 @@ class TestCliWithDb:
def test_freeze_command(self, mock_func_factory): def test_freeze_command(self, mock_func_factory):
mock_drop = mock_func_factory(nominatim.tools.freeze, 'drop_update_tables') mock_drop = mock_func_factory(nominatim_db.tools.freeze, 'drop_update_tables')
mock_flatnode = mock_func_factory(nominatim.tools.freeze, 'drop_flatnode_file') mock_flatnode = mock_func_factory(nominatim_db.tools.freeze, 'drop_flatnode_file')
assert self.call_nominatim('freeze') == 0 assert self.call_nominatim('freeze') == 0
@@ -127,9 +127,9 @@ class TestCliWithDb:
def test_index_command(self, mock_func_factory, table_factory, def test_index_command(self, mock_func_factory, table_factory,
params, do_bnds, do_ranks): params, do_bnds, do_ranks):
table_factory('import_status', 'indexed bool') table_factory('import_status', 'indexed bool')
bnd_mock = mock_func_factory(nominatim.indexer.indexer.Indexer, 'index_boundaries') bnd_mock = mock_func_factory(nominatim_db.indexer.indexer.Indexer, 'index_boundaries')
rank_mock = mock_func_factory(nominatim.indexer.indexer.Indexer, 'index_by_rank') rank_mock = mock_func_factory(nominatim_db.indexer.indexer.Indexer, 'index_by_rank')
postcode_mock = mock_func_factory(nominatim.indexer.indexer.Indexer, 'index_postcodes') postcode_mock = mock_func_factory(nominatim_db.indexer.indexer.Indexer, 'index_postcodes')
assert self.call_nominatim('index', *params) == 0 assert self.call_nominatim('index', *params) == 0
@@ -139,7 +139,7 @@ class TestCliWithDb:
def test_special_phrases_wiki_command(self, mock_func_factory): def test_special_phrases_wiki_command(self, mock_func_factory):
func = mock_func_factory(nominatim.clicmd.special_phrases.SPImporter, 'import_phrases') func = mock_func_factory(nominatim_db.clicmd.special_phrases.SPImporter, 'import_phrases')
self.call_nominatim('special-phrases', '--import-from-wiki', '--no-replace') self.call_nominatim('special-phrases', '--import-from-wiki', '--no-replace')
@@ -147,7 +147,7 @@ class TestCliWithDb:
def test_special_phrases_csv_command(self, src_dir, mock_func_factory): def test_special_phrases_csv_command(self, src_dir, mock_func_factory):
func = mock_func_factory(nominatim.clicmd.special_phrases.SPImporter, 'import_phrases') func = mock_func_factory(nominatim_db.clicmd.special_phrases.SPImporter, 'import_phrases')
testdata = src_dir / 'test' / 'testdb' testdata = src_dir / 'test' / 'testdb'
csv_path = str((testdata / 'full_en_phrases_test.csv').resolve()) csv_path = str((testdata / 'full_en_phrases_test.csv').resolve())

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Test for the command line interface wrapper admin subcommand. Test for the command line interface wrapper admin subcommand.
@@ -13,34 +13,34 @@ the actual functions.
""" """
import pytest import pytest
import nominatim.tools.admin import nominatim_db.tools.admin
import nominatim.tools.check_database import nominatim_db.tools.check_database
import nominatim.tools.migration import nominatim_db.tools.migration
import nominatim.clicmd.admin import nominatim_db.clicmd.admin
def test_admin_command_check_database(cli_call, mock_func_factory): def test_admin_command_check_database(cli_call, mock_func_factory):
mock = mock_func_factory(nominatim.tools.check_database, 'check_database') mock = mock_func_factory(nominatim_db.tools.check_database, 'check_database')
assert cli_call('admin', '--check-database') == 0 assert cli_call('admin', '--check-database') == 0
assert mock.called == 1 assert mock.called == 1
def test_admin_migrate(cli_call, mock_func_factory): def test_admin_migrate(cli_call, mock_func_factory):
mock = mock_func_factory(nominatim.tools.migration, 'migrate') mock = mock_func_factory(nominatim_db.tools.migration, 'migrate')
assert cli_call('admin', '--migrate') == 0 assert cli_call('admin', '--migrate') == 0
assert mock.called == 1 assert mock.called == 1
def test_admin_clean_deleted_relations(cli_call, mock_func_factory): def test_admin_clean_deleted_relations(cli_call, mock_func_factory):
mock = mock_func_factory(nominatim.tools.admin, 'clean_deleted_relations') mock = mock_func_factory(nominatim_db.tools.admin, 'clean_deleted_relations')
assert cli_call('admin', '--clean-deleted', '1 month') == 0 assert cli_call('admin', '--clean-deleted', '1 month') == 0
assert mock.called == 1 assert mock.called == 1
def test_admin_clean_deleted_relations_no_age(cli_call, mock_func_factory): def test_admin_clean_deleted_relations_no_age(cli_call, mock_func_factory):
mock = mock_func_factory(nominatim.tools.admin, 'clean_deleted_relations') mock = mock_func_factory(nominatim_db.tools.admin, 'clean_deleted_relations')
assert cli_call('admin', '--clean-deleted') == 1 assert cli_call('admin', '--clean-deleted') == 1
@@ -54,7 +54,7 @@ class TestCliAdminWithDb:
@pytest.mark.parametrize("func, params", [('analyse_indexing', ('--analyse-indexing', ))]) @pytest.mark.parametrize("func, params", [('analyse_indexing', ('--analyse-indexing', ))])
def test_analyse_indexing(self, mock_func_factory, func, params): def test_analyse_indexing(self, mock_func_factory, func, params):
mock = mock_func_factory(nominatim.tools.admin, func) mock = mock_func_factory(nominatim_db.tools.admin, func)
assert self.call_nominatim('admin', *params) == 0 assert self.call_nominatim('admin', *params) == 0
assert mock.called == 1 assert mock.called == 1

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for API access commands of command-line interface wrapper. Tests for API access commands of command-line interface wrapper.
@@ -10,8 +10,8 @@ Tests for API access commands of command-line interface wrapper.
import json import json
import pytest import pytest
import nominatim.clicmd.api import nominatim_db.clicmd.api
import nominatim.api as napi import nominatim_api as napi
class TestCliStatusCall: class TestCliStatusCall:

View File

@@ -1,20 +1,20 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for import command of the command-line interface wrapper. Tests for import command of the command-line interface wrapper.
""" """
import pytest import pytest
import nominatim.tools.database_import import nominatim_db.tools.database_import
import nominatim.data.country_info import nominatim_db.data.country_info
import nominatim.tools.refresh import nominatim_db.tools.refresh
import nominatim.tools.postcodes import nominatim_db.tools.postcodes
import nominatim.indexer.indexer import nominatim_db.indexer.indexer
import nominatim.db.properties import nominatim_core.db.properties
class TestCliImportWithDb: class TestCliImportWithDb:
@@ -36,31 +36,31 @@ class TestCliImportWithDb:
@pytest.mark.parametrize('with_updates', [True, False]) @pytest.mark.parametrize('with_updates', [True, False])
def test_import_full(self, mock_func_factory, with_updates, place_table, property_table): def test_import_full(self, mock_func_factory, with_updates, place_table, property_table):
mocks = [ mocks = [
mock_func_factory(nominatim.tools.database_import, 'setup_database_skeleton'), mock_func_factory(nominatim_db.tools.database_import, 'setup_database_skeleton'),
mock_func_factory(nominatim.data.country_info, 'setup_country_tables'), mock_func_factory(nominatim_db.data.country_info, 'setup_country_tables'),
mock_func_factory(nominatim.tools.database_import, 'import_osm_data'), mock_func_factory(nominatim_db.tools.database_import, 'import_osm_data'),
mock_func_factory(nominatim.tools.refresh, 'import_wikipedia_articles'), mock_func_factory(nominatim_db.tools.refresh, 'import_wikipedia_articles'),
mock_func_factory(nominatim.tools.refresh, 'import_secondary_importance'), mock_func_factory(nominatim_db.tools.refresh, 'import_secondary_importance'),
mock_func_factory(nominatim.tools.database_import, 'truncate_data_tables'), mock_func_factory(nominatim_db.tools.database_import, 'truncate_data_tables'),
mock_func_factory(nominatim.tools.database_import, 'load_data'), mock_func_factory(nominatim_db.tools.database_import, 'load_data'),
mock_func_factory(nominatim.tools.database_import, 'create_tables'), mock_func_factory(nominatim_db.tools.database_import, 'create_tables'),
mock_func_factory(nominatim.tools.database_import, 'create_table_triggers'), mock_func_factory(nominatim_db.tools.database_import, 'create_table_triggers'),
mock_func_factory(nominatim.tools.database_import, 'create_partition_tables'), mock_func_factory(nominatim_db.tools.database_import, 'create_partition_tables'),
mock_func_factory(nominatim.tools.database_import, 'create_search_indices'), mock_func_factory(nominatim_db.tools.database_import, 'create_search_indices'),
mock_func_factory(nominatim.data.country_info, 'create_country_names'), mock_func_factory(nominatim_db.data.country_info, 'create_country_names'),
mock_func_factory(nominatim.tools.refresh, 'load_address_levels_from_config'), mock_func_factory(nominatim_db.tools.refresh, 'load_address_levels_from_config'),
mock_func_factory(nominatim.tools.postcodes, 'update_postcodes'), mock_func_factory(nominatim_db.tools.postcodes, 'update_postcodes'),
mock_func_factory(nominatim.indexer.indexer.Indexer, 'index_full'), mock_func_factory(nominatim_db.indexer.indexer.Indexer, 'index_full'),
mock_func_factory(nominatim.tools.refresh, 'setup_website'), mock_func_factory(nominatim_db.tools.refresh, 'setup_website'),
] ]
params = ['import', '--osm-file', __file__] params = ['import', '--osm-file', __file__]
if with_updates: if with_updates:
mocks.append(mock_func_factory(nominatim.tools.freeze, 'drop_update_tables')) mocks.append(mock_func_factory(nominatim_db.tools.freeze, 'drop_update_tables'))
params.append('--no-updates') params.append('--no-updates')
cf_mock = mock_func_factory(nominatim.tools.refresh, 'create_functions') cf_mock = mock_func_factory(nominatim_db.tools.refresh, 'create_functions')
assert self.call_nominatim(*params) == 0 assert self.call_nominatim(*params) == 0
@@ -74,14 +74,14 @@ class TestCliImportWithDb:
def test_import_continue_load_data(self, mock_func_factory): def test_import_continue_load_data(self, mock_func_factory):
mocks = [ mocks = [
mock_func_factory(nominatim.tools.database_import, 'truncate_data_tables'), mock_func_factory(nominatim_db.tools.database_import, 'truncate_data_tables'),
mock_func_factory(nominatim.tools.database_import, 'load_data'), mock_func_factory(nominatim_db.tools.database_import, 'load_data'),
mock_func_factory(nominatim.tools.database_import, 'create_search_indices'), mock_func_factory(nominatim_db.tools.database_import, 'create_search_indices'),
mock_func_factory(nominatim.data.country_info, 'create_country_names'), mock_func_factory(nominatim_db.data.country_info, 'create_country_names'),
mock_func_factory(nominatim.tools.postcodes, 'update_postcodes'), mock_func_factory(nominatim_db.tools.postcodes, 'update_postcodes'),
mock_func_factory(nominatim.indexer.indexer.Indexer, 'index_full'), mock_func_factory(nominatim_db.indexer.indexer.Indexer, 'index_full'),
mock_func_factory(nominatim.tools.refresh, 'setup_website'), mock_func_factory(nominatim_db.tools.refresh, 'setup_website'),
mock_func_factory(nominatim.db.properties, 'set_property') mock_func_factory(nominatim_core.db.properties, 'set_property')
] ]
assert self.call_nominatim('import', '--continue', 'load-data') == 0 assert self.call_nominatim('import', '--continue', 'load-data') == 0
@@ -94,11 +94,11 @@ class TestCliImportWithDb:
def test_import_continue_indexing(self, mock_func_factory, placex_table, def test_import_continue_indexing(self, mock_func_factory, placex_table,
temp_db_conn): temp_db_conn):
mocks = [ mocks = [
mock_func_factory(nominatim.tools.database_import, 'create_search_indices'), mock_func_factory(nominatim_db.tools.database_import, 'create_search_indices'),
mock_func_factory(nominatim.data.country_info, 'create_country_names'), mock_func_factory(nominatim_db.data.country_info, 'create_country_names'),
mock_func_factory(nominatim.indexer.indexer.Indexer, 'index_full'), mock_func_factory(nominatim_db.indexer.indexer.Indexer, 'index_full'),
mock_func_factory(nominatim.tools.refresh, 'setup_website'), mock_func_factory(nominatim_db.tools.refresh, 'setup_website'),
mock_func_factory(nominatim.db.properties, 'set_property') mock_func_factory(nominatim_core.db.properties, 'set_property')
] ]
assert self.call_nominatim('import', '--continue', 'indexing') == 0 assert self.call_nominatim('import', '--continue', 'indexing') == 0
@@ -112,10 +112,10 @@ class TestCliImportWithDb:
def test_import_continue_postprocess(self, mock_func_factory): def test_import_continue_postprocess(self, mock_func_factory):
mocks = [ mocks = [
mock_func_factory(nominatim.tools.database_import, 'create_search_indices'), mock_func_factory(nominatim_db.tools.database_import, 'create_search_indices'),
mock_func_factory(nominatim.data.country_info, 'create_country_names'), mock_func_factory(nominatim_db.data.country_info, 'create_country_names'),
mock_func_factory(nominatim.tools.refresh, 'setup_website'), mock_func_factory(nominatim_db.tools.refresh, 'setup_website'),
mock_func_factory(nominatim.db.properties, 'set_property') mock_func_factory(nominatim_core.db.properties, 'set_property')
] ]
assert self.call_nominatim('import', '--continue', 'db-postprocess') == 0 assert self.call_nominatim('import', '--continue', 'db-postprocess') == 0

View File

@@ -1,17 +1,17 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for command line interface wrapper for refresk command. Tests for command line interface wrapper for refresk command.
""" """
import pytest import pytest
import nominatim.tools.refresh import nominatim_db.tools.refresh
import nominatim.tools.postcodes import nominatim_db.tools.postcodes
import nominatim.indexer.indexer import nominatim_db.indexer.indexer
class TestRefresh: class TestRefresh:
@@ -28,8 +28,8 @@ class TestRefresh:
('website', 'setup_website'), ('website', 'setup_website'),
]) ])
def test_refresh_command(self, mock_func_factory, command, func): def test_refresh_command(self, mock_func_factory, command, func):
mock_func_factory(nominatim.tools.refresh, 'create_functions') mock_func_factory(nominatim_db.tools.refresh, 'create_functions')
func_mock = mock_func_factory(nominatim.tools.refresh, func) func_mock = mock_func_factory(nominatim_db.tools.refresh, func)
assert self.call_nominatim('refresh', '--' + command) == 0 assert self.call_nominatim('refresh', '--' + command) == 0
assert func_mock.called == 1 assert func_mock.called == 1
@@ -46,8 +46,8 @@ class TestRefresh:
def test_refresh_postcodes(self, mock_func_factory, place_table): def test_refresh_postcodes(self, mock_func_factory, place_table):
func_mock = mock_func_factory(nominatim.tools.postcodes, 'update_postcodes') func_mock = mock_func_factory(nominatim_db.tools.postcodes, 'update_postcodes')
idx_mock = mock_func_factory(nominatim.indexer.indexer.Indexer, 'index_postcodes') idx_mock = mock_func_factory(nominatim_db.indexer.indexer.Indexer, 'index_postcodes')
assert self.call_nominatim('refresh', '--postcodes') == 0 assert self.call_nominatim('refresh', '--postcodes') == 0
assert func_mock.called == 1 assert func_mock.called == 1
@@ -60,7 +60,7 @@ class TestRefresh:
def test_refresh_create_functions(self, mock_func_factory): def test_refresh_create_functions(self, mock_func_factory):
func_mock = mock_func_factory(nominatim.tools.refresh, 'create_functions') func_mock = mock_func_factory(nominatim_db.tools.refresh, 'create_functions')
assert self.call_nominatim('refresh', '--functions') == 0 assert self.call_nominatim('refresh', '--functions') == 0
assert func_mock.called == 1 assert func_mock.called == 1
@@ -78,8 +78,8 @@ class TestRefresh:
def test_refresh_secondary_importance_new_table(self, mock_func_factory): def test_refresh_secondary_importance_new_table(self, mock_func_factory):
mocks = [mock_func_factory(nominatim.tools.refresh, 'import_secondary_importance'), mocks = [mock_func_factory(nominatim_db.tools.refresh, 'import_secondary_importance'),
mock_func_factory(nominatim.tools.refresh, 'create_functions')] mock_func_factory(nominatim_db.tools.refresh, 'create_functions')]
assert self.call_nominatim('refresh', '--secondary-importance') == 0 assert self.call_nominatim('refresh', '--secondary-importance') == 0
assert mocks[0].called == 1 assert mocks[0].called == 1
@@ -88,9 +88,9 @@ class TestRefresh:
def test_refresh_importance_computed_after_wiki_import(self, monkeypatch, mock_func_factory): def test_refresh_importance_computed_after_wiki_import(self, monkeypatch, mock_func_factory):
calls = [] calls = []
monkeypatch.setattr(nominatim.tools.refresh, 'import_wikipedia_articles', monkeypatch.setattr(nominatim_db.tools.refresh, 'import_wikipedia_articles',
lambda *args, **kwargs: calls.append('import') or 0) lambda *args, **kwargs: calls.append('import') or 0)
monkeypatch.setattr(nominatim.tools.refresh, 'recompute_importance', monkeypatch.setattr(nominatim_db.tools.refresh, 'recompute_importance',
lambda *args, **kwargs: calls.append('update')) lambda *args, **kwargs: calls.append('update'))
func_mock = mock_func_factory(nominatim.tools.refresh, 'create_functions') func_mock = mock_func_factory(nominatim.tools.refresh, 'create_functions')
@@ -105,7 +105,7 @@ class TestRefresh:
('--data-area', 'r7723', '--data-area', 'r2'), ('--data-area', 'r7723', '--data-area', 'r2'),
('--data-area', 'R9284425', '--data-object', 'n1234567894567')]) ('--data-area', 'R9284425', '--data-object', 'n1234567894567')])
def test_refresh_objects(self, params, mock_func_factory): def test_refresh_objects(self, params, mock_func_factory):
func_mock = mock_func_factory(nominatim.tools.refresh, 'invalidate_osm_object') func_mock = mock_func_factory(nominatim_db.tools.refresh, 'invalidate_osm_object')
assert self.call_nominatim('refresh', *params) == 0 assert self.call_nominatim('refresh', *params) == 0
@@ -115,7 +115,7 @@ class TestRefresh:
@pytest.mark.parametrize('func', ('--data-object', '--data-area')) @pytest.mark.parametrize('func', ('--data-object', '--data-area'))
@pytest.mark.parametrize('param', ('234', 'a55', 'R 453', 'Rel')) @pytest.mark.parametrize('param', ('234', 'a55', 'R 453', 'Rel'))
def test_refresh_objects_bad_param(self, func, param, mock_func_factory): def test_refresh_objects_bad_param(self, func, param, mock_func_factory):
func_mock = mock_func_factory(nominatim.tools.refresh, 'invalidate_osm_object') func_mock = mock_func_factory(nominatim_db.tools.refresh, 'invalidate_osm_object')
self.call_nominatim('refresh', func, param) == 1 self.call_nominatim('refresh', func, param) == 1
assert func_mock.called == 0 assert func_mock.called == 0

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2023 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for replication command of command-line interface wrapper. Tests for replication command of command-line interface wrapper.
@@ -12,11 +12,11 @@ import time
import pytest import pytest
import nominatim.cli import nominatim_db.cli
import nominatim.indexer.indexer import nominatim_db.indexer.indexer
import nominatim.tools.replication import nominatim_db.tools.replication
import nominatim.tools.refresh import nominatim_db.tools.refresh
from nominatim.db import status from nominatim_core.db import status
@pytest.fixture @pytest.fixture
def tokenizer_mock(monkeypatch): def tokenizer_mock(monkeypatch):
@@ -32,9 +32,9 @@ def tokenizer_mock(monkeypatch):
self.finalize_import_called = True self.finalize_import_called = True
tok = DummyTokenizer() tok = DummyTokenizer()
monkeypatch.setattr(nominatim.tokenizer.factory, 'get_tokenizer_for_db', monkeypatch.setattr(nominatim_db.tokenizer.factory, 'get_tokenizer_for_db',
lambda *args: tok) lambda *args: tok)
monkeypatch.setattr(nominatim.tokenizer.factory, 'create_tokenizer', monkeypatch.setattr(nominatim_db.tokenizer.factory, 'create_tokenizer',
lambda *args: tok) lambda *args: tok)
return tok return tok
@@ -48,12 +48,12 @@ def init_status(temp_db_conn, status_table):
@pytest.fixture @pytest.fixture
def index_mock(mock_func_factory, tokenizer_mock, init_status): def index_mock(mock_func_factory, tokenizer_mock, init_status):
return mock_func_factory(nominatim.indexer.indexer.Indexer, 'index_full') return mock_func_factory(nominatim_db.indexer.indexer.Indexer, 'index_full')
@pytest.fixture @pytest.fixture
def update_mock(mock_func_factory, init_status, tokenizer_mock): def update_mock(mock_func_factory, init_status, tokenizer_mock):
return mock_func_factory(nominatim.tools.replication, 'update') return mock_func_factory(nominatim_db.tools.replication, 'update')
class TestCliReplication: class TestCliReplication:
@@ -66,7 +66,7 @@ class TestCliReplication:
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def setup_update_function(self, monkeypatch): def setup_update_function(self, monkeypatch):
def _mock_updates(states): def _mock_updates(states):
monkeypatch.setattr(nominatim.tools.replication, 'update', monkeypatch.setattr(nominatim_db.tools.replication, 'update',
lambda *args, **kwargs: states.pop()) lambda *args, **kwargs: states.pop())
self.update_states = _mock_updates self.update_states = _mock_updates
@@ -78,10 +78,10 @@ class TestCliReplication:
(('--check-for-updates',), 'check_for_updates') (('--check-for-updates',), 'check_for_updates')
]) ])
def test_replication_command(self, mock_func_factory, params, func): def test_replication_command(self, mock_func_factory, params, func):
func_mock = mock_func_factory(nominatim.tools.replication, func) func_mock = mock_func_factory(nominatim_db.tools.replication, func)
if params == ('--init',): if params == ('--init',):
umock = mock_func_factory(nominatim.tools.refresh, 'create_functions') umock = mock_func_factory(nominatim_db.tools.refresh, 'create_functions')
assert self.call_nominatim(*params) == 0 assert self.call_nominatim(*params) == 0
assert func_mock.called == 1 assert func_mock.called == 1
@@ -121,7 +121,7 @@ class TestCliReplication:
@pytest.mark.parametrize("update_interval", [60, 3600]) @pytest.mark.parametrize("update_interval", [60, 3600])
def test_replication_catchup(self, placex_table, monkeypatch, index_mock, update_interval): def test_replication_catchup(self, placex_table, monkeypatch, index_mock, update_interval):
monkeypatch.setenv('NOMINATIM_REPLICATION_UPDATE_INTERVAL', str(update_interval)) monkeypatch.setenv('NOMINATIM_REPLICATION_UPDATE_INTERVAL', str(update_interval))
self.update_states([nominatim.tools.replication.UpdateState.NO_CHANGES]) self.update_states([nominatim_db.tools.replication.UpdateState.NO_CHANGES])
assert self.call_nominatim('--catch-up') == 0 assert self.call_nominatim('--catch-up') == 0
@@ -133,8 +133,8 @@ class TestCliReplication:
def test_replication_update_continuous(self, index_mock): def test_replication_update_continuous(self, index_mock):
self.update_states([nominatim.tools.replication.UpdateState.UP_TO_DATE, self.update_states([nominatim_db.tools.replication.UpdateState.UP_TO_DATE,
nominatim.tools.replication.UpdateState.UP_TO_DATE]) nominatim_db.tools.replication.UpdateState.UP_TO_DATE])
with pytest.raises(IndexError): with pytest.raises(IndexError):
self.call_nominatim() self.call_nominatim()
@@ -144,8 +144,8 @@ class TestCliReplication:
def test_replication_update_continuous_no_change(self, mock_func_factory, def test_replication_update_continuous_no_change(self, mock_func_factory,
index_mock): index_mock):
self.update_states([nominatim.tools.replication.UpdateState.NO_CHANGES, self.update_states([nominatim_db.tools.replication.UpdateState.NO_CHANGES,
nominatim.tools.replication.UpdateState.UP_TO_DATE]) nominatim_db.tools.replication.UpdateState.UP_TO_DATE])
sleep_mock = mock_func_factory(time, 'sleep') sleep_mock = mock_func_factory(time, 'sleep')

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Test for loading dotenv configuration. Test for loading dotenv configuration.
@@ -10,8 +10,8 @@ Test for loading dotenv configuration.
from pathlib import Path from pathlib import Path
import pytest import pytest
from nominatim.config import Configuration, flatten_config_list from nominatim_core.config import Configuration, flatten_config_list
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
@pytest.fixture @pytest.fixture
def make_config(): def make_config():

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Test for loading extra Python modules. Test for loading extra Python modules.
@@ -12,7 +12,7 @@ import sys
import pytest import pytest
from nominatim.config import Configuration from nominatim_core.config import Configuration
@pytest.fixture @pytest.fixture
def test_config(src_dir, tmp_path): def test_config(src_dir, tmp_path):
@@ -27,12 +27,12 @@ def test_config(src_dir, tmp_path):
def test_load_default_module(test_config): def test_load_default_module(test_config):
module = test_config.load_plugin_module('version', 'nominatim') module = test_config.load_plugin_module('version', 'nominatim_db')
assert isinstance(module.NOMINATIM_VERSION, tuple) assert isinstance(module.NOMINATIM_VERSION, tuple)
def test_load_default_module_with_hyphen(test_config): def test_load_default_module_with_hyphen(test_config):
module = test_config.load_plugin_module('place-info', 'nominatim.data') module = test_config.load_plugin_module('place-info', 'nominatim_db.data')
assert isinstance(module.PlaceInfo, object) assert isinstance(module.PlaceInfo, object)

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
import itertools import itertools
import sys import sys
@@ -13,12 +13,12 @@ import pytest
# always test against the source # always test against the source
SRC_DIR = (Path(__file__) / '..' / '..' / '..').resolve() SRC_DIR = (Path(__file__) / '..' / '..' / '..').resolve()
sys.path.insert(0, str(SRC_DIR)) sys.path.insert(0, str(SRC_DIR / 'src'))
from nominatim.config import Configuration from nominatim_core.config import Configuration
from nominatim.db import connection from nominatim_core.db import connection
from nominatim.db.sql_preprocessor import SQLPreprocessor from nominatim_core.db.sql_preprocessor import SQLPreprocessor
import nominatim.tokenizer.factory import nominatim_db.tokenizer.factory
import dummy_tokenizer import dummy_tokenizer
import mocks import mocks
@@ -229,7 +229,8 @@ def tokenizer_mock(monkeypatch, property_table):
def _import_dummy(*args, **kwargs): def _import_dummy(*args, **kwargs):
return dummy_tokenizer return dummy_tokenizer
monkeypatch.setattr(nominatim.tokenizer.factory, "_import_tokenizer", _import_dummy) monkeypatch.setattr(nominatim_db.tokenizer.factory,
"_import_tokenizer", _import_dummy)
property_table.set('tokenizer', 'dummy') property_table.set('tokenizer', 'dummy')
def _create_tokenizer(): def _create_tokenizer():

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Specialised psycopg2 cursor with shortcut functions useful for testing. Specialised psycopg2 cursor with shortcut functions useful for testing.

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for function that handle country properties. Tests for function that handle country properties.
@@ -10,7 +10,7 @@ Tests for function that handle country properties.
from textwrap import dedent from textwrap import dedent
import pytest import pytest
from nominatim.data import country_info from nominatim_db.data import country_info
@pytest.fixture @pytest.fixture
def loaded_country(def_config): def loaded_country(def_config):

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for function providing a non-blocking query interface towards PostgreSQL. Tests for function providing a non-blocking query interface towards PostgreSQL.
@@ -13,7 +13,7 @@ import concurrent.futures
import pytest import pytest
import psycopg2 import psycopg2
from nominatim.db.async_connection import DBConnection, DeadlockHandler from nominatim_core.db.async_connection import DBConnection, DeadlockHandler
@pytest.fixture @pytest.fixture

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for specialised connection and cursor classes. Tests for specialised connection and cursor classes.
@@ -10,7 +10,7 @@ Tests for specialised connection and cursor classes.
import pytest import pytest
import psycopg2 import psycopg2
from nominatim.db.connection import connect, get_pg_env from nominatim_core.db.connection import connect, get_pg_env
@pytest.fixture @pytest.fixture
def db(dsn): def db(dsn):

View File

@@ -1,15 +1,15 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for property table manpulation. Tests for property table manpulation.
""" """
import pytest import pytest
from nominatim.db import properties from nominatim_core.db import properties
@pytest.fixture @pytest.fixture
def property_factory(property_table, temp_db_cursor): def property_factory(property_table, temp_db_cursor):

View File

@@ -1,15 +1,15 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for SQL preprocessing. Tests for SQL preprocessing.
""" """
import pytest import pytest
from nominatim.db.sql_preprocessor import SQLPreprocessor from nominatim_core.db.sql_preprocessor import SQLPreprocessor
@pytest.fixture @pytest.fixture
def sql_factory(tmp_path): def sql_factory(tmp_path):

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for status table manipulation. Tests for status table manipulation.
@@ -11,8 +11,8 @@ import datetime as dt
import pytest import pytest
import nominatim.db.status import nominatim_core.db.status
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
OSM_NODE_DATA = """\ OSM_NODE_DATA = """\
<osm version="0.6" generator="OpenStreetMap server" copyright="OpenStreetMap and contributors" attribution="http://www.openstreetmap.org/copyright" license="http://opendatacommons.org/licenses/odbl/1-0/"> <osm version="0.6" generator="OpenStreetMap server" copyright="OpenStreetMap and contributors" attribution="http://www.openstreetmap.org/copyright" license="http://opendatacommons.org/licenses/odbl/1-0/">
@@ -22,7 +22,7 @@ OSM_NODE_DATA = """\
""" """
def iso_date(date): def iso_date(date):
return dt.datetime.strptime(date, nominatim.db.status.ISODATE_FORMAT)\ return dt.datetime.strptime(date, nominatim_core.db.status.ISODATE_FORMAT)\
.replace(tzinfo=dt.timezone.utc) .replace(tzinfo=dt.timezone.utc)
@@ -36,7 +36,7 @@ def test_compute_database_date_from_osm2pgsql(table_factory, temp_db_conn, offli
table_factory('osm2pgsql_properties', 'property TEXT, value TEXT', table_factory('osm2pgsql_properties', 'property TEXT, value TEXT',
content=(('current_timestamp', '2024-01-03T23:45:54Z'), )) content=(('current_timestamp', '2024-01-03T23:45:54Z'), ))
date = nominatim.db.status.compute_database_date(temp_db_conn, offline=offline) date = nominatim_core.db.status.compute_database_date(temp_db_conn, offline=offline)
assert date == iso_date('2024-01-03T23:45:54') assert date == iso_date('2024-01-03T23:45:54')
@@ -44,12 +44,12 @@ def test_compute_database_date_from_osm2pgsql_nodata(table_factory, temp_db_conn
table_factory('osm2pgsql_properties', 'property TEXT, value TEXT') table_factory('osm2pgsql_properties', 'property TEXT, value TEXT')
with pytest.raises(UsageError, match='Cannot determine database date from data in offline mode'): with pytest.raises(UsageError, match='Cannot determine database date from data in offline mode'):
nominatim.db.status.compute_database_date(temp_db_conn, offline=True) nominatim_core.db.status.compute_database_date(temp_db_conn, offline=True)
def test_compute_database_date_place_empty(place_table, temp_db_conn): def test_compute_database_date_place_empty(place_table, temp_db_conn):
with pytest.raises(UsageError): with pytest.raises(UsageError):
nominatim.db.status.compute_database_date(temp_db_conn) nominatim_core.db.status.compute_database_date(temp_db_conn)
def test_compute_database_date_valid(monkeypatch, place_row, temp_db_conn): def test_compute_database_date_valid(monkeypatch, place_row, temp_db_conn):
@@ -60,9 +60,9 @@ def test_compute_database_date_valid(monkeypatch, place_row, temp_db_conn):
requested_url.append(url) requested_url.append(url)
return OSM_NODE_DATA return OSM_NODE_DATA
monkeypatch.setattr(nominatim.db.status, "get_url", mock_url) monkeypatch.setattr(nominatim_core.db.status, "get_url", mock_url)
date = nominatim.db.status.compute_database_date(temp_db_conn) date = nominatim_core.db.status.compute_database_date(temp_db_conn)
assert requested_url == ['https://www.openstreetmap.org/api/0.6/node/45673/1'] assert requested_url == ['https://www.openstreetmap.org/api/0.6/node/45673/1']
assert date == iso_date('2006-01-27T22:09:10') assert date == iso_date('2006-01-27T22:09:10')
@@ -76,15 +76,15 @@ def test_compute_database_broken_api(monkeypatch, place_row, temp_db_conn):
requested_url.append(url) requested_url.append(url)
return '<osm version="0.6" generator="OpenStre' return '<osm version="0.6" generator="OpenStre'
monkeypatch.setattr(nominatim.db.status, "get_url", mock_url) monkeypatch.setattr(nominatim_core.db.status, "get_url", mock_url)
with pytest.raises(UsageError): with pytest.raises(UsageError):
nominatim.db.status.compute_database_date(temp_db_conn) nominatim_core.db.status.compute_database_date(temp_db_conn)
def test_set_status_empty_table(temp_db_conn, temp_db_cursor): def test_set_status_empty_table(temp_db_conn, temp_db_cursor):
date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc) date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc)
nominatim.db.status.set_status(temp_db_conn, date=date) nominatim_core.db.status.set_status(temp_db_conn, date=date)
assert temp_db_cursor.row_set("SELECT * FROM import_status") == \ assert temp_db_cursor.row_set("SELECT * FROM import_status") == \
{(date, None, True)} {(date, None, True)}
@@ -92,12 +92,12 @@ def test_set_status_empty_table(temp_db_conn, temp_db_cursor):
def test_set_status_filled_table(temp_db_conn, temp_db_cursor): def test_set_status_filled_table(temp_db_conn, temp_db_cursor):
date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc) date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc)
nominatim.db.status.set_status(temp_db_conn, date=date) nominatim_core.db.status.set_status(temp_db_conn, date=date)
assert temp_db_cursor.table_rows('import_status') == 1 assert temp_db_cursor.table_rows('import_status') == 1
date = dt.datetime.fromordinal(1000100).replace(tzinfo=dt.timezone.utc) date = dt.datetime.fromordinal(1000100).replace(tzinfo=dt.timezone.utc)
nominatim.db.status.set_status(temp_db_conn, date=date, seq=456, indexed=False) nominatim_core.db.status.set_status(temp_db_conn, date=date, seq=456, indexed=False)
assert temp_db_cursor.row_set("SELECT * FROM import_status") == \ assert temp_db_cursor.row_set("SELECT * FROM import_status") == \
{(date, 456, False)} {(date, 456, False)}
@@ -105,25 +105,25 @@ def test_set_status_filled_table(temp_db_conn, temp_db_cursor):
def test_set_status_missing_date(temp_db_conn, temp_db_cursor): def test_set_status_missing_date(temp_db_conn, temp_db_cursor):
date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc) date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc)
nominatim.db.status.set_status(temp_db_conn, date=date) nominatim_core.db.status.set_status(temp_db_conn, date=date)
assert temp_db_cursor.table_rows('import_status') == 1 assert temp_db_cursor.table_rows('import_status') == 1
nominatim.db.status.set_status(temp_db_conn, date=None, seq=456, indexed=False) nominatim_core.db.status.set_status(temp_db_conn, date=None, seq=456, indexed=False)
assert temp_db_cursor.row_set("SELECT * FROM import_status") == \ assert temp_db_cursor.row_set("SELECT * FROM import_status") == \
{(date, 456, False)} {(date, 456, False)}
def test_get_status_empty_table(temp_db_conn): def test_get_status_empty_table(temp_db_conn):
assert nominatim.db.status.get_status(temp_db_conn) == (None, None, None) assert nominatim_core.db.status.get_status(temp_db_conn) == (None, None, None)
def test_get_status_success(temp_db_conn): def test_get_status_success(temp_db_conn):
date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc) date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc)
nominatim.db.status.set_status(temp_db_conn, date=date, seq=667, indexed=False) nominatim_core.db.status.set_status(temp_db_conn, date=date, seq=667, indexed=False)
assert nominatim.db.status.get_status(temp_db_conn) == \ assert nominatim_core.db.status.get_status(temp_db_conn) == \
(date, 667, False) (date, 667, False)
@@ -131,14 +131,14 @@ def test_get_status_success(temp_db_conn):
@pytest.mark.parametrize("new_state", [True, False]) @pytest.mark.parametrize("new_state", [True, False])
def test_set_indexed(temp_db_conn, temp_db_cursor, old_state, new_state): def test_set_indexed(temp_db_conn, temp_db_cursor, old_state, new_state):
date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc) date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc)
nominatim.db.status.set_status(temp_db_conn, date=date, indexed=old_state) nominatim_core.db.status.set_status(temp_db_conn, date=date, indexed=old_state)
nominatim.db.status.set_indexed(temp_db_conn, new_state) nominatim_core.db.status.set_indexed(temp_db_conn, new_state)
assert temp_db_cursor.scalar("SELECT indexed FROM import_status") == new_state assert temp_db_cursor.scalar("SELECT indexed FROM import_status") == new_state
def test_set_indexed_empty_status(temp_db_conn, temp_db_cursor): def test_set_indexed_empty_status(temp_db_conn, temp_db_cursor):
nominatim.db.status.set_indexed(temp_db_conn, True) nominatim_core.db.status.set_indexed(temp_db_conn, True)
assert temp_db_cursor.table_rows("import_status") == 0 assert temp_db_cursor.table_rows("import_status") == 0
@@ -147,8 +147,8 @@ def test_log_status(temp_db_conn, temp_db_cursor):
date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc) date = dt.datetime.fromordinal(1000000).replace(tzinfo=dt.timezone.utc)
start = dt.datetime.now() - dt.timedelta(hours=1) start = dt.datetime.now() - dt.timedelta(hours=1)
nominatim.db.status.set_status(temp_db_conn, date=date, seq=56) nominatim_core.db.status.set_status(temp_db_conn, date=date, seq=56)
nominatim.db.status.log_status(temp_db_conn, start, 'index') nominatim_core.db.status.log_status(temp_db_conn, start, 'index')
temp_db_conn.commit() temp_db_conn.commit()

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for DB utility functions in db.utils Tests for DB utility functions in db.utils
@@ -11,8 +11,8 @@ import json
import pytest import pytest
import nominatim.db.utils as db_utils import nominatim_core.db.utils as db_utils
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
def test_execute_file_success(dsn, temp_db_cursor, tmp_path): def test_execute_file_success(dsn, temp_db_cursor, tmp_path):
tmpfile = tmp_path / 'test.sql' tmpfile = tmp_path / 'test.sql'

View File

@@ -1,14 +1,14 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tokenizer for testing. Tokenizer for testing.
""" """
from nominatim.data.place_info import PlaceInfo from nominatim_db.data.place_info import PlaceInfo
from nominatim.config import Configuration from nominatim_core.config import Configuration
def create(dsn, data_dir): def create(dsn, data_dir):
""" Create a new instance of the tokenizer provided by this module. """ Create a new instance of the tokenizer provided by this module.

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for running the indexing. Tests for running the indexing.
@@ -10,8 +10,8 @@ Tests for running the indexing.
import itertools import itertools
import pytest import pytest
from nominatim.indexer import indexer from nominatim_db.indexer import indexer
from nominatim.tokenizer import factory from nominatim_db.tokenizer import factory
class IndexerTestDB: class IndexerTestDB:

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Legacy word table for testing with functions to prefil and test contents Legacy word table for testing with functions to prefil and test contents

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Legacy word table for testing with functions to prefil and test contents Legacy word table for testing with functions to prefil and test contents

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Custom mocks for testing. Custom mocks for testing.
@@ -11,7 +11,7 @@ import itertools
import psycopg2.extras import psycopg2.extras
from nominatim.db import properties from nominatim_core.db import properties
# This must always point to the mock word table for the default tokenizer. # This must always point to the mock word table for the default tokenizer.
from mock_icu_word_table import MockIcuWordTable as MockWordTable from mock_icu_word_table import MockIcuWordTable as MockWordTable

View File

@@ -1,16 +1,16 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the sanitizer that normalizes housenumbers. Tests for the sanitizer that normalizes housenumbers.
""" """
import pytest import pytest
from nominatim.tokenizer.place_sanitizer import PlaceSanitizer from nominatim_db.tokenizer.place_sanitizer import PlaceSanitizer
from nominatim.data.place_info import PlaceInfo from nominatim_db.data.place_info import PlaceInfo
@pytest.fixture @pytest.fixture
def sanitize(request, def_config): def sanitize(request, def_config):

View File

@@ -1,17 +1,17 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the sanitizer that normalizes postcodes. Tests for the sanitizer that normalizes postcodes.
""" """
import pytest import pytest
from nominatim.tokenizer.place_sanitizer import PlaceSanitizer from nominatim_db.tokenizer.place_sanitizer import PlaceSanitizer
from nominatim.data.place_info import PlaceInfo from nominatim_db.data.place_info import PlaceInfo
from nominatim.data import country_info from nominatim_db.data import country_info
@pytest.fixture @pytest.fixture
def sanitize(def_config, request): def sanitize(def_config, request):

View File

@@ -1,16 +1,16 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for sanitizer that clean up TIGER tags. Tests for sanitizer that clean up TIGER tags.
""" """
import pytest import pytest
from nominatim.tokenizer.place_sanitizer import PlaceSanitizer from nominatim_db.tokenizer.place_sanitizer import PlaceSanitizer
from nominatim.data.place_info import PlaceInfo from nominatim_db.data.place_info import PlaceInfo
class TestCleanTigerTags: class TestCleanTigerTags:

View File

@@ -1,17 +1,16 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the sanitizer that normalizes housenumbers. Tests for the sanitizer that normalizes housenumbers.
""" """
import pytest import pytest
from nominatim_db.data.place_info import PlaceInfo
from nominatim.data.place_info import PlaceInfo from nominatim_db.tokenizer.place_sanitizer import PlaceSanitizer
from nominatim.tokenizer.place_sanitizer import PlaceSanitizer
class TestWithDefault: class TestWithDefault:
@@ -324,4 +323,4 @@ class TestAllParameters:
name='foo', ref='foo', name_pqr='bar', ref_pqr='baz') name='foo', ref='foo', name_pqr='bar', ref_pqr='baz')
assert res == [('bar', 'name', 'pqr'), ('baz', 'ref', 'pqr'), assert res == [('bar', 'name', 'pqr'), ('baz', 'ref', 'pqr'),
('foo', 'name', ''), ('foo', 'ref', '')] ('foo', 'name', ''), ('foo', 'ref', '')]

View File

@@ -1,16 +1,16 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for sanitizer configuration helper functions. Tests for sanitizer configuration helper functions.
""" """
import pytest import pytest
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
from nominatim.tokenizer.sanitizers.config import SanitizerConfig from nominatim_db.tokenizer.sanitizers.config import SanitizerConfig
def test_string_list_default_empty(): def test_string_list_default_empty():
assert SanitizerConfig().get_string_list('op') == [] assert SanitizerConfig().get_string_list('op') == []

View File

@@ -1,18 +1,18 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the sanitizer that splits multivalue lists. Tests for the sanitizer that splits multivalue lists.
""" """
import pytest import pytest
from nominatim.tokenizer.place_sanitizer import PlaceSanitizer from nominatim_db.tokenizer.place_sanitizer import PlaceSanitizer
from nominatim.data.place_info import PlaceInfo from nominatim_db.data.place_info import PlaceInfo
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
class TestSplitName: class TestSplitName:

View File

@@ -1,16 +1,16 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the sanitizer that handles braced suffixes. Tests for the sanitizer that handles braced suffixes.
""" """
import pytest import pytest
from nominatim.tokenizer.place_sanitizer import PlaceSanitizer from nominatim_db.tokenizer.place_sanitizer import PlaceSanitizer
from nominatim.data.place_info import PlaceInfo from nominatim_db.data.place_info import PlaceInfo
class TestStripBrace: class TestStripBrace:

View File

@@ -1,17 +1,17 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the sanitizer that enables language-dependent analyzers. Tests for the sanitizer that enables language-dependent analyzers.
""" """
import pytest import pytest
from nominatim.data.place_info import PlaceInfo from nominatim_db.data.place_info import PlaceInfo
from nominatim.tokenizer.place_sanitizer import PlaceSanitizer from nominatim_db.tokenizer.place_sanitizer import PlaceSanitizer
from nominatim.data.country_info import setup_country_config from nominatim_db.data.country_info import setup_country_config
class TestWithDefaults: class TestWithDefaults:

View File

@@ -1,9 +1,16 @@
from nominatim.data.place_info import PlaceInfo # SPDX-License-Identifier: GPL-3.0-or-later
from nominatim.data.place_name import PlaceName #
from nominatim.tokenizer.place_sanitizer import PlaceSanitizer # 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.
from typing import Mapping, Optional, List from typing import Mapping, Optional, List
import pytest import pytest
from nominatim_db.data.place_info import PlaceInfo
from nominatim_db.data.place_name import PlaceName
from nominatim_db.tokenizer.place_sanitizer import PlaceSanitizer
class TestTagJapanese: class TestTagJapanese:
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def setup_country(self, def_config): def setup_country(self, def_config):

View File

@@ -1,17 +1,17 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for creating new tokenizers. Tests for creating new tokenizers.
""" """
import pytest import pytest
from nominatim.db import properties from nominatim_core.db import properties
from nominatim.tokenizer import factory from nominatim_db.tokenizer import factory
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
from dummy_tokenizer import DummyTokenizer from dummy_tokenizer import DummyTokenizer

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for ICU tokenizer. Tests for ICU tokenizer.
@@ -12,11 +12,11 @@ import itertools
import pytest import pytest
from nominatim.tokenizer import icu_tokenizer from nominatim_db.tokenizer import icu_tokenizer
import nominatim.tokenizer.icu_rule_loader import nominatim_db.tokenizer.icu_rule_loader
from nominatim.db import properties from nominatim_core.db import properties
from nominatim.db.sql_preprocessor import SQLPreprocessor from nominatim_core.db.sql_preprocessor import SQLPreprocessor
from nominatim.data.place_info import PlaceInfo from nominatim_db.data.place_info import PlaceInfo
from mock_icu_word_table import MockIcuWordTable from mock_icu_word_table import MockIcuWordTable
@@ -83,7 +83,7 @@ def analyzer(tokenizer_factory, test_config, monkeypatch,
cfgstr['token-analysis'].append({'id': '@postcode', cfgstr['token-analysis'].append({'id': '@postcode',
'analyzer': 'postcodes'}) 'analyzer': 'postcodes'})
(test_config.project_dir / 'icu_tokenizer.yaml').write_text(yaml.dump(cfgstr)) (test_config.project_dir / 'icu_tokenizer.yaml').write_text(yaml.dump(cfgstr))
tok.loader = nominatim.tokenizer.icu_rule_loader.ICURuleLoader(test_config) tok.loader = nominatim_db.tokenizer.icu_rule_loader.ICURuleLoader(test_config)
return tok.name_analyzer() return tok.name_analyzer()
@@ -157,7 +157,7 @@ def test_init_new(tokenizer_factory, test_config, db_prop):
tok = tokenizer_factory() tok = tokenizer_factory()
tok.init_new_db(test_config) tok.init_new_db(test_config)
assert db_prop(nominatim.tokenizer.icu_rule_loader.DBCFG_IMPORT_NORM_RULES) \ assert db_prop(nominatim_db.tokenizer.icu_rule_loader.DBCFG_IMPORT_NORM_RULES) \
.startswith(':: lower ();') .startswith(':: lower ();')

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for converting a config file to ICU rules. Tests for converting a config file to ICU rules.
@@ -12,8 +12,8 @@ from textwrap import dedent
import pytest import pytest
import yaml import yaml
from nominatim.tokenizer.icu_rule_loader import ICURuleLoader from nominatim_db.tokenizer.icu_rule_loader import ICURuleLoader
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
from icu import Transliterator from icu import Transliterator

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Test for legacy tokenizer. Test for legacy tokenizer.
@@ -12,10 +12,10 @@ import re
import pytest import pytest
from nominatim.data.place_info import PlaceInfo from nominatim_db.data.place_info import PlaceInfo
from nominatim.tokenizer import legacy_tokenizer from nominatim_db.tokenizer import legacy_tokenizer
from nominatim.db import properties from nominatim_core.db import properties
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
from mock_legacy_word_table import MockLegacyWordTable from mock_legacy_word_table import MockLegacyWordTable

View File

@@ -1,17 +1,17 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for execution of the sanitztion step. Tests for execution of the sanitztion step.
""" """
import pytest import pytest
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
import nominatim.tokenizer.place_sanitizer as sanitizer import nominatim_db.tokenizer.place_sanitizer as sanitizer
from nominatim.data.place_info import PlaceInfo from nominatim_db.data.place_info import PlaceInfo
def test_placeinfo_clone_new_name(): def test_placeinfo_clone_new_name():

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for special postcode analysis and variant generation. Tests for special postcode analysis and variant generation.
@@ -11,9 +11,9 @@ import pytest
from icu import Transliterator from icu import Transliterator
import nominatim.tokenizer.token_analysis.postcodes as module import nominatim_db.tokenizer.token_analysis.postcodes as module
from nominatim.data.place_name import PlaceName from nominatim_db.data.place_name import PlaceName
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
DEFAULT_NORMALIZATION = """ :: NFD (); DEFAULT_NORMALIZATION = """ :: NFD ();
'🜳' > ' '; '🜳' > ' ';

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for import name normalisation and variant generation. Tests for import name normalisation and variant generation.
@@ -11,8 +11,8 @@ import pytest
from icu import Transliterator from icu import Transliterator
import nominatim.tokenizer.token_analysis.generic as module import nominatim_db.tokenizer.token_analysis.generic as module
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
DEFAULT_NORMALIZATION = """ :: NFD (); DEFAULT_NORMALIZATION = """ :: NFD ();
'🜳' > ' '; '🜳' > ' ';

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for generic token analysis, mutation part. Tests for generic token analysis, mutation part.
@@ -11,8 +11,8 @@ import pytest
from icu import Transliterator from icu import Transliterator
import nominatim.tokenizer.token_analysis.generic as module import nominatim_db.tokenizer.token_analysis.generic as module
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
DEFAULT_NORMALIZATION = """ '🜳' > ' '; DEFAULT_NORMALIZATION = """ '🜳' > ' ';
[[:Nonspacing Mark:] [:Cf:]] >; [[:Nonspacing Mark:] [:Cf:]] >;

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
import pytest import pytest

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for functions to add additional data to the database. Tests for functions to add additional data to the database.
@@ -11,7 +11,7 @@ from pathlib import Path
import pytest import pytest
from nominatim.tools import add_osm_data from nominatim_db.tools import add_osm_data
class CaptureGetUrl: class CaptureGetUrl:

View File

@@ -1,18 +1,18 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for maintenance and analysis functions. Tests for maintenance and analysis functions.
""" """
import pytest import pytest
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
from nominatim.tools import admin from nominatim_db.tools import admin
from nominatim.tokenizer import factory from nominatim_db.tokenizer import factory
from nominatim.db.sql_preprocessor import SQLPreprocessor from nominatim_core.db.sql_preprocessor import SQLPreprocessor
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)
def create_placex_table(project_env, tokenizer_mock, temp_db_cursor, placex_table): def create_placex_table(project_env, tokenizer_mock, temp_db_cursor, placex_table):

View File

@@ -1,16 +1,16 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for database integrity checks. Tests for database integrity checks.
""" """
import pytest import pytest
from nominatim.tools import check_database as chkdb from nominatim_db.tools import check_database as chkdb
import nominatim.version import nominatim_db.version
def test_check_database_unknown_db(def_config, monkeypatch): def test_check_database_unknown_db(def_config, monkeypatch):
monkeypatch.setenv('NOMINATIM_DATABASE_DSN', 'pgsql:dbname=fjgkhughwgh2423gsags') monkeypatch.setenv('NOMINATIM_DATABASE_DSN', 'pgsql:dbname=fjgkhughwgh2423gsags')
@@ -32,7 +32,7 @@ def test_check_connection_bad(def_config):
def test_check_database_version_good(property_table, temp_db_conn, def_config): def test_check_database_version_good(property_table, temp_db_conn, def_config):
property_table.set('database_version', property_table.set('database_version',
'{0[0]}.{0[1]}.{0[2]}-{0[3]}'.format(nominatim.version.NOMINATIM_VERSION)) str(nominatim_db.version.NOMINATIM_VERSION))
assert chkdb.check_database_version(temp_db_conn, def_config) == chkdb.CheckState.OK assert chkdb.check_database_version(temp_db_conn, def_config) == chkdb.CheckState.OK
def test_check_database_version_bad(property_table, temp_db_conn, def_config): def test_check_database_version_bad(property_table, temp_db_conn, def_config):

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for functions to import a new database. Tests for functions to import a new database.
@@ -13,8 +13,8 @@ from contextlib import closing
import pytest import pytest
import psycopg2 import psycopg2
from nominatim.tools import database_import from nominatim_db.tools import database_import
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
class TestDatabaseSetup: class TestDatabaseSetup:
DBNAME = 'test_nominatim_python_unittest' DBNAME = 'test_nominatim_python_unittest'

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for tools.exec_utils module. Tests for tools.exec_utils module.
@@ -12,12 +12,8 @@ import subprocess
import pytest import pytest
from nominatim.config import Configuration from nominatim_core.config import Configuration
import nominatim.tools.exec_utils as exec_utils import nominatim_db.tools.exec_utils as exec_utils
import nominatim.paths
### run_osm2pgsql
def test_run_osm2pgsql(osm2pgsql_options): def test_run_osm2pgsql(osm2pgsql_options):
osm2pgsql_options['append'] = False osm2pgsql_options['append'] = False

View File

@@ -1,13 +1,13 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for freeze functions (removing unused database parts). Tests for freeze functions (removing unused database parts).
""" """
from nominatim.tools import freeze from nominatim_db.tools import freeze
NOMINATIM_RUNTIME_TABLES = [ NOMINATIM_RUNTIME_TABLES = [
'country_name', 'country_osm_grid', 'country_name', 'country_osm_grid',

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for import special phrases methods Tests for import special phrases methods
@@ -10,10 +10,10 @@
""" """
from shutil import copyfile from shutil import copyfile
import pytest import pytest
from nominatim.tools.special_phrases.sp_importer import SPImporter from nominatim_db.tools.special_phrases.sp_importer import SPImporter
from nominatim.tools.special_phrases.sp_wiki_loader import SPWikiLoader from nominatim_db.tools.special_phrases.sp_wiki_loader import SPWikiLoader
from nominatim.tools.special_phrases.special_phrase import SpecialPhrase from nominatim_db.tools.special_phrases.special_phrase import SpecialPhrase
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
from cursor import CursorForTesting from cursor import CursorForTesting
@@ -182,7 +182,7 @@ def test_import_phrases(monkeypatch, temp_db_conn, def_config, sp_importer,
table_factory('place_classtype_amenity_animal_shelter') table_factory('place_classtype_amenity_animal_shelter')
table_factory('place_classtype_wrongclass_wrongtype') table_factory('place_classtype_wrongclass_wrongtype')
monkeypatch.setattr('nominatim.tools.special_phrases.sp_wiki_loader._get_wiki_content', monkeypatch.setattr('nominatim_db.tools.special_phrases.sp_wiki_loader._get_wiki_content',
lambda lang: xml_wiki_content) lambda lang: xml_wiki_content)
tokenizer = tokenizer_mock() tokenizer = tokenizer_mock()

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for migration functions Tests for migration functions
@@ -10,9 +10,9 @@ Tests for migration functions
import pytest import pytest
import psycopg2.extras import psycopg2.extras
from nominatim.tools import migration from nominatim_db.tools import migration
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
import nominatim.version import nominatim_db.version
from mock_legacy_word_table import MockLegacyWordTable from mock_legacy_word_table import MockLegacyWordTable
@@ -66,17 +66,17 @@ def test_set_up_migration_for_36(temp_db_with_extensions, temp_db_cursor,
def test_already_at_version(def_config, property_table): def test_already_at_version(def_config, property_table):
property_table.set('database_version', property_table.set('database_version',
'{0[0]}.{0[1]}.{0[2]}-{0[3]}'.format(nominatim.version.NOMINATIM_VERSION)) str(nominatim_db.version.NOMINATIM_VERSION))
assert migration.migrate(def_config, {}) == 0 assert migration.migrate(def_config, {}) == 0
def test_run_single_migration(def_config, temp_db_cursor, property_table, def test_run_single_migration(def_config, temp_db_cursor, property_table,
monkeypatch, postprocess_mock): monkeypatch, postprocess_mock):
oldversion = [x for x in nominatim.version.NOMINATIM_VERSION] oldversion = [x for x in nominatim_db.version.NOMINATIM_VERSION]
oldversion[0] -= 1 oldversion[0] -= 1
property_table.set('database_version', property_table.set('database_version',
'{0[0]}.{0[1]}.{0[2]}-{0[3]}'.format(oldversion)) str(nominatim_db.version.NominatimVersion(*oldversion)))
done = {'old': False, 'new': False} done = {'old': False, 'new': False}
def _migration(**_): def _migration(**_):
@@ -90,14 +90,13 @@ def test_run_single_migration(def_config, temp_db_cursor, property_table,
oldversion[0] = 0 oldversion[0] = 0
monkeypatch.setattr(migration, '_MIGRATION_FUNCTIONS', monkeypatch.setattr(migration, '_MIGRATION_FUNCTIONS',
[(tuple(oldversion), _old_migration), [(tuple(oldversion), _old_migration),
(nominatim.version.NOMINATIM_VERSION, _migration)]) (nominatim_db.version.NOMINATIM_VERSION, _migration)])
assert migration.migrate(def_config, {}) == 0 assert migration.migrate(def_config, {}) == 0
assert done['new'] assert done['new']
assert not done['old'] assert not done['old']
assert property_table.get('database_version') == \ assert property_table.get('database_version') == str(nominatim_db.version.NOMINATIM_VERSION)
'{0[0]}.{0[1]}.{0[2]}-{0[3]}'.format(nominatim.version.NOMINATIM_VERSION)
###### Tests for specific migrations ###### Tests for specific migrations

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for functions to maintain the artificial postcode table. Tests for functions to maintain the artificial postcode table.
@@ -11,8 +11,8 @@ import subprocess
import pytest import pytest
from nominatim.tools import postcodes from nominatim_db.tools import postcodes
from nominatim.data import country_info from nominatim_db.data import country_info
import dummy_tokenizer import dummy_tokenizer
class MockPostcodeTable: class MockPostcodeTable:

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Test for various refresh functions. Test for various refresh functions.
@@ -11,7 +11,7 @@ from pathlib import Path
import pytest import pytest
from nominatim.tools import refresh from nominatim_db.tools import refresh
def test_refresh_import_wikipedia_not_existing(dsn): def test_refresh_import_wikipedia_not_existing(dsn):
assert refresh.import_wikipedia_articles(dsn, Path('.')) == 1 assert refresh.import_wikipedia_articles(dsn, Path('.')) == 1

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for function for importing address ranks. Tests for function for importing address ranks.
@@ -12,7 +12,7 @@ from pathlib import Path
import pytest import pytest
from nominatim.tools.refresh import load_address_levels, load_address_levels_from_config from nominatim_db.tools.refresh import load_address_levels, load_address_levels_from_config
def test_load_ranks_def_config(temp_db_conn, temp_db_cursor, def_config): def test_load_ranks_def_config(temp_db_conn, temp_db_cursor, def_config):
load_address_levels_from_config(temp_db_conn, def_config) load_address_levels_from_config(temp_db_conn, def_config)

View File

@@ -1,15 +1,15 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for creating PL/pgSQL functions for Nominatim. Tests for creating PL/pgSQL functions for Nominatim.
""" """
import pytest import pytest
from nominatim.tools.refresh import create_functions from nominatim_db.tools.refresh import create_functions
class TestCreateFunctions: class TestCreateFunctions:
@pytest.fixture(autouse=True) @pytest.fixture(autouse=True)

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for setting up the website scripts. Tests for setting up the website scripts.
@@ -11,7 +11,7 @@ import subprocess
import pytest import pytest
from nominatim.tools import refresh from nominatim_db.tools import refresh
@pytest.fixture @pytest.fixture
def test_script(tmp_path): def test_script(tmp_path):

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for replication functionality. Tests for replication functionality.
@@ -13,9 +13,9 @@ import time
import pytest import pytest
from osmium.replication.server import OsmosisState from osmium.replication.server import OsmosisState
import nominatim.tools.replication import nominatim_db.tools.replication
import nominatim.db.status as status import nominatim_core.db.status as status
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
OSM_NODE_DATA = """\ OSM_NODE_DATA = """\
<osm version="0.6" generator="OpenStreetMap server" copyright="OpenStreetMap and contributors" attribution="http://www.openstreetmap.org/copyright" license="http://opendatacommons.org/licenses/odbl/1-0/"> <osm version="0.6" generator="OpenStreetMap server" copyright="OpenStreetMap and contributors" attribution="http://www.openstreetmap.org/copyright" license="http://opendatacommons.org/licenses/odbl/1-0/">
@@ -33,21 +33,21 @@ def setup_status_table(status_table):
def test_init_replication_bad_base_url(monkeypatch, place_row, temp_db_conn): def test_init_replication_bad_base_url(monkeypatch, place_row, temp_db_conn):
place_row(osm_type='N', osm_id=100) place_row(osm_type='N', osm_id=100)
monkeypatch.setattr(nominatim.db.status, "get_url", lambda u: OSM_NODE_DATA) monkeypatch.setattr(status, "get_url", lambda u: OSM_NODE_DATA)
with pytest.raises(UsageError, match="Failed to reach replication service"): with pytest.raises(UsageError, match="Failed to reach replication service"):
nominatim.tools.replication.init_replication(temp_db_conn, 'https://test.io') nominatim_db.tools.replication.init_replication(temp_db_conn, 'https://test.io')
def test_init_replication_success(monkeypatch, place_row, temp_db_conn, temp_db_cursor): def test_init_replication_success(monkeypatch, place_row, temp_db_conn, temp_db_cursor):
place_row(osm_type='N', osm_id=100) place_row(osm_type='N', osm_id=100)
monkeypatch.setattr(nominatim.db.status, "get_url", lambda u: OSM_NODE_DATA) monkeypatch.setattr(status, "get_url", lambda u: OSM_NODE_DATA)
monkeypatch.setattr(nominatim.tools.replication.ReplicationServer, monkeypatch.setattr(nominatim_db.tools.replication.ReplicationServer,
"timestamp_to_sequence", "timestamp_to_sequence",
lambda self, date: 234) lambda self, date: 234)
nominatim.tools.replication.init_replication(temp_db_conn, 'https://test.io') nominatim_db.tools.replication.init_replication(temp_db_conn, 'https://test.io')
expected_date = dt.datetime.strptime('2006-01-27T19:09:10', status.ISODATE_FORMAT)\ expected_date = dt.datetime.strptime('2006-01-27T19:09:10', status.ISODATE_FORMAT)\
.replace(tzinfo=dt.timezone.utc) .replace(tzinfo=dt.timezone.utc)
@@ -59,22 +59,22 @@ def test_init_replication_success(monkeypatch, place_row, temp_db_conn, temp_db_
### checking for updates ### checking for updates
def test_check_for_updates_empty_status_table(temp_db_conn): def test_check_for_updates_empty_status_table(temp_db_conn):
assert nominatim.tools.replication.check_for_updates(temp_db_conn, 'https://test.io') == 254 assert nominatim_db.tools.replication.check_for_updates(temp_db_conn, 'https://test.io') == 254
def test_check_for_updates_seq_not_set(temp_db_conn): def test_check_for_updates_seq_not_set(temp_db_conn):
status.set_status(temp_db_conn, dt.datetime.now(dt.timezone.utc)) status.set_status(temp_db_conn, dt.datetime.now(dt.timezone.utc))
assert nominatim.tools.replication.check_for_updates(temp_db_conn, 'https://test.io') == 254 assert nominatim_db.tools.replication.check_for_updates(temp_db_conn, 'https://test.io') == 254
def test_check_for_updates_no_state(monkeypatch, temp_db_conn): def test_check_for_updates_no_state(monkeypatch, temp_db_conn):
status.set_status(temp_db_conn, dt.datetime.now(dt.timezone.utc), seq=345) status.set_status(temp_db_conn, dt.datetime.now(dt.timezone.utc), seq=345)
monkeypatch.setattr(nominatim.tools.replication.ReplicationServer, monkeypatch.setattr(nominatim_db.tools.replication.ReplicationServer,
"get_state_info", lambda self: None) "get_state_info", lambda self: None)
assert nominatim.tools.replication.check_for_updates(temp_db_conn, 'https://test.io') == 253 assert nominatim_db.tools.replication.check_for_updates(temp_db_conn, 'https://test.io') == 253
@pytest.mark.parametrize("server_sequence,result", [(344, 2), (345, 2), (346, 0)]) @pytest.mark.parametrize("server_sequence,result", [(344, 2), (345, 2), (346, 0)])
@@ -83,11 +83,11 @@ def test_check_for_updates_no_new_data(monkeypatch, temp_db_conn,
date = dt.datetime.now(dt.timezone.utc) date = dt.datetime.now(dt.timezone.utc)
status.set_status(temp_db_conn, date, seq=345) status.set_status(temp_db_conn, date, seq=345)
monkeypatch.setattr(nominatim.tools.replication.ReplicationServer, monkeypatch.setattr(nominatim_db.tools.replication.ReplicationServer,
"get_state_info", "get_state_info",
lambda self: OsmosisState(server_sequence, date)) lambda self: OsmosisState(server_sequence, date))
assert nominatim.tools.replication.check_for_updates(temp_db_conn, 'https://test.io') == result assert nominatim_db.tools.replication.check_for_updates(temp_db_conn, 'https://test.io') == result
### updating ### updating
@@ -102,29 +102,29 @@ def update_options(tmpdir):
def test_update_empty_status_table(dsn): def test_update_empty_status_table(dsn):
with pytest.raises(UsageError): with pytest.raises(UsageError):
nominatim.tools.replication.update(dsn, {}) nominatim_db.tools.replication.update(dsn, {})
def test_update_already_indexed(temp_db_conn, dsn): def test_update_already_indexed(temp_db_conn, dsn):
status.set_status(temp_db_conn, dt.datetime.now(dt.timezone.utc), seq=34, indexed=False) status.set_status(temp_db_conn, dt.datetime.now(dt.timezone.utc), seq=34, indexed=False)
assert nominatim.tools.replication.update(dsn, dict(indexed_only=True)) \ assert nominatim_db.tools.replication.update(dsn, dict(indexed_only=True)) \
== nominatim.tools.replication.UpdateState.MORE_PENDING == nominatim_db.tools.replication.UpdateState.MORE_PENDING
def test_update_no_data_no_sleep(monkeypatch, temp_db_conn, dsn, update_options): def test_update_no_data_no_sleep(monkeypatch, temp_db_conn, dsn, update_options):
date = dt.datetime.now(dt.timezone.utc) - dt.timedelta(days=1) date = dt.datetime.now(dt.timezone.utc) - dt.timedelta(days=1)
status.set_status(temp_db_conn, date, seq=34) status.set_status(temp_db_conn, date, seq=34)
monkeypatch.setattr(nominatim.tools.replication.ReplicationServer, monkeypatch.setattr(nominatim_db.tools.replication.ReplicationServer,
"apply_diffs", "apply_diffs",
lambda *args, **kwargs: None) lambda *args, **kwargs: None)
sleeptime = [] sleeptime = []
monkeypatch.setattr(time, 'sleep', sleeptime.append) monkeypatch.setattr(time, 'sleep', sleeptime.append)
assert nominatim.tools.replication.update(dsn, update_options) \ assert nominatim_db.tools.replication.update(dsn, update_options) \
== nominatim.tools.replication.UpdateState.NO_CHANGES == nominatim_db.tools.replication.UpdateState.NO_CHANGES
assert not sleeptime assert not sleeptime
@@ -133,15 +133,15 @@ def test_update_no_data_sleep(monkeypatch, temp_db_conn, dsn, update_options):
date = dt.datetime.now(dt.timezone.utc) - dt.timedelta(minutes=30) date = dt.datetime.now(dt.timezone.utc) - dt.timedelta(minutes=30)
status.set_status(temp_db_conn, date, seq=34) status.set_status(temp_db_conn, date, seq=34)
monkeypatch.setattr(nominatim.tools.replication.ReplicationServer, monkeypatch.setattr(nominatim_db.tools.replication.ReplicationServer,
"apply_diffs", "apply_diffs",
lambda *args, **kwargs: None) lambda *args, **kwargs: None)
sleeptime = [] sleeptime = []
monkeypatch.setattr(time, 'sleep', sleeptime.append) monkeypatch.setattr(time, 'sleep', sleeptime.append)
assert nominatim.tools.replication.update(dsn, update_options) \ assert nominatim_db.tools.replication.update(dsn, update_options) \
== nominatim.tools.replication.UpdateState.NO_CHANGES == nominatim_db.tools.replication.UpdateState.NO_CHANGES
assert len(sleeptime) == 1 assert len(sleeptime) == 1
assert sleeptime[0] < 3600 assert sleeptime[0] < 3600

View File

@@ -1,17 +1,17 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for methods of the SPCsvLoader class. Tests for methods of the SPCsvLoader class.
""" """
import pytest import pytest
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
from nominatim.tools.special_phrases.sp_csv_loader import SPCsvLoader from nominatim_db.tools.special_phrases.sp_csv_loader import SPCsvLoader
from nominatim.tools.special_phrases.special_phrase import SpecialPhrase from nominatim_db.tools.special_phrases.special_phrase import SpecialPhrase
@pytest.fixture @pytest.fixture
def sp_csv_loader(src_dir): def sp_csv_loader(src_dir):

View File

@@ -1,14 +1,14 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for methods of the SPWikiLoader class. Tests for methods of the SPWikiLoader class.
""" """
import pytest import pytest
from nominatim.tools.special_phrases.sp_wiki_loader import SPWikiLoader from nominatim_db.tools.special_phrases.sp_wiki_loader import SPWikiLoader
@pytest.fixture @pytest.fixture
@@ -23,7 +23,7 @@ def sp_wiki_loader(src_dir, monkeypatch, def_config):
xml_test_content = src_dir / 'test' / 'testdata' / 'special_phrases_test_content.txt' xml_test_content = src_dir / 'test' / 'testdata' / 'special_phrases_test_content.txt'
return xml_test_content.read_text() return xml_test_content.read_text()
monkeypatch.setattr('nominatim.tools.special_phrases.sp_wiki_loader._get_wiki_content', monkeypatch.setattr('nominatim_db.tools.special_phrases.sp_wiki_loader._get_wiki_content',
_mock_wiki_content) _mock_wiki_content)
return loader return loader

View File

@@ -1,8 +1,8 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Test for tiger data function Test for tiger data function
@@ -12,8 +12,8 @@ from textwrap import dedent
import pytest import pytest
from nominatim.tools import tiger_data, freeze from nominatim_db.tools import tiger_data, freeze
from nominatim.errors import UsageError from nominatim_core.errors import UsageError
class MockTigerTable: class MockTigerTable:

View File

@@ -1,15 +1,15 @@
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-3.0-or-later
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2022 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for centroid computation. Tests for centroid computation.
""" """
import pytest import pytest
from nominatim.utils.centroid import PointsCentroid from nominatim_core.utils.centroid import PointsCentroid
def test_empty_set(): def test_empty_set():
c = PointsCentroid() c = PointsCentroid()

View File

@@ -2,7 +2,7 @@
# #
# This file is part of Nominatim. (https://nominatim.org) # This file is part of Nominatim. (https://nominatim.org)
# #
# Copyright (C) 2023 by the Nominatim developer community. # Copyright (C) 2024 by the Nominatim developer community.
# For a full list of authors see the git log. # For a full list of authors see the git log.
""" """
Tests for the streaming JSON writer. Tests for the streaming JSON writer.
@@ -11,7 +11,7 @@ import json
import pytest import pytest
from nominatim.utils.json_writer import JsonWriter from nominatim_core.utils.json_writer import JsonWriter
@pytest.mark.parametrize("inval,outstr", [(None, 'null'), @pytest.mark.parametrize("inval,outstr", [(None, 'null'),
(True, 'true'), (False, 'false'), (True, 'true'), (False, 'false'),