diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2016-12-11 17:04:19 +1300 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2016-12-12 07:39:59 +1300 |
commit | ca33bea296195211e63fc0dc56171b7873600618 (patch) | |
tree | 7337f4cb56fd538bd6c3926ce3005e8d1adb9603 /mitmproxy/utils/typecheck.py | |
parent | c5717b17df8577205106351bfe8299ff79f1930b (diff) | |
download | mitmproxy-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.py | 18 |
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 |