function#
Utils for manipulating functions.
- exception GlobalNameConflictError[source]#
Bases:
ExceptionRaised 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 fromwrappedtowrapper.updated (
Sequence[str]) – Sequence of attribute names that are.update``d on ``wrapperfrom 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.
- 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
wrapperandwrappedshare a global name that’s also used inwrapped's typehints, and is not inignored_conflict_names.- Return type: