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/07/05 13:58:31 UTC

svn commit: r209260 - /gump/branches/Gump3/pygump/python/gump/plugins/introspection.py

Author: leosimons
Date: Tue Jul  5 04:58:30 2005
New Revision: 209260

URL: http://svn.apache.org/viewcvs?rev=209260&view=rev
Log:
Add a new introspection plugin useful as a 'debug probe'.

 * pygump/python/gump/plugins/introspection.py: new plugin usable for 'probing' during debugging.

Added:
    gump/branches/Gump3/pygump/python/gump/plugins/introspection.py
      - copied, changed from r209074, gump/branches/Gump3/pygump/python/gump/plugins/instrumentation.py

Copied: gump/branches/Gump3/pygump/python/gump/plugins/introspection.py (from r209074, gump/branches/Gump3/pygump/python/gump/plugins/instrumentation.py)
URL: http://svn.apache.org/viewcvs/gump/branches/Gump3/pygump/python/gump/plugins/introspection.py?p2=gump/branches/Gump3/pygump/python/gump/plugins/introspection.py&p1=gump/branches/Gump3/pygump/python/gump/plugins/instrumentation.py&r1=209074&r2=209260&rev=209260&view=diff
==============================================================================
--- gump/branches/Gump3/pygump/python/gump/plugins/instrumentation.py (original)
+++ gump/branches/Gump3/pygump/python/gump/plugins/introspection.py Tue Jul  5 04:58:30 2005
@@ -21,24 +21,64 @@
 
 from gump.plugins import AbstractPlugin
 
-class TimerPlugin(AbstractPlugin):
-    """Set a date property on each model object as it is visited."""
-    def __init__(self, propertyname, format='%d %b %Y %H:%M:%S'):
-        self.format = format
-        self.propertyname = propertyname
+class IntrospectionPlugin(AbstractPlugin):
+    """Print out a what the workspace looks like. Useful for debugging."""
+    def __init__(self, log):
+        self.log = log
         
-    def _do_visit(self, object):
-        setattr(object, self.propertyname, self.gettime())
-    
-    def visit_workspace(self, workspace):
-        self._do_visit(workspace)
-    
-    def visit_module(self, module):    
-        self._do_visit(module)
-    
-    def visit_project(self, project):    
-        self._do_visit(project)
-
-    def gettime(self):
-        import time
-        return time.strftime(self.format, time.localtime())
+    def finalize(self, workspace):
+        msg = "Workspace properties:\n   "
+        properties = [prop for prop in dir(workspace) if not prop.startswith("__")]
+        properties.sort()
+        msg += "\n   ".join(properties)
+
+        allproperties = []
+        for v in workspace.repositories.values():
+            properties = [prop for prop in dir(v) if not prop.startswith("__") and not prop in allproperties]
+            allproperties.extend(properties)
+        allproperties.sort()
+        msg += "\n\nAll possible repository properties:\n   "
+        msg += "\n   ".join(allproperties)
+
+        allproperties = []
+        for v in workspace.modules.values():
+            properties = [prop for prop in dir(v) if not prop.startswith("__") and not prop in allproperties]
+            allproperties.extend(properties)
+        allproperties.sort()
+        msg += "\n\nAll possible module properties:\n   "
+        msg += "\n   ".join(allproperties)
+
+        allproperties = []
+        for v in workspace.projects.values():
+            properties = [prop for prop in dir(v) if not prop.startswith("__") and not prop in allproperties]
+            allproperties.extend(properties)
+        allproperties.sort()
+        msg += "\n\nAll possible project properties:\n   "
+        msg += "\n   ".join(allproperties)
+
+        msg += "\n\nAll known repositories:\n"
+        for k in workspace.repositories.keys():
+            msg += "   %s\n" % k
+
+        msg += "\nAll known modules:\n"
+        for k in workspace.modules.keys():
+            msg += "   %s\n" % k
+
+        msg += "\nAll known projects:\n"
+        for k in workspace.modules.keys():
+            msg += "   %s\n" % k
+        
+        self.log.debug("=" * 78)
+        self.log.debug(msg)
+        self.log.debug("=" * 78)
+        
+        # Example of how you can "probe" into specific parts of the model
+        # if you want...
+        #
+        #xmlapis = workspace.projects["xml-apis"]
+        #for prop in dir(xmlapis):
+        #    att = getattr(xmlapis, prop)
+        #    if callable(att):
+        #        continue
+        #    self.log.debug("XML-APIS attribute %s has value %s" % (prop, att))
+        
\ No newline at end of file