forked from Mirror/pmbootstrap
parent
5252d8de78
commit
2e39912790
2 changed files with 57 additions and 0 deletions
|
@ -23,6 +23,26 @@ import pmb.helpers.pmaports
|
||||||
See pmb/helpers/args.py for more information about the args variable. """
|
See pmb/helpers/args.py for more information about the args variable. """
|
||||||
|
|
||||||
|
|
||||||
|
def toggle_other_boolean_flags(*other_destinations, value=True):
|
||||||
|
""" Helper function to group several argparse flags to one. Sets multiple
|
||||||
|
other_destination to value.
|
||||||
|
|
||||||
|
:param other_destinations: 'the other argument names' str
|
||||||
|
:param value 'the value to set the other_destinations to' bool
|
||||||
|
:returns custom Action"""
|
||||||
|
|
||||||
|
class SetOtherDestinationsAction(argparse.Action):
|
||||||
|
def __init__(self, option_strings, dest, **kwargs):
|
||||||
|
super().__init__(option_strings, dest, nargs=0, const=value,
|
||||||
|
default=value, **kwargs)
|
||||||
|
|
||||||
|
def __call__(self, parser, namespace, values, option_string=None):
|
||||||
|
for destination in other_destinations:
|
||||||
|
setattr(namespace, destination, value)
|
||||||
|
|
||||||
|
return SetOtherDestinationsAction
|
||||||
|
|
||||||
|
|
||||||
def type_ondev_cp(val):
|
def type_ondev_cp(val):
|
||||||
""" Parse and validate arguments to 'pmbootstrap install --ondev --cp'.
|
""" Parse and validate arguments to 'pmbootstrap install --ondev --cp'.
|
||||||
|
|
||||||
|
@ -707,6 +727,16 @@ def arguments():
|
||||||
zap.add_argument("-r", "--rust", action="store_true",
|
zap.add_argument("-r", "--rust", action="store_true",
|
||||||
help="also delete rust related caches")
|
help="also delete rust related caches")
|
||||||
|
|
||||||
|
zap_all_delete_args = ["http", "distfiles", "pkgs_local",
|
||||||
|
"pkgs_local_mismatch", "netboot", "pkgs_online_mismatch",
|
||||||
|
"rust"]
|
||||||
|
zap_all_delete_args_print = [arg.replace("_", "-")
|
||||||
|
for arg in zap_all_delete_args]
|
||||||
|
zap.add_argument("-a", "--all",
|
||||||
|
action=toggle_other_boolean_flags(*zap_all_delete_args),
|
||||||
|
help="delete everything, equivalent to: "
|
||||||
|
f"--{' --'.join(zap_all_delete_args_print)}")
|
||||||
|
|
||||||
# Action: stats
|
# Action: stats
|
||||||
stats = sub.add_parser("stats", help="show ccache stats")
|
stats = sub.add_parser("stats", help="show ccache stats")
|
||||||
stats.add_argument("--arch", default=arch_native, choices=arch_choices)
|
stats.add_argument("--arch", default=arch_native, choices=arch_choices)
|
||||||
|
|
27
test/test_arguments.py
Normal file
27
test/test_arguments.py
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
import argparse
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from pmb.parse.arguments import toggle_other_boolean_flags
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture
|
||||||
|
def example_cli_with_flags():
|
||||||
|
parser = argparse.ArgumentParser(prog="sample cli")
|
||||||
|
parser.add_argument("-f1", "--flag1", action="store_true")
|
||||||
|
parser.add_argument("-f2", "--flag2", action="store_true")
|
||||||
|
return parser
|
||||||
|
|
||||||
|
|
||||||
|
def test_toggle_other_boolean_flags(example_cli_with_flags):
|
||||||
|
other_flags = ["flag1", "flag2"]
|
||||||
|
example_cli_with_flags.add_argument(
|
||||||
|
"-f12", "--flag12",
|
||||||
|
action=toggle_other_boolean_flags(*other_flags))
|
||||||
|
args = example_cli_with_flags.parse_args(['-f12'])
|
||||||
|
|
||||||
|
expected_flags_true = other_flags + ["flag12"]
|
||||||
|
for flag in expected_flags_true:
|
||||||
|
assert getattr(args, flag)
|
Loading…
Add table
Add a link
Reference in a new issue