From eaccaf8a83ef6d7e01176c69ae4241b0b0e9ed3a Mon Sep 17 00:00:00 2001 From: Nikolay Starodubtsev Date: Mon, 19 Oct 2015 12:50:55 +0300 Subject: [PATCH] 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 --- murano/dsl/exceptions.py | 7 +++++-- murano/dsl/murano_package.py | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/murano/dsl/exceptions.py b/murano/dsl/exceptions.py index c8c4039c..c923ff84 100644 --- a/murano/dsl/exceptions.py +++ b/murano/dsl/exceptions.py @@ -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): diff --git a/murano/dsl/murano_package.py b/murano/dsl/murano_package.py index b2abb8b6..3f3e66f7 100644 --- a/murano/dsl/murano_package.py +++ b/murano/dsl/murano_package.py @@ -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):