diff options
author | Thomas Kriechbaumer <Kriechi@users.noreply.github.com> | 2018-06-17 08:45:03 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-06-17 08:45:03 +0200 |
commit | 3cd37652709292cffa1bc733134cef5483489341 (patch) | |
tree | c3ec7c89f398088779fd9bef14061f5b782f8577 | |
parent | 9ff4f55614eee729aede5aa45bca63026145b8ae (diff) | |
parent | 77b49aa8de7ce6695b31b7d6dd4e0b62e766a504 (diff) | |
download | mitmproxy-3cd37652709292cffa1bc733134cef5483489341.tar.gz mitmproxy-3cd37652709292cffa1bc733134cef5483489341.tar.bz2 mitmproxy-3cd37652709292cffa1bc733134cef5483489341.zip |
Merge pull request #3211 from cortesi/tcheck
Add typechecking of Any values for state object
-rw-r--r-- | mitmproxy/stateobject.py | 11 | ||||
-rw-r--r-- | test/mitmproxy/test_stateobject.py | 2 |
2 files changed, 10 insertions, 3 deletions
diff --git a/mitmproxy/stateobject.py b/mitmproxy/stateobject.py index 26468ccc..2c16dcda 100644 --- a/mitmproxy/stateobject.py +++ b/mitmproxy/stateobject.py @@ -1,6 +1,7 @@ import typing from typing import Any # noqa from typing import MutableMapping # noqa +import json from mitmproxy.coretypes import serializable from mitmproxy.utils import typecheck @@ -77,8 +78,14 @@ def _process(typeinfo: typecheck.Type, val: typing.Any, make: bool) -> typing.An for k, v in val.items() } elif typename.startswith("typing.Any"): - # FIXME: Remove this when we remove flow.metadata - assert isinstance(val, (int, str, bool, bytes)) + # This requires a bit of explanation. We can't import our IO layer here, + # because it causes a circular import. Rather than restructuring the + # code for this, we use JSON serialization, which has similar primitive + # type restrictions as tnetstring, to check for conformance. + try: + json.dumps(val) + except TypeError: + raise ValueError(f"Data not serializable: {val}") return val else: return typeinfo(val) diff --git a/test/mitmproxy/test_stateobject.py b/test/mitmproxy/test_stateobject.py index a642e023..a2df57fc 100644 --- a/test/mitmproxy/test_stateobject.py +++ b/test/mitmproxy/test_stateobject.py @@ -125,7 +125,7 @@ def test_any(): assert a.x == b.x a = TAny(object()) - with pytest.raises(AssertionError): + with pytest.raises(ValueError): a.get_state() |