Robert Brewer avatar Robert Brewer committed c259b1c

Adding optional objgraph import to gctools.

Comments (0)

Files changed (1)

cherrypy/lib/gctools.py

 import gc
 import inspect
+import os
+import sys
+ 
+try:
+    import objgraph
+except ImportError:
+    objgraph = None
 
+import cherrypy
 from cherrypy import _cprequest
 
 
                         "\nExpected %s to %s %r references, got %s." %
                         (minobj, maxobj, cls, lenobj))
                 for obj in objs:
+                    if objgraph is not None:
+                        gfile = os.path.join(
+                            os.getcwd(), "graph_%s.png" % id(obj))
+                        objgraph.show_refs(
+                            obj, extra_ignore=[id(objs), id(sys._getframe())],
+                            max_depth=4, too_many=20,
+                            filename=gfile)
                     output.append("\nReferrers for %s:" % repr(obj))
                     t = ReferrerTree(ignore=[objs], maxdepth=3)
                     tree = t.ascend(obj)
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.