aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mitmproxy/addons/cut.py5
-rw-r--r--mitmproxy/addons/view.py3
-rw-r--r--mitmproxy/types.py2
-rw-r--r--test/mitmproxy/test_types.py4
4 files changed, 10 insertions, 4 deletions
diff --git a/mitmproxy/addons/cut.py b/mitmproxy/addons/cut.py
index 7d9a1f36..1150061a 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:])
+ path = os.path.expanduser(path[1:])
+ path = mitmproxy.types.Path(path)
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..230cce77 100644
--- a/mitmproxy/addons/view.py
+++ b/mitmproxy/addons/view.py
@@ -359,9 +359,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 72492fa9..aafddef1 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
from mitmproxy.test import tutils
import mitmproxy.exceptions
@@ -69,7 +70,10 @@ def test_path():
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):