mirror of
https://github.com/davidhalter/typeshed.git
synced 2025-12-08 13:04:46 +08:00
Merge pull request #110 from jstasiak/python3-inspect
Improve Python 3 inspect stub
This commit is contained in:
@@ -1,26 +1,146 @@
|
||||
# Stubs for inspect
|
||||
|
||||
from typing import Any, Tuple, List, Dict, Callable, NamedTuple
|
||||
from types import FrameType
|
||||
from typing import (AbstractSet, Any, Tuple, List, Dict, Callable, Generator,
|
||||
Mapping, MutableMapping, NamedTuple, Optional, Sequence, Union,
|
||||
)
|
||||
from types import FrameType, ModuleType, TracebackType
|
||||
|
||||
_object = object
|
||||
#
|
||||
# Types and members
|
||||
#
|
||||
ModuleInfo = NamedTuple('ModuleInfo', [('name', str),
|
||||
('suffix', str),
|
||||
('mode', str),
|
||||
('module_type', int),
|
||||
])
|
||||
def getmembers(object: object,
|
||||
predicate: Callable[[Any], bool] = ...,
|
||||
) -> List[Tuple[str, object]]: ...
|
||||
def getmoduleinfo(path: str) -> Optional[ModuleInfo]: ...
|
||||
def getmodulename(path: str) -> Optional[str]: ...
|
||||
|
||||
def getmembers(obj: object, predicate: Callable[[Any], bool]) -> List[Tuple[str, object]]: ...
|
||||
def ismodule(object: object) -> bool: ...
|
||||
def isclass(object: object) -> bool: ...
|
||||
def ismethod(object: object) -> bool: ...
|
||||
def isfunction(object: object) -> bool: ...
|
||||
def isisgeneratorfunction(object: object) -> bool: ...
|
||||
def isgenerator(object: object) -> bool: ...
|
||||
|
||||
def isclass(obj: object) -> bool: ...
|
||||
# Python 3.5+
|
||||
def iscoroutinefunction(object: object) -> bool: ...
|
||||
def iscoroutine(object: object) -> bool: ...
|
||||
def isawaitable(object: object) -> bool: ...
|
||||
|
||||
# namedtuple('Attribute', 'name kind defining_class object')
|
||||
class Attribute(tuple):
|
||||
name = ... # type: str
|
||||
kind = ... # type: str
|
||||
defining_class = ... # type: type
|
||||
object = ... # type: _object
|
||||
def istraceback(object: object) -> bool: ...
|
||||
def isframe(object: object) -> bool: ...
|
||||
def iscode(object: object) -> bool: ...
|
||||
def isbuiltin(object: object) -> bool: ...
|
||||
def isroutine(object: object) -> bool: ...
|
||||
def isabstract(object: object) -> bool: ...
|
||||
def ismethoddescriptor(object: object) -> bool: ...
|
||||
def isdatadescriptor(object: object) -> bool: ...
|
||||
def isgetsetdescriptor(object: object) -> bool: ...
|
||||
def ismemberdescriptor(object: object) -> bool: ...
|
||||
|
||||
def classify_class_attrs(cls: type) -> List[Attribute]: ...
|
||||
|
||||
#
|
||||
# Retrieving source code
|
||||
#
|
||||
def getdoc(object: object) -> str: ...
|
||||
def getcomments(object: object) -> str: ...
|
||||
def getfile(object: object) -> str: ...
|
||||
def getmodule(object: object) -> ModuleType: ...
|
||||
def getsourcefile(object: object) -> str: ...
|
||||
# TODO restrict to "module, class, method, function, traceback, frame,
|
||||
# or code object"
|
||||
def getsourcelines(object: object) -> Tuple[List[str], int]: ...
|
||||
# TODO restrict to "a module, class, method, function, traceback, frame,
|
||||
# or code object"
|
||||
def getsource(object: object) -> str: ...
|
||||
def cleandoc(doc: str) -> str: ...
|
||||
|
||||
def getsourcelines(obj: object) -> Tuple[List[str], int]: ...
|
||||
|
||||
#
|
||||
# Introspecting callables with the Signature object (Python 3.3+)
|
||||
#
|
||||
def signature(callable: Callable[..., Any],
|
||||
*,
|
||||
follow_wrapped: bool = True) -> 'Signature': ...
|
||||
|
||||
class Signature:
|
||||
def __init__(self,
|
||||
parameters: Optional[Sequence['Parameter']] = ...,
|
||||
*,
|
||||
return_annotation: Any = ...) -> None: ...
|
||||
# TODO: can we be more specific here?
|
||||
empty = ... # type: object
|
||||
|
||||
parameters = ... # type: Mapping[str, 'Parameter']
|
||||
|
||||
# TODO: can we be more specific here?
|
||||
return_annotation = ... # type: Any
|
||||
|
||||
def bind(self, *args: Any, **kwargs: Any) -> 'BoundArguments': ...
|
||||
def bind_partial(self, *args: Any, **kwargs: Any) -> 'BoundArguments': ...
|
||||
def replace(self,
|
||||
*,
|
||||
parameters: Optional[Sequence['Parameter']] = ...,
|
||||
return_annotation: Any = ...) -> 'Signature': ...
|
||||
|
||||
# Python 3.5+
|
||||
@classmethod
|
||||
def from_callable(cls,
|
||||
obj: Callable[..., Any],
|
||||
*,
|
||||
follow_wrapped: bool = True) -> 'Signature': ...
|
||||
|
||||
# The name is the same as the enum's name in CPython
|
||||
class _ParameterKind: pass
|
||||
|
||||
class Parameter:
|
||||
def __init__(self,
|
||||
name: str,
|
||||
kind: _ParameterKind,
|
||||
*,
|
||||
default: Any = ...,
|
||||
annotation: Any = ...) -> None: ...
|
||||
empty = ... # type: Any
|
||||
name = ... # type: str
|
||||
default = ... # type: Any
|
||||
annotation = ... # type: Any
|
||||
|
||||
kind = ... # type: _ParameterKind
|
||||
POSITIONAL_ONLY = ... # type: _ParameterKind
|
||||
POSITIONAL_OR_KEYWORD = ... # type: _ParameterKind
|
||||
VAR_POSITIONAL = ... # type: _ParameterKind
|
||||
KEYWORD_ONLY = ... # type: _ParameterKind
|
||||
VAR_KEYWORD = ... # type: _ParameterKind
|
||||
|
||||
def replace(self,
|
||||
*,
|
||||
name: Optional[str] = ...,
|
||||
kind: Optional[_ParameterKind] = ...,
|
||||
default: Any = ...,
|
||||
annotation: Any = ...) -> 'Parameter': ...
|
||||
|
||||
class BoundArguments:
|
||||
arguments = ... # type: MutableMapping[str, Any]
|
||||
args = ... # Tuple[Any, ...]
|
||||
kwargs = ... # Dict[str, Any]
|
||||
signature = ... # type: Signature
|
||||
|
||||
# Python 3.5+
|
||||
def apply_defaults(self) -> None: ...
|
||||
|
||||
|
||||
#
|
||||
# Classes and functions
|
||||
#
|
||||
|
||||
# TODO: The actual return type should be List[_ClassTreeItem] but mypy doesn't
|
||||
# seem to be supporting this at the moment:
|
||||
# _ClassTreeItem = Union[List['_ClassTreeItem'], Tuple[type, Tuple[type, ...]]]
|
||||
def getclasstree(classes: List[type], unique: bool = ...) -> Any: ...
|
||||
|
||||
ArgSpec = NamedTuple('ArgSpec', [('args', List[str]),
|
||||
('varargs', str),
|
||||
@@ -41,4 +161,129 @@ FullArgSpec = NamedTuple('FullArgSpec', [('args', List[str]),
|
||||
|
||||
def getfullargspec(func: object) -> FullArgSpec: ...
|
||||
|
||||
def stack() -> List[Tuple[FrameType, str, int, str, List[str], int]]: ...
|
||||
# TODO make the field types more specific here
|
||||
ArgInfo = NamedTuple('ArgInfo', [('args', List[str]),
|
||||
('varargs', Optional[str]),
|
||||
('keywords', Optional[str]),
|
||||
('locals', Dict[str, Any]),
|
||||
])
|
||||
|
||||
def getargvalues(frame: FrameType) -> ArgInfo: ...
|
||||
def formatargspec(args: List[str],
|
||||
varargs: Optional[str] = ...,
|
||||
varkw: Optional[str] = ...,
|
||||
defaults: Optional[Tuple[Any]] = ...,
|
||||
kwonlyargs: Optional[List[str]] = ...,
|
||||
kwonlydefaults: Optional[Dict[str, Any]] = ...,
|
||||
annotations: Optional[Dict[str, Any]] = ...,
|
||||
formatarg: Optional[Callable[[str], str]] = ...,
|
||||
formatvarargs: Optional[Callable[[str], str]] = ...,
|
||||
formatvarkw: Optional[Callable[[str], str]] = ...,
|
||||
formatvalue: Optional[Callable[[Any], str]] = ...,
|
||||
formatreturns: Optional[Callable[[Any], str]] = ...,
|
||||
formatannotations: Optional[Callable[[Any], str]] = ...,
|
||||
) -> str: ...
|
||||
def formatargvalues(args: List[str],
|
||||
varargs: Optional[str] = ...,
|
||||
varkw: Optional[str] = ...,
|
||||
locals: Optional[Dict[str, Any]] = ...,
|
||||
formatarg: Optional[Callable[[str], str]] = ...,
|
||||
formatvarargs: Optional[Callable[[str], str]] = ...,
|
||||
formatvarkw: Optional[Callable[[str], str]] = ...,
|
||||
formatvalue: Optional[Callable[[Any], str]] = ...,
|
||||
) -> str: ...
|
||||
def getmro(cls: type) -> Tuple[type, ...]: ...
|
||||
|
||||
# Python 3.2+
|
||||
def getcallargs(func: Callable[..., Any],
|
||||
*args: Any,
|
||||
**kwds: Any) -> Dict[str, Any]: ...
|
||||
|
||||
|
||||
# Python 3.3+
|
||||
ClosureVars = NamedTuple('ClosureVars', [('nonlocals', Mapping[str, Any]),
|
||||
('globals', Mapping[str, Any]),
|
||||
('builtins', Mapping[str, Any]),
|
||||
('unbound', AbstractSet[str]),
|
||||
])
|
||||
def getclosurevars(func: Callable[..., Any]) -> ClosureVars: ...
|
||||
|
||||
# Python 3.4+
|
||||
def unwrap(func: Callable[..., Any],
|
||||
*,
|
||||
stop: Callable[[Any], Any]) -> Any: ...
|
||||
|
||||
|
||||
#
|
||||
# The interpreter stack
|
||||
#
|
||||
|
||||
# Python 3.5+ (functions returning it used to return regular tuples)
|
||||
FrameInfo = NamedTuple('FrameInfo', [('frame', FrameType),
|
||||
('filename', str),
|
||||
('lineno', int),
|
||||
('function', str),
|
||||
('code_context', List[str]),
|
||||
('index', int),
|
||||
])
|
||||
|
||||
# TODO make the frame type more specific
|
||||
def getframeinfo(frame: Any, context: int = 1) -> FrameInfo: ...
|
||||
def getouterframes(frame: Any, context: int = 1) -> List[FrameInfo]: ...
|
||||
def getinnerframes(traceback: TracebackType, context: int = 1) -> List[FrameInfo]:
|
||||
...
|
||||
def currentframe() -> Optional[FrameType]: ...
|
||||
def stack(context: int = 1) -> List[FrameInfo]: ...
|
||||
def trace(context: int = 1) -> List[FrameInfo]: ...
|
||||
|
||||
#
|
||||
# Fetching attributes statically
|
||||
#
|
||||
|
||||
# Python 3.2+
|
||||
def getattr_static(obj: object, attr: str, default: Optional[Any] = ...) -> Any: ...
|
||||
|
||||
|
||||
#
|
||||
# Current State of Generators and Coroutines
|
||||
#
|
||||
|
||||
# TODO In the next two blocks of code, can we be more specific regarding the
|
||||
# type of the "enums"?
|
||||
|
||||
# Python 3.2+
|
||||
GEN_CREATED = ... # type: str
|
||||
GEN_RUNNING = ... # type: str
|
||||
GEN_SUSPENDED = ... # type: str
|
||||
GEN_CLOSED = ... # type: str
|
||||
def getgeneratorstate(generator: Generator[Any, Any, Any]) -> str: ...
|
||||
|
||||
# Python 3.5+
|
||||
CORO_CREATED = ... # type: str
|
||||
CORO_RUNNING = ... # type: str
|
||||
CORO_SUSPENDED = ... # type: str
|
||||
CORO_CLOSED = ... # type: str
|
||||
# TODO can we be more specific than "object"?
|
||||
def getcoroutinestate(coroutine: object) -> str: ...
|
||||
|
||||
# Python 3.3+
|
||||
def getgeneratorlocals(generator: Generator[Any, Any, Any]) -> Dict[str, Any]: ...
|
||||
|
||||
# Python 3.5+
|
||||
# TODO can we be more specific than "object"?
|
||||
def getcoroutinelocals(coroutine: object) -> Dict[str, Any]: ...
|
||||
|
||||
|
||||
#
|
||||
# The following seems undocumented but it was already present in this file
|
||||
#
|
||||
_object = object
|
||||
|
||||
# namedtuple('Attribute', 'name kind defining_class object')
|
||||
class Attribute(tuple):
|
||||
name = ... # type: str
|
||||
kind = ... # type: str
|
||||
defining_class = ... # type: type
|
||||
object = ... # type: _object
|
||||
|
||||
def classify_class_attrs(cls: type) -> List[Attribute]: ...
|
||||
|
||||
Reference in New Issue
Block a user