aboutsummaryrefslogtreecommitdiffstats
path: root/mitmproxy/utils/typecheck.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2016-12-11 17:04:19 +1300
committerAldo Cortesi <aldo@nullcube.com>2016-12-12 07:39:59 +1300
commitca33bea296195211e63fc0dc56171b7873600618 (patch)
tree7337f4cb56fd538bd6c3926ce3005e8d1adb9603 /mitmproxy/utils/typecheck.py
parentc5717b17df8577205106351bfe8299ff79f1930b (diff)
downloadmitmproxy-ca33bea296195211e63fc0dc56171b7873600618.tar.gz
mitmproxy-ca33bea296195211e63fc0dc56171b7873600618.tar.bz2
mitmproxy-ca33bea296195211e63fc0dc56171b7873600618.zip
Extend type checker validate Sequence specs
Diffstat (limited to 'mitmproxy/utils/typecheck.py')
-rw-r--r--mitmproxy/utils/typecheck.py18
1 files changed, 12 insertions, 6 deletions
diff --git a/mitmproxy/utils/typecheck.py b/mitmproxy/utils/typecheck.py
index c68357b7..ca2c7d5d 100644
--- a/mitmproxy/utils/typecheck.py
+++ b/mitmproxy/utils/typecheck.py
@@ -21,7 +21,7 @@ def check_type(attr_name: str, value: typing.Any, typeinfo: type) -> None:
type(value)
))
- if isinstance(typeinfo, typing.UnionMeta):
+ if typeinfo.__qualname__ == "Union":
for T in typeinfo.__union_params__:
try:
check_type(attr_name, value, T)
@@ -30,18 +30,24 @@ def check_type(attr_name: str, value: typing.Any, typeinfo: type) -> None:
else:
return
raise e
- if isinstance(typeinfo, typing.TupleMeta):
- check_type(attr_name, value, tuple)
+ elif typeinfo.__qualname__ == "Tuple":
+ if not isinstance(value, (tuple, list)):
+ raise e
if len(typeinfo.__tuple_params__) != len(value):
raise e
for i, (x, T) in enumerate(zip(value, typeinfo.__tuple_params__)):
check_type("{}[{}]".format(attr_name, i), x, T)
return
- if issubclass(typeinfo, typing.IO):
+ elif typeinfo.__qualname__ == "Sequence":
+ T = typeinfo.__args__[0]
+ if not isinstance(value, (tuple, list)):
+ raise e
+ for v in value:
+ check_type(attr_name, v, T)
+ elif typeinfo.__qualname__ == "IO":
if hasattr(value, "read"):
return
-
- if not isinstance(value, typeinfo):
+ elif not isinstance(value, typeinfo):
raise e