extensions.py: remove import of spack.cmd (#47963)
This commit is contained in:
parent
77e2187e13
commit
05acd29f38
@ -4,6 +4,7 @@
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
|
||||
import argparse
|
||||
import difflib
|
||||
import importlib
|
||||
import os
|
||||
import re
|
||||
@ -125,6 +126,8 @@ def get_module(cmd_name):
|
||||
tty.debug("Imported {0} from built-in commands".format(pname))
|
||||
except ImportError:
|
||||
module = spack.extensions.get_module(cmd_name)
|
||||
if not module:
|
||||
raise CommandNotFoundError(cmd_name)
|
||||
|
||||
attr_setdefault(module, SETUP_PARSER, lambda *args: None) # null-op
|
||||
attr_setdefault(module, DESCRIPTION, "")
|
||||
@ -691,3 +694,24 @@ def find_environment(args):
|
||||
def first_line(docstring):
|
||||
"""Return the first line of the docstring."""
|
||||
return docstring.split("\n")[0]
|
||||
|
||||
|
||||
class CommandNotFoundError(spack.error.SpackError):
|
||||
"""Exception class thrown when a requested command is not recognized as
|
||||
such.
|
||||
"""
|
||||
|
||||
def __init__(self, cmd_name):
|
||||
msg = (
|
||||
f"{cmd_name} is not a recognized Spack command or extension command; "
|
||||
"check with `spack commands`."
|
||||
)
|
||||
long_msg = None
|
||||
|
||||
similar = difflib.get_close_matches(cmd_name, all_commands())
|
||||
|
||||
if 1 <= len(similar) <= 5:
|
||||
long_msg = "\nDid you mean one of the following commands?\n "
|
||||
long_msg += "\n ".join(similar)
|
||||
|
||||
super().__init__(msg, long_msg)
|
||||
|
@ -5,7 +5,6 @@
|
||||
"""Service functions and classes to implement the hooks
|
||||
for Spack's command extensions.
|
||||
"""
|
||||
import difflib
|
||||
import glob
|
||||
import importlib
|
||||
import os
|
||||
@ -17,7 +16,6 @@
|
||||
|
||||
import llnl.util.lang
|
||||
|
||||
import spack.cmd
|
||||
import spack.config
|
||||
import spack.error
|
||||
import spack.util.path
|
||||
@ -25,9 +23,6 @@
|
||||
_extension_regexp = re.compile(r"spack-(\w[-\w]*)$")
|
||||
|
||||
|
||||
# TODO: For consistency we should use spack.cmd.python_name(), but
|
||||
# currently this would create a circular relationship between
|
||||
# spack.cmd and spack.extensions.
|
||||
def _python_name(cmd_name):
|
||||
return cmd_name.replace("-", "_")
|
||||
|
||||
@ -211,8 +206,7 @@ def get_module(cmd_name):
|
||||
module = load_command_extension(cmd_name, folder)
|
||||
if module:
|
||||
return module
|
||||
else:
|
||||
raise CommandNotFoundError(cmd_name)
|
||||
return None
|
||||
|
||||
|
||||
def get_template_dirs():
|
||||
@ -224,27 +218,6 @@ def get_template_dirs():
|
||||
return extensions
|
||||
|
||||
|
||||
class CommandNotFoundError(spack.error.SpackError):
|
||||
"""Exception class thrown when a requested command is not recognized as
|
||||
such.
|
||||
"""
|
||||
|
||||
def __init__(self, cmd_name):
|
||||
msg = (
|
||||
"{0} is not a recognized Spack command or extension command;"
|
||||
" check with `spack commands`.".format(cmd_name)
|
||||
)
|
||||
long_msg = None
|
||||
|
||||
similar = difflib.get_close_matches(cmd_name, spack.cmd.all_commands())
|
||||
|
||||
if 1 <= len(similar) <= 5:
|
||||
long_msg = "\nDid you mean one of the following commands?\n "
|
||||
long_msg += "\n ".join(similar)
|
||||
|
||||
super().__init__(msg, long_msg)
|
||||
|
||||
|
||||
class ExtensionNamingError(spack.error.SpackError):
|
||||
"""Exception class thrown when a configured extension does not follow
|
||||
the expected naming convention.
|
||||
|
@ -41,6 +41,7 @@
|
||||
import spack.provider_index
|
||||
import spack.spec
|
||||
import spack.tag
|
||||
import spack.tengine
|
||||
import spack.util.file_cache
|
||||
import spack.util.git
|
||||
import spack.util.naming as nm
|
||||
@ -1485,8 +1486,6 @@ def add_package(self, name, dependencies=None):
|
||||
Both "dep_type" and "condition" can default to ``None`` in which case
|
||||
``spack.dependency.default_deptype`` and ``spack.spec.Spec()`` are used.
|
||||
"""
|
||||
import spack.tengine # avoid circular import
|
||||
|
||||
dependencies = dependencies or []
|
||||
context = {"cls_name": nm.mod_to_class(name), "dependencies": dependencies}
|
||||
template = spack.tengine.make_environment().get_template("mock-repository/package.pyt")
|
||||
|
@ -210,7 +210,7 @@ def test_missing_command():
|
||||
"""Ensure that we raise the expected exception if the desired command is
|
||||
not present.
|
||||
"""
|
||||
with pytest.raises(spack.extensions.CommandNotFoundError):
|
||||
with pytest.raises(spack.cmd.CommandNotFoundError):
|
||||
spack.cmd.get_module("no-such-command")
|
||||
|
||||
|
||||
@ -220,9 +220,9 @@ def test_missing_command():
|
||||
("/my/bad/extension", spack.extensions.ExtensionNamingError),
|
||||
("", spack.extensions.ExtensionNamingError),
|
||||
("/my/bad/spack--extra-hyphen", spack.extensions.ExtensionNamingError),
|
||||
("/my/good/spack-extension", spack.extensions.CommandNotFoundError),
|
||||
("/my/still/good/spack-extension/", spack.extensions.CommandNotFoundError),
|
||||
("/my/spack-hyphenated-extension", spack.extensions.CommandNotFoundError),
|
||||
("/my/good/spack-extension", spack.cmd.CommandNotFoundError),
|
||||
("/my/still/good/spack-extension/", spack.cmd.CommandNotFoundError),
|
||||
("/my/spack-hyphenated-extension", spack.cmd.CommandNotFoundError),
|
||||
],
|
||||
ids=["no_stem", "vacuous", "leading_hyphen", "basic_good", "trailing_slash", "hyphenated"],
|
||||
)
|
||||
|
Loading…
Reference in New Issue
Block a user