aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@corte.si>2018-04-17 10:18:45 +1200
committerGitHub <noreply@github.com>2018-04-17 10:18:45 +1200
commit14aa61b6b1d406d55a4819afab0c01eac6d1eafa (patch)
tree318d7c5720abcf975847ff2df9a3ec09f968bfce
parent754cb6cac9b1db56e2221fa379db014856a4725d (diff)
parentef4db528871c96a0304a2057d5f1ee8330ca6122 (diff)
downloadmitmproxy-14aa61b6b1d406d55a4819afab0c01eac6d1eafa.tar.gz
mitmproxy-14aa61b6b1d406d55a4819afab0c01eac6d1eafa.tar.bz2
mitmproxy-14aa61b6b1d406d55a4819afab0c01eac6d1eafa.zip
Merge pull request #3063 from cortesi/sigs
Ignore signal errors on windows + various fixes
-rw-r--r--mitmproxy/tools/main.py30
-rw-r--r--test/mitmproxy/tools/test_main.py9
2 files changed, 22 insertions, 17 deletions
diff --git a/mitmproxy/tools/main.py b/mitmproxy/tools/main.py
index 8d63aa32..5548509e 100644
--- a/mitmproxy/tools/main.py
+++ b/mitmproxy/tools/main.py
@@ -67,7 +67,7 @@ def run(
make_parser: typing.Callable[[options.Options], argparse.ArgumentParser],
arguments: typing.Sequence[str],
extra: typing.Callable[[typing.Any], dict] = None
-): # pragma: no cover
+) -> master.Master: # pragma: no cover
"""
extra: Extra argument processing callable which returns a dict of
options.
@@ -121,7 +121,11 @@ def run(
signal.signal(signal.SIGTERM, cleankill)
loop = asyncio.get_event_loop()
for signame in ('SIGINT', 'SIGTERM'):
- loop.add_signal_handler(getattr(signal, signame), master.shutdown)
+ try:
+ loop.add_signal_handler(getattr(signal, signame), master.shutdown)
+ except NotImplementedError:
+ # Not supported on Windows
+ pass
master.run()
except exceptions.OptionsError as e:
print("%s: %s" % (sys.argv[0], e), file=sys.stderr)
@@ -131,19 +135,18 @@ def run(
return master
-def mitmproxy(args=None): # pragma: no cover
+def mitmproxy(args=None) -> typing.Optional[int]: # pragma: no cover
if os.name == "nt":
print("Error: mitmproxy's console interface is not supported on Windows. "
"You can run mitmdump or mitmweb instead.", file=sys.stderr)
- sys.exit(1)
-
+ return 1
assert_utf8_env()
-
from mitmproxy.tools import console
- return run(console.master.ConsoleMaster, cmdline.mitmproxy, args)
+ run(console.master.ConsoleMaster, cmdline.mitmproxy, args)
+ return None
-def mitmdump(args=None): # pragma: no cover
+def mitmdump(args=None) -> typing.Optional[int]: # pragma: no cover
from mitmproxy.tools import dump
def extra(args):
@@ -157,11 +160,12 @@ def mitmdump(args=None): # pragma: no cover
return {}
m = run(dump.DumpMaster, cmdline.mitmdump, args, extra)
- if m and m.errorcheck.has_errored:
- sys.exit(1)
- return m
+ if m and m.errorcheck.has_errored: # type: ignore
+ return 1
+ return None
-def mitmweb(args=None): # pragma: no cover
+def mitmweb(args=None) -> typing.Optional[int]: # pragma: no cover
from mitmproxy.tools import web
- return run(web.master.WebMaster, cmdline.mitmweb, args)
+ run(web.master.WebMaster, cmdline.mitmweb, args)
+ return None
diff --git a/test/mitmproxy/tools/test_main.py b/test/mitmproxy/tools/test_main.py
index ba213733..57544276 100644
--- a/test/mitmproxy/tools/test_main.py
+++ b/test/mitmproxy/tools/test_main.py
@@ -1,18 +1,19 @@
import pytest
from mitmproxy.tools import main
+from mitmproxy import ctx
@pytest.mark.asyncio
async def test_mitmweb(event_loop):
- m = main.mitmweb([
+ main.mitmweb([
"--no-web-open-browser",
"-q", "-p", "0",
])
- await m._shutdown()
+ await ctx.master._shutdown()
@pytest.mark.asyncio
async def test_mitmdump():
- m = main.mitmdump(["-q", "-p", "0"])
- await m._shutdown()
+ main.mitmdump(["-q", "-p", "0"])
+ await ctx.master._shutdown()