Add new dsl exception for better error reporting

Extend NoClassFound exception for the case when we have parent and child
MuranoPL classes in different packages and "parent" package is not
present in the requirements section of the "child" package.

Change-Id: I41b8033f7e987564ab804d9219eb5063b9e8320b
Closes-Bug: #1504334
This commit is contained in:
Nikolay Starodubtsev 2015-10-19 12:50:55 +03:00
parent 8ee1335b5e
commit eaccaf8a83
2 changed files with 10 additions and 4 deletions

View File

@ -44,8 +44,11 @@ class NoMethodFound(Exception):
class NoClassFound(Exception):
def __init__(self, name):
super(NoClassFound, self).__init__('Class "%s" is not found' % name)
def __init__(self, name, packages=[]):
packages = ', '.join("{0}/{1}".format(p.name, p.version)
for p in packages)
super(NoClassFound, self).__init__(
'Class "{0}" is not found in {1}'.format(name, packages))
class NoPackageFound(Exception):

View File

@ -143,8 +143,8 @@ class MuranoPackage(dsl_types.MuranoPackage):
result = self._classes.get(name)
if result:
return result
if search_requirements:
pkgs_for_search = []
for package_name, version_spec in self._requirements.iteritems():
if package_name == self.name:
continue
@ -153,8 +153,11 @@ class MuranoPackage(dsl_types.MuranoPackage):
try:
return referenced_package.find_class(name, False)
except exceptions.NoClassFound:
pkgs_for_search.append(referenced_package)
continue
raise exceptions.NoClassFound(name)
raise exceptions.NoClassFound(name, packages=pkgs_for_search)
raise exceptions.NoClassFound(name, packages=[self])
@property
def context(self):