aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@corte.si>2016-10-04 08:13:19 +1100
committerGitHub <noreply@github.com>2016-10-04 08:13:19 +1100
commitb0add569b988e9f1e319b9577fbd8e076ac5bd23 (patch)
tree285120283d1e78f5d4477eaa9bb9fd630babbd05
parent13fb384c1996e74fa836c5ef572e740f5717c54a (diff)
parent36c04f1631c79ca79712873e151c7f5267cafd46 (diff)
downloadmitmproxy-b0add569b988e9f1e319b9577fbd8e076ac5bd23.tar.gz
mitmproxy-b0add569b988e9f1e319b9577fbd8e076ac5bd23.tar.bz2
mitmproxy-b0add569b988e9f1e319b9577fbd8e076ac5bd23.zip
Merge pull request #1587 from Kriechi/rename-filt
rename mitmproxy.filt -> mitmproxy.flowfilter
-rw-r--r--docs/features/filters.rst3
-rw-r--r--examples/flowfilter.py (renamed from examples/filt.py)9
-rw-r--r--mitmproxy/builtins/dumper.py8
-rw-r--r--mitmproxy/builtins/filestreamer.py9
-rw-r--r--mitmproxy/builtins/replace.py12
-rw-r--r--mitmproxy/builtins/setheaders.py16
-rw-r--r--mitmproxy/builtins/stickyauth.py7
-rw-r--r--mitmproxy/builtins/stickycookie.py6
-rw-r--r--mitmproxy/cmdline.py4
-rw-r--r--mitmproxy/console/grideditor/editors.py8
-rw-r--r--mitmproxy/console/help.py26
-rw-r--r--mitmproxy/console/master.py13
-rw-r--r--mitmproxy/flow/io.py11
-rw-r--r--mitmproxy/flow/state.py28
-rw-r--r--mitmproxy/flowfilter.py (renamed from mitmproxy/filt.py)42
-rw-r--r--mitmproxy/models/flow.py20
-rw-r--r--mitmproxy/web/app.py8
-rw-r--r--test/mitmproxy/test_flow.py26
-rw-r--r--test/mitmproxy/test_flowfilter.py (renamed from test/mitmproxy/test_filt.py)54
19 files changed, 144 insertions, 166 deletions
diff --git a/docs/features/filters.rst b/docs/features/filters.rst
index 509b5d6b..e531f734 100644
--- a/docs/features/filters.rst
+++ b/docs/features/filters.rst
@@ -8,7 +8,7 @@ Filter expressions consist of the following operators:
.. documentedlist::
:header: "Expression" "Description"
- :listobject: mitmproxy.filt.help
+ :listobject: mitmproxy.flowfilter.help
- Regexes are Python-style
- Regexes can be specified as quoted strings
@@ -36,4 +36,3 @@ Anything but requests with a text/html content type:
.. code-block:: none
!(~q & ~t "text/html")
-
diff --git a/examples/filt.py b/examples/flowfilter.py
index 9ccf9fa1..80a153da 100644
--- a/examples/filt.py
+++ b/examples/flowfilter.py
@@ -1,15 +1,16 @@
# This scripts demonstrates how to use mitmproxy's filter pattern in scripts.
-# Usage: mitmdump -s "filt.py FILTER"
+# Usage: mitmdump -s "flowfilter.py FILTER"
+
import sys
-from mitmproxy import filt
+from mitmproxy import flowfilter
class Filter:
def __init__(self, spec):
- self.filter = filt.parse(spec)
+ self.filter = flowfilter.parse(spec)
def response(self, flow):
- if flow.match(self.filter):
+ if flowfilter.match(flow, self.filter):
print("Flow matches filter:")
print(flow)
diff --git a/mitmproxy/builtins/dumper.py b/mitmproxy/builtins/dumper.py
index 60d00518..109059b8 100644
--- a/mitmproxy/builtins/dumper.py
+++ b/mitmproxy/builtins/dumper.py
@@ -9,7 +9,7 @@ import typing # noqa
from mitmproxy import contentviews
from mitmproxy import ctx
from mitmproxy import exceptions
-from mitmproxy import filt
+from mitmproxy import flowfilter
from netlib import human
from netlib import strutils
@@ -22,14 +22,14 @@ def indent(n, text):
class Dumper(object):
def __init__(self):
- self.filter = None # type: filt.TFilter
+ self.filter = None # type: flowfilter.TFilter
self.flow_detail = None # type: int
self.outfp = None # type: typing.io.TextIO
self.showhost = None # type: bool
def configure(self, options, updated):
if options.filtstr:
- self.filter = filt.parse(options.filtstr)
+ self.filter = flowfilter.parse(options.filtstr)
if not self.filter:
raise exceptions.OptionsError(
"Invalid filter expression: %s" % options.filtstr
@@ -220,7 +220,7 @@ class Dumper(object):
return False
if not self.filter:
return True
- elif f.match(self.filter):
+ elif flowfilter.match(self.filter, f):
return True
return False
diff --git a/mitmproxy/builtins/filestreamer.py b/mitmproxy/builtins/filestreamer.py
index ffa565ac..55427753 100644
--- a/mitmproxy/builtins/filestreamer.py
+++ b/mitmproxy/builtins/filestreamer.py
@@ -2,6 +2,7 @@ from __future__ import absolute_import, print_function, division
import os.path
from mitmproxy import exceptions
+from mitmproxy import flowfilter
from mitmproxy.flow import io
@@ -25,17 +26,17 @@ class FileStreamer:
self.done()
if options.outfile:
- filt = None
+ flt = None
if options.get("filtstr"):
- filt = filt.parse(options.filtstr)
- if not filt:
+ flt = flowfilter.parse(options.filtstr)
+ if not flt:
raise exceptions.OptionsError(
"Invalid filter specification: %s" % options.filtstr
)
path, mode = options.outfile
if mode not in ("wb", "ab"):
raise exceptions.OptionsError("Invalid mode.")
- err = self.start_stream_to_path(path, mode, filt)
+ err = self.start_stream_to_path(path, mode, flt)
if err:
raise exceptions.OptionsError(err)
diff --git a/mitmproxy/builtins/replace.py b/mitmproxy/builtins/replace.py
index df3cab04..b675b779 100644
--- a/mitmproxy/builtins/replace.py
+++ b/mitmproxy/builtins/replace.py
@@ -1,7 +1,7 @@
import re
from mitmproxy import exceptions
-from mitmproxy import filt
+from mitmproxy import flowfilter
class Replace:
@@ -18,8 +18,8 @@ class Replace:
"""
lst = []
for fpatt, rex, s in options.replacements:
- cpatt = filt.parse(fpatt)
- if not cpatt:
+ flt = flowfilter.parse(fpatt)
+ if not flt:
raise exceptions.OptionsError(
"Invalid filter pattern: %s" % fpatt
)
@@ -29,12 +29,12 @@ class Replace:
raise exceptions.OptionsError(
"Invalid regular expression: %s - %s" % (rex, str(e))
)
- lst.append((rex, s, cpatt))
+ lst.append((rex, s, flt))
self.lst = lst
def execute(self, f):
- for rex, s, cpatt in self.lst:
- if cpatt(f):
+ for rex, s, flt in self.lst:
+ if flt(f):
if f.response:
f.response.replace(rex, s, flags=re.DOTALL)
else:
diff --git a/mitmproxy/builtins/setheaders.py b/mitmproxy/builtins/setheaders.py
index 4cb9905e..5695e1e8 100644
--- a/mitmproxy/builtins/setheaders.py
+++ b/mitmproxy/builtins/setheaders.py
@@ -1,5 +1,5 @@
from mitmproxy import exceptions
-from mitmproxy import filt
+from mitmproxy import flowfilter
class SetHeaders:
@@ -15,19 +15,19 @@ class SetHeaders:
value: Header value string
"""
for fpatt, header, value in options.setheaders:
- cpatt = filt.parse(fpatt)
- if not cpatt:
+ flt = flowfilter.parse(fpatt)
+ if not flt:
raise exceptions.OptionsError(
"Invalid setheader filter pattern %s" % fpatt
)
- self.lst.append((fpatt, header, value, cpatt))
+ self.lst.append((fpatt, header, value, flt))
def run(self, f, hdrs):
- for _, header, value, cpatt in self.lst:
- if cpatt(f):
+ for _, header, value, flt in self.lst:
+ if flt(f):
hdrs.pop(header, None)
- for _, header, value, cpatt in self.lst:
- if cpatt(f):
+ for _, header, value, flt in self.lst:
+ if flt(f):
hdrs.add(header, value)
def request(self, flow):
diff --git a/mitmproxy/builtins/stickyauth.py b/mitmproxy/builtins/stickyauth.py
index 98fb65ed..18b43967 100644
--- a/mitmproxy/builtins/stickyauth.py
+++ b/mitmproxy/builtins/stickyauth.py
@@ -1,18 +1,17 @@
from __future__ import absolute_import, print_function, division
-from mitmproxy import filt
from mitmproxy import exceptions
+from mitmproxy import flowfilter
class StickyAuth:
def __init__(self):
- # Compiled filter
self.flt = None
self.hosts = {}
def configure(self, options, updated):
if options.stickyauth:
- flt = filt.parse(options.stickyauth)
+ flt = flowfilter.parse(options.stickyauth)
if not flt:
raise exceptions.OptionsError(
"stickyauth: invalid filter expression: %s" % options.stickyauth
@@ -23,6 +22,6 @@ class StickyAuth:
host = flow.request.host
if "authorization" in flow.request.headers:
self.hosts[host] = flow.request.headers["authorization"]
- elif flow.match(self.flt):
+ elif flowfilter.match(self.flt, flow):
if host in self.hosts:
flow.request.headers["authorization"] = self.hosts[host]
diff --git a/mitmproxy/builtins/stickycookie.py b/mitmproxy/builtins/stickycookie.py
index 88333d5c..027e624f 100644
--- a/mitmproxy/builtins/stickycookie.py
+++ b/mitmproxy/builtins/stickycookie.py
@@ -3,7 +3,7 @@ from six.moves import http_cookiejar
from netlib.http import cookies
from mitmproxy import exceptions
-from mitmproxy import filt
+from mitmproxy import flowfilter
def ckey(attrs, f):
@@ -34,7 +34,7 @@ class StickyCookie:
def configure(self, options, updated):
if options.stickycookie:
- flt = filt.parse(options.stickycookie)
+ flt = flowfilter.parse(options.stickycookie)
if not flt:
raise exceptions.OptionsError(
"stickycookie: invalid filter expression: %s" % options.stickycookie
@@ -64,7 +64,7 @@ class StickyCookie:
def request(self, flow):
if self.flt:
l = []
- if flow.match(self.flt):
+ if flowfilter.match(self.flt, flow):
for domain, port, path in self.jar.keys():
match = [
domain_match(flow.request.host, domain),
diff --git a/mitmproxy/cmdline.py b/mitmproxy/cmdline.py
index ff431909..e97be5d4 100644
--- a/mitmproxy/cmdline.py
+++ b/mitmproxy/cmdline.py
@@ -4,7 +4,7 @@ import configargparse
import os
import re
from mitmproxy import exceptions
-from mitmproxy import filt
+from mitmproxy import flowfilter
from mitmproxy import options
from mitmproxy import platform
from netlib import human
@@ -32,7 +32,7 @@ def _parse_hook(s):
if not a:
raise ParseException("Empty clause: %s" % str(patt))
- if not filt.parse(patt):
+ if not flowfilter.parse(patt):
raise ParseException("Malformed filter pattern: %s" % patt)
return patt, a, b
diff --git a/mitmproxy/console/grideditor/editors.py b/mitmproxy/console/grideditor/editors.py
index a17fd766..0c9a2a02 100644
--- a/mitmproxy/console/grideditor/editors.py
+++ b/mitmproxy/console/grideditor/editors.py
@@ -1,9 +1,9 @@
from __future__ import absolute_import, print_function, division
import re
import urwid
-from mitmproxy import filt
-from mitmproxy.builtins import script
from mitmproxy import exceptions
+from mitmproxy import flowfilter
+from mitmproxy.builtins import script
from mitmproxy.console import common
from mitmproxy.console.grideditor import base
from mitmproxy.console.grideditor import col_bytes
@@ -81,7 +81,7 @@ class ReplaceEditor(base.GridEditor):
def is_error(self, col, val):
if col == 0:
- if not filt.parse(val):
+ if not flowfilter.parse(val):
return "Invalid filter specification."
elif col == 1:
try:
@@ -101,7 +101,7 @@ class SetHeadersEditor(base.GridEditor):
def is_error(self, col, val):
if col == 0:
- if not filt.parse(val):
+ if not flowfilter.parse(val):
return "Invalid filter specification"
return False
diff --git a/mitmproxy/console/help.py b/mitmproxy/console/help.py
index e3e2f54c..7393d7c4 100644
--- a/mitmproxy/console/help.py
+++ b/mitmproxy/console/help.py
@@ -4,7 +4,7 @@ import platform
import urwid
-from mitmproxy import filt
+from mitmproxy import flowfilter
from mitmproxy.console import common
from mitmproxy.console import signals
@@ -60,29 +60,7 @@ class HelpView(urwid.ListBox):
)
text.append(urwid.Text([("head", "\n\nFilter expressions:\n")]))
- f = []
- for i in filt.filt_unary:
- f.append(
- ("~%s" % i.code, i.help)
- )
- for i in filt.filt_rex:
- f.append(
- ("~%s regex" % i.code, i.help)
- )
- for i in filt.filt_int:
- f.append(
- ("~%s int" % i.code, i.help)
- )
- f.sort()
- f.extend(
- [
- ("!", "unary not"),
- ("&", "and"),
- ("|", "or"),
- ("(...)", "grouping"),
- ]
- )
- text.extend(common.format_keyvals(f, key="key", val="text", indent=4))
+ text.extend(common.format_keyvals(flowfilter.help, key="key", val="text", indent=4))
text.append(
urwid.Text(
diff --git a/mitmproxy/console/master.py b/mitmproxy/console/master.py
index 6652bf0c..25776512 100644
--- a/mitmproxy/console/master.py
+++ b/mitmproxy/console/master.py
@@ -22,6 +22,7 @@ from mitmproxy import contentviews
from mitmproxy import controller
from mitmproxy import exceptions
from mitmproxy import flow
+from mitmproxy import flowfilter
from mitmproxy import utils
import mitmproxy.options
from mitmproxy.console import flowlist
@@ -34,7 +35,7 @@ from mitmproxy.console import palettes
from mitmproxy.console import signals
from mitmproxy.console import statusbar
from mitmproxy.console import window
-from mitmproxy.filt import FMarked
+from mitmproxy.flowfilter import FMarked
from netlib import tcp, strutils
EVENTLOG_SIZE = 500
@@ -125,7 +126,7 @@ class ConsoleState(flow.State):
self.set_focus(self.focus)
return ret
- def get_nearest_matching_flow(self, flow, filt):
+ def get_nearest_matching_flow(self, flow, flt):
fidx = self.view.index(flow)
dist = 1
@@ -134,9 +135,9 @@ class ConsoleState(flow.State):
fprev, _ = self.get_from_pos(fidx - dist)
fnext, _ = self.get_from_pos(fidx + dist)
- if fprev and fprev.match(filt):
+ if fprev and flowfilter.match(flt, fprev):
return fprev
- elif fnext and fnext.match(filt):
+ elif fnext and flowfilter.match(flt, fnext):
return fnext
dist += 1
@@ -669,14 +670,14 @@ class ConsoleMaster(flow.FlowMaster):
def process_flow(self, f):
should_intercept = any(
[
- self.state.intercept and f.match(self.state.intercept) and not f.request.is_replay,
+ self.state.intercept and flowfilter.match(self.state.intercept, f) and not f.request.is_replay,
f.intercepted,
]
)
if should_intercept:
f.intercept(self)
signals.flowlist_change.send(self)
- signals.flow_change.send(self, flow = f)
+ signals.flow_change.send(self, flow=f)
def clear_events(self):
self.logbuffer[:] = []
diff --git a/mitmproxy/flow/io.py b/mitmproxy/flow/io.py
index 276d7a5b..07d4357c 100644
--- a/mitmproxy/flow/io.py
+++ b/mitmproxy/flow/io.py
@@ -3,6 +3,7 @@ from __future__ import absolute_import, print_function, division
import os
from mitmproxy import exceptions
+from mitmproxy import flowfilter
from mitmproxy import models
from mitmproxy.contrib import tnetstring
from mitmproxy.flow import io_compat
@@ -55,14 +56,14 @@ class FlowReader:
class FilteredFlowWriter:
- def __init__(self, fo, filt):
+ def __init__(self, fo, flt):
self.fo = fo
- self.filt = filt
+ self.flt = flt
- def add(self, f):
- if self.filt and not f.match(self.filt):
+ def add(self, flow):
+ if self.flt and not flowfilter.match(self.flt, flow):
return
- d = f.get_state()
+ d = flow.get_state()
tnetstring.dump(d, self.fo)
diff --git a/mitmproxy/flow/state.py b/mitmproxy/flow/state.py
index 8576fadc..759e53e4 100644
--- a/mitmproxy/flow/state.py
+++ b/mitmproxy/flow/state.py
@@ -5,7 +5,7 @@ from abc import abstractmethod, ABCMeta
import six
from typing import List # noqa
-from mitmproxy import filt
+from mitmproxy import flowfilter
from mitmproxy import models # noqa
@@ -53,11 +53,11 @@ def _pos(*args):
class FlowView(FlowList):
- def __init__(self, store, filt=None):
+ def __init__(self, store, flt=None):
super(FlowView, self).__init__()
- if not filt:
- filt = _pos
- self._build(store, filt)
+ if not flt:
+ flt = _pos
+ self._build(store, flt)
self.store = store
self.store.views.append(self)
@@ -65,9 +65,9 @@ class FlowView(FlowList):
def _close(self):
self.store.views.remove(self)
- def _build(self, flows, filt=None):
- if filt:
- self.filt = filt
+ def _build(self, flows, flt=None):
+ if flt:
+ self.filt = flt
self._list = list(filter(self.filt, flows))
def _add(self, f):
@@ -229,21 +229,21 @@ class State(object):
if txt == self.filter_txt:
return
if txt:
- f = filt.parse(txt)
- if not f:
+ flt = flowfilter.parse(txt)
+ if not flt:
return "Invalid filter expression."
self.view._close()
- self.view = FlowView(self.flows, f)
+ self.view = FlowView(self.flows, flt)
else:
self.view._close()
self.view = FlowView(self.flows, None)
def set_intercept(self, txt):
if txt:
- f = filt.parse(txt)
- if not f:
+ flt = flowfilter.parse(txt)
+ if not flt:
return "Invalid filter expression."
- self.intercept = f
+ self.intercept = flt
else:
self.intercept = None
diff --git a/mitmproxy/filt.py b/mitmproxy/flowfilter.py
index eb3e392b..27a3212c 100644
--- a/mitmproxy/filt.py
+++ b/mitmproxy/flowfilter.py
@@ -36,6 +36,7 @@ from __future__ import absolute_import, print_function, division
import re
import sys
import functools
+import six
from mitmproxy.models.http import HTTPFlow
from mitmproxy.models.tcp import TCPFlow
@@ -408,7 +409,7 @@ class FNot(_Token):
return not self.itm(f)
-filt_unary = [
+filter_unary = [
FAsset,
FErr,
FHTTP,
@@ -417,7 +418,7 @@ filt_unary = [
FResp,
FTCP,
]
-filt_rex = [
+filter_rex = [
FBod,
FBodRequest,
FBodResponse,
@@ -433,7 +434,7 @@ filt_rex = [
FSrc,
FUrl,
]
-filt_int = [
+filter_int = [
FCode
]
@@ -442,7 +443,7 @@ def _make():
# Order is important - multi-char expressions need to come before narrow
# ones.
parts = []
- for klass in filt_unary:
+ for klass in filter_unary:
f = pp.Literal("~%s" % klass.code) + pp.WordEnd()
f.setParseAction(klass.make)
parts.append(f)
@@ -451,12 +452,12 @@ def _make():
rex = pp.Word(simplerex) |\
pp.QuotedString("\"", escChar='\\') |\
pp.QuotedString("'", escChar='\\')
- for klass in filt_rex:
+ for klass in filter_rex:
f = pp.Literal("~%s" % klass.code) + pp.WordEnd() + rex.copy()
f.setParseAction(klass.make)
parts.append(f)
- for klass in filt_int:
+ for klass in filter_int:
f = pp.Literal("~%s" % klass.code) + pp.WordEnd() + pp.Word(pp.nums)
f.setParseAction(klass.make)
parts.append(f)
@@ -492,25 +493,42 @@ TFilter = Callable[[Flow], bool]
def parse(s):
# type: (str) -> TFilter
try:
- filt = bnf.parseString(s, parseAll=True)[0]
- filt.pattern = s
- return filt
+ flt = bnf.parseString(s, parseAll=True)[0]
+ flt.pattern = s
+ return flt
except pp.ParseException:
return None
except ValueError:
return None
+def match(flt, flow):
+ """
+ Matches a flow against a compiled filter expression.
+ Returns True if matched, False if not.
+
+ If flt is a string, it will be compiled as a filter expression.
+ If the expression is invalid, ValueError is raised.
+ """
+ if isinstance(flt, six.string_types):
+ flt = parse(flt)
+ if not flt:
+ raise ValueError("Invalid filter expression.")
+ if flt:
+ return flt(flow)
+ return True
+
+
help = []
-for i in filt_unary:
+for i in filter_unary:
help.append(
("~%s" % i.code, i.help)
)
-for i in filt_rex:
+for i in filter_rex:
help.append(
("~%s regex" % i.code, i.help)
)
-for i in filt_int:
+for i in filter_int:
help.append(
("~%s int" % i.code, i.help)
)
diff --git a/mitmproxy/models/flow.py b/mitmproxy/models/flow.py
index fc673274..118aa3d1 100644
--- a/mitmproxy/models/flow.py
+++ b/mitmproxy/models/flow.py
@@ -8,8 +8,6 @@ from mitmproxy import stateobject
from mitmproxy.models.connections import ClientConnection
from mitmproxy.models.connections import ServerConnection
-import six
-
from netlib import version
from typing import Optional # noqa
@@ -188,21 +186,3 @@ class Flow(stateobject.StateObject):
self.reply.ack()
self.reply.commit()
master.handle_accept_intercept(self)
-
- def match(self, f):
- """
- Match this flow against a compiled filter expression. Returns True
- if matched, False if not.
-
- If f is a string, it will be compiled as a filter expression. If
- the expression is invalid, ValueError is raised.
- """
- if isinstance(f, six.string_types):
- from .. import filt
-
- f = filt.parse(f)
- if not f:
- raise ValueError("Invalid filter expression.")
- if f:
- return f(self)
- return True
diff --git a/mitmproxy/web/app.py b/mitmproxy/web/app.py
index 5498c2d9..34969870 100644
--- a/mitmproxy/web/app.py
+++ b/mitmproxy/web/app.py
@@ -14,7 +14,7 @@ import tornado.web
from io import BytesIO
from mitmproxy.flow import FlowWriter, FlowReader
-from mitmproxy import filt
+from mitmproxy import flowfilter
from mitmproxy import models
from mitmproxy import contentviews
from netlib import version
@@ -151,11 +151,11 @@ class IndexHandler(RequestHandler):
self.render("index.html")
-class FiltHelp(RequestHandler):
+class FilterHelp(RequestHandler):
def get(self):
self.write(dict(
- commands=filt.help
+ commands=flowfilter.help
))
@@ -434,7 +434,7 @@ class Application(tornado.web.Application):
self.master = master
handlers = [
(r"/", IndexHandler),
- (r"/filter-help", FiltHelp),
+ (r"/filter-help", FilterHelp),
(r"/updates", ClientConnection),
(r"/events", Events),
(r"/flows", Flows),
diff --git a/test/mitmproxy/test_flow.py b/test/mitmproxy/test_flow.py
index 0fe45afb..cc9d2691 100644
--- a/test/mitmproxy/test_flow.py
+++ b/test/mitmproxy/test_flow.py
@@ -3,7 +3,7 @@ import io
import netlib.utils
from netlib.http import Headers
-from mitmproxy import filt, flow, options
+from mitmproxy import flowfilter, flow, options
from mitmproxy.contrib import tnetstring
from mitmproxy.exceptions import FlowReadException, Kill
from mitmproxy.models import Error
@@ -68,14 +68,14 @@ class TestHTTPFlow(object):
def test_match(self):
f = tutils.tflow(resp=True)
- assert not f.match("~b test")
- assert f.match(None)
- assert not f.match("~b test")
+ assert not flowfilter.match("~b test", f)
+ assert flowfilter.match(None, f)
+ assert not flowfilter.match("~b test", f)
f = tutils.tflow(err=True)
- assert f.match("~e")
+ assert flowfilter.match("~e", f)
- tutils.raises(ValueError, f.match, "~")
+ tutils.raises(ValueError, flowfilter.match, "~", f)
def test_backup(self):
f = tutils.tflow()
@@ -195,14 +195,14 @@ class TestTCPFlow:
def test_match(self):
f = tutils.ttcpflow()
- assert not f.match("~b nonexistent")
- assert f.match(None)
- assert not f.match("~b nonexistent")
+ assert not flowfilter.match("~b nonexistent", f)
+ assert flowfilter.match(None, f)
+ assert not flowfilter.match("~b nonexistent", f)
f = tutils.ttcpflow(err=True)
- assert f.match("~e")
+ assert flowfilter.match("~e", f)
- tutils.raises(ValueError, f.match, "~")
+ tutils.raises(ValueError, flowfilter.match, "~", f)
class TestState:
@@ -400,8 +400,8 @@ class TestSerialize:
def test_filter(self):
sio = io.BytesIO()
- fl = filt.parse("~c 200")
- w = flow.FilteredFlowWriter(sio, fl)
+ flt = flowfilter.parse("~c 200")
+ w = flow.FilteredFlowWriter(sio, flt)
f = tutils.tflow(resp=True)
f.response.status_code = 200
diff --git a/test/mitmproxy/test_filt.py b/test/mitmproxy/test_flowfilter.py
index 69f042bb..e8d19ffa 100644
--- a/test/mitmproxy/test_filt.py
+++ b/test/mitmproxy/test_flowfilter.py
@@ -1,7 +1,7 @@
from six.moves import cStringIO as StringIO
from mock import patch
-from mitmproxy import filt
+from mitmproxy import flowfilter
from . import tutils
@@ -14,64 +14,64 @@ class TestParsing:
assert c.getvalue()
def test_parse_err(self):
- assert filt.parse("~h [") is None
+ assert flowfilter.parse("~h [") is None
def test_simple(self):
- assert not filt.parse("~b")
- assert filt.parse("~q")
- assert filt.parse("~c 10")
- assert filt.parse("~m foobar")
- assert filt.parse("~u foobar")
- assert filt.parse("~q ~c 10")
- p = filt.parse("~q ~c 10")
+ assert not flowfilter.parse("~b")
+ assert flowfilter.parse("~q")
+ assert flowfilter.parse("~c 10")
+ assert flowfilter.parse("~m foobar")
+ assert flowfilter.parse("~u foobar")
+ assert flowfilter.parse("~q ~c 10")
+ p = flowfilter.parse("~q ~c 10")
self._dump(p)
assert len(p.lst) == 2
def test_naked_url(self):
- a = filt.parse("foobar ~h rex")
+ a = flowfilter.parse("foobar ~h rex")
assert a.lst[0].expr == "foobar"
assert a.lst[1].expr == "rex"
self._dump(a)
def test_quoting(self):
- a = filt.parse("~u 'foo ~u bar' ~u voing")
+ a = flowfilter.parse("~u 'foo ~u bar' ~u voing")
assert a.lst[0].expr == "foo ~u bar"
assert a.lst[1].expr == "voing"
self._dump(a)
- a = filt.parse("~u foobar")
+ a = flowfilter.parse("~u foobar")
assert a.expr == "foobar"
- a = filt.parse(r"~u 'foobar\"\''")
+ a = flowfilter.parse(r"~u 'foobar\"\''")
assert a.expr == "foobar\"'"
- a = filt.parse(r'~u "foo \'bar"')
+ a = flowfilter.parse(r'~u "foo \'bar"')
assert a.expr == "foo 'bar"
def test_nesting(self):
- a = filt.parse("(~u foobar & ~h voing)")
+ a = flowfilter.parse("(~u foobar & ~h voing)")
assert a.lst[0].expr == "foobar"
self._dump(a)
def test_not(self):
- a = filt.parse("!~h test")
+ a = flowfilter.parse("!~h test")
assert a.itm.expr == "test"
- a = filt.parse("!(~u test & ~h bar)")
+ a = flowfilter.parse("!(~u test & ~h bar)")
assert a.itm.lst[0].expr == "test"
self._dump(a)
def test_binaryops(self):
- a = filt.parse("~u foobar | ~h voing")
- isinstance(a, filt.FOr)
+ a = flowfilter.parse("~u foobar | ~h voing")
+ isinstance(a, flowfilter.FOr)
self._dump(a)
- a = filt.parse("~u foobar & ~h voing")
- isinstance(a, filt.FAnd)
+ a = flowfilter.parse("~u foobar & ~h voing")
+ isinstance(a, flowfilter.FAnd)
self._dump(a)
def test_wideops(self):
- a = filt.parse("~hq 'header: qvalue'")
- assert isinstance(a, filt.FHeadRequest)
+ a = flowfilter.parse("~hq 'header: qvalue'")
+ assert isinstance(a, flowfilter.FHeadRequest)
self._dump(a)
@@ -87,7 +87,7 @@ class TestMatchingHTTPFlow:
return tutils.tflow(err=True)
def q(self, q, o):
- return filt.parse(q)(o)
+ return flowfilter.parse(q)(o)
def test_http(self):
s = self.req()
@@ -263,7 +263,7 @@ class TestMatchingTCPFlow:
return tutils.ttcpflow(err=True)
def q(self, q, o):
- return filt.parse(q)(o)
+ return flowfilter.parse(q)(o)
def test_tcp(self):
f = self.flow()
@@ -387,7 +387,7 @@ class TestMatchingDummyFlow:
return tutils.tdummyflow(err=True)
def q(self, q, o):
- return filt.parse(q)(o)
+ return flowfilter.parse(q)(o)
def test_filters(self):
e = self.err()
@@ -439,4 +439,4 @@ def test_pyparsing_bug(extract_tb):
"""https://github.com/mitmproxy/mitmproxy/issues/1087"""
# The text is a string with leading and trailing whitespace stripped; if the source is not available it is None.
extract_tb.return_value = [("", 1, "test", None)]
- assert filt.parse("test")
+ assert flowfilter.parse("test")