Issue #10193: Simplified instrospection used by turtle module
This commit is contained in:
parent
7424dd359c
commit
c1a6836305
|
@ -109,6 +109,7 @@ import types
|
||||||
import math
|
import math
|
||||||
import time
|
import time
|
||||||
import os
|
import os
|
||||||
|
import inspect
|
||||||
|
|
||||||
from os.path import isfile, split, join
|
from os.path import isfile, split, join
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
@ -3889,31 +3890,35 @@ except:
|
||||||
|
|
||||||
|
|
||||||
def getmethparlist(ob):
|
def getmethparlist(ob):
|
||||||
"Get strings describing the arguments for the given object"
|
"""Get strings describing the arguments for the given object
|
||||||
argText1 = argText2 = ""
|
|
||||||
|
Returns a pair of strings representing function parameter lists
|
||||||
|
including parenthesis. The first string is suitable for use in
|
||||||
|
function definition and the second is suitable for use in function
|
||||||
|
call. The "self" parameter is not included.
|
||||||
|
"""
|
||||||
|
defText = callText = ""
|
||||||
# bit of a hack for methods - turn it into a function
|
# bit of a hack for methods - turn it into a function
|
||||||
# but we drop the "self" param.
|
# but we drop the "self" param.
|
||||||
# Try and build one for Python defined functions
|
# Try and build one for Python defined functions
|
||||||
argOffset = 1
|
args, varargs, varkw = inspect.getargs(ob.__code__)
|
||||||
counter = ob.__code__.co_argcount
|
items2 = args[1:]
|
||||||
items2 = list(ob.__code__.co_varnames[argOffset:counter])
|
realArgs = args[1:]
|
||||||
realArgs = ob.__code__.co_varnames[argOffset:counter]
|
|
||||||
defaults = ob.__defaults__ or []
|
defaults = ob.__defaults__ or []
|
||||||
defaults = list(map(lambda name: "=%s" % repr(name), defaults))
|
defaults = ["=%r" % (value,) for value in defaults]
|
||||||
defaults = [""] * (len(realArgs)-len(defaults)) + defaults
|
defaults = [""] * (len(realArgs)-len(defaults)) + defaults
|
||||||
items1 = list(map(lambda arg, dflt: arg+dflt, realArgs, defaults))
|
items1 = [arg + dflt for arg, dflt in zip(realArgs, defaults)]
|
||||||
if ob.__code__.co_flags & 0x4:
|
if varargs is not None:
|
||||||
items1.append("*"+ob.__code__.co_varnames[counter])
|
items1.append("*" + varargs)
|
||||||
items2.append("*"+ob.__code__.co_varnames[counter])
|
items2.append("*" + varargs)
|
||||||
counter += 1
|
if varkw is not None:
|
||||||
if ob.__code__.co_flags & 0x8:
|
items1.append("**" + varkw)
|
||||||
items1.append("**"+ob.__code__.co_varnames[counter])
|
items2.append("**" + varkw)
|
||||||
items2.append("**"+ob.__code__.co_varnames[counter])
|
defText = ", ".join(items1)
|
||||||
argText1 = ", ".join(items1)
|
defText = "(%s)" % defText
|
||||||
argText1 = "(%s)" % argText1
|
callText = ", ".join(items2)
|
||||||
argText2 = ", ".join(items2)
|
callText = "(%s)" % callText
|
||||||
argText2 = "(%s)" % argText2
|
return defText, callText
|
||||||
return argText1, argText2
|
|
||||||
|
|
||||||
def _turtle_docrevise(docstr):
|
def _turtle_docrevise(docstr):
|
||||||
"""To reduce docstrings from RawTurtle class for functions
|
"""To reduce docstrings from RawTurtle class for functions
|
||||||
|
|
Loading…
Reference in New Issue