diff options
Diffstat (limited to 'libmproxy/tnetstring.py')
| -rw-r--r-- | libmproxy/tnetstring.py | 92 | 
1 files changed, 46 insertions, 46 deletions
| diff --git a/libmproxy/tnetstring.py b/libmproxy/tnetstring.py index 58519675..bed8405f 100644 --- a/libmproxy/tnetstring.py +++ b/libmproxy/tnetstring.py @@ -72,13 +72,14 @@ __ver_major__ = 0  __ver_minor__ = 2  __ver_patch__ = 0  __ver_sub__ = "" -__version__ = "%d.%d.%d%s" % (__ver_major__,__ver_minor__,__ver_patch__,__ver_sub__) +__version__ = "%d.%d.%d%s" % ( +    __ver_major__, __ver_minor__, __ver_patch__, __ver_sub__)  from collections import deque -def dumps(value,encoding=None): +def dumps(value, encoding=None):      """dumps(object,encoding=None) -> string      This function dumps a python object as a tnetstring. @@ -90,21 +91,21 @@ def dumps(value,encoding=None):      #  consider the _gdumps() function instead; it's a standard top-down      #  generator that's simpler to understand but much less efficient.      q = deque() -    _rdumpq(q,0,value,encoding) +    _rdumpq(q, 0, value, encoding)      return "".join(q) -def dump(value,file,encoding=None): +def dump(value, file, encoding=None):      """dump(object,file,encoding=None)      This function dumps a python object as a tnetstring and writes it to      the given file.      """ -    file.write(dumps(value,encoding)) +    file.write(dumps(value, encoding))      file.flush() -def _rdumpq(q,size,value,encoding=None): +def _rdumpq(q, size, value, encoding=None):      """Dump value as a tnetstring, to a deque instance, last chunks first.      This function generates the tnetstring representation of the given value, @@ -129,7 +130,7 @@ def _rdumpq(q,size,value,encoding=None):      if value is False:          write("5:false!")          return size + 8 -    if isinstance(value,(int,long)): +    if isinstance(value, (int, long)):          data = str(value)          ldata = len(data)          span = str(ldata) @@ -138,7 +139,7 @@ def _rdumpq(q,size,value,encoding=None):          write(":")          write(span)          return size + 2 + len(span) + ldata -    if isinstance(value,(float,)): +    if isinstance(value, (float,)):          #  Use repr() for float rather than str().          #  It round-trips more accurately.          #  Probably unnecessary in later python versions that @@ -151,7 +152,7 @@ def _rdumpq(q,size,value,encoding=None):          write(":")          write(span)          return size + 2 + len(span) + ldata -    if isinstance(value,str): +    if isinstance(value, str):          lvalue = len(value)          span = str(lvalue)          write(",") @@ -159,26 +160,26 @@ def _rdumpq(q,size,value,encoding=None):          write(":")          write(span)          return size + 2 + len(span) + lvalue -    if isinstance(value,(list,tuple,)): +    if isinstance(value, (list, tuple,)):          write("]")          init_size = size = size + 1          for item in reversed(value): -            size = _rdumpq(q,size,item,encoding) +            size = _rdumpq(q, size, item, encoding)          span = str(size - init_size)          write(":")          write(span)          return size + 1 + len(span) -    if isinstance(value,dict): +    if isinstance(value, dict):          write("}")          init_size = size = size + 1 -        for (k,v) in value.iteritems(): -            size = _rdumpq(q,size,v,encoding) -            size = _rdumpq(q,size,k,encoding) +        for (k, v) in value.iteritems(): +            size = _rdumpq(q, size, v, encoding) +            size = _rdumpq(q, size, k, encoding)          span = str(size - init_size)          write(":")          write(span)          return size + 1 + len(span) -    if isinstance(value,unicode): +    if isinstance(value, unicode):          if encoding is None:              raise ValueError("must specify encoding to dump unicode strings")          value = value.encode(encoding) @@ -192,7 +193,7 @@ def _rdumpq(q,size,value,encoding=None):      raise ValueError("unserializable object") -def _gdumps(value,encoding): +def _gdumps(value, encoding):      """Generate fragments of value dumped as a tnetstring.      This is the naive dumping algorithm, implemented as a generator so that @@ -207,24 +208,24 @@ def _gdumps(value,encoding):          yield "4:true!"      elif value is False:          yield "5:false!" -    elif isinstance(value,(int,long)): +    elif isinstance(value, (int, long)):          data = str(value)          yield str(len(data))          yield ":"          yield data          yield "#" -    elif isinstance(value,(float,)): +    elif isinstance(value, (float,)):          data = repr(value)          yield str(len(data))          yield ":"          yield data          yield "^" -    elif isinstance(value,(str,)): +    elif isinstance(value, (str,)):          yield str(len(value))          yield ":"          yield value          yield "," -    elif isinstance(value,(list,tuple,)): +    elif isinstance(value, (list, tuple,)):          sub = []          for item in value:              sub.extend(_gdumps(item)) @@ -233,9 +234,9 @@ def _gdumps(value,encoding):          yield ":"          yield sub          yield "]" -    elif isinstance(value,(dict,)): +    elif isinstance(value, (dict,)):          sub = [] -        for (k,v) in value.iteritems(): +        for (k, v) in value.iteritems():              sub.extend(_gdumps(k))              sub.extend(_gdumps(v))          sub = "".join(sub) @@ -243,7 +244,7 @@ def _gdumps(value,encoding):          yield ":"          yield sub          yield "}" -    elif isinstance(value,(unicode,)): +    elif isinstance(value, (unicode,)):          if encoding is None:              raise ValueError("must specify encoding to dump unicode strings")          value = value.encode(encoding) @@ -255,7 +256,7 @@ def _gdumps(value,encoding):          raise ValueError("unserializable object") -def loads(string,encoding=None): +def loads(string, encoding=None):      """loads(string,encoding=None) -> object      This function parses a tnetstring into a python object. @@ -263,10 +264,10 @@ def loads(string,encoding=None):      #  No point duplicating effort here.  In the C-extension version,      #  loads() is measurably faster then pop() since it can avoid      #  the overhead of building a second string. -    return pop(string,encoding)[0] +    return pop(string, encoding)[0] -def load(file,encoding=None): +def load(file, encoding=None):      """load(file,encoding=None) -> object      This function reads a tnetstring from a file and parses it into a @@ -324,21 +325,20 @@ def load(file,encoding=None):      if type == "]":          l = []          while data: -            (item,data) = pop(data,encoding) +            (item, data) = pop(data, encoding)              l.append(item)          return l      if type == "}":          d = {}          while data: -            (key,data) = pop(data,encoding) -            (val,data) = pop(data,encoding) +            (key, data) = pop(data, encoding) +            (val, data) = pop(data, encoding)              d[key] = val          return d      raise ValueError("unknown type tag") - -def pop(string,encoding=None): +def pop(string, encoding=None):      """pop(string,encoding=None) -> (object, remain)      This function parses a tnetstring into a python object. @@ -347,12 +347,12 @@ def pop(string,encoding=None):      """      #  Parse out data length, type and remaining string.      try: -        (dlen,rest) = string.split(":",1) +        (dlen, rest) = string.split(":", 1)          dlen = int(dlen)      except ValueError:          raise ValueError("not a tnetstring: missing or invalid length prefix")      try: -        (data,type,remain) = (rest[:dlen],rest[dlen],rest[dlen+1:]) +        (data, type, remain) = (rest[:dlen], rest[dlen], rest[dlen + 1:])      except IndexError:          #  This fires if len(rest) < dlen, meaning we don't need          #  to further validate that data is the right length. @@ -360,40 +360,40 @@ def pop(string,encoding=None):      #  Parse the data based on the type tag.      if type == ",":          if encoding is not None: -            return (data.decode(encoding),remain) -        return (data,remain) +            return (data.decode(encoding), remain) +        return (data, remain)      if type == "#":          try: -            return (int(data),remain) +            return (int(data), remain)          except ValueError:              raise ValueError("not a tnetstring: invalid integer literal")      if type == "^":          try: -            return (float(data),remain) +            return (float(data), remain)          except ValueError:              raise ValueError("not a tnetstring: invalid float literal")      if type == "!":          if data == "true": -            return (True,remain) +            return (True, remain)          elif data == "false": -            return (False,remain) +            return (False, remain)          else:              raise ValueError("not a tnetstring: invalid boolean literal")      if type == "~":          if data:              raise ValueError("not a tnetstring: invalid null literal") -        return (None,remain) +        return (None, remain)      if type == "]":          l = []          while data: -            (item,data) = pop(data,encoding) +            (item, data) = pop(data, encoding)              l.append(item) -        return (l,remain) +        return (l, remain)      if type == "}":          d = {}          while data: -            (key,data) = pop(data,encoding) -            (val,data) = pop(data,encoding) +            (key, data) = pop(data, encoding) +            (val, data) = pop(data, encoding)              d[key] = val -        return (d,remain) +        return (d, remain)      raise ValueError("unknown type tag") | 
