You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gump.apache.org by le...@apache.org on 2005/05/06 10:49:53 UTC
svn commit: r168574 -
/gump/branches/Gump3/pygump/python/gump/engine/objectifier.py
Author: leosimons
Date: Fri May 6 01:49:52 2005
New Revision: 168574
URL: http://svn.apache.org/viewcvs?rev=168574&view=rev
Log:
Deal with missing dependencies gracefully.
* pygump/python/gump/engine/objectifier.py: mark a project as failed when it specifies an unknown dependency, rather than killing the run completely.
Modified:
gump/branches/Gump3/pygump/python/gump/engine/objectifier.py
Modified: gump/branches/Gump3/pygump/python/gump/engine/objectifier.py
URL: http://svn.apache.org/viewcvs/gump/branches/Gump3/pygump/python/gump/engine/objectifier.py?rev=168574&r1=168573&r2=168574&view=diff
==============================================================================
--- gump/branches/Gump3/pygump/python/gump/engine/objectifier.py (original)
+++ gump/branches/Gump3/pygump/python/gump/engine/objectifier.py Fri May 6 01:49:52 2005
@@ -21,6 +21,7 @@
import logging
import os
+import sys
from xml import dom
from xml.dom import minidom
@@ -251,7 +252,7 @@
try:
dependency_project = projectlist[dependency_name]
except KeyError:
- raise MissingDependencyError(project, dependency_name), "Dependency '%s' specified by '%s' cannot be found!" % (dependency_name, project)
+ raise MissingDependencyError(project, dependency_name)
idList = dependency.getAttribute("ids")
if idList:
@@ -304,9 +305,12 @@
###
class MissingDependencyError(EngineError):
"""Exception that's raised if a dependency is declared on a project that doesn't exist."""
- def __init__(project, dependency_name):
+ def __init__(self, project, dependency_name):
self.project = project
self.dependency_name = dependency_name
+
+ def __str__(self):
+ return "Dependency '%s' specified by '%s' cannot be found!" % (self.dependency_name, self.project)
class Objectifier:
@@ -385,4 +389,15 @@
# wire up dependencies only after projects have been created
for project_definition in project_definitions:
if not project_definition.nodeType == dom.Node.ELEMENT_NODE: continue
- _create_dependencies(project_definition, workspace.projects)
+ try:
+ _create_dependencies(project_definition, workspace.projects)
+ except MissingDependencyError:
+ # TODO this is introducing a dependency on the engine
+ # algorithm. Need to move the "failure" logic closer to
+ # the "core" model.
+ from gump.model.util import mark_failure
+ from gump.engine.algorithm import ExceptionInfo
+ (type, value, traceback) = sys.exc_info()
+ cause = ExceptionInfo(type, value, traceback)
+ mark_failure(project, cause)
+ self.log.error(cause)