Difference between revisions of "Example - decompose.py"
Jump to navigation
Jump to search
PeterHarding (talk | contribs) (Created page with "=Python Script to Decompose Module/Class Components= ActiveState recipe 553262 - http://www.activestate.com/recipe-553262-1] <pre> #!/usr/bin/env python # Describe classes,...") |
PeterHarding (talk | contribs) |
||
(2 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
=Python Script to Decompose Module/Class Components= | =Python Script to Decompose Module/Class Components= | ||
[http://code.activestate.com/recipes/553262-list-classes-methods-and-functions-in-a-module/ ActiveState recipe 553262] | |||
Line 157: | Line 157: | ||
describe(mod) | describe(mod) | ||
</pre> | </pre> | ||
=Examples= | |||
==sys== | |||
<pre> | |||
./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 | |||
</pre> | |||
==datetime== | |||
<pre> | |||
$ ./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) | |||
</pre> | |||
[[Category:Python]] | [[Category:Python]] |
Latest revision as of 17:53, 4 June 2012
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)