repo: fix construction of UnknownPackageError (#16865)
Also improve the error messages
This commit is contained in:
		| @@ -759,8 +759,8 @@ def _create_namespace(self): | |||||||
| 
 | 
 | ||||||
|         """ |         """ | ||||||
|         parent = None |         parent = None | ||||||
|         for l in range(1, len(self._names) + 1): |         for i in range(1, len(self._names) + 1): | ||||||
|             ns = '.'.join(self._names[:l]) |             ns = '.'.join(self._names[:i]) | ||||||
| 
 | 
 | ||||||
|             if ns not in sys.modules: |             if ns not in sys.modules: | ||||||
|                 module = SpackNamespace(ns) |                 module = SpackNamespace(ns) | ||||||
| @@ -773,7 +773,7 @@ def _create_namespace(self): | |||||||
|                 # This ensures that we can do things like: |                 # This ensures that we can do things like: | ||||||
|                 #    import spack.pkg.builtin.mpich as mpich |                 #    import spack.pkg.builtin.mpich as mpich | ||||||
|                 if parent: |                 if parent: | ||||||
|                     modname = self._names[l - 1] |                     modname = self._names[i - 1] | ||||||
|                     setattr(parent, modname, module) |                     setattr(parent, modname, module) | ||||||
|             else: |             else: | ||||||
|                 # no need to set up a module |                 # no need to set up a module | ||||||
| @@ -882,9 +882,7 @@ def get(self, spec): | |||||||
|             raise UnknownPackageError(spec.name) |             raise UnknownPackageError(spec.name) | ||||||
| 
 | 
 | ||||||
|         if spec.namespace and spec.namespace != self.namespace: |         if spec.namespace and spec.namespace != self.namespace: | ||||||
|             raise UnknownPackageError( |             raise UnknownPackageError(spec.name, self.namespace) | ||||||
|                 "Repository %s does not contain package %s" |  | ||||||
|                 % (self.namespace, spec.fullname)) |  | ||||||
| 
 | 
 | ||||||
|         package_class = self.get_pkg_class(spec.name) |         package_class = self.get_pkg_class(spec.name) | ||||||
|         try: |         try: | ||||||
| @@ -1271,16 +1269,22 @@ class UnknownPackageError(UnknownEntityError): | |||||||
| 
 | 
 | ||||||
|     def __init__(self, name, repo=None): |     def __init__(self, name, repo=None): | ||||||
|         msg = None |         msg = None | ||||||
|         if repo: |  | ||||||
|             msg = "Package '%s' not found in repository '%s'" % (name, repo) |  | ||||||
|         else: |  | ||||||
|             msg = "Package '%s' not found." % name |  | ||||||
| 
 |  | ||||||
|         # special handling for specs that may have been intended as filenames |  | ||||||
|         # prompt the user to ask whether they intended to write './<name>' |  | ||||||
|         long_msg = None |         long_msg = None | ||||||
|         if name.endswith(".yaml"): |         if name: | ||||||
|             long_msg = "Did you mean to specify a filename with './%s'?" % name |             if repo: | ||||||
|  |                 msg = "Package '{0}' not found in repository '{1}'" | ||||||
|  |                 msg = msg.format(name, repo) | ||||||
|  |             else: | ||||||
|  |                 msg = "Package '{0}' not found.".format(name) | ||||||
|  | 
 | ||||||
|  |             # Special handling for specs that may have been intended as | ||||||
|  |             # filenames: prompt the user to ask whether they intended to write | ||||||
|  |             # './<name>'. | ||||||
|  |             if name.endswith(".yaml"): | ||||||
|  |                 long_msg = "Did you mean to specify a filename with './{0}'?" | ||||||
|  |                 long_msg = long_msg.format(name) | ||||||
|  |         else: | ||||||
|  |             msg = "Attempting to retrieve anonymous package." | ||||||
| 
 | 
 | ||||||
|         super(UnknownPackageError, self).__init__(msg, long_msg) |         super(UnknownPackageError, self).__init__(msg, long_msg) | ||||||
|         self.name = name |         self.name = name | ||||||
|   | |||||||
| @@ -51,6 +51,11 @@ def test_repo_unknown_pkg(mutable_mock_repo): | |||||||
|         mutable_mock_repo.get('builtin.mock.nonexistentpackage') |         mutable_mock_repo.get('builtin.mock.nonexistentpackage') | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  | def test_repo_anonymous_pkg(mutable_mock_repo): | ||||||
|  |     with pytest.raises(spack.repo.UnknownPackageError): | ||||||
|  |         mutable_mock_repo.get('+variant') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
| @pytest.mark.maybeslow | @pytest.mark.maybeslow | ||||||
| def test_repo_last_mtime(): | def test_repo_last_mtime(): | ||||||
|     latest_mtime = max(os.path.getmtime(p.module.__file__) |     latest_mtime = max(os.path.getmtime(p.module.__file__) | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Sergey Kosukhin
					Sergey Kosukhin