forked from platypush/platypush
Moved application argument parser to an external platypush.cli
module.
This commit is contained in:
parent
1819ee75ef
commit
97adc3f775
2 changed files with 143 additions and 127 deletions
132
platypush/app.py
132
platypush/app.py
|
@ -1,12 +1,12 @@
|
||||||
import argparse
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
from typing import Optional
|
from typing import Optional, Sequence
|
||||||
|
|
||||||
from .bus import Bus
|
from .bus import Bus
|
||||||
from .bus.redis import RedisBus
|
from .bus.redis import RedisBus
|
||||||
|
from .cli import parse_cmdline
|
||||||
from .config import Config
|
from .config import Config
|
||||||
from .context import register_backends, register_plugins
|
from .context import register_backends, register_plugins
|
||||||
from .cron.scheduler import CronScheduler
|
from .cron.scheduler import CronScheduler
|
||||||
|
@ -184,133 +184,11 @@ class Application:
|
||||||
self._redis_proc = None
|
self._redis_proc = None
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def build(cls, *args: str):
|
def from_cmdline(cls, args: Sequence[str]) -> "Application":
|
||||||
"""
|
"""
|
||||||
Build the app from command line arguments.
|
Build the app from command line arguments.
|
||||||
"""
|
"""
|
||||||
from . import __version__
|
opts = parse_cmdline(args)
|
||||||
|
|
||||||
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(
|
|
||||||
'--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=None,
|
|
||||||
help="File where platypush will "
|
|
||||||
+ "store its PID, useful if you're planning to "
|
|
||||||
+ "integrate it in a service",
|
|
||||||
)
|
|
||||||
|
|
||||||
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=cls._default_redis_queue,
|
|
||||||
help="Name of the Redis queue to be used to internally deliver messages "
|
|
||||||
"(default: platypush/bus)",
|
|
||||||
)
|
|
||||||
|
|
||||||
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",
|
|
||||||
)
|
|
||||||
|
|
||||||
opts, _ = parser.parse_known_args(args)
|
|
||||||
if opts.version:
|
|
||||||
print(__version__)
|
|
||||||
sys.exit(0)
|
|
||||||
|
|
||||||
return cls(
|
return cls(
|
||||||
config_file=opts.config,
|
config_file=opts.config,
|
||||||
workdir=opts.workdir,
|
workdir=opts.workdir,
|
||||||
|
@ -435,7 +313,7 @@ def main(*args: str):
|
||||||
"""
|
"""
|
||||||
Application entry point.
|
Application entry point.
|
||||||
"""
|
"""
|
||||||
app = Application.build(*args)
|
app = Application.from_cmdline(args)
|
||||||
app.run()
|
app.run()
|
||||||
|
|
||||||
|
|
||||||
|
|
138
platypush/cli.py
Normal file
138
platypush/cli.py
Normal file
|
@ -0,0 +1,138 @@
|
||||||
|
import argparse
|
||||||
|
from typing import Sequence
|
||||||
|
|
||||||
|
from platypush.bus.redis import RedisBus
|
||||||
|
|
||||||
|
|
||||||
|
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(
|
||||||
|
'--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=None,
|
||||||
|
help="File where platypush will "
|
||||||
|
+ "store its PID, useful if you're planning to "
|
||||||
|
+ "integrate it in a service",
|
||||||
|
)
|
||||||
|
|
||||||
|
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
|
Loading…
Reference in a new issue