Skip to content

Commit 533c507

Browse files
committed
Fix for Python 3.8 and lower
1 parent 533541d commit 533c507

File tree

3 files changed

+22
-2
lines changed

3 files changed

+22
-2
lines changed

runtype/dataclass.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55
import random
66
from copy import copy
77
import dataclasses
8-
from typing import Union, ForwardRef
8+
from typing import Union
99
from abc import ABC, abstractmethod
1010
import inspect
1111

12+
from .utils import ForwardRef
1213
from .common import CHECK_TYPES
1314
from .validation import TypeMismatchError, ensure_isa as default_ensure_isa
1415
from .pytypes import TypeCaster, type_caster, SumType, NoneType

runtype/pytypes.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import typing
1010
from datetime import datetime
1111

12+
from .utils import ForwardRef
1213
from .base_types import DataType, Validator, TypeMismatchError
1314
from . import base_types
1415
from . import datetime_parse
@@ -340,7 +341,7 @@ def _to_canon(self, t):
340341
if isinstance(t, (base_types.Type, Validator)):
341342
return t
342343

343-
if isinstance(t, typing.ForwardRef):
344+
if isinstance(t, ForwardRef):
344345
t = t._evaluate(self.frame.f_globals, self.frame.f_locals, set())
345346

346347
if isinstance(t, tuple):

runtype/utils.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,22 @@
11
import inspect
2+
import sys
3+
4+
if sys.version_info < (3, 7):
5+
# python 3.6
6+
from typing import _ForwardRef as ForwardRef
7+
_orig_eval = ForwardRef._eval_type
8+
elif sys.version_info < (3, 9):
9+
from typing import ForwardRef
10+
_orig_eval = ForwardRef._evaluate
11+
else:
12+
from typing import ForwardRef
13+
14+
if sys.version_info < (3, 9):
15+
def _evaluate(self, g, l, _):
16+
return _orig_eval(self, g, l)
17+
ForwardRef._evaluate = _evaluate
18+
19+
220

321
def get_func_signatures(typesystem, f):
422
sig = inspect.signature(f)

0 commit comments

Comments
 (0)