#
# Jasy - Web Tooling Framework
# Copyright 2010-2012 Zynga Inc.
# Copyright 2013-2014 Sebastian Werner
#
import types
import inspect
import textwrap
import re
import jasy.core.Console as Console
[docs]def highlightArgs(value, inClassOrObject=False):
argsspec = inspect.getfullargspec(value)
if inClassOrObject and argsspec.args and argsspec.args[0] == "self":
del argsspec.args[0]
argmsg = "(%s" % ", ".join(argsspec.args)
if argsspec.varkw is not None:
if argsspec.args:
argmsg += ", "
argmsg += "..."
argmsg += ")"
return Console.colorize(argmsg, "cyan")
[docs]def generateApi(api):
"""Returns a stringified output for the given API set."""
import jasy.env.Task as Task
result = []
for key in sorted(api):
if key.startswith("__"):
continue
value = api[key]
if isinstance(value, Task.Task):
continue
msg = Console.colorize(key, "bold")
if inspect.isfunction(value):
msg += Console.colorize(highlightArgs(value), "bold")
elif inspect.isclass(value):
msg += Console.colorize(highlightArgs(value.__init__, True), "bold")
humanType = extractType(value)
if humanType:
msg += Console.colorize(" [%s]" % extractType(value), "magenta")
msg += extractDoc(value) or ""
result.append(msg)
if inspect.isclass(value) or inspect.ismodule(value) or isinstance(value, object):
if inspect.isclass(value):
sprefix = ""
elif inspect.ismodule(value) or isinstance(value, object):
sprefix = "%s." % key
smembers = dict(inspect.getmembers(value))
for skey in sorted(smembers):
if not "__" in skey:
svalue = smembers[skey]
if inspect.ismethod(svalue) or inspect.isfunction(svalue):
msg = " - %s%s" % (sprefix, Console.colorize(skey, "bold"))
msg += highlightArgs(svalue, humanType in ("Class", "Object"))
msg += extractDoc(svalue, indent=6) or ""
result.append(msg)
result.append("")
return "\n".join(result)