Fix argparse handling when no subcommand given

This commit is contained in:
Janek Bevendorff 2025-03-08 12:15:27 +01:00
parent a7b9bdd91d
commit 722b1d070b
No known key found for this signature in database
GPG Key ID: 2CF41D2AA8438F99

View File

@ -1,6 +1,6 @@
#!/usr/bin/env python3 #!/usr/bin/env python3
# #
# Copyright (C) 2023 KeePassXC Team <team@keepassxc.org> # Copyright (C) 2025 KeePassXC Team <team@keepassxc.org>
# #
# This program is free software: you can redistribute it and/or modify # This program is free software: you can redistribute it and/or modify
# it # under the terms of the GNU General Public License as published by # it # under the terms of the GNU General Public License as published by
@ -18,10 +18,12 @@
import argparse import argparse
import ctypes import ctypes
import signal
from datetime import datetime from datetime import datetime
import logging import logging
import os import os
import platform import platform
import signal
import shutil import shutil
import subprocess import subprocess
import sys import sys
@ -44,12 +46,12 @@ TAG_NAME = None
DOCKER_IMAGE = None DOCKER_IMAGE = None
DOCKER_CONTAINER_NAME = 'keepassxc-build-container' DOCKER_CONTAINER_NAME = 'keepassxc-build-container'
CMAKE_OPTIONS = [] CMAKE_OPTIONS = []
CPACK_GENERATORS = 'WIX;ZIP' CPACK_GENERATORS = 'ZIP'
COMPILER = 'g++' COMPILER = 'g++'
MAKE_OPTIONS = f'-j{os.cpu_count()}' MAKE_OPTIONS = f'-j{os.cpu_count()}'
BUILD_PLUGINS = 'all' BUILD_PLUGINS = 'all'
INSTALL_PREFIX = '/usr/local' INSTALL_PREFIX = '/usr/local'
MACOSX_DEPLOYMENT_TARGET = '10.15' MACOSX_DEPLOYMENT_TARGET = '12'
TIMESTAMP_SERVER = 'http://timestamp.sectigo.com' TIMESTAMP_SERVER = 'http://timestamp.sectigo.com'
@ -297,7 +299,6 @@ def main():
parser = argparse.ArgumentParser(add_help=True) parser = argparse.ArgumentParser(add_help=True)
subparsers = parser.add_subparsers(title='commands') subparsers = parser.add_subparsers(title='commands')
subparsers.required = True
check_parser = subparsers.add_parser('check', help=Check.__doc__) check_parser = subparsers.add_parser('check', help=Check.__doc__)
Check.setup_arg_parser(check_parser) Check.setup_arg_parser(check_parser)
@ -328,13 +329,24 @@ def main():
i18n_parser.set_defaults(_cmd=I18N) i18n_parser.set_defaults(_cmd=I18N)
args = parser.parse_args() args = parser.parse_args()
args._cmd().run(**{k: v for k, v in vars(args).items() if k is not '_cmd'}) if '_cmd' not in args:
parser.print_help()
return 1
return args._cmd().run(**{k: v for k, v in vars(args).items() if k != '_cmd'}) or 0
def _sig_handler(_, __):
logger.warning('Process interrupted.')
sys.exit(3 | _cleanup())
signal.signal(signal.SIGINT, _sig_handler)
signal.signal(signal.SIGTERM, _sig_handler)
if __name__ == '__main__': if __name__ == '__main__':
ret = 0 ret = 0
try: try:
main() ret = main()
except Error as e: except Error as e:
logger.error(e.msg, *e.args, extra=e.kwargs) logger.error(e.msg, *e.args, extra=e.kwargs)
ret = 1 ret = 1