mirror of
https://github.com/Grasscutters/mitmproxy.git
synced 2024-11-23 00:01:36 +00:00
Merge pull request #1896 from mhils/3.5.0-compat
Fix compat with Python 3.5.0
This commit is contained in:
commit
973406f327
@ -1,5 +1,4 @@
|
||||
import typing
|
||||
import sys
|
||||
|
||||
|
||||
def check_type(attr_name: str, value: typing.Any, typeinfo: type) -> None:
|
||||
@ -25,10 +24,11 @@ def check_type(attr_name: str, value: typing.Any, typeinfo: type) -> None:
|
||||
typename = str(typeinfo)
|
||||
|
||||
if typename.startswith("typing.Union"):
|
||||
if sys.version_info < (3, 6):
|
||||
types = typeinfo.__union_params__
|
||||
else:
|
||||
try:
|
||||
types = typeinfo.__args__
|
||||
except AttributeError:
|
||||
# Python 3.5.x
|
||||
types = typeinfo.__union_params__
|
||||
|
||||
for T in types:
|
||||
try:
|
||||
@ -39,10 +39,11 @@ def check_type(attr_name: str, value: typing.Any, typeinfo: type) -> None:
|
||||
return
|
||||
raise e
|
||||
elif typename.startswith("typing.Tuple"):
|
||||
if sys.version_info < (3, 6):
|
||||
types = typeinfo.__tuple_params__
|
||||
else:
|
||||
try:
|
||||
types = typeinfo.__args__
|
||||
except AttributeError:
|
||||
# Python 3.5.x
|
||||
types = typeinfo.__tuple_params__
|
||||
|
||||
if not isinstance(value, (tuple, list)):
|
||||
raise e
|
||||
@ -52,7 +53,11 @@ def check_type(attr_name: str, value: typing.Any, typeinfo: type) -> None:
|
||||
check_type("{}[{}]".format(attr_name, i), x, T)
|
||||
return
|
||||
elif typename.startswith("typing.Sequence"):
|
||||
T = typeinfo.__args__[0]
|
||||
try:
|
||||
T = typeinfo.__args__[0]
|
||||
except AttributeError:
|
||||
# Python 3.5.0
|
||||
T = typeinfo.__parameters__[0]
|
||||
if not isinstance(value, (tuple, list)):
|
||||
raise e
|
||||
for v in value:
|
||||
@ -60,6 +65,8 @@ def check_type(attr_name: str, value: typing.Any, typeinfo: type) -> None:
|
||||
elif typename.startswith("typing.IO"):
|
||||
if hasattr(value, "read"):
|
||||
return
|
||||
else:
|
||||
raise e
|
||||
elif not isinstance(value, typeinfo):
|
||||
raise e
|
||||
|
||||
|
@ -1,6 +1,9 @@
|
||||
import io
|
||||
import typing
|
||||
|
||||
import mock
|
||||
import pytest
|
||||
|
||||
from mitmproxy.utils import typecheck
|
||||
|
||||
|
||||
@ -57,3 +60,17 @@ def test_check_sequence():
|
||||
typecheck.check_type("foo", [10, "foo"], typing.Sequence[int])
|
||||
with pytest.raises(TypeError):
|
||||
typecheck.check_type("foo", [b"foo"], typing.Sequence[str])
|
||||
with pytest.raises(TypeError):
|
||||
typecheck.check_type("foo", "foo", typing.Sequence[str])
|
||||
|
||||
# Python 3.5.0 only defines __parameters__
|
||||
m = mock.Mock()
|
||||
m.__str__ = lambda self: "typing.Sequence"
|
||||
m.__parameters__ = (int,)
|
||||
typecheck.check_type("foo", [10], m)
|
||||
|
||||
|
||||
def test_check_io():
|
||||
typecheck.check_type("foo", io.StringIO(), typing.IO[str])
|
||||
with pytest.raises(TypeError):
|
||||
typecheck.check_type("foo", "foo", typing.IO[str])
|
||||
|
Loading…
Reference in New Issue
Block a user