+
+

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 from wrapped to wrapper.

  • +
  • updated (Sequence[str]) – Sequence of attribute names that are .update``d on ``wrapper from the attributes on wrapped.

  • +
  • 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 function update_wrapper_globals() returned.

+
+
+
+ +
+
+update_wrapper_globals(wrapper, wrapped, *, ignored_conflict_names=frozenset({}))[source]#
+

Create a copy of wrapper, the copy’s globals are updated with wrapped'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:
+
    +
  • wrapper (Callable[ParamSpec(_P), TypeVar(_R)]) – The function to wrap.

  • +
  • wrapped (Callable[ParamSpec(_P), TypeVar(_R)]) – The function to wrap with.

  • +
  • ignored_conflict_names (Set[str]) – A set of names to ignore if a conflict between them is found.

  • +
+
+
Raises:
+

GlobalNameConflictError – If wrapper and wrapped share a global name that’s also used in wrapped's typehints, + and is not in ignored_conflict_names.

+
+
Return type:
+

Callable[ParamSpec(_P), TypeVar(_R)]

+
+
+
+ +
+ +