Merge pull request #1632 from cortesi/refactor

Start rationalising our module structure bit by bit
This commit is contained in:
Aldo Cortesi 2016-10-19 15:03:50 +13:00 committed by GitHub
commit 49346c5248
75 changed files with 157 additions and 247 deletions

View File

@ -11,8 +11,8 @@ API
- `mitmproxy.models.http.HTTPResponse <#mitmproxy.models.http.HTTPResponse>`_
- `mitmproxy.models.http.HTTPFlow <#mitmproxy.models.http.HTTPFlow>`_
- Logging
- `mitmproxy.controller.Log <#mitmproxy.controller.Log>`_
- `mitmproxy.controller.LogEntry <#mitmproxy.controller.LogEntry>`_
- `mitmproxy.log.Log <#mitmproxy.controller.Log>`_
- `mitmproxy.log.LogEntry <#mitmproxy.controller.LogEntry>`_
Errors
@ -36,5 +36,7 @@ HTTP
Logging
--------
.. autoclass:: mitmproxy.controller.Log
.. autoclass:: mitmproxy.log.Log
:inherited-members:
.. autoclass:: mitmproxy.log.LogEntry
:inherited-members:

View File

@ -6,7 +6,7 @@ Overview
Mitmproxy has a powerful scripting API that allows you to control almost any
aspect of traffic being proxied. In fact, much of mitmproxy's own core
functionality is implemented using the exact same API exposed to scripters (see
:src:`mitmproxy/builtins`).
:src:`mitmproxy/addons`).
A simple example

View File

@ -37,7 +37,7 @@ class MyMaster(master.Master):
opts = options.Options(cadir="~/.mitmproxy/")
config = ProxyConfig(opts)
state = flow.State()
state = state.State()
server = ProxyServer(config)
m = MyMaster(opts, server, state)
m.run()

View File

@ -4,7 +4,7 @@ instance, we're using the Flask framework (http://flask.pocoo.org/) to expose
a single simplest-possible page.
"""
from flask import Flask
from mitmproxy.builtins import wsgiapp
from mitmproxy.addons import wsgiapp
app = Flask("proxapp")

View File

@ -6,7 +6,7 @@ def _get_name(itm):
return getattr(itm, "name", itm.__class__.__name__.lower())
class Addons:
class AddonManager:
def __init__(self, master):
self.chain = []
self.master = master

View File

@ -0,0 +1,29 @@
from mitmproxy.addons import anticache
from mitmproxy.addons import anticomp
from mitmproxy.addons import clientplayback
from mitmproxy.addons import filestreamer
from mitmproxy.addons import onboarding
from mitmproxy.addons import replace
from mitmproxy.addons import script
from mitmproxy.addons import setheaders
from mitmproxy.addons import serverplayback
from mitmproxy.addons import stickyauth
from mitmproxy.addons import stickycookie
from mitmproxy.addons import streambodies
def default_addons():
return [
onboarding.Onboarding(),
anticache.AntiCache(),
anticomp.AntiComp(),
stickyauth.StickyAuth(),
stickycookie.StickyCookie(),
script.ScriptLoader(),
filestreamer.FileStreamer(),
streambodies.StreamBodies(),
replace.Replace(),
setheaders.SetHeaders(),
serverplayback.ServerPlayback(),
clientplayback.ClientPlayback(),
]

View File

@ -1,5 +1,5 @@
from mitmproxy.builtins import wsgiapp
from mitmproxy.builtins.onboardingapp import app
from mitmproxy.addons import wsgiapp
from mitmproxy.addons.onboardingapp import app
class Onboarding(wsgiapp.WSGIApp):

View File

@ -6,9 +6,9 @@ import tornado.wsgi
from mitmproxy import utils
from mitmproxy.proxy import config
from mitmproxy.builtins import wsgiapp
from mitmproxy.addons import wsgiapp
loader = tornado.template.Loader(utils.pkg_data.path("builtins/onboardingapp/templates"))
loader = tornado.template.Loader(utils.pkg_data.path("addons/onboardingapp/templates"))
class Adapter(tornado.wsgi.WSGIAdapter):
@ -86,7 +86,7 @@ application = tornado.web.Application(
r"/static/(.*)",
tornado.web.StaticFileHandler,
{
"path": utils.pkg_data.path("builtins/onboardingapp/static")
"path": utils.pkg_data.path("addons/onboardingapp/static")
}
),
],

View File

@ -29,7 +29,7 @@ class WSGIApp:
**{"mitmproxy.master": ctx.master}
)
if err:
ctx.log.warn("Error in wsgi app. %s" % err, "error")
ctx.log.error("Error in wsgi app. %s" % err)
flow.reply.kill()
raise exceptions.AddonHalt()

View File

@ -1,29 +0,0 @@
from mitmproxy.builtins import anticache
from mitmproxy.builtins import anticomp
from mitmproxy.builtins import clientplayback
from mitmproxy.builtins import filestreamer
from mitmproxy.builtins import onboarding
from mitmproxy.builtins import replace
from mitmproxy.builtins import script
from mitmproxy.builtins import setheaders
from mitmproxy.builtins import serverplayback
from mitmproxy.builtins import stickyauth
from mitmproxy.builtins import stickycookie
from mitmproxy.builtins import streambodies
def default_addons():
return [
onboarding.Onboarding(),
anticache.AntiCache(),
anticomp.AntiComp(),
stickyauth.StickyAuth(),
stickycookie.StickyCookie(),
script.ScriptLoader(),
filestreamer.FileStreamer(),
streambodies.StreamBodies(),
replace.Replace(),
setheaders.SetHeaders(),
serverplayback.ServerPlayback(),
clientplayback.ClientPlayback(),
]

View File

@ -1,93 +0,0 @@
import os
import tornado.template
import tornado.web
import tornado.wsgi
from mitmproxy import utils
from mitmproxy.proxy import config
loader = tornado.template.Loader(utils.pkg_data.path("builtins/onboardingapp/templates"))
class Adapter(tornado.wsgi.WSGIAdapter):
# Tornado doesn't make the WSGI environment available to pages, so this
# hideous monkey patch is the easiest way to get to the mitmproxy.master
# variable.
def __init__(self, application):
self._application = application
def application(self, request):
request.master = self.environ["mitmproxy.master"]
return self._application(request)
def __call__(self, environ, start_response):
self.environ = environ
return tornado.wsgi.WSGIAdapter.__call__(
self,
environ,
start_response
)
class Index(tornado.web.RequestHandler):
def get(self):
t = loader.load("index.html")
self.write(t.generate())
class PEM(tornado.web.RequestHandler):
@property
def filename(self):
return config.CONF_BASENAME + "-ca-cert.pem"
def get(self):
p = os.path.join(self.request.master.options.cadir, self.filename)
p = os.path.expanduser(p)
self.set_header("Content-Type", "application/x-x509-ca-cert")
self.set_header(
"Content-Disposition",
"inline; filename={}".format(
self.filename))
with open(p, "rb") as f:
self.write(f.read())
class P12(tornado.web.RequestHandler):
@property
def filename(self):
return config.CONF_BASENAME + "-ca-cert.p12"
def get(self):
p = os.path.join(self.request.master.options.cadir, self.filename)
p = os.path.expanduser(p)
self.set_header("Content-Type", "application/x-pkcs12")
self.set_header(
"Content-Disposition",
"inline; filename={}".format(
self.filename))
with open(p, "rb") as f:
self.write(f.read())
application = tornado.web.Application(
[
(r"/", Index),
(r"/cert/pem", PEM),
(r"/cert/p12", P12),
(
r"/static/(.*)",
tornado.web.StaticFileHandler,
{
"path": utils.pkg_data.path("onboarding/static")
}
),
],
# debug=True
)

View File

@ -2,7 +2,7 @@ import re
import urwid
from mitmproxy import exceptions
from mitmproxy import flowfilter
from mitmproxy.builtins import script
from mitmproxy.addons import script
from mitmproxy.console import common
from mitmproxy.console.grideditor import base
from mitmproxy.console.grideditor import col_bytes

View File

@ -14,7 +14,7 @@ import weakref
import urwid
from typing import Optional
from mitmproxy import builtins
from mitmproxy import addons
from mitmproxy import contentviews
from mitmproxy import controller
from mitmproxy import exceptions
@ -22,6 +22,7 @@ from mitmproxy import master
from mitmproxy import flow
from mitmproxy import flowfilter
from mitmproxy import utils
from mitmproxy.addons import state
import mitmproxy.options
from mitmproxy.console import flowlist
from mitmproxy.console import flowview
@ -39,10 +40,10 @@ from netlib import tcp, strutils
EVENTLOG_SIZE = 500
class ConsoleState(flow.State):
class ConsoleState(state.State):
def __init__(self):
flow.State.__init__(self)
state.State.__init__(self)
self.focus = None
self.follow_focus = None
self.default_body_view = contentviews.get("Auto")
@ -251,7 +252,7 @@ class ConsoleMaster(master.Master):
signals.replace_view_state.connect(self.sig_replace_view_state)
signals.push_view_state.connect(self.sig_push_view_state)
signals.sig_add_log.connect(self.sig_add_log)
self.addons.add(*builtins.default_addons())
self.addons.add(*addons.default_addons())
self.addons.add(self.state)
def __setattr__(self, name, value):

View File

@ -3,47 +3,6 @@ import queue
from mitmproxy import exceptions
class LogEntry:
def __init__(self, msg, level):
self.msg = msg
self.level = level
class Log:
"""
The central logger, exposed to scripts as mitmproxy.ctx.log.
"""
def __init__(self, master):
self.master = master
def debug(self, txt):
"""
Log with level debug.
"""
self(txt, "debug")
def info(self, txt):
"""
Log with level info.
"""
self(txt, "info")
def warn(self, txt):
"""
Log with level warn.
"""
self(txt, "warn")
def error(self, txt):
"""
Log with level error.
"""
self(txt, "error")
def __call__(self, text, level="info"):
self.master.add_log(text, level)
class Channel:
"""
The only way for the proxy server to communicate with the master

View File

@ -4,10 +4,10 @@ from typing import Optional
from mitmproxy import controller
from mitmproxy import exceptions
from mitmproxy import flow
from mitmproxy import builtins
from mitmproxy import addons
from mitmproxy import options
from mitmproxy import master
from mitmproxy.builtins import dumper, termlog
from mitmproxy.addons import dumper, termlog
from netlib import tcp
@ -37,7 +37,7 @@ class DumpMaster(master.Master):
master.Master.__init__(self, options, server)
self.has_errored = False
self.addons.add(termlog.TermLog())
self.addons.add(*builtins.default_addons())
self.addons.add(*addons.default_addons())
self.addons.add(dumper.Dumper())
# This line is just for type hinting
self.options = self.options # type: Options

View File

@ -1,9 +1,7 @@
from mitmproxy.flow import export
from mitmproxy.flow.io import FlowWriter, FilteredFlowWriter, FlowReader, read_flows_from_paths
from mitmproxy.flow.state import State, FlowView
__all__ = [
"export",
"FlowWriter", "FilteredFlowWriter", "FlowReader", "read_flows_from_paths",
"State", "FlowView",
]

40
mitmproxy/log.py Normal file
View File

@ -0,0 +1,40 @@
class LogEntry:
def __init__(self, msg, level):
self.msg = msg
self.level = level
class Log:
"""
The central logger, exposed to scripts as mitmproxy.ctx.log.
"""
def __init__(self, master):
self.master = master
def debug(self, txt):
"""
Log with level debug.
"""
self(txt, "debug")
def info(self, txt):
"""
Log with level info.
"""
self(txt, "info")
def warn(self, txt):
"""
Log with level warn.
"""
self(txt, "warn")
def error(self, txt):
"""
Log with level error.
"""
self(txt, "error")
def __call__(self, text, level="info"):
self.master.add_log(text, level)

View File

@ -4,12 +4,13 @@ import contextlib
import queue
import sys
from mitmproxy import addons
from mitmproxy import addonmanager
from mitmproxy import options
from mitmproxy import controller
from mitmproxy import events
from mitmproxy import exceptions
from mitmproxy import models
from mitmproxy import log
from mitmproxy.flow import io
from mitmproxy.protocol import http_replay
from netlib import basethread
@ -36,7 +37,7 @@ class Master:
"""
def __init__(self, opts, server):
self.options = opts or options.Options()
self.addons = addons.Addons(self)
self.addons = addonmanager.AddonManager(self)
self.event_queue = queue.Queue()
self.should_exit = threading.Event()
self.server = server
@ -50,7 +51,7 @@ class Master:
yield
return
mitmproxy_ctx.master = self
mitmproxy_ctx.log = controller.Log(self)
mitmproxy_ctx.log = log.Log(self)
try:
yield
finally:
@ -66,7 +67,7 @@ class Master:
level: debug, info, warn, error
"""
with self.handlecontext():
self.addons("log", controller.LogEntry(e, level))
self.addons("log", log.LogEntry(e, level))
def start(self):
self.should_exit.clear()

View File

@ -1,5 +1,5 @@
import netlib.exceptions
from mitmproxy import controller
from mitmproxy import log
from mitmproxy import exceptions
from mitmproxy import protocol
from mitmproxy.proxy import modes
@ -113,7 +113,7 @@ class RootContext:
for i in subs:
full_msg.append(" -> " + i)
full_msg = "\n".join(full_msg)
self.channel.tell("log", controller.LogEntry(full_msg, level))
self.channel.tell("log", log.LogEntry(full_msg, level))
@property
def layers(self):

View File

@ -5,7 +5,7 @@ import traceback
import netlib.exceptions
from mitmproxy import exceptions
from mitmproxy import models
from mitmproxy import controller
from mitmproxy import log
from mitmproxy.proxy import modes
from mitmproxy.proxy import root_context
from netlib import tcp
@ -151,4 +151,4 @@ class ConnectionHandler:
def log(self, msg, level):
msg = "{}: {}".format(repr(self.client_conn.address), msg)
self.channel.tell("log", controller.LogEntry(msg, level))
self.channel.tell("log", log.LogEntry(msg, level))

View File

@ -6,10 +6,10 @@ import tornado.ioloop
from typing import Optional
from mitmproxy import builtins
from mitmproxy import addons
from mitmproxy import controller
from mitmproxy import exceptions
from mitmproxy import flow
from mitmproxy.addons import state
from mitmproxy import options
from mitmproxy import master
from mitmproxy.web import app
@ -20,7 +20,7 @@ class Stop(Exception):
pass
class WebFlowView(flow.FlowView):
class WebFlowView(state.FlowView):
def __init__(self, store):
super().__init__(store, None)
@ -57,7 +57,7 @@ class WebFlowView(flow.FlowView):
)
class WebState(flow.State):
class WebState(state.State):
def __init__(self):
super().__init__()
@ -136,7 +136,7 @@ class WebMaster(master.Master):
def __init__(self, options, server):
super().__init__(options, server)
self.state = WebState()
self.addons.add(*builtins.default_addons())
self.addons.add(*addons.default_addons())
self.addons.add(self.state)
self.app = app.Application(
self, self.options.wdebug, self.options.wauthenticator

View File

@ -3,7 +3,7 @@ max-line-length = 140
max-complexity = 25
ignore = E251,C901
exclude = mitmproxy/contrib/*,test/mitmproxy/data/*
builtins = file,open,basestring,xrange,unicode,long,cmp
addons = file,open,basestring,xrange,unicode,long,cmp
[tool:pytest]
testpaths = test

View File

@ -1,5 +1,5 @@
from .. import tutils, mastertest
from mitmproxy.builtins import anticache
from mitmproxy.addons import anticache
from mitmproxy import master
from mitmproxy import options
from mitmproxy import proxy

View File

@ -1,5 +1,5 @@
from .. import tutils, mastertest
from mitmproxy.builtins import anticomp
from mitmproxy.addons import anticomp
from mitmproxy import master
from mitmproxy import options
from mitmproxy import proxy

View File

@ -1,6 +1,6 @@
import mock
from mitmproxy.builtins import clientplayback
from mitmproxy.addons import clientplayback
from mitmproxy import options
from .. import tutils, mastertest

View File

@ -2,7 +2,7 @@ import io
from .. import tutils, mastertest
from mitmproxy.builtins import dumper
from mitmproxy.addons import dumper
from mitmproxy import exceptions
from mitmproxy import dump
from mitmproxy import models

View File

@ -2,7 +2,7 @@ from .. import tutils, mastertest
import os.path
from mitmproxy.builtins import filestreamer
from mitmproxy.addons import filestreamer
from mitmproxy import master
from mitmproxy.flow import io
from mitmproxy import options

View File

@ -1,4 +1,4 @@
from mitmproxy.builtins import onboarding
from mitmproxy.addons import onboarding
from .. import tservers

View File

@ -1,5 +1,5 @@
from .. import tutils, mastertest, tservers
from mitmproxy.builtins import replace
from mitmproxy.addons import replace
from mitmproxy import master
from mitmproxy import options
from mitmproxy import proxy

View File

@ -7,7 +7,7 @@ import re
from mitmproxy import exceptions
from mitmproxy import options
from mitmproxy import proxy
from mitmproxy.builtins import script
from mitmproxy.addons import script
from mitmproxy import master
from .. import tutils, mastertest

View File

@ -1,7 +1,7 @@
from .. import tutils, mastertest
import netlib.tutils
from mitmproxy.builtins import serverplayback
from mitmproxy.addons import serverplayback
from mitmproxy import options
from mitmproxy import proxy
from mitmproxy import exceptions

View File

@ -1,6 +1,6 @@
from .. import tutils, mastertest
from mitmproxy.builtins import setheaders
from mitmproxy.addons import setheaders
from mitmproxy import options
from mitmproxy import proxy

View File

@ -1,12 +1,13 @@
from mitmproxy import flow
from mitmproxy import proxy
from mitmproxy import master
from . import tutils
from mitmproxy.addons import state
from .. import tutils
class TestState:
def test_duplicate_flow(self):
s = flow.State()
s = state.State()
fm = master.Master(None, proxy.DummyServer())
fm.addons.add(s)
f = tutils.tflow(resp=True)

View File

@ -1,5 +1,5 @@
from .. import tutils, mastertest
from mitmproxy.builtins import stickyauth
from mitmproxy.addons import stickyauth
from mitmproxy import master
from mitmproxy import options
from mitmproxy import proxy

View File

@ -1,5 +1,5 @@
from .. import tutils, mastertest
from mitmproxy.builtins import stickycookie
from mitmproxy.addons import stickycookie
from mitmproxy import master
from mitmproxy import options
from mitmproxy import proxy

View File

@ -3,7 +3,7 @@ from mitmproxy import master
from mitmproxy import options
from mitmproxy import proxy
from mitmproxy.builtins import streambodies
from mitmproxy.addons import streambodies
class TestStreamBodies(mastertest.MasterTest):

View File

@ -1,8 +1,8 @@
from .. import mastertest
import io
from mitmproxy.builtins import termlog
from mitmproxy import controller
from mitmproxy.addons import termlog
from mitmproxy import log
from mitmproxy import dump
@ -11,7 +11,7 @@ class TestTermLog(mastertest.MasterTest):
t = termlog.TermLog()
sio = io.StringIO()
t.configure(dump.Options(tfile = sio, verbosity = 2), set([]))
t.log(controller.LogEntry("one", "info"))
t.log(log.LogEntry("one", "info"))
assert "one" in sio.getvalue()
t.log(controller.LogEntry("two", "debug"))
t.log(log.LogEntry("two", "debug"))
assert "two" not in sio.getvalue()

View File

@ -1,17 +1,17 @@
import flask
from .. import tservers
from mitmproxy.builtins import wsgiapp
from mitmproxy.addons import wsgiapp
testapp = flask.Flask(__name__)
tapp = flask.Flask(__name__)
@testapp.route("/")
@tapp.route("/")
def hello():
return "testapp"
@testapp.route("/error")
@tapp.route("/error")
def error():
raise ValueError("An exception...")
@ -23,7 +23,7 @@ def errapp(environ, start_response):
class TestApp(tservers.HTTPProxyTest):
def addons(self):
return [
wsgiapp.WSGIApp(testapp, "testapp", 80),
wsgiapp.WSGIApp(tapp, "testapp", 80),
wsgiapp.WSGIApp(errapp, "errapp", 80)
]

View File

@ -1,6 +1,6 @@
from test.mitmproxy import tutils, mastertest
from mitmproxy import controller
from mitmproxy.builtins import script
from mitmproxy.addons import script
from mitmproxy import options
from mitmproxy import proxy
from mitmproxy import master

View File

@ -1,4 +1,4 @@
from mitmproxy import addons
from mitmproxy import addonmanager
from mitmproxy import options
from mitmproxy import master
from mitmproxy import proxy
@ -15,7 +15,7 @@ class TAddon:
def test_simple():
o = options.Options()
m = master.Master(o, proxy.DummyServer(o))
a = addons.Addons(m)
a = addonmanager.AddonManager(m)
a.add(TAddon("one"))
assert a.get("one")
assert not a.get("two")

View File

@ -5,7 +5,7 @@ import shlex
from mitmproxy import options
from mitmproxy import contentviews
from mitmproxy import proxy
from mitmproxy.builtins import script
from mitmproxy.addons import script
from mitmproxy import master
import netlib.utils

View File

@ -4,6 +4,7 @@ import io
import netlib.utils
from netlib.http import Headers
from mitmproxy import flowfilter, flow, options
from mitmproxy.addons import state
from mitmproxy.contrib import tnetstring
from mitmproxy.exceptions import FlowReadException, Kill
from mitmproxy.models import Error
@ -110,7 +111,7 @@ class TestHTTPFlow:
def test_killall(self):
srv = DummyServer(None)
s = flow.State()
s = state.State()
fm = master.Master(None, srv)
fm.addons.add(s)
@ -190,7 +191,7 @@ class TestTCPFlow:
class TestState:
def test_backup(self):
c = flow.State()
c = state.State()
f = tutils.tflow()
c.add_flow(f)
f.backup()
@ -202,7 +203,7 @@ class TestState:
connect -> request -> response
"""
c = flow.State()
c = state.State()
f = tutils.tflow()
c.add_flow(f)
assert f
@ -226,13 +227,13 @@ class TestState:
assert c.active_flow_count() == 0
def test_err(self):
c = flow.State()
c = state.State()
f = tutils.tflow()
c.add_flow(f)
f.error = Error("message")
assert c.update_flow(f)
c = flow.State()
c = state.State()
f = tutils.tflow()
c.add_flow(f)
c.set_view_filter("~e")
@ -242,7 +243,7 @@ class TestState:
assert c.view
def test_set_view_filter(self):
c = flow.State()
c = state.State()
f = tutils.tflow()
assert len(c.view) == 0
@ -270,7 +271,7 @@ class TestState:
assert "Invalid" in c.set_view_filter("~")
def test_set_intercept(self):
c = flow.State()
c = state.State()
assert not c.set_intercept("~q")
assert c.intercept_txt == "~q"
assert "Invalid" in c.set_intercept("~")
@ -293,7 +294,7 @@ class TestState:
state.add_flow(f)
def test_clear(self):
c = flow.State()
c = state.State()
f = self._add_request(c)
f.intercepted = True
@ -301,7 +302,7 @@ class TestState:
assert c.flow_count() == 0
def test_dump_flows(self):
c = flow.State()
c = state.State()
self._add_request(c)
self._add_response(c)
self._add_request(c)
@ -317,7 +318,7 @@ class TestState:
assert isinstance(c.flows[0], Flow)
def test_accept_all(self):
c = flow.State()
c = state.State()
self._add_request(c)
self._add_response(c)
self._add_request(c)
@ -363,7 +364,7 @@ class TestSerialize:
def test_load_flows(self):
r = self._treader()
s = flow.State()
s = state.State()
fm = master.Master(None, DummyServer())
fm.addons.add(s)
fm.load_flows(r)
@ -371,7 +372,7 @@ class TestSerialize:
def test_load_flows_reverse(self):
r = self._treader()
s = flow.State()
s = state.State()
opts = options.Options(
mode="reverse",
upstream_server="https://use-this-domain"
@ -440,7 +441,7 @@ class TestFlowMaster:
assert fm.create_request("GET", "http", "example.com", 80, "/")
def test_all(self):
s = flow.State()
s = state.State()
fm = master.Master(None, DummyServer())
fm.addons.add(s)
f = tutils.tflow(req=None)

View File

@ -5,7 +5,7 @@ import time
import netlib.tutils
from mitmproxy import controller
from mitmproxy import options
from mitmproxy.builtins import script
from mitmproxy.addons import script
from mitmproxy.models import HTTPResponse, HTTPFlow
from mitmproxy.proxy.config import HostMatcher, parse_server_spec
from netlib import tcp, http, socks

View File

@ -38,7 +38,7 @@ def main(profiler, clock_type, concurrency):
if profiler == "yappi":
yappi.set_clock_type(clock_type)
yappi.start(builtins=True)
yappi.start(addons=True)
print("Start mitmdump...")
mitmdump(["-k", "-q", "-S", "1024example"])

View File

@ -7,7 +7,7 @@ import sys
from mitmproxy.proxy.config import ProxyConfig
from mitmproxy.proxy.server import ProxyServer
from mitmproxy import master
from mitmproxy.flow import state
from mitmproxy.addons import state
import pathod.test
import pathod.pathoc
from mitmproxy import controller, options

View File

@ -15,7 +15,7 @@ class TestRequestData:
class TestRequestCore:
"""
Tests for builtins and the attributes that are directly proxied from the data structure
Tests for addons and the attributes that are directly proxied from the data structure
"""
def test_repr(self):
request = treq()

View File

@ -19,7 +19,7 @@ class TestResponseData:
class TestResponseCore:
"""
Tests for builtins and the attributes that are directly proxied from the data structure
Tests for addons and the attributes that are directly proxied from the data structure
"""
def test_repr(self):
response = tresp()