home *** CD-ROM | disk | FTP | other *** search
- # Source Generated with Decompyle++
- # File: in.pyc (Python 2.6)
-
- import re
- import math
-
- try:
- from _json import encode_basestring_ascii as c_encode_basestring_ascii
- except ImportError:
- c_encode_basestring_ascii = None
-
- __all__ = [
- 'JSONEncoder']
- ESCAPE = re.compile('[\\x00-\\x1f\\\\"\\b\\f\\n\\r\\t]')
- ESCAPE_ASCII = re.compile('([\\\\"]|[^\\ -~])')
- HAS_UTF8 = re.compile('[\\x80-\\xff]')
- ESCAPE_DCT = {
- '\\': '\\\\',
- '"': '\\"',
- '\x08': '\\b',
- '\x0c': '\\f',
- '\n': '\\n',
- '\r': '\\r',
- '\t': '\\t' }
- for i in range(32):
- ESCAPE_DCT.setdefault(chr(i), '\\u{0:04x}'.format(i))
-
- FLOAT_REPR = repr
-
- def floatstr(o, allow_nan = True):
- if math.isnan(o):
- text = 'NaN'
- elif math.isinf(o):
- if math.copysign(1, o) == 1:
- text = 'Infinity'
- else:
- text = '-Infinity'
- else:
- return FLOAT_REPR(o)
- if not math.isnan(o):
- msg = 'Out of range float values are not JSON compliant: ' + repr(o)
- raise ValueError(msg)
- math.isnan(o)
- return text
-
-
- def encode_basestring(s):
-
- def replace(match):
- return ESCAPE_DCT[match.group(0)]
-
- return '"' + ESCAPE.sub(replace, s) + '"'
-
-
- def py_encode_basestring_ascii(s):
- if isinstance(s, str) and HAS_UTF8.search(s) is not None:
- s = s.decode('utf-8')
-
-
- def replace(match):
- s = match.group(0)
-
- try:
- return ESCAPE_DCT[s]
- except KeyError:
- n = ord(s)
- if n < 65536:
- return '\\u{0:04x}'.format(n)
- n -= 65536
- s1 = 55296 | n >> 10 & 1023
- s2 = 56320 | n & 1023
- return '\\u{0:04x}\\u{1:04x}'.format(s1, s2)
- except:
- n < 65536
-
-
- return '"' + str(ESCAPE_ASCII.sub(replace, s)) + '"'
-
- if c_encode_basestring_ascii is not None:
- encode_basestring_ascii = c_encode_basestring_ascii
- else:
- encode_basestring_ascii = py_encode_basestring_ascii
-
- class JSONEncoder(object):
- __all__ = [
- '__init__',
- 'default',
- 'encode',
- 'iterencode']
- item_separator = ', '
- key_separator = ': '
-
- def __init__(self, skipkeys = False, ensure_ascii = True, check_circular = True, allow_nan = True, sort_keys = False, indent = None, separators = None, encoding = 'utf-8', default = None):
- self.skipkeys = skipkeys
- self.ensure_ascii = ensure_ascii
- self.check_circular = check_circular
- self.allow_nan = allow_nan
- self.sort_keys = sort_keys
- self.indent = indent
- self.current_indent_level = 0
- if separators is not None:
- (self.item_separator, self.key_separator) = separators
-
- if default is not None:
- self.default = default
-
- self.encoding = encoding
-
-
- def _newline_indent(self):
- return '\n' + ' ' * self.indent * self.current_indent_level
-
-
- def _iterencode_list(self, lst, markers = None):
- if not lst:
- yield '[]'
- return None
- if markers is not None:
- markerid = id(lst)
- if markerid in markers:
- raise ValueError('Circular reference detected')
- markerid in markers
- markers[markerid] = lst
-
- yield '['
- if self.indent is not None:
- self.current_indent_level += 1
- newline_indent = self._newline_indent()
- separator = self.item_separator + newline_indent
- yield newline_indent
- self
- else:
- newline_indent = None
- separator = self.item_separator
- first = True
- for value in lst:
- if first:
- first = False
- else:
- yield separator
- for chunk in self._iterencode(value, markers):
- yield chunk
-
-
- if newline_indent is not None:
- self.current_indent_level -= 1
- yield self._newline_indent()
- self
-
- yield ']'
- if markers is not None:
- del markers[markerid]
-
-
-
- def _iterencode_dict(self, dct, markers = None):
- if not dct:
- yield '{}'
- return None
- if markers is not None:
- markerid = id(dct)
- if markerid in markers:
- raise ValueError('Circular reference detected')
- markerid in markers
- markers[markerid] = dct
-
- yield '{'
- key_separator = self.key_separator
- if self.indent is not None:
- self.current_indent_level += 1
- newline_indent = self._newline_indent()
- item_separator = self.item_separator + newline_indent
- yield newline_indent
- self
- else:
- newline_indent = None
- item_separator = self.item_separator
- first = True
- if self.ensure_ascii:
- encoder = encode_basestring_ascii
- else:
- encoder = encode_basestring
- allow_nan = self.allow_nan
- _encoding = self.encoding
- if _encoding is not None:
- pass
- _do_decode = not (_encoding == 'utf-8')
- for key, value in items:
- if isinstance(key, str):
- if _do_decode:
- key = key.decode(_encoding)
-
- elif isinstance(key, basestring):
- pass
- elif isinstance(key, float):
- key = floatstr(key, allow_nan)
- elif isinstance(key, (int, long)):
- key = str(key)
- elif key is True:
- key = 'true'
- elif key is False:
- key = 'false'
- elif key is None:
- key = 'null'
- elif self.skipkeys:
- continue
- else:
- raise TypeError('key {0!r} is not a string'.format(key))
- if None if self.sort_keys else []:
- first = False
- else:
- yield item_separator
- yield encoder(key)
- yield key_separator
- for chunk in self._iterencode(value, markers):
- yield chunk
-
-
- if newline_indent is not None:
- self.current_indent_level -= 1
- yield self._newline_indent()
- self
-
- yield '}'
- if markers is not None:
- del markers[markerid]
-
-
-
- def _iterencode(self, o, markers = None):
- if isinstance(o, basestring):
- if self.ensure_ascii:
- encoder = encode_basestring_ascii
- else:
- encoder = encode_basestring
- _encoding = self.encoding
- if _encoding is not None and isinstance(o, str) and not (_encoding == 'utf-8'):
- o = o.decode(_encoding)
-
- yield encoder(o)
- elif o is None:
- yield 'null'
- elif o is True:
- yield 'true'
- elif o is False:
- yield 'false'
- elif isinstance(o, (int, long)):
- yield str(o)
- elif isinstance(o, float):
- yield floatstr(o, self.allow_nan)
- elif isinstance(o, (list, tuple)):
- for chunk in self._iterencode_list(o, markers):
- yield chunk
-
- elif isinstance(o, dict):
- for chunk in self._iterencode_dict(o, markers):
- yield chunk
-
- elif markers is not None:
- markerid = id(o)
- if markerid in markers:
- raise ValueError('Circular reference detected')
- markerid in markers
- markers[markerid] = o
-
- for chunk in self._iterencode_default(o, markers):
- yield chunk
-
- if markers is not None:
- del markers[markerid]
-
-
-
- def _iterencode_default(self, o, markers = None):
- newobj = self.default(o)
- return self._iterencode(newobj, markers)
-
-
- def default(self, o):
- raise TypeError(repr(o) + ' is not JSON serializable')
-
-
- def encode(self, o):
- if isinstance(o, basestring):
- if isinstance(o, str):
- _encoding = self.encoding
- if _encoding is not None and not (_encoding == 'utf-8'):
- o = o.decode(_encoding)
-
-
- if self.ensure_ascii:
- return encode_basestring_ascii(o)
- return encode_basestring(o)
- isinstance(o, basestring)
- chunks = list(self.iterencode(o))
- return ''.join(chunks)
-
-
- def iterencode(self, o):
- if self.check_circular:
- markers = { }
- else:
- markers = None
- return self._iterencode(o, markers)
-
-
-