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)