mitmproxy in interactive modeO to switch to the options viewstr-optionmitmproxy crash with the following stacktrace:Traceback (most recent call last):
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/master.py", line 86, in run_loop
loop()
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/main_loop.py", line 286, in run
self._run()
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/main_loop.py", line 384, in _run
self.event_loop.run()
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/main_loop.py", line 1484, in run
reraise(*exc_info)
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/compat.py", line 58, in reraise
raise value
File "/usr/lib/python3.6/asyncio/events.py", line 145, in _run
self._callback(*self._args)
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/raw_display.py", line 404, in <lambda>
event_loop, callback, self.get_available_raw_input())
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/raw_display.py", line 502, in parse_input
callback(processed, processed_codes)
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/main_loop.py", line 411, in _update
self.process_input(keys)
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/main_loop.py", line 511, in process_input
k = self._topmost_widget.keypress(self.screen_size, k)
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/tools/console/window.py", line 309, in keypress
k = super().keypress(size, k)
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/container.py", line 1131, in keypress
return self.body.keypress( (maxcol, remaining), key )
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/tools/console/window.py", line 44, in keypress
ret = super().keypress(size, key)
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/urwid/container.py", line 1131, in keypress
return self.body.keypress( (maxcol, remaining), key )
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/tools/console/options.py", line 283, in keypress
return self.focus_item.keypress(tsize, key)
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/tools/console/options.py", line 177, in keypress
d = self.master.options.parse_setval(foc.opt.name, v)
File "/tmp/mitmproxy-crash/lib/python3.6/site-packages/mitmproxy/optmanager.py", line 332, in parse_setval
if o.typespec in (str, typing.Optional[str]):
AttributeError: 'str' object has no attribute 'typespec'
mitmproxy has crashed!
Please lodge a bug report at:
https://github.com/mitmproxy/mitmproxy
Mitmproxy: 4.0.3
Python: 3.6.6
OpenSSL: OpenSSL 1.1.0h 27 Mar 2018
Platform: Linux-4.17.0-x86_64-with-debian-buster-sid
Hi there, I'm not sure if this has been fixed in v4.0.4 (which was released a month after this change was merged because I'm getting the same error. @gcmurphy
steps:
mitmproxy -p 8088O to edit optionsa in the intercept optionTraceback (most recent call last):
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/master.py", line 86, in run_loop
loop()
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/main_loop.py", line 286, in run
self._run()
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/main_loop.py", line 384, in _run
self.event_loop.run()
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/main_loop.py", line 1484, in run
reraise(*exc_info)
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/compat.py", line 58, in reraise
raise value
File "/usr/local/opt/python/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/events.py", line 88, in _run
self._context.run(self._callback, *self._args)
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/raw_display.py", line 404, in <lambda>
event_loop, callback, self.get_available_raw_input())
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/raw_display.py", line 502, in parse_input
callback(processed, processed_codes)
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/main_loop.py", line 411, in _update
self.process_input(keys)
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/main_loop.py", line 511, in process_input
k = self._topmost_widget.keypress(self.screen_size, k)
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/tools/console/window.py", line 309, in keypress
k = super().keypress(size, k)
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/container.py", line 1131, in keypress
return self.body.keypress( (maxcol, remaining), key )
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/tools/console/window.py", line 44, in keypress
ret = super().keypress(size, key)
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/urwid/container.py", line 1131, in keypress
return self.body.keypress( (maxcol, remaining), key )
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/tools/console/options.py", line 283, in keypress
return self.focus_item.keypress(tsize, key)
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/tools/console/options.py", line 177, in keypress
d = self.master.options.parse_setval(foc.opt.name, v)
File "/usr/local/Cellar/mitmproxy/4.0.4/libexec/lib/python3.7/site-packages/mitmproxy/optmanager.py", line 332, in parse_setval
if o.typespec in (str, typing.Optional[str]):
AttributeError: 'str' object has no attribute 'typespec'
mitmproxy has crashed!
Please lodge a bug report at:
https://github.com/mitmproxy/mitmproxy
System information
Mitmproxy: 4.0.4
Python: 3.7.0
OpenSSL: OpenSSL 1.0.2o 27 Mar 2018
Platform: Darwin-16.7.0-x86_64-i386-64bit
thanks.
Had a quick look and I don't think my change landed in v4.0.4. I'm seeing this for the line that changed on a v4.0.4 checkout.
fea08ef91 mitmproxy/tools/console/options.py (Aldo Cortesi 2017-03-17 14:11:33 +1300 177) d = self.master.options.parse_setval(foc.opt.name, v)
The stacktrace also shows the old line of code d = self.master.options.parse_setval(foc.opt.name, v)
You are right - it is only available on master.
We typically don't backport "smaller things", but I think this one would be nice to have on the v4.x branch as well!
@mhils?
Really inconvenient issue, any timeline on this?
Most helpful comment
Really inconvenient issue, any timeline on this?