forked from platypush/platypush
150 lines
4.1 KiB
Python
150 lines
4.1 KiB
Python
import argparse
|
|
from typing import Sequence
|
|
|
|
from platypush.bus.redis import RedisBus
|
|
from platypush.utils import get_default_pid_file
|
|
|
|
|
|
def parse_cmdline(args: Sequence[str]) -> argparse.Namespace:
|
|
"""
|
|
Parse command-line arguments from a list of strings.
|
|
"""
|
|
parser = argparse.ArgumentParser()
|
|
|
|
parser.add_argument(
|
|
'--config',
|
|
'-c',
|
|
dest='config',
|
|
required=False,
|
|
default=None,
|
|
help='Custom location for the configuration file',
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--workdir',
|
|
'-w',
|
|
dest='workdir',
|
|
required=False,
|
|
default=None,
|
|
help='Custom working directory to be used for the application',
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--device-id',
|
|
'-d',
|
|
dest='device_id',
|
|
required=False,
|
|
default=None,
|
|
help='Override the device ID used to identify this instance. If not '
|
|
'passed here, it is inferred from the configuration (device_id field).'
|
|
'If not present there either, it is inferred from the hostname.',
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--logsdir',
|
|
'-l',
|
|
dest='logsdir',
|
|
required=False,
|
|
default=None,
|
|
help='Store logs in the specified directory. By default, the '
|
|
'`[logging.]filename` configuration option will be used. If not '
|
|
'set, logging will be sent to stdout and stderr.',
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--version',
|
|
dest='version',
|
|
required=False,
|
|
action='store_true',
|
|
help="Print the current version and exit",
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--verbose',
|
|
'-v',
|
|
dest='verbose',
|
|
required=False,
|
|
action='store_true',
|
|
help="Enable verbose/debug logging",
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--pidfile',
|
|
'-P',
|
|
dest='pidfile',
|
|
required=False,
|
|
default=get_default_pid_file(),
|
|
help="File where platypush will "
|
|
+ "store its PID, useful if you're planning to "
|
|
+ f"integrate it in a service (default: {get_default_pid_file()})",
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--no-capture-stdout',
|
|
dest='no_capture_stdout',
|
|
required=False,
|
|
action='store_true',
|
|
help="Set this flag if you have max stack depth "
|
|
+ "exceeded errors so stdout won't be captured by "
|
|
+ "the logging system",
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--no-capture-stderr',
|
|
dest='no_capture_stderr',
|
|
required=False,
|
|
action='store_true',
|
|
help="Set this flag if you have max stack depth "
|
|
+ "exceeded errors so stderr won't be captured by "
|
|
+ "the logging system",
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--redis-queue',
|
|
dest='redis_queue',
|
|
required=False,
|
|
default=RedisBus.DEFAULT_REDIS_QUEUE,
|
|
help="Name of the Redis queue to be used to internally deliver messages "
|
|
f"(default: {RedisBus.DEFAULT_REDIS_QUEUE})",
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--start-redis',
|
|
dest='start_redis',
|
|
required=False,
|
|
action='store_true',
|
|
help="Set this flag if you want to run and manage Redis internally "
|
|
"from the app rather than using an external server. It requires the "
|
|
"redis-server executable to be present in the path",
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--redis-host',
|
|
dest='redis_host',
|
|
required=False,
|
|
default=None,
|
|
help="Overrides the host specified in the redis section of the "
|
|
"configuration file",
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--redis-port',
|
|
dest='redis_port',
|
|
required=False,
|
|
default=None,
|
|
help="Overrides the port specified in the redis section of the "
|
|
"configuration file",
|
|
)
|
|
|
|
parser.add_argument(
|
|
'--ctrl-sock',
|
|
dest='ctrl_sock',
|
|
required=False,
|
|
default=None,
|
|
help="If set, it identifies a path to a UNIX domain socket that "
|
|
"the application can use to send control messages (e.g. STOP and "
|
|
"RESTART) to its parent.",
|
|
)
|
|
|
|
opts, _ = parser.parse_known_args(args)
|
|
return opts
|