function¶
Utils for manipulating functions.
- exception GlobalNameConflictError[source]¶
Bases:
Exception
Raised on a conflict between the globals used to resolve annotations of a wrapped function and its wrapper.
- command_wraps(wrapped, assigned=('__module__', '__name__', '__qualname__', '__doc__', '__annotations__'), updated=('__dict__',), *, ignored_conflict_names=frozenset({}))[source]¶
Update the decorated function to look like
wrapped
, and update globals for discord.py forwardref evaluation.See
update_wrapper_globals()
for more details on how the globals are updated.- Parameters:
wrapped (
Callable
[[ParamSpec
(_P
)],TypeVar
(_R
)]) – The function to wrap with.assigned (
Sequence
[str
]) – Sequence of attribute names that are directly assigned fromwrapped
towrapper
.updated (
Sequence
[str
]) – Sequence of attribute names that are.update``d on ``wrapper
from the attributes onwrapped
.ignored_conflict_names (
Set
[str
]) – A set of names to ignore if a conflict between them is found.
- Return type:
Callable
[[Callable
[[ParamSpec
(_P
)],TypeVar
(_R
)]],Callable
[[ParamSpec
(_P
)],TypeVar
(_R
)]]- Returns:
A decorator that behaves like
functools.wraps()
, with the wrapper replaced with the functionupdate_wrapper_globals()
returned.
- get_arg_value(name_or_pos, arguments)[source]¶
Return a value from arguments based on a name or position.
- Parameters:
arguments (
OrderedDict
[str
,Any
]) – An ordered mapping of parameter names to argument values.- Return type:
- Returns:
Value from arguments based on a name or position.
- Raises:
TypeError – name_or_pos isn’t a str or int.
ValueError – name_or_pos does not match any argument.
- get_arg_value_wrapper(decorator_func, name_or_pos, func=None)[source]¶
Call decorator_func with the value of the arg at the given name/position.
- Parameters:
decorator_func (
Callable
[[Callable
[[OrderedDict
[str
,Any
]],Any
]],Callable
[[Callable
],Callable
]]) – A function that must accept a callable as a parameter to which it will pass a mapping of parameter names to argument values of the function it’s decorating.name_or_pos (
int
|str
) – The name/position of the arg to get the value from.func (
Optional
[Callable
[[Any
],Any
]]) – An optional callable which will return a new value given the argument’s value.
- Return type:
- Returns:
The decorator returned by decorator_func.
- get_bound_args(func, args, kwargs)[source]¶
Bind args and kwargs to func and return a mapping of parameter names to argument values.
Default parameter values are also set.
- update_wrapper_globals(wrapper, wrapped, *, ignored_conflict_names=frozenset({}))[source]¶
Create a copy of
wrapper
, the copy’s globals are updated withwrapped
's globals.For forwardrefs in command annotations, discord.py uses the
__global__
attribute of the function to resolve their values. This breaks for decorators that replace the function because they have their own globals.Warning
This function captures the state of
wrapped
's module’s globals when it’s called; changes won’t be reflected in the new function’s globals.- Parameters:
- Raises:
GlobalNameConflictError – If
wrapper
andwrapped
share a global name that’s also used inwrapped
's typehints, and is not inignored_conflict_names
.- Return type: