diff --git a/cve_bin_tool/cli.py b/cve_bin_tool/cli.py index 5ba0e8eafa..db85c4997b 100755 --- a/cve_bin_tool/cli.py +++ b/cve_bin_tool/cli.py @@ -93,6 +93,7 @@ def main(argv=None): action="store", choices=["api", "json"], help="choose method for getting CVE lists from NVD", + default="api", ) nvd_database_group.add_argument( "-u", @@ -100,6 +101,7 @@ def main(argv=None): action="store", choices=["now", "daily", "never", "latest"], help="update schedule for NVD database (default: daily)", + default="daily", ) nvd_database_group.add_argument( "--nvd-api-key", @@ -110,7 +112,7 @@ def main(argv=None): input_group = parser.add_argument_group("Input") input_group.add_argument( - "directory", help="directory to scan", nargs="?", default=None + "directory", help="directory to scan", nargs="?", default="" ) input_group.add_argument( "-i", @@ -136,11 +138,16 @@ def main(argv=None): "--sbom-file", action="store", help="provide sbom filename", + default="", ) output_group = parser.add_argument_group("Output") output_group.add_argument( - "-q", "--quiet", action="store_true", help="suppress output" + "-q", + "--quiet", + action="store_true", + help="suppress output", + default=False, ) output_group.add_argument( "-l", @@ -149,17 +156,20 @@ def main(argv=None): dest="log_level", action="store", choices=["debug", "info", "warning", "error", "critical"], + default="info", ) output_group.add_argument( "-o", "--output-file", action="store", help="provide output filename (default: output to stdout)", + default="", ) output_group.add_argument( "--html-theme", action="store", help="provide custom theme directory for HTML Report", + default="", ) output_group.add_argument( "-f", @@ -167,12 +177,14 @@ def main(argv=None): action="store", choices=["csv", "json", "console", "html", "pdf"], help="update output format (default: console)", + default="console", ) output_group.add_argument( "-c", "--cvss", action="store", help="minimum CVSS score (as integer in range 0 to 10) to report (default: 0)", + default=0, ) output_group.add_argument( "-S", @@ -180,11 +192,13 @@ def main(argv=None): action="store", choices=["low", "medium", "high", "critical"], help="minimum CVE severity to report (default: low)", + default="low", ) output_group.add_argument( "--report", action="store_true", help="Produces a report even if there are no CVE for the respective output format", + default=False, ) output_group.add_argument( "-A", @@ -195,6 +209,7 @@ def main(argv=None): choices=get_available_fix_supported_distros(), metavar="-", help="Lists available fixes of the package from Linux distribution", + default="", ) output_group.add_argument( "-b", @@ -205,6 +220,7 @@ def main(argv=None): choices=get_backport_supported_distros(), metavar="-", help="Lists backported fixes if available from Linux distribution", + default="", ) output_group.add_argument( "--affected-versions", @@ -218,18 +234,20 @@ def main(argv=None): "--exclude", action=StringToListAction, help="Comma separated Exclude directory path", - default=None, + default=[], ) parser.add_argument("-V", "--version", action="version", version=VERSION) parser.add_argument( "--disable-version-check", action="store_true", help="skips checking for a new version", + default=False, ) parser.add_argument( "--offline", action="store_true", help="operate in offline mode", + default=False, ) merge_report_group = parser.add_argument_group( @@ -241,24 +259,28 @@ def main(argv=None): nargs="?", const=True, help="save output as intermediate report in json format", + default=False, ) merge_report_group.add_argument( "-t", "--tag", action="store", help="add a unique tag to differentiate between multiple intermediate reports", + default="", ) merge_report_group.add_argument( "-m", "--merge", action=StringToListAction, help="comma separated intermediate reports path for merging", + default=None, ) merge_report_group.add_argument( "-F", "--filter", action=StringToListAction, help="comma separated tag string for filtering intermediate reports", + default=[], ) checker_group = parser.add_argument_group("Checkers") @@ -269,6 +291,7 @@ def main(argv=None): action=StringToListAction, type=str, help="comma-separated list of checkers to disable", + default="", ) checker_group.add_argument( "-r", @@ -277,6 +300,7 @@ def main(argv=None): action=StringToListAction, type=str, help="comma-separated list of checkers to enable", + default="", ) deprecated_group = parser.add_argument_group("Deprecated") @@ -285,43 +309,13 @@ def main(argv=None): "--extract", action="store_true", help="autoextract compressed files", + default=True, ) - defaults = { - "directory": "", - "exclude": [], - "input_file": "", - "log_level": "info", - "format": "console", - "cvss": 0, - "severity": "low", - "update": "daily", - "extract": True, - "disable_version_check": False, - "skips": "", - "runs": "", - "quiet": False, - "output_file": "", - "html_theme": "", - "report": False, - "package_list": "", - "append": False, - "tag": "", - "merge": None, - "backport_fix": "", - "available_fix": "", - "nvd": "api", - "nvd_api_key": "", - "filter": [], - "affected_versions": 0, - "sbom": "spdx", - "sbom_file": "", - "offline": False, - } - with ErrorHandler(mode=ErrorMode.NoTrace): raw_args = parser.parse_args(argv[1:]) args = {key: value for key, value in vars(raw_args).items() if value} + defaults = {key: parser.get_default(key) for key in vars(raw_args)} configs = {} if args.get("config"): diff --git a/cve_bin_tool/helper_script.py b/cve_bin_tool/helper_script.py index cfaa738c76..681638ac54 100644 --- a/cve_bin_tool/helper_script.py +++ b/cve_bin_tool/helper_script.py @@ -334,6 +334,7 @@ def main(argv=None): "filenames", help="files to scan", nargs="+", + default=[], ) # product-name args @@ -343,6 +344,7 @@ def main(argv=None): help="provide product-name that would be searched", dest="product_name", action="store", + default=None, ) # version-name args @@ -352,6 +354,7 @@ def main(argv=None): help="provide version that would be searched", dest="version_number", action="store", + default=None, ) # log level args @@ -362,6 +365,7 @@ def main(argv=None): dest="log_level", action="store", choices=["debug", "info", "warning", "error", "critical"], + default="warning", ) # contains-patterns string length args @@ -373,17 +377,10 @@ def main(argv=None): default=40, ) - defaults = { - "filenames": [], - "product_name": None, - "version_number": None, - "log_level": "warning", - "string_length": 40, - } - with ErrorHandler(mode=ErrorMode.NoTrace): raw_args = parser.parse_args(argv[1:]) args = {key: value for key, value in vars(raw_args).items() if value} + defaults = {key: parser.get_default(key) for key in vars(raw_args)} args = ChainMap(args, defaults)