X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/c314a3092c5b51c7782015f6fa9ac093b46fa174..968f1cd45393015975e658fc6b70065a3bfd3c94:/src/nominatim_db/clicmd/add_data.py diff --git a/src/nominatim_db/clicmd/add_data.py b/src/nominatim_db/clicmd/add_data.py index eced9907..e2058b74 100644 --- a/src/nominatim_db/clicmd/add_data.py +++ b/src/nominatim_db/clicmd/add_data.py @@ -10,10 +10,13 @@ Implementation of the 'add-data' subcommand. from typing import cast import argparse import logging +import asyncio import psutil from .args import NominatimArgs +from ..db.connection import connect +from ..tools.freeze import is_frozen # Do not repeat documentation of subcommand classes. # pylint: disable=C0111 @@ -35,7 +38,7 @@ class UpdateAddData: The command can also be used to add external non-OSM data to the database. At the moment the only supported format is TIGER housenumber data. See the online documentation at - https://nominatim.org/release-docs/latest/admin/Import/#installing-tiger-housenumber-data-for-the-us + https://nominatim.org/release-docs/latest/customize/Tiger/ for more information. """ @@ -64,15 +67,15 @@ class UpdateAddData: def run(self, args: NominatimArgs) -> int: - from ..tokenizer import factory as tokenizer_factory - from ..tools import tiger_data, add_osm_data + from ..tools import add_osm_data + + with connect(args.config.get_libpq_dsn()) as conn: + if is_frozen(conn): + print('Database is marked frozen. New data can\'t be added.') + return 1 if args.tiger_data: - tokenizer = tokenizer_factory.get_tokenizer_for_db(args.config) - return tiger_data.add_tiger_data(args.tiger_data, - args.config, - args.threads or psutil.cpu_count() or 1, - tokenizer) + return asyncio.run(self._add_tiger_data(args)) osm2pgsql_params = args.osm2pgsql_options(default_cache=1000, default_threads=1) if args.file or args.diff: @@ -99,3 +102,16 @@ class UpdateAddData: osm2pgsql_params) return 0 + + + async def _add_tiger_data(self, args: NominatimArgs) -> int: + from ..tokenizer import factory as tokenizer_factory + from ..tools import tiger_data + + assert args.tiger_data + + tokenizer = tokenizer_factory.get_tokenizer_for_db(args.config) + return await tiger_data.add_tiger_data(args.tiger_data, + args.config, + args.threads or psutil.cpu_count() or 1, + tokenizer)