Difference between revisions of "Example - decompose.py"
Jump to navigation
Jump to search
PeterHarding (talk | contribs) |
PeterHarding (talk | contribs) |
||
| 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)