]> git.openstreetmap.org Git - nominatim.git/blobdiff - nominatim/cli.py
collect coverage for /website directory as well
[nominatim.git] / nominatim / cli.py
index 9d1e36d1f4fcf1897e48a79dbc7e8172b787df0f..8d4071db973a117f5ba5c501b70dafed6bdd033a 100644 (file)
@@ -3,6 +3,7 @@ Command-line interface to the Nominatim functions for import, update,
 database administration and querying.
 """
 import sys
+import os
 import argparse
 import logging
 from pathlib import Path
@@ -72,7 +73,19 @@ class CommandlineParser:
 
         args.config = Configuration(args.project_dir, args.data_dir / 'settings')
 
-        args.command.run(args)
+        return args.command.run(args)
+
+##### Subcommand classes
+#
+# Each class needs to implement two functions: add_args() adds the CLI parameters
+# for the subfunction, run() executes the subcommand.
+#
+# The class documentation doubles as the help text for the command. The
+# first line is also used in the summary when calling the program without
+# a subcommand.
+#
+# No need to document the functions each time.
+# pylint: disable=C0111
 
 
 class SetupAll:
@@ -86,7 +99,7 @@ class SetupAll:
         group = group_name.add_mutually_exclusive_group(required=True)
         group.add_argument('--osm-file',
                            help='OSM file to be imported.')
-        group.add_argument('--continue', nargs=1, dest='continue_at',
+        group.add_argument('--continue', dest='continue_at',
                            choices=['load-data', 'indexing', 'db-postprocess'],
                            help='Continue an import that was interrupted')
         group = parser.add_argument_group('Optional arguments')
@@ -180,7 +193,7 @@ class SetupSpecialPhrases:
     def run(args):
         if args.output.name != '<stdout>':
             raise NotImplementedError('Only output to stdout is currently implemented.')
-        return run_legacy_script('specialphrases.php', '--wiki-import' , nominatim_env=args)
+        return run_legacy_script('specialphrases.php', '--wiki-import', nominatim_env=args)
 
 
 class UpdateReplication:
@@ -213,7 +226,7 @@ class UpdateReplication:
         if args.init:
             params.append('--init-updates')
             if not args.update_functions:
-                params.apend('--no-update-functions')
+                params.append('--no-update-functions')
         elif args.check_for_updates:
             params.append('--check-for-updates')
         else:
@@ -258,9 +271,10 @@ class UpdateAddData:
     @staticmethod
     def run(args):
         if args.tiger_data:
+            os.environ['NOMINATIM_TIGER_DATA_PATH'] = args.tiger_data
             return run_legacy_script('setup.php', '--import-tiger-data', nominatim_env=args)
 
-        params = [ 'update.php']
+        params = ['update.php']
         if args.file:
             params.extend(('--import-file', args.file))
         elif args.diff:
@@ -270,7 +284,7 @@ class UpdateAddData:
         elif args.way:
             params.extend(('--import-way', args.way))
         elif args.relation:
-            params.extend(('--import-relation' , args.relation))
+            params.extend(('--import-relation', args.relation))
         if args.use_main_api:
             params.append('--use-main-api')
         return run_legacy_script(*params, nominatim_env=args)
@@ -292,7 +306,7 @@ class UpdateIndex:
 
 class UpdateRefresh:
     """\
-    Recompute auxillary data used by the indexing process.
+    Recompute auxiliary data used by the indexing process.
 
     These functions must not be run in parallel with other update commands.
     """
@@ -306,12 +320,12 @@ class UpdateRefresh:
                            help='Compute frequency of full-word search terms')
         group.add_argument('--address-levels', action='store_true',
                            help='Reimport address level configuration')
-        group.add_argument('--importance', action='store_true',
-                           help='Recompute place importances (expensive!)')
         group.add_argument('--functions', action='store_true',
                            help='Update the PL/pgSQL functions in the database')
         group.add_argument('--wiki-data', action='store_true',
                            help='Update Wikipedia/data importance numbers.')
+        group.add_argument('--importance', action='store_true',
+                           help='Recompute place importances (expensive!)')
         group.add_argument('--website', action='store_true',
                            help='Refresh the directory that serves the scripts for the web API')
         group = parser.add_argument_group('Arguments for function refresh')
@@ -331,9 +345,6 @@ class UpdateRefresh:
         if args.address_levels:
             run_legacy_script('update.php', '--update-address-levels',
                               nominatim_env=args, throw_on_fail=True)
-        if args.importance:
-            run_legacy_script('update.php', '--recompute-importance',
-                              nominatim_env=args, throw_on_fail=True)
         if args.functions:
             params = ['setup.php', '--create-functions', '--create-partition-functions']
             if args.diffs:
@@ -344,6 +355,10 @@ class UpdateRefresh:
         if args.wiki_data:
             run_legacy_script('setup.php', '--import-wikipedia-articles',
                               nominatim_env=args, throw_on_fail=True)
+        # Attention: importance MUST come after wiki data import.
+        if args.importance:
+            run_legacy_script('update.php', '--recompute-importance',
+                              nominatim_env=args, throw_on_fail=True)
         if args.website:
             run_legacy_script('setup.php', '--setup-website',
                               nominatim_env=args, throw_on_fail=True)
@@ -435,11 +450,11 @@ class QueryExport:
         if args.restrict_to_country:
             params.extend(('--restrict-to-country', args.restrict_to_country))
         if args.restrict_to_osm_node:
-            params.exted(('--restrict-to-osm-node', args.restrict_to_osm_node))
+            params.extend(('--restrict-to-osm-node', args.restrict_to_osm_node))
         if args.restrict_to_osm_way:
-            params.exted(('--restrict-to-osm-way', args.restrict_to_osm_way))
+            params.extend(('--restrict-to-osm-way', args.restrict_to_osm_way))
         if args.restrict_to_osm_relation:
-            params.exted(('--restrict-to-osm-relation', args.restrict_to_osm_relation))
+            params.extend(('--restrict-to-osm-relation', args.restrict_to_osm_relation))
 
         return run_legacy_script(*params, nominatim_env=args)
 
@@ -451,7 +466,8 @@ class QueryTodo:
     def add_args(parser):
         pass
 
-    def run(args):
+    @staticmethod
+    def run(args): # pylint: disable=W0613
         print("TODO: searching")
 
 
@@ -482,4 +498,4 @@ def nominatim(**kwargs):
     parser.add_subcommand('details', QueryTodo)
     parser.add_subcommand('status', QueryTodo)
 
-    parser.run(**kwargs)
+    return parser.run(**kwargs)