Make PluginWithSuchNameExists more informative

To find out where are already imported modules of existing plugin
and the new one. We need to provide to the user places of allocations
of this modules.

Change-Id: Ic9e072dfb7f183c2d935b514d2b8df1bd42d3976
This commit is contained in:
Roman Vasilets 2015-12-11 19:23:13 +02:00
parent 3e1520f834
commit 2bb8c6abaf
2 changed files with 12 additions and 4 deletions

View File

@ -13,6 +13,8 @@
# License for the specific language governing permissions and limitations
# under the License.
import sys
from rally.common.plugin import discover
from rally.common.plugin import info
from rally.common.plugin import meta
@ -142,13 +144,17 @@ class Plugin(meta.MetaMixin, info.InfoMixin):
@classmethod
def _set_name_and_namespace(cls, name, namespace):
try:
Plugin.get(name, namespace=namespace)
existing_plugin = Plugin.get(name, namespace=namespace)
except exceptions.PluginNotFound:
cls._meta_set("name", name)
cls._meta_set("namespace", namespace)
else:
raise exceptions.PluginWithSuchNameExists(name=name,
namespace=namespace)
raise exceptions.PluginWithSuchNameExists(
name=name, namespace=namespace,
existing_path=(
sys.modules[existing_plugin.__module__].__file__),
new_path=sys.modules[cls.__module__].__file__
)
@classmethod
def _set_deprecated(cls, reason, rally_version):

View File

@ -86,7 +86,9 @@ class PluginNotFound(NotFoundException):
class PluginWithSuchNameExists(RallyException):
msg_fmt = _("Plugin with such name: %(name)s already exists in "
"%(namespace)s namespace")
"%(namespace)s namespace. It's module allocates at "
"%(existing_path)s. You are trying to add plugin whose module "
"allocates at %(new_path)s.")
class NoSuchConfigField(NotFoundException):