--scope: lazy defaults (#41353)
This commit is contained in:
		@@ -69,10 +69,7 @@
 | 
			
		||||
 | 
			
		||||
def _add_scope_option(parser):
 | 
			
		||||
    parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        help="configuration scope to read/modify",
 | 
			
		||||
        "--scope", action=arguments.ConfigScope, help="configuration scope to read/modify"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -184,9 +184,8 @@ def setup_parser(subparser: argparse.ArgumentParser):
 | 
			
		||||
    # used to construct scope arguments below
 | 
			
		||||
    check.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_modify_scope(),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_modify_scope(),
 | 
			
		||||
        help="configuration scope containing mirrors to check",
 | 
			
		||||
    )
 | 
			
		||||
    check_spec_or_specfile = check.add_mutually_exclusive_group(required=True)
 | 
			
		||||
 
 | 
			
		||||
@@ -124,14 +124,31 @@ def __call__(self, parser, namespace, values, option_string=None):
 | 
			
		||||
        setattr(namespace, self.dest, deptype)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class ConfigScopeChoices:
 | 
			
		||||
    """A lazy list of config scope values (values may change at runtime in tests)."""
 | 
			
		||||
class ConfigScope(argparse.Action):
 | 
			
		||||
    """Pick the currently configured config scopes."""
 | 
			
		||||
 | 
			
		||||
    def __contains__(self, item):
 | 
			
		||||
        return item in spack.config.scopes()
 | 
			
		||||
    def __init__(self, *args, **kwargs) -> None:
 | 
			
		||||
        kwargs.setdefault("metavar", spack.config.SCOPES_METAVAR)
 | 
			
		||||
        super().__init__(*args, **kwargs)
 | 
			
		||||
 | 
			
		||||
    def __iter__(self):
 | 
			
		||||
        return iter(spack.config.scopes().keys())
 | 
			
		||||
    @property
 | 
			
		||||
    def default(self):
 | 
			
		||||
        return self._default() if callable(self._default) else self._default
 | 
			
		||||
 | 
			
		||||
    @default.setter
 | 
			
		||||
    def default(self, value):
 | 
			
		||||
        self._default = value
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def choices(self):
 | 
			
		||||
        return spack.config.scopes().keys()
 | 
			
		||||
 | 
			
		||||
    @choices.setter
 | 
			
		||||
    def choices(self, value):
 | 
			
		||||
        pass
 | 
			
		||||
 | 
			
		||||
    def __call__(self, parser, namespace, values, option_string=None):
 | 
			
		||||
        setattr(namespace, self.dest, values)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def _cdash_reporter(namespace):
 | 
			
		||||
 
 | 
			
		||||
@@ -46,9 +46,8 @@ def setup_parser(subparser):
 | 
			
		||||
    find_parser.add_argument("add_paths", nargs=argparse.REMAINDER)
 | 
			
		||||
    find_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_modify_scope("compilers"),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_modify_scope("compilers"),
 | 
			
		||||
        help="configuration scope to modify",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@@ -59,20 +58,15 @@ def setup_parser(subparser):
 | 
			
		||||
    )
 | 
			
		||||
    remove_parser.add_argument("compiler_spec")
 | 
			
		||||
    remove_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=None,
 | 
			
		||||
        help="configuration scope to modify",
 | 
			
		||||
        "--scope", action=arguments.ConfigScope, default=None, help="configuration scope to modify"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    # List
 | 
			
		||||
    list_parser = sp.add_parser("list", help="list available compilers")
 | 
			
		||||
    list_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_list_scope(),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_list_scope(),
 | 
			
		||||
        help="configuration scope to read from",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@@ -81,9 +75,8 @@ def setup_parser(subparser):
 | 
			
		||||
    info_parser.add_argument("compiler_spec")
 | 
			
		||||
    info_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_list_scope(),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_list_scope(),
 | 
			
		||||
        help="configuration scope to read from",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,6 @@
 | 
			
		||||
#
 | 
			
		||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
 | 
			
		||||
 | 
			
		||||
import spack.config
 | 
			
		||||
from spack.cmd.common import arguments
 | 
			
		||||
from spack.cmd.compiler import compiler_list
 | 
			
		||||
 | 
			
		||||
@@ -14,10 +13,7 @@
 | 
			
		||||
 | 
			
		||||
def setup_parser(subparser):
 | 
			
		||||
    subparser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        help="configuration scope to read/modify",
 | 
			
		||||
        "--scope", action=arguments.ConfigScope, help="configuration scope to read/modify"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -28,10 +28,7 @@
 | 
			
		||||
def setup_parser(subparser):
 | 
			
		||||
    # User can only choose one
 | 
			
		||||
    subparser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        help="configuration scope to read/modify",
 | 
			
		||||
        "--scope", action=arguments.ConfigScope, help="configuration scope to read/modify"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    sp = subparser.add_subparsers(metavar="SUBCOMMAND", dest="config_command")
 | 
			
		||||
 
 | 
			
		||||
@@ -46,9 +46,8 @@ def setup_parser(subparser):
 | 
			
		||||
    )
 | 
			
		||||
    find_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_modify_scope("packages"),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_modify_scope("packages"),
 | 
			
		||||
        help="configuration scope to modify",
 | 
			
		||||
    )
 | 
			
		||||
    find_parser.add_argument(
 | 
			
		||||
 
 | 
			
		||||
@@ -94,9 +94,8 @@ def setup_parser(subparser):
 | 
			
		||||
    add_parser.add_argument("url", help="url of mirror directory from 'spack mirror create'")
 | 
			
		||||
    add_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_modify_scope(),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_modify_scope(),
 | 
			
		||||
        help="configuration scope to modify",
 | 
			
		||||
    )
 | 
			
		||||
    add_parser.add_argument(
 | 
			
		||||
@@ -114,9 +113,8 @@ def setup_parser(subparser):
 | 
			
		||||
    remove_parser.add_argument("name", help="mnemonic name for mirror", metavar="mirror")
 | 
			
		||||
    remove_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_modify_scope(),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_modify_scope(),
 | 
			
		||||
        help="configuration scope to modify",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@@ -133,9 +131,8 @@ def setup_parser(subparser):
 | 
			
		||||
    )
 | 
			
		||||
    set_url_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_modify_scope(),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_modify_scope(),
 | 
			
		||||
        help="configuration scope to modify",
 | 
			
		||||
    )
 | 
			
		||||
    arguments.add_connection_args(set_url_parser, False)
 | 
			
		||||
@@ -162,9 +159,8 @@ def setup_parser(subparser):
 | 
			
		||||
    set_parser.add_argument("--url", help="url of mirror directory from 'spack mirror create'")
 | 
			
		||||
    set_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_modify_scope(),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_modify_scope(),
 | 
			
		||||
        help="configuration scope to modify",
 | 
			
		||||
    )
 | 
			
		||||
    arguments.add_connection_args(set_parser, False)
 | 
			
		||||
@@ -173,9 +169,8 @@ def setup_parser(subparser):
 | 
			
		||||
    list_parser = sp.add_parser("list", help=mirror_list.__doc__)
 | 
			
		||||
    list_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_list_scope(),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_list_scope(),
 | 
			
		||||
        help="configuration scope to read from",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -43,9 +43,8 @@ def setup_parser(subparser):
 | 
			
		||||
    list_parser = sp.add_parser("list", help=repo_list.__doc__)
 | 
			
		||||
    list_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_list_scope(),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_list_scope(),
 | 
			
		||||
        help="configuration scope to read from",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@@ -54,9 +53,8 @@ def setup_parser(subparser):
 | 
			
		||||
    add_parser.add_argument("path", help="path to a Spack package repository directory")
 | 
			
		||||
    add_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_modify_scope(),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_modify_scope(),
 | 
			
		||||
        help="configuration scope to modify",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
@@ -67,9 +65,8 @@ def setup_parser(subparser):
 | 
			
		||||
    )
 | 
			
		||||
    remove_parser.add_argument(
 | 
			
		||||
        "--scope",
 | 
			
		||||
        choices=arguments.ConfigScopeChoices(),
 | 
			
		||||
        metavar=spack.config.SCOPES_METAVAR,
 | 
			
		||||
        default=spack.config.default_modify_scope(),
 | 
			
		||||
        action=arguments.ConfigScope,
 | 
			
		||||
        default=lambda: spack.config.default_modify_scope(),
 | 
			
		||||
        help="configuration scope to modify",
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user