From 74d8ad2013314b8ea11cdd8fe73af72ad76e969f Mon Sep 17 00:00:00 2001 From: Rapptz Date: Sun, 11 Apr 2021 02:11:24 -0400 Subject: [PATCH] [commands] Add support for Python 3.10 Union typing --- discord/ext/commands/core.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/discord/ext/commands/core.py b/discord/ext/commands/core.py index 215c89b1e..7b54717f9 100644 --- a/discord/ext/commands/core.py +++ b/discord/ext/commands/core.py @@ -35,6 +35,7 @@ import asyncio import functools import inspect import datetime +import types import sys import discord @@ -104,6 +105,12 @@ def _evaluate_annotation(tp: Any, globals: Dict[str, Any], cache: Dict[str, Any] if hasattr(tp, '__args__'): implicit_str = True args = tp.__args__ + if not hasattr(tp, '__origin__'): + if PY_310 and tp.__class__ is types.Union: + converted = Union[args] # type: ignore + return _evaluate_annotation(converted, globals, cache) + + return tp if tp.__origin__ is Union: try: if args.index(type(None)) != len(args) - 1: @@ -136,7 +143,7 @@ def resolve_annotation(annotation: Any, globalns: Dict[str, Any], cache: Dict[st annotation = ForwardRef(annotation) return _evaluate_annotation(annotation, globalns, cache) -def get_signature_parameters(function) -> Dict[str, inspect.Parameter]: +def get_signature_parameters(function: types.FunctionType) -> Dict[str, inspect.Parameter]: globalns = function.__globals__ signature = inspect.signature(function) params = {}