aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2016-05-26 12:09:39 -0700
committerMaximilian Hils <git@maximilianhils.com>2016-05-26 12:09:39 -0700
commit22ecd022a84e1c3762dd425bc9bee2230e393d8d (patch)
tree47f7cac0e86c715bc32e955072fbe59f06d589cf
parentd149c447fe9d3ec359271270ed1c32c2c7da6aad (diff)
parent92317bc81d72f243095a1bfa192f568637d9bc32 (diff)
downloadmitmproxy-22ecd022a84e1c3762dd425bc9bee2230e393d8d.tar.gz
mitmproxy-22ecd022a84e1c3762dd425bc9bee2230e393d8d.tar.bz2
mitmproxy-22ecd022a84e1c3762dd425bc9bee2230e393d8d.zip
Merge pull request #1119 from dufferzafar/pathod-port
Python 3 - pathod.utils
-rw-r--r--.travis.yml4
-rw-r--r--pathod/app.py4
-rw-r--r--pathod/language/__init__.py6
-rw-r--r--pathod/language/base.py16
-rw-r--r--pathod/log.py4
-rw-r--r--pathod/pathoc.py6
-rw-r--r--pathod/pathod.py6
-rw-r--r--pathod/utils.py19
-rw-r--r--test/pathod/test_utils.py13
9 files changed, 35 insertions, 43 deletions
diff --git a/.travis.yml b/.travis.yml
index 7d3fbee8..4a01174a 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -22,9 +22,9 @@ matrix:
git:
depth: 9999999
- python: 3.5
- env: SCOPE="netlib ./test/mitmproxy/script"
+ env: SCOPE="netlib ./test/mitmproxy/script ./test/pathod/test_utils.py"
- python: 3.5
- env: SCOPE="netlib ./test/mitmproxy/script" NO_ALPN=1
+ env: SCOPE="netlib ./test/mitmproxy/script ./test/pathod/test_utils.py" NO_ALPN=1
- python: 2.7
env: DOCS=1
script: 'cd docs && make html'
diff --git a/pathod/app.py b/pathod/app.py
index aa00ed69..7e9860b9 100644
--- a/pathod/app.py
+++ b/pathod/app.py
@@ -1,6 +1,6 @@
import logging
import pprint
-from six.moves import cStringIO as StringIO
+import io
import copy
from flask import Flask, jsonify, render_template, request, abort, make_response
from . import version, language, utils
@@ -145,7 +145,7 @@ def make_app(noapi, debug):
args["marked"] = v.marked()
return render(template, False, **args)
- s = StringIO()
+ s = io.BytesIO()
settings = copy.copy(app.config["pathod"].settings)
settings.request_host = EXAMPLE_HOST
diff --git a/pathod/language/__init__.py b/pathod/language/__init__.py
index 32199e08..10da93ba 100644
--- a/pathod/language/__init__.py
+++ b/pathod/language/__init__.py
@@ -1,3 +1,5 @@
+from __future__ import absolute_import
+
import itertools
import time
@@ -5,8 +7,8 @@ import pyparsing as pp
from . import http, http2, websockets, writer, exceptions
-from exceptions import *
-from base import Settings
+from .exceptions import *
+from .base import Settings
assert Settings # prevent pyflakes from messing with this
diff --git a/pathod/language/base.py b/pathod/language/base.py
index a4302998..54ca6492 100644
--- a/pathod/language/base.py
+++ b/pathod/language/base.py
@@ -3,9 +3,13 @@ import os
import abc
import pyparsing as pp
+from six.moves import reduce
+from netlib.utils import escaped_str_to_bytes, bytes_to_escaped_str
+
from .. import utils
from . import generators, exceptions
+
class Settings(object):
def __init__(
@@ -105,7 +109,7 @@ class Token(object):
class _TokValueLiteral(Token):
def __init__(self, val):
- self.val = val.decode("string_escape")
+ self.val = escaped_str_to_bytes(val)
def get_generator(self, settings_):
return self.val
@@ -130,7 +134,7 @@ class TokValueLiteral(_TokValueLiteral):
return v
def spec(self):
- inner = self.val.encode("string_escape")
+ inner = bytes_to_escaped_str(self.val)
inner = inner.replace(r"\'", r"\x27")
return "'" + inner + "'"
@@ -143,7 +147,7 @@ class TokValueNakedLiteral(_TokValueLiteral):
return e.setParseAction(lambda x: cls(*x))
def spec(self):
- return self.val.encode("string_escape")
+ return bytes_to_escaped_str(self.val)
class TokValueGenerate(Token):
@@ -161,7 +165,7 @@ class TokValueGenerate(Token):
def freeze(self, settings):
g = self.get_generator(settings)
- return TokValueLiteral(g[:].encode("string_escape"))
+ return TokValueLiteral(bytes_to_escaped_str(g[:]))
@classmethod
def expr(cls):
@@ -221,7 +225,7 @@ class TokValueFile(Token):
return generators.FileGenerator(s)
def spec(self):
- return "<'%s'" % self.path.encode("string_escape")
+ return "<'%s'" % bytes_to_escaped_str(self.path)
TokValue = pp.MatchFirst(
@@ -573,4 +577,4 @@ class NestedMessage(Token):
def freeze(self, settings):
f = self.parsed.freeze(settings).spec()
- return self.__class__(TokValueLiteral(f.encode("string_escape")))
+ return self.__class__(TokValueLiteral(bytes_to_escaped_str(f)))
diff --git a/pathod/log.py b/pathod/log.py
index f203542f..3f6aaea0 100644
--- a/pathod/log.py
+++ b/pathod/log.py
@@ -1,5 +1,7 @@
import datetime
+import six
+
import netlib.utils
import netlib.tcp
import netlib.http
@@ -53,7 +55,7 @@ class LogCtx(object):
]
)
if exc_value:
- raise exc_type, exc_value, traceback
+ six.reraise(exc_type, exc_value, traceback)
def suppress(self):
self.suppressed = True
diff --git a/pathod/pathoc.py b/pathod/pathoc.py
index a49ed351..8706868b 100644
--- a/pathod/pathoc.py
+++ b/pathod/pathoc.py
@@ -13,14 +13,12 @@ import threading
import OpenSSL.crypto
import six
-from netlib import tcp, http, certutils, websockets, socks
+from netlib import tcp, certutils, websockets, socks
from netlib.exceptions import HttpException, TcpDisconnect, TcpTimeout, TlsException, TcpException, \
NetlibException
from netlib.http import http1, http2
-import language.http
-import language.websockets
-from . import utils, log
+from . import utils, log, language
import logging
from netlib.tutils import treq
diff --git a/pathod/pathod.py b/pathod/pathod.py
index 017ce072..af5f9e6a 100644
--- a/pathod/pathod.py
+++ b/pathod/pathod.py
@@ -6,15 +6,11 @@ import sys
import threading
import urllib
-from netlib import tcp, http, certutils, websockets
+from netlib import tcp, certutils, websockets
from netlib.exceptions import HttpException, HttpReadDisconnect, TcpTimeout, TcpDisconnect, \
TlsException
from . import version, app, language, utils, log, protocols
-import language.http
-import language.actions
-import language.exceptions
-import language.websockets
DEFAULT_CERT_DOMAIN = "pathod.net"
diff --git a/pathod/utils.py b/pathod/utils.py
index d1e2dd00..8c6d6290 100644
--- a/pathod/utils.py
+++ b/pathod/utils.py
@@ -2,6 +2,8 @@ import os
import sys
import netlib.utils
+from netlib.utils import bytes_to_escaped_str
+
SIZE_UNITS = dict(
b=1024 ** 0,
@@ -53,24 +55,13 @@ def xrepr(s):
return repr(s)[1:-1]
-def inner_repr(s):
- """
- Returns the inner portion of a string or unicode repr (i.e. without the
- quotes)
- """
- if isinstance(s, unicode):
- return repr(s)[2:-1]
- else:
- return repr(s)[1:-1]
-
-
def escape_unprintables(s):
"""
Like inner_repr, but preserves line breaks.
"""
- s = s.replace("\r\n", "PATHOD_MARKER_RN")
- s = s.replace("\n", "PATHOD_MARKER_N")
- s = inner_repr(s)
+ s = s.replace(b"\r\n", b"PATHOD_MARKER_RN")
+ s = s.replace(b"\n", b"PATHOD_MARKER_N")
+ s = bytes_to_escaped_str(s)
s = s.replace("PATHOD_MARKER_RN", "\n")
s = s.replace("PATHOD_MARKER_N", "\n")
return s
diff --git a/test/pathod/test_utils.py b/test/pathod/test_utils.py
index 4dcedf6e..8026a576 100644
--- a/test/pathod/test_utils.py
+++ b/test/pathod/test_utils.py
@@ -1,6 +1,8 @@
from pathod import utils
import tutils
+import six
+
def test_membool():
m = utils.MemBool()
@@ -27,13 +29,10 @@ def test_data_path():
tutils.raises(ValueError, utils.data.path, "nonexistent")
-def test_inner_repr():
- assert utils.inner_repr("\x66") == "\x66"
- assert utils.inner_repr(u"foo") == "foo"
-
-
def test_escape_unprintables():
- s = "".join([chr(i) for i in range(255)])
+ s = bytes(range(256))
+ if six.PY2:
+ s = "".join([chr(i) for i in range(255)])
e = utils.escape_unprintables(s)
assert e.encode('ascii')
- assert not "PATHOD_MARKER" in e
+ assert "PATHOD_MARKER" not in e