From ed57bb4c421bbd9c4009196217b8f1709a1474f9 Mon Sep 17 00:00:00 2001 From: Mike Crute Date: Sun, 26 Jul 2009 13:15:14 -0400 Subject: Initial import --- py2depgraph.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 py2depgraph.py (limited to 'py2depgraph.py') diff --git a/py2depgraph.py b/py2depgraph.py new file mode 100644 index 0000000..5e97e06 --- /dev/null +++ b/py2depgraph.py @@ -0,0 +1,62 @@ +# Copyright 2004 Toby Dickenson +# +# Permission is hereby granted, free of charge, to any person obtaining +# a copy of this software and associated documentation files (the +# "Software"), to deal in the Software without restriction, including +# without limitation the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the Software, and to +# permit persons to whom the Software is furnished to do so, subject +# to the following conditions: +# +# The above copyright notice and this permission notice shall be included +# in all copies or substantial portions of the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +# CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +# TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +import sys, pprint +import modulefinder + +class mymf(modulefinder.ModuleFinder): + def __init__(self,*args,**kwargs): + self._depgraph = {} + self._types = {} + self._last_caller = None + modulefinder.ModuleFinder.__init__(self,*args,**kwargs) + + def import_hook(self, name, caller=None, fromlist=None): + old_last_caller = self._last_caller + try: + self._last_caller = caller + return modulefinder.ModuleFinder.import_hook(self,name,caller,fromlist) + finally: + self._last_caller = old_last_caller + + def import_module(self,partnam,fqname,parent): + r = modulefinder.ModuleFinder.import_module(self,partnam,fqname,parent) + if r is not None: + self._depgraph.setdefault(self._last_caller.__name__,{})[r.__name__] = 1 + return r + + def load_module(self, fqname, fp, pathname, (suffix, mode, type)): + r = modulefinder.ModuleFinder.load_module(self, fqname, fp, pathname, (suffix, mode, type)) + if r is not None: + self._types[r.__name__] = type + return r + + +def main(argv): + path = sys.path[:] + debug = 0 + exclude = [] + mf = mymf(path,debug,exclude) + mf.run_script(argv[0]) + pprint.pprint({'depgraph':mf._depgraph,'types':mf._types}) + +if __name__=='__main__': + main(sys.argv[1:]) \ No newline at end of file -- cgit v1.2.3