database administration and querying.
"""
from typing import Optional, Any, List, Union
+import importlib
import logging
import os
import sys
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
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.
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', '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')
- elif args.engine == 'sanic':
- import nominatim.server.sanic.server
-
- app = nominatim.server.sanic.server.get_application(args.project_dir)
-
+ else:
+ import uvicorn # pylint: disable=import-outside-toplevel
server_info = args.server.split(':', 1)
host = server_info[0]
if len(server_info) > 1:
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.')
+
+ server_module = importlib.import_module(f'nominatim.server.{args.engine}.server')
+
+ app = server_module.get_application(args.project_dir)
+ uvicorn.run(app, host=host, port=port)
return 0
-def get_set_parser(**kwargs: Any) -> CommandlineParser:
+def get_set_parser() -> CommandlineParser:
"""\
Initializes the parser and adds various subcommands for
nominatim cli.
parser.add_subcommand('export', QueryExport())
parser.add_subcommand('serve', AdminServe())
- if kwargs.get('phpcgi_path'):
- parser.add_subcommand('search', clicmd.APISearch())
- parser.add_subcommand('reverse', clicmd.APIReverse())
- parser.add_subcommand('lookup', clicmd.APILookup())
- parser.add_subcommand('details', clicmd.APIDetails())
- parser.add_subcommand('status', clicmd.APIStatus())
- else:
- parser.parser.epilog = 'php-cgi not found. Query commands not available.'
+ parser.add_subcommand('search', clicmd.APISearch())
+ parser.add_subcommand('reverse', clicmd.APIReverse())
+ parser.add_subcommand('lookup', clicmd.APILookup())
+ parser.add_subcommand('details', clicmd.APIDetails())
+ parser.add_subcommand('status', clicmd.APIStatus())
return parser
Command-line tools for importing, updating, administrating and
querying the Nominatim database.
"""
- parser = get_set_parser(**kwargs)
-
- return parser.run(**kwargs)
+ return get_set_parser().run(**kwargs)