Example - decompose.py
Jump to navigation
Jump to search
Python Script to Decompose Module/Class Components
#!/usr/bin/env python # Describe classes, methods and functions in a module. # Works with user-defined modules, all Python library # modules, including built-in modules. # # recipe-553262-1 # import inspect import os, sys INDENT=0 def wi(*args): """ Function to print lines indented according to level """ if INDENT: print ' '*INDENT, for arg in args: print arg, print def indent(): """ Increase indentation """ global INDENT INDENT += 4 def dedent(): """ Decrease indentation """ global INDENT INDENT -= 4 def describe_builtin(obj): """ Describe a builtin function """ wi('+Built-in Function: %s' % obj.__name__) # Built-in functions cannot be inspected by # inspect.getargspec. We have to try and parse # the __doc__ attribute of the function. docstr = obj.__doc__ args = '' if docstr: items = docstr.split('\n') if items: func_descr = items[0] s = func_descr.replace(obj.__name__,'') idx1 = s.find('(') idx2 = s.find(')',idx1) if idx1 != -1 and idx2 != -1 and (idx2>idx1+1): args = s[idx1+1:idx2] wi('\t-Method Arguments:', args) if args=='': wi('\t-Method Arguments: None') print def describe_func(obj, method=False): """ Describe the function object passed as argument. If this is a method object, the second argument will be passed as True """ if method: wi('+Method: %s' % obj.__name__) else: wi('+Function: %s' % obj.__name__) try: arginfo = inspect.getargspec(obj) except TypeError: print return args = arginfo[0] argsvar = arginfo[1] if args: if args[0] == 'self': wi('\t%s is an instance method' % obj.__name__) args.pop(0) wi('\t-Method Arguments:', args) if arginfo[3]: dl = len(arginfo[3]) al = len(args) defargs = args[al-dl:al] wi('\t--Default arguments:',zip(defargs, arginfo[3])) if arginfo[1]: wi('\t-Positional Args Param: %s' % arginfo[1]) if arginfo[2]: wi('\t-Keyword Args Param: %s' % arginfo[2]) print def describe_klass(obj): """ Describe the class object passed as argument, including its methods """ wi('+Class: %s' % obj.__name__) indent() count = 0 for name in obj.__dict__: item = getattr(obj, name) if inspect.ismethod(item): count += 1;describe_func(item, True) if count==0: wi('(No members)') dedent() print def describe(module): """ Describe the module object passed as argument including its classes and functions """ wi('[Module: %s]\n' % module.__name__) indent() count = 0 for name in dir(module): obj = getattr(module, name) if inspect.isclass(obj): count += 1; describe_klass(obj) elif (inspect.ismethod(obj) or inspect.isfunction(obj)): count +=1 ; describe_func(obj) elif inspect.isbuiltin(obj): count += 1; describe_builtin(obj) if count==0: wi('(No members)') dedent() if __name__ == "__main__": import sys if len(sys.argv)<2: sys.exit('Usage: %s <module>' % sys.argv[0]) module = sys.argv[1].replace('.py','') mod = __import__(module) describe(mod)
Examples
sys
./decompose.py sys [Module: sys] +Built-in Function: displayhook -Method Arguments: object +Built-in Function: excepthook -Method Arguments: exctype, value, traceback +Built-in Function: _clear_type_cache -Method Arguments: None +Built-in Function: _current_frames -Method Arguments: None +Built-in Function: _getframe -Method Arguments: [depth] +Built-in Function: call_tracing -Method Arguments: func, args +Built-in Function: callstats -Method Arguments: None +Built-in Function: displayhook -Method Arguments: object +Built-in Function: exc_clear -Method Arguments: None +Built-in Function: exc_info -Method Arguments: None +Built-in Function: excepthook -Method Arguments: exctype, value, traceback +Built-in Function: exit -Method Arguments: [status] +Built-in Function: getcheckinterval -Method Arguments: None +Built-in Function: getdefaultencoding -Method Arguments: None +Built-in Function: getdlopenflags -Method Arguments: None +Built-in Function: getfilesystemencoding -Method Arguments: None +Built-in Function: getprofile -Method Arguments: None +Built-in Function: getrecursionlimit -Method Arguments: None +Built-in Function: getrefcount -Method Arguments: object +Built-in Function: getsizeof -Method Arguments: object, default +Built-in Function: gettrace -Method Arguments: None +Built-in Function: setcheckinterval -Method Arguments: n +Built-in Function: setdlopenflags -Method Arguments: n +Built-in Function: setprofile -Method Arguments: function +Built-in Function: setrecursionlimit -Method Arguments: n +Built-in Function: settrace -Method Arguments: function
datetime
$ ./decompose.py datetime [Module: datetime] +Class: date (No members) +Class: datetime (No members) +Class: time (No members) +Class: timedelta (No members) +Class: tzinfo (No members)