Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Get All Functions, Classes, datatypes from Python

Tags:

python

I am developing a small python learning app. where student simply searches for keywords like, list, date my app gives output as help text for keyword.

first i want to extract all python builtins, classes help text using help() into json file. I tried:

>>> import sys
>>> sys.modules.keys()
['__future__', 'copy_reg', 'sre_compile', '_hashlib', '_sre', 'encodings', 'site', '__builtin__', 'datetime', '__main__', 'encodings.encodings', 'hashlib', 'abc', 'posixpath', '_random', '_weakrefset', 'errno', 'binascii', 'encodings.codecs', 'sre_constants', 're', '_abcoll', 'types', '_codecs', '_warnings', 'math', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path', '_locale', 'sitecustomize', 'signal', 'random', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'sre_parse', 'os', '_weakref']

with above result i can extract

>>> bi = sys.modules.get('__builtin__')
>>> help(bi.list.append) (or)
>>> bi.list.append.__doc__
'L.append(object) -- append object to end'  # goes to json file

sys.modules gives re, random,etc. but i didn't find datetime in above list of modules. how to find all available functions, data types, classes etc from python?

Note: my goal is to extract help text as much as possible from python. not only sys.modules any method can be appreciated.

Edit: there is no datetime at first.

>>> import sys
>>> sys.modules.keys()
['copy_reg', 'encodings', 'site', '__builtin__', '__main__', 'encodings.encodings', 'abc', 'posixpath', '_weakrefset', 'errno', 'encodings.codecs', '_abcoll', 'types', '_codecs', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path', 'sitecustomize', 'signal', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'os', '_weakref']

After importing datetime sys.modules

>>> import datetime
>>> sys.modules.keys()
['copy_reg', 'encodings', 'site', '__builtin__', 'datetime', '__main__', 'encodings.encodings', 'abc', 'posixpath', '_weakrefset', 'errno', 'encodings.codecs', '_abcoll', 'types', '_codecs', '_warnings', 'genericpath', 'stat', 'zipimport', 'encodings.__builtin__', 'warnings', 'UserDict', 'encodings.utf_8', 'sys', 'codecs', 'readline', 'os.path', 'sitecustomize', 'signal', 'linecache', 'posix', 'encodings.aliases', 'exceptions', 'os', '_weakref']
>>> 
like image 528
Ravi Kumar Avatar asked Apr 21 '26 05:04

Ravi Kumar


1 Answers

datetime is part of the standard library; its datetime.datetime type is not as built-in as list, which is a built-in type.

If you still insist on iterating through sys.modules rather than looking it up, often equally interactively, you might have to resort to importing all standard libraries: import sys

from stdlib_list import stdlib_list

for lib in stdlib_list("2.7"):
    try:
        __import__(lib)
    except ImportError:
        continue

assert 'datetime' in sys.modules

print sys.modules.get('datetime').datetime.__doc__
# datetime(year, month, day[, hour[, minute[, second[, microsecond[,tzinfo]]]]])
#
# The year, month and day arguments are required. tzinfo may be None, or an
# instance of a tzinfo subclass. The remaining arguments may be ints or longs.
like image 73
Brian Avatar answered Apr 23 '26 18:04

Brian