]> git.openstreetmap.org Git - nominatim.git/blobdiff - nominatim/cli.py
Merge pull request #3064 from lonvia/clicmd-debug-output
[nominatim.git] / nominatim / cli.py
index c134ca1808c2a2fe7267fc26947c54931bb23ab7..d34ef118ed9a48609c455616207d36387e006802 100644 (file)
@@ -9,6 +9,7 @@ Command-line interface to the Nominatim functions for import, update,
 database administration and querying.
 """
 from typing import Optional, Any, List, Union
 database administration and querying.
 """
 from typing import Optional, Any, List, Union
+import importlib
 import logging
 import os
 import sys
 import logging
 import os
 import sys
@@ -60,7 +61,7 @@ class CommandlineParser:
     def nominatim_version_text(self) -> str:
         """ Program name and version number as string
         """
     def nominatim_version_text(self) -> str:
         """ Program name and version number as string
         """
-        text = f'Nominatim version {version.version_str()}'
+        text = f'Nominatim version {version.NOMINATIM_VERSION!s}'
         if version.GIT_COMMIT_HASH is not None:
             text += f' ({version.GIT_COMMIT_HASH})'
         return text
         if version.GIT_COMMIT_HASH is not None:
             text += f' ({version.GIT_COMMIT_HASH})'
         return text
@@ -202,7 +203,7 @@ class AdminServe:
     for testing and development. Do not use it in production setups!
 
     There are different webservers available. The default 'php' engine
     for testing and development. Do not use it in production setups!
 
     There are different webservers available. The default 'php' engine
-    runs the classic PHP frontend. 'sanic' and 'falcon' are Python servers
+    runs the classic PHP frontend. The other engines are Python servers
     which run the new Python frontend code. This is highly experimental
     at the moment and may not include the full API.
 
     which run the new Python frontend code. This is highly experimental
     at the moment and may not include the full API.
 
@@ -214,18 +215,14 @@ class AdminServe:
         group.add_argument('--server', default='127.0.0.1:8088',
                            help='The address the server will listen to.')
         group.add_argument('--engine', default='php',
         group.add_argument('--server', default='127.0.0.1:8088',
                            help='The address the server will listen to.')
         group.add_argument('--engine', default='php',
-                           choices=('php', 'sanic', 'falcon'),
+                           choices=('php', 'sanic', 'falcon', 'starlette'),
                            help='Webserver framework to run. (default: php)')
 
 
     def run(self, args: NominatimArgs) -> int:
         if args.engine == 'php':
             run_php_server(args.server, args.project_dir / 'website')
                            help='Webserver framework to run. (default: php)')
 
 
     def run(self, args: NominatimArgs) -> int:
         if args.engine == 'php':
             run_php_server(args.server, args.project_dir / 'website')
-        elif args.engine == 'sanic':
-            import nominatim.server.sanic.server
-
-            app = nominatim.server.sanic.server.get_application(args.project_dir)
-
+        else:
             server_info = args.server.split(':', 1)
             host = server_info[0]
             if len(server_info) > 1:
             server_info = args.server.split(':', 1)
             host = server_info[0]
             if len(server_info) > 1:
@@ -234,9 +231,22 @@ class AdminServe:
                 port = int(server_info[1])
             else:
                 port = 8088
                 port = int(server_info[1])
             else:
                 port = 8088
-            app.run(host=host, port=port, debug=True)
-        elif args.engine == 'falcon':
-            raise NotImplementedError('Support for falcon not yet available.')
+
+            if args.engine == 'sanic':
+                server_module = importlib.import_module('nominatim.server.sanic.server')
+
+                app = server_module.get_application(args.project_dir)
+                app.run(host=host, port=port, debug=True, single_process=True)
+            else:
+                import uvicorn # pylint: disable=import-outside-toplevel
+
+                if args.engine == 'falcon':
+                    server_module = importlib.import_module('nominatim.server.falcon.server')
+                elif args.engine == 'starlette':
+                    server_module = importlib.import_module('nominatim.server.starlette.server')
+
+                app = server_module.get_application(args.project_dir)
+                uvicorn.run(app, host=host, port=port)
 
         return 0
 
 
         return 0