X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/eda0900c8ec67c10f5f8eb7cb47dd7e02bd8a48d..5d95a72758f685ca6e08e5f5d82dccbe895aaa04:/nominatim/cli.py diff --git a/nominatim/cli.py b/nominatim/cli.py index 8d4071db..4fadaa9f 100644 --- a/nominatim/cli.py +++ b/nominatim/cli.py @@ -11,6 +11,17 @@ from pathlib import Path from .config import Configuration from .admin.exec_utils import run_legacy_script +from .indexer.indexer import Indexer + +def _num_system_cpus(): + try: + cpus = len(os.sched_getaffinity(0)) + except NotImplementedError: + cpus = None + + return cpus or os.cpu_count() + + class CommandlineParser: """ Wraps some of the common functions for parsing the command line and setting up subcommands. @@ -67,7 +78,7 @@ class CommandlineParser: args.project_dir = Path(args.project_dir) logging.basicConfig(stream=sys.stderr, - format='%(asctime)s %(levelname)s: %(message)s', + format='%(asctime)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S', level=max(4 - args.verbose, 1) * 10) @@ -297,11 +308,30 @@ class UpdateIndex: @staticmethod def add_args(parser): - pass + group = parser.add_argument_group('Filter arguments') + group.add_argument('--boundaries-only', action='store_true', + help="""Index only administrative boundaries.""") + group.add_argument('--no-boundaries', action='store_true', + help="""Index everything except administrative boundaries.""") + group.add_argument('--minrank', '-r', type=int, metavar='RANK', default=0, + help='Minimum/starting rank') + group.add_argument('--maxrank', '-R', type=int, metavar='RANK', default=30, + help='Maximum/finishing rank') @staticmethod def run(args): - return run_legacy_script('update.php', '--index', nominatim_env=args) + indexer = Indexer(args.config.get_libpq_dsn(), + args.threads or _num_system_cpus() or 1) + + if not args.no_boundaries: + indexer.index_boundaries(args.minrank, args.maxrank) + if not args.boundaries_only: + indexer.index_by_rank(args.minrank, args.maxrank) + + if not args.no_boundaries and not args.boundaries_only: + indexer.update_status_table() + + return 0 class UpdateRefresh: @@ -405,7 +435,7 @@ class AdminWarm: class QueryExport: """\ - Export addresses as CSV file from a Nominatim database. + Export addresses as CSV file from the database. """ @staticmethod @@ -492,10 +522,14 @@ def nominatim(**kwargs): parser.add_subcommand('refresh', UpdateRefresh) parser.add_subcommand('export', QueryExport) - parser.add_subcommand('search', QueryTodo) - parser.add_subcommand('reverse', QueryTodo) - parser.add_subcommand('lookup', QueryTodo) - parser.add_subcommand('details', QueryTodo) - parser.add_subcommand('status', QueryTodo) + + if kwargs.get('phpcgi_path'): + parser.add_subcommand('search', QueryTodo) + parser.add_subcommand('reverse', QueryTodo) + parser.add_subcommand('lookup', QueryTodo) + parser.add_subcommand('details', QueryTodo) + parser.add_subcommand('status', QueryTodo) + else: + parser.parser.epilog = 'php-cgi not found. Query commands not available.' return parser.run(**kwargs)