From 52da46640b46b11c69e07408d9278a056cf05c27 Mon Sep 17 00:00:00 2001 From: Maximilian Hils Date: Sat, 29 Jul 2017 20:40:00 +0200 Subject: add option type hints --- mitmproxy/options.py | 79 ++++++++++++++++++++++++++++++ test/helper_tools/typehints_for_options.py | 34 +++++++++++++ 2 files changed, 113 insertions(+) create mode 100644 test/helper_tools/typehints_for_options.py diff --git a/mitmproxy/options.py b/mitmproxy/options.py index 8a01cf40..10aaee12 100644 --- a/mitmproxy/options.py +++ b/mitmproxy/options.py @@ -48,6 +48,85 @@ LISTEN_PORT = 8080 class Options(optmanager.OptManager): + + if False: + # This provides type hints for IDEs (e.g. PyCharm) and mypy. + # Autogenerated using test/helper_tools/typehints_for_options.py + add_upstream_certs_to_client_chain = None # type: bool + allow_remote = None # type: bool + anticache = None # type: bool + anticomp = None # type: bool + body_size_limit = None # type: Optional[str] + cadir = None # type: str + certs = None # type: Sequence[str] + ciphers_client = None # type: Optional[str] + ciphers_server = None # type: Optional[str] + client_certs = None # type: Optional[str] + client_replay = None # type: Sequence[str] + console_focus_follow = None # type: bool + console_layout = None # type: str + console_layout_headers = None # type: bool + console_mouse = None # type: bool + console_order = None # type: str + console_order_reversed = None # type: bool + console_palette = None # type: str + console_palette_transparent = None # type: bool + default_contentview = None # type: str + flow_detail = None # type: int + http2 = None # type: bool + http2_priority = None # type: bool + ignore_hosts = None # type: Sequence[str] + intercept = None # type: Optional[str] + intercept_active = None # type: bool + keep_host_header = None # type: bool + keepserving = None # type: bool + listen_host = None # type: str + listen_port = None # type: int + mode = None # type: str + onboarding = None # type: bool + onboarding_host = None # type: str + onboarding_port = None # type: int + proxyauth = None # type: Optional[str] + rawtcp = None # type: bool + refresh_server_playback = None # type: bool + replacements = None # type: Sequence[str] + replay_kill_extra = None # type: bool + rfile = None # type: Optional[str] + save_stream_file = None # type: Optional[str] + save_stream_filter = None # type: Optional[str] + scripts = None # type: Sequence[str] + server = None # type: bool + server_replay = None # type: Sequence[str] + server_replay_ignore_content = None # type: bool + server_replay_ignore_host = None # type: bool + server_replay_ignore_params = None # type: Sequence[str] + server_replay_ignore_payload_params = None # type: Sequence[str] + server_replay_nopop = None # type: bool + server_replay_use_headers = None # type: Sequence[str] + setheaders = None # type: Sequence[str] + showhost = None # type: bool + spoof_source_address = None # type: bool + ssl_insecure = None # type: bool + ssl_verify_upstream_trusted_ca = None # type: Optional[str] + ssl_verify_upstream_trusted_cadir = None # type: Optional[str] + ssl_version_client = None # type: str + ssl_version_server = None # type: str + stickyauth = None # type: Optional[str] + stickycookie = None # type: Optional[str] + stream_large_bodies = None # type: Optional[str] + stream_websockets = None # type: bool + tcp_hosts = None # type: Sequence[str] + upstream_auth = None # type: Optional[str] + upstream_bind_address = None # type: str + upstream_cert = None # type: bool + verbosity = None # type: str + view_filter = None # type: Optional[str] + web_debug = None # type: bool + web_iface = None # type: str + web_open_browser = None # type: bool + web_port = None # type: int + websocket = None # type: bool + def __init__(self, **kwargs) -> None: super().__init__() self.add_option( diff --git a/test/helper_tools/typehints_for_options.py b/test/helper_tools/typehints_for_options.py new file mode 100644 index 00000000..8c7d006c --- /dev/null +++ b/test/helper_tools/typehints_for_options.py @@ -0,0 +1,34 @@ +import typing +from unittest import mock + +from mitmproxy import proxy, options +from mitmproxy.tools import dump, console, web + + +def print_typehints(opts): + for name, option in sorted(opts.items()): + print( + # For Python 3.6, we can just use "{}: {}". + "{} = None # type: {}".format( + name, + { + int: "int", + str: "str", + bool: "bool", + typing.Optional[str]: "Optional[str]", + typing.Sequence[str]: "Sequence[str]" + }[option.typespec] + ) + ) + + +if __name__ == "__main__": + opts = options.Options() + server = proxy.server.DummyServer(None) + + # initialize with all three tools here to capture tool-specific options defined in addons. + dump.DumpMaster(opts, server) + with mock.patch("sys.stdout.isatty", lambda: True): + console.master.ConsoleMaster(opts, server) + web.master.WebMaster(opts, server) + print_typehints(opts) -- cgit v1.2.3