aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@corte.si>2018-04-26 21:02:10 +1200
committerGitHub <noreply@github.com>2018-04-26 21:02:10 +1200
commita4a48a96d6cfb0e423a301a07200eee2c7796ce1 (patch)
tree9ff0303433363c0334670713cf418b5138cf3d43
parent13f3cbed4feb3b1a248ee6120446ada0330e9e76 (diff)
parenta42443b029f1fa4a654b5a0e44b71026c6f1415b (diff)
downloadmitmproxy-a4a48a96d6cfb0e423a301a07200eee2c7796ce1.tar.gz
mitmproxy-a4a48a96d6cfb0e423a301a07200eee2c7796ce1.tar.bz2
mitmproxy-a4a48a96d6cfb0e423a301a07200eee2c7796ce1.zip
Merge pull request #3078 from kajojify/expanduser
Fix #3002. Auto-expanding for tilda.
-rw-r--r--mitmproxy/addons/cut.py5
-rw-r--r--mitmproxy/addons/view.py4
-rw-r--r--mitmproxy/types.py2
-rw-r--r--test/mitmproxy/test_types.py4
4 files changed, 10 insertions, 5 deletions
diff --git a/mitmproxy/addons/cut.py b/mitmproxy/addons/cut.py
index 7d9a1f36..6bb52e84 100644
--- a/mitmproxy/addons/cut.py
+++ b/mitmproxy/addons/cut.py
@@ -1,6 +1,8 @@
import io
import csv
import typing
+import os.path
+
from mitmproxy import command
from mitmproxy import exceptions
from mitmproxy import flow
@@ -87,7 +89,8 @@ class Cut:
append = False
if path.startswith("+"):
append = True
- path = mitmproxy.types.Path(path[1:])
+ epath = os.path.expanduser(path[1:])
+ path = mitmproxy.types.Path(epath)
try:
if len(cuts) == 1 and len(flows) == 1:
with open(path, "ab" if append else "wb") as fp:
diff --git a/mitmproxy/addons/view.py b/mitmproxy/addons/view.py
index 6da17b5b..beaadcc6 100644
--- a/mitmproxy/addons/view.py
+++ b/mitmproxy/addons/view.py
@@ -10,7 +10,6 @@ The View:
"""
import collections
import typing
-import os
import blinker
import sortedcontainers
@@ -359,9 +358,8 @@ class View(collections.Sequence):
"""
Load flows into the view, without processing them with addons.
"""
- spath = os.path.expanduser(path)
try:
- with open(spath, "rb") as f:
+ with open(path, "rb") as f:
for i in io.FlowReader(f).stream():
# Do this to get a new ID, so we can load the same file N times and
# get new flows each time. It would be more efficient to just have a
diff --git a/mitmproxy/types.py b/mitmproxy/types.py
index 2d66bb8e..23320c12 100644
--- a/mitmproxy/types.py
+++ b/mitmproxy/types.py
@@ -178,7 +178,7 @@ class _PathType(_BaseType):
return ret
def parse(self, manager: _CommandBase, t: type, s: str) -> str:
- return s
+ return os.path.expanduser(s)
def is_valid(self, manager: _CommandBase, typ: typing.Any, val: typing.Any) -> bool:
return isinstance(val, str)
diff --git a/test/mitmproxy/test_types.py b/test/mitmproxy/test_types.py
index b4a643ad..35ff3241 100644
--- a/test/mitmproxy/test_types.py
+++ b/test/mitmproxy/test_types.py
@@ -2,6 +2,7 @@ import pytest
import os
import typing
import contextlib
+from unittest import mock
import mitmproxy.exceptions
import mitmproxy.types
@@ -68,7 +69,10 @@ def test_path(tdata):
b = mitmproxy.types._PathType()
assert b.parse(tctx.master.commands, mitmproxy.types.Path, "/foo") == "/foo"
assert b.parse(tctx.master.commands, mitmproxy.types.Path, "/bar") == "/bar"
+ with mock.patch.dict("os.environ", {"HOME": "/home/test"}):
+ assert b.parse(tctx.master.commands, mitmproxy.types.Path, "~/mitm") == "/home/test/mitm"
assert b.is_valid(tctx.master.commands, mitmproxy.types.Path, "foo") is True
+ assert b.is_valid(tctx.master.commands, mitmproxy.types.Path, "~/mitm") is True
assert b.is_valid(tctx.master.commands, mitmproxy.types.Path, 3) is False
def normPathOpts(prefix, match):