aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-03-20 11:31:56 +0100
committerMaximilian Hils <git@maximilianhils.com>2016-03-20 11:31:56 +0100
commit61a657fe56949732d6470862c2ebbe09141f85f2 (patch)
tree4100dfe09af0d42b44f11ed8ac9dbdbe5f9d3e5d
parentd99194fcccf639008cc140f4cb432b18e1296e57 (diff)
parentb0a16dee2071ba90e0363c55a566902d680b9d64 (diff)
downloadmitmproxy-61a657fe56949732d6470862c2ebbe09141f85f2.tar.gz
mitmproxy-61a657fe56949732d6470862c2ebbe09141f85f2.tar.bz2
mitmproxy-61a657fe56949732d6470862c2ebbe09141f85f2.zip
Merge pull request #1045 from mitmproxy/py3-scripts
Port mitmproxy.script to Python 3
-rw-r--r--.travis.yml4
-rw-r--r--mitmproxy/contentviews.py4
-rw-r--r--mitmproxy/contrib/wbxml/ASCommandResponse.py2
-rw-r--r--mitmproxy/contrib/wbxml/ASWBXML.py8
-rw-r--r--mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py2
-rw-r--r--mitmproxy/controller.py10
-rw-r--r--mitmproxy/flow.py6
-rw-r--r--mitmproxy/models/http.py2
-rw-r--r--mitmproxy/script/concurrent.py4
-rw-r--r--mitmproxy/script/script.py23
-rw-r--r--test/mitmproxy/tutils.py2
11 files changed, 41 insertions, 26 deletions
diff --git a/.travis.yml b/.travis.yml
index ce48ab21..d0e5e62d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -20,9 +20,9 @@ matrix:
os: osx
osx_image: xcode7.1
- python: 3.5
- env: SCOPE="netlib"
+ env: SCOPE="netlib ./test/mitmproxy/script"
- python: 3.5
- env: SCOPE="netlib" NO_ALPN=1
+ env: SCOPE="netlib ./test/mitmproxy/script" NO_ALPN=1
- python: 2.7
env: DOCS=1
script: 'cd docs && make html'
diff --git a/mitmproxy/contentviews.py b/mitmproxy/contentviews.py
index 5335b59c..1b0f389f 100644
--- a/mitmproxy/contentviews.py
+++ b/mitmproxy/contentviews.py
@@ -13,7 +13,7 @@ requests, the query parameters are passed as the ``query`` keyword argument.
"""
from __future__ import (absolute_import, print_function, division)
-import cStringIO
+from six.moves import cStringIO as StringIO
import json
import logging
import subprocess
@@ -397,7 +397,7 @@ class ViewImage(View):
def __call__(self, data, **metadata):
try:
- img = Image.open(cStringIO.StringIO(data))
+ img = Image.open(StringIO(data))
except IOError:
return None
parts = [
diff --git a/mitmproxy/contrib/wbxml/ASCommandResponse.py b/mitmproxy/contrib/wbxml/ASCommandResponse.py
index 08d03445..f5f62e85 100644
--- a/mitmproxy/contrib/wbxml/ASCommandResponse.py
+++ b/mitmproxy/contrib/wbxml/ASCommandResponse.py
@@ -27,7 +27,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
'''
-from ASWBXML import ASWBXML
+from .ASWBXML import ASWBXML
import logging
class ASCommandResponse:
diff --git a/mitmproxy/contrib/wbxml/ASWBXML.py b/mitmproxy/contrib/wbxml/ASWBXML.py
index 926d18c0..009ba48f 100644
--- a/mitmproxy/contrib/wbxml/ASWBXML.py
+++ b/mitmproxy/contrib/wbxml/ASWBXML.py
@@ -30,10 +30,10 @@ THE SOFTWARE.
import xml.dom.minidom
import logging
-from ASWBXMLCodePage import ASWBXMLCodePage
-from ASWBXMLByteQueue import ASWBXMLByteQueue
-from GlobalTokens import GlobalTokens
-from InvalidDataException import InvalidDataException
+from .ASWBXMLCodePage import ASWBXMLCodePage
+from .ASWBXMLByteQueue import ASWBXMLByteQueue
+from .GlobalTokens import GlobalTokens
+from .InvalidDataException import InvalidDataException
class ASWBXML:
versionByte = 0x03
diff --git a/mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py b/mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py
index c7a9e0a5..ecc76efb 100644
--- a/mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py
+++ b/mitmproxy/contrib/wbxml/ASWBXMLByteQueue.py
@@ -27,7 +27,7 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
'''
-from Queue import Queue
+from six.moves.queue import Queue
import logging
class ASWBXMLByteQueue(Queue):
diff --git a/mitmproxy/controller.py b/mitmproxy/controller.py
index 9a059856..fedfce62 100644
--- a/mitmproxy/controller.py
+++ b/mitmproxy/controller.py
@@ -1,5 +1,5 @@
from __future__ import absolute_import
-import Queue
+from six.moves import queue
import threading
@@ -27,7 +27,7 @@ class Reply:
def __init__(self, obj):
self.obj = obj
- self.q = Queue.Queue()
+ self.q = queue.Queue()
self.acked = False
def __call__(self, msg=None):
@@ -56,7 +56,7 @@ class Channel:
try:
# The timeout is here so we can handle a should_exit event.
g = m.reply.q.get(timeout=0.5)
- except Queue.Empty: # pragma: no cover
+ except queue.Empty: # pragma: no cover
continue
return g
@@ -98,7 +98,7 @@ class Master(object):
server may be None if no server is needed.
"""
self.server = server
- self.masterq = Queue.Queue()
+ self.masterq = queue.Queue()
self.should_exit = threading.Event()
def tick(self, q, timeout):
@@ -113,7 +113,7 @@ class Master(object):
self.handle(*msg)
q.task_done()
changed = True
- except Queue.Empty:
+ except queue.Empty:
pass
return changed
diff --git a/mitmproxy/flow.py b/mitmproxy/flow.py
index 7de9823d..5d6334b5 100644
--- a/mitmproxy/flow.py
+++ b/mitmproxy/flow.py
@@ -2,6 +2,8 @@
This module provides more sophisticated flow tracking and provides filtering and interception facilities.
"""
from __future__ import absolute_import
+
+import traceback
from abc import abstractmethod, ABCMeta
import hashlib
import Cookie
@@ -686,8 +688,8 @@ class FlowMaster(controller.Master):
try:
s = script.Script(command, script.ScriptContext(self))
s.load()
- except script.ScriptException as v:
- return v.args[0]
+ except script.ScriptException as e:
+ return traceback.format_exc(e)
if use_reloader:
script.reloader.watch(s, lambda: self.masterq.put(("script_change", s)))
self.scripts.append(s)
diff --git a/mitmproxy/models/http.py b/mitmproxy/models/http.py
index 0338945b..21096a39 100644
--- a/mitmproxy/models/http.py
+++ b/mitmproxy/models/http.py
@@ -1,5 +1,5 @@
from __future__ import (absolute_import, print_function, division)
-import Cookie
+from six.moves import http_cookies as Cookie
import copy
import warnings
from email.utils import parsedate_tz, formatdate, mktime_tz
diff --git a/mitmproxy/script/concurrent.py b/mitmproxy/script/concurrent.py
index f0f5e3cd..57ee37de 100644
--- a/mitmproxy/script/concurrent.py
+++ b/mitmproxy/script/concurrent.py
@@ -47,7 +47,7 @@ class ScriptThread(threading.Thread):
def concurrent(fn):
- if fn.func_name in (
+ if fn.__name__ in (
"request",
"response",
"error",
@@ -60,4 +60,4 @@ def concurrent(fn):
return _concurrent
raise NotImplementedError(
- "Concurrent decorator not supported for '%s' method." % fn.func_name)
+ "Concurrent decorator not supported for '%s' method." % fn.__name__)
diff --git a/mitmproxy/script/script.py b/mitmproxy/script/script.py
index edc17d43..f142daca 100644
--- a/mitmproxy/script/script.py
+++ b/mitmproxy/script/script.py
@@ -8,6 +8,9 @@ import os
import shlex
import traceback
import sys
+
+import six
+
from ..exceptions import ScriptException
@@ -40,7 +43,8 @@ class Script(object):
def parse_command(command):
if not command or not command.strip():
raise ScriptException("Empty script command.")
- if os.name == "nt": # Windows: escape all backslashes in the path.
+ # Windows: escape all backslashes in the path.
+ if os.name == "nt": # pragma: no cover
backslashes = shlex.split(command, posix=False)[0].count("\\")
command = command.replace("\\", "\\\\", backslashes)
args = shlex.split(command) # pragma: nocover
@@ -71,10 +75,15 @@ class Script(object):
self.ns = {'__file__': os.path.abspath(self.args[0])}
sys.path.append(script_dir)
try:
- execfile(self.args[0], self.ns, self.ns)
+ with open(self.filename) as f:
+ code = compile(f.read(), self.filename, 'exec')
+ exec (code, self.ns, self.ns)
except Exception as e:
- # Python 3: use exception chaining, https://www.python.org/dev/peps/pep-3134/
- raise ScriptException(traceback.format_exc(e))
+ six.reraise(
+ ScriptException,
+ ScriptException(str(e)),
+ sys.exc_info()[2]
+ )
finally:
sys.path.pop()
return self.run("start", self.args)
@@ -103,6 +112,10 @@ class Script(object):
try:
return f(self.ctx, *args, **kwargs)
except Exception as e:
- raise ScriptException(traceback.format_exc(e))
+ six.reraise(
+ ScriptException,
+ ScriptException(str(e)),
+ sys.exc_info()[2]
+ )
else:
return None
diff --git a/test/mitmproxy/tutils.py b/test/mitmproxy/tutils.py
index 791db6d9..191eb966 100644
--- a/test/mitmproxy/tutils.py
+++ b/test/mitmproxy/tutils.py
@@ -3,7 +3,7 @@ import shutil
import tempfile
import argparse
import sys
-from cStringIO import StringIO
+from six.moves import cStringIO as StringIO
from contextlib import contextmanager
from unittest.case import SkipTest