]> git.openstreetmap.org Git - nominatim.git/commitdiff
move add-data subcommand into a separate file
authorSarah Hoffmann <lonvia@denofr.de>
Sun, 25 Jul 2021 16:14:12 +0000 (18:14 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Sun, 25 Jul 2021 16:14:12 +0000 (18:14 +0200)
nominatim/cli.py
nominatim/clicmd/__init__.py
nominatim/clicmd/add_data.py [new file with mode: 0644]
test/python/test_cli.py

index 5626deb4b5aa6d503e9efd345086f85617ffd487..7fae205bd36dde2a9df3fca68e12444c82d403f3 100644 (file)
@@ -114,63 +114,6 @@ class CommandlineParser:
 #
 # No need to document the functions each time.
 # pylint: disable=C0111
-# Using non-top-level imports to make pyosmium optional for replication only.
-# pylint: disable=E0012,C0415
-class UpdateAddData:
-    """\
-    Add additional data from a file or an online source.
-
-    Data is only imported, not indexed. You need to call `nominatim index`
-    to complete the process.
-    """
-
-    @staticmethod
-    def add_args(parser):
-        group_name = parser.add_argument_group('Source')
-        group = group_name.add_mutually_exclusive_group(required=True)
-        group.add_argument('--file', metavar='FILE',
-                           help='Import data from an OSM file')
-        group.add_argument('--diff', metavar='FILE',
-                           help='Import data from an OSM diff file')
-        group.add_argument('--node', metavar='ID', type=int,
-                           help='Import a single node from the API')
-        group.add_argument('--way', metavar='ID', type=int,
-                           help='Import a single way from the API')
-        group.add_argument('--relation', metavar='ID', type=int,
-                           help='Import a single relation from the API')
-        group.add_argument('--tiger-data', metavar='DIR',
-                           help='Add housenumbers from the US TIGER census database.')
-        group = parser.add_argument_group('Extra arguments')
-        group.add_argument('--use-main-api', action='store_true',
-                           help='Use OSM API instead of Overpass to download objects')
-
-    @staticmethod
-    def run(args):
-        from nominatim.tokenizer import factory as tokenizer_factory
-        from nominatim.tools import tiger_data
-
-        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 1,
-                                             tokenizer)
-
-        params = ['update.php']
-        if args.file:
-            params.extend(('--import-file', args.file))
-        elif args.diff:
-            params.extend(('--import-diff', args.diff))
-        elif args.node:
-            params.extend(('--import-node', args.node))
-        elif args.way:
-            params.extend(('--import-way', args.way))
-        elif 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)
-
-
 class QueryExport:
     """\
     Export addresses as CSV file from the database.
@@ -261,7 +204,7 @@ def get_set_parser(**kwargs):
 
     parser.add_subcommand('special-phrases', clicmd.ImportSpecialPhrases)
 
-    parser.add_subcommand('add-data', UpdateAddData)
+    parser.add_subcommand('add-data', clicmd.UpdateAddData)
     parser.add_subcommand('index', clicmd.UpdateIndex)
     parser.add_subcommand('refresh', clicmd.UpdateRefresh())
 
index f905fed1b97207fd5a039fa1fa09166e073366b2..ac2cae5b782cac0ecc4dee9eb641f3b0129b8199 100644 (file)
@@ -7,6 +7,7 @@ from nominatim.clicmd.replication import UpdateReplication
 from nominatim.clicmd.api import APISearch, APIReverse, APILookup, APIDetails, APIStatus
 from nominatim.clicmd.index import UpdateIndex
 from nominatim.clicmd.refresh import UpdateRefresh
+from nominatim.clicmd.add_data import UpdateAddData
 from nominatim.clicmd.admin import AdminFuncs
 from nominatim.clicmd.freeze import SetupFreeze
 from nominatim.clicmd.special_phrases import ImportSpecialPhrases
diff --git a/nominatim/clicmd/add_data.py b/nominatim/clicmd/add_data.py
new file mode 100644 (file)
index 0000000..18d67ce
--- /dev/null
@@ -0,0 +1,67 @@
+"""
+Implementation of the 'add-data' subcommand.
+"""
+import logging
+
+from nominatim.tools.exec_utils import run_legacy_script
+
+# Do not repeat documentation of subcommand classes.
+# pylint: disable=C0111
+# Using non-top-level imports to avoid eventually unused imports.
+# pylint: disable=E0012,C0415
+
+LOG = logging.getLogger()
+
+class UpdateAddData:
+    """\
+    Add additional data from a file or an online source.
+
+    Data is only imported, not indexed. You need to call `nominatim index`
+    to complete the process.
+    """
+
+    @staticmethod
+    def add_args(parser):
+        group_name = parser.add_argument_group('Source')
+        group = group_name.add_mutually_exclusive_group(required=True)
+        group.add_argument('--file', metavar='FILE',
+                           help='Import data from an OSM file')
+        group.add_argument('--diff', metavar='FILE',
+                           help='Import data from an OSM diff file')
+        group.add_argument('--node', metavar='ID', type=int,
+                           help='Import a single node from the API')
+        group.add_argument('--way', metavar='ID', type=int,
+                           help='Import a single way from the API')
+        group.add_argument('--relation', metavar='ID', type=int,
+                           help='Import a single relation from the API')
+        group.add_argument('--tiger-data', metavar='DIR',
+                           help='Add housenumbers from the US TIGER census database.')
+        group = parser.add_argument_group('Extra arguments')
+        group.add_argument('--use-main-api', action='store_true',
+                           help='Use OSM API instead of Overpass to download objects')
+
+    @staticmethod
+    def run(args):
+        from nominatim.tokenizer import factory as tokenizer_factory
+        from nominatim.tools import tiger_data
+
+        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 1,
+                                             tokenizer)
+
+        params = ['update.php']
+        if args.file:
+            params.extend(('--import-file', args.file))
+        elif args.diff:
+            params.extend(('--import-diff', args.diff))
+        elif args.node:
+            params.extend(('--import-node', args.node))
+        elif args.way:
+            params.extend(('--import-way', args.way))
+        elif 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)
index d9e0104014eb74c529cfa6d198847ce415460fa6..6ba89a0a9cbc2c64a84dda069750b9c56fde83f3 100644 (file)
@@ -60,7 +60,6 @@ class TestCli:
 
 
     @pytest.mark.parametrize("command,script", [
-                             (('add-data', '--file', 'foo.osm'), 'update'),
                              (('export',), 'export')
                              ])
     def test_legacy_commands_simple(self, mock_run_legacy, command, script):
@@ -90,7 +89,8 @@ class TestCli:
 
     @pytest.mark.parametrize("name,oid", [('file', 'foo.osm'), ('diff', 'foo.osc'),
                                           ('node', 12), ('way', 8), ('relation', 32)])
-    def test_add_data_command(self, mock_run_legacy, name, oid):
+    def test_add_data_command(self, mock_func_factory, name, oid):
+        mock_run_legacy = mock_func_factory(nominatim.clicmd.add_data, 'run_legacy_script')
         assert self.call_nominatim('add-data', '--' + name, str(oid)) == 0
 
         assert mock_run_legacy.called == 1