nonebot2/nonebot/argparse.py

43 lines
1.2 KiB
Python
Raw Normal View History

from argparse import *
2018-12-22 23:06:56 +08:00
from .command import CommandSession
class ParserExit(RuntimeError):
2020-04-20 13:50:38 +08:00
def __init__(self, status=0, message=None):
self.status = status
self.message = message
class ArgumentParser(ArgumentParser):
2018-07-21 00:46:34 +08:00
"""
An ArgumentParser wrapper that avoid printing messages to
standard I/O.
"""
2018-12-22 23:06:56 +08:00
def __init__(self, *args, **kwargs):
self.session = kwargs.pop('session', None)
super().__init__(*args, **kwargs)
2020-02-10 13:26:33 +08:00
def _session_finish(self, message):
if self.session and isinstance(self.session, CommandSession):
self.session.finish(message)
def _print_message(self, message, file=None):
# do nothing
pass
def exit(self, status=0, message=None):
raise ParserExit(status=status, message=message)
2018-12-22 23:06:56 +08:00
def parse_args(self, args=None, namespace=None):
2020-02-10 13:26:33 +08:00
try:
return super().parse_args(args=args, namespace=namespace)
except ParserExit as e:
if e.status == 0:
# --help
self._session_finish(self.usage or self.format_help())
else:
self._session_finish('参数不足或不正确,请使用 --help 参数查询使用帮助')