| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | """Implementation of JSONDecoder
 | 
					
						
							|  |  |  | """
 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  | import binascii | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | import re | 
					
						
							|  |  |  | import sys | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  | import struct | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-05-14 06:38:03 +03:00
										 |  |  | from json import scanner | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | try: | 
					
						
							|  |  |  |     from _json import scanstring as c_scanstring | 
					
						
							|  |  |  | except ImportError: | 
					
						
							|  |  |  |     c_scanstring = None | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | __all__ = ['JSONDecoder'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | FLAGS = re.VERBOSE | re.MULTILINE | re.DOTALL | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  | def _floatconstants(): | 
					
						
							|  |  |  |     _BYTES = binascii.unhexlify(b'7FF80000000000007FF0000000000000') | 
					
						
							|  |  |  |     if sys.byteorder != 'big': | 
					
						
							|  |  |  |         _BYTES = _BYTES[:8][::-1] + _BYTES[8:][::-1] | 
					
						
							|  |  |  |     nan, inf = struct.unpack('dd', _BYTES) | 
					
						
							|  |  |  |     return nan, inf, -inf | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | NaN, PosInf, NegInf = _floatconstants() | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def linecol(doc, pos): | 
					
						
							| 
									
										
										
										
											2008-10-16 21:17:24 +00:00
										 |  |  |     if isinstance(doc, bytes): | 
					
						
							|  |  |  |         newline = b'\n' | 
					
						
							|  |  |  |     else: | 
					
						
							|  |  |  |         newline = '\n' | 
					
						
							|  |  |  |     lineno = doc.count(newline, 0, pos) + 1 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     if lineno == 1: | 
					
						
							|  |  |  |         colno = pos | 
					
						
							|  |  |  |     else: | 
					
						
							| 
									
										
										
										
											2008-10-16 21:17:24 +00:00
										 |  |  |         colno = pos - doc.rindex(newline, 0, pos) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     return lineno, colno | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def errmsg(msg, doc, pos, end=None): | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     # Note that this function is called from _json | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     lineno, colno = linecol(doc, pos) | 
					
						
							|  |  |  |     if end is None: | 
					
						
							|  |  |  |         fmt = '{0}: line {1} column {2} (char {3})' | 
					
						
							|  |  |  |         return fmt.format(msg, lineno, colno, pos) | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         #fmt = '%s: line %d column %d (char %d)' | 
					
						
							|  |  |  |         #return fmt % (msg, lineno, colno, pos) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     endlineno, endcolno = linecol(doc, end) | 
					
						
							|  |  |  |     fmt = '{0}: line {1} column {2} - line {3} column {4} (char {5} - {6})' | 
					
						
							|  |  |  |     return fmt.format(msg, lineno, colno, endlineno, endcolno, pos, end) | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     #fmt = '%s: line %d column %d - line %d column %d (char %d - %d)' | 
					
						
							|  |  |  |     #return fmt % (msg, lineno, colno, endlineno, endcolno, pos, end) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | _CONSTANTS = { | 
					
						
							|  |  |  |     '-Infinity': NegInf, | 
					
						
							|  |  |  |     'Infinity': PosInf, | 
					
						
							|  |  |  |     'NaN': NaN, | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | STRINGCHUNK = re.compile(r'(.*?)(["\\\x00-\x1f])', FLAGS) | 
					
						
							|  |  |  | BACKSLASH = { | 
					
						
							|  |  |  |     '"': '"', '\\': '\\', '/': '/', | 
					
						
							|  |  |  |     'b': '\b', 'f': '\f', 'n': '\n', 'r': '\r', 't': '\t', | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  | def py_scanstring(s, end, strict=True, | 
					
						
							|  |  |  |         _b=BACKSLASH, _m=STRINGCHUNK.match): | 
					
						
							|  |  |  |     """Scan the string s for a JSON string. End is the index of the
 | 
					
						
							|  |  |  |     character in s after the quote that started the JSON string. | 
					
						
							|  |  |  |     Unescapes all valid JSON string escape sequences and raises ValueError | 
					
						
							|  |  |  |     on attempt to decode an invalid string. If strict is False then literal | 
					
						
							|  |  |  |     control characters are allowed in the string. | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     Returns a tuple of the decoded string and the index of the character in s | 
					
						
							|  |  |  |     after the end quote."""
 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     chunks = [] | 
					
						
							|  |  |  |     _append = chunks.append | 
					
						
							|  |  |  |     begin = end - 1 | 
					
						
							|  |  |  |     while 1: | 
					
						
							|  |  |  |         chunk = _m(s, end) | 
					
						
							|  |  |  |         if chunk is None: | 
					
						
							|  |  |  |             raise ValueError( | 
					
						
							|  |  |  |                 errmsg("Unterminated string starting at", s, begin)) | 
					
						
							|  |  |  |         end = chunk.end() | 
					
						
							|  |  |  |         content, terminator = chunk.groups() | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         # Content is contains zero or more unescaped string characters | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         if content: | 
					
						
							|  |  |  |             _append(content) | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         # Terminator is the end of string, a literal control character, | 
					
						
							|  |  |  |         # or a backslash denoting that an escape sequence follows | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         if terminator == '"': | 
					
						
							|  |  |  |             break | 
					
						
							|  |  |  |         elif terminator != '\\': | 
					
						
							|  |  |  |             if strict: | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |                 #msg = "Invalid control character %r at" % (terminator,) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |                 msg = "Invalid control character {0!r} at".format(terminator) | 
					
						
							|  |  |  |                 raise ValueError(errmsg(msg, s, end)) | 
					
						
							|  |  |  |             else: | 
					
						
							|  |  |  |                 _append(terminator) | 
					
						
							|  |  |  |                 continue | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             esc = s[end] | 
					
						
							|  |  |  |         except IndexError: | 
					
						
							|  |  |  |             raise ValueError( | 
					
						
							|  |  |  |                 errmsg("Unterminated string starting at", s, begin)) | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         # If not a unicode escape sequence, must be in the lookup table | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         if esc != 'u': | 
					
						
							|  |  |  |             try: | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |                 char = _b[esc] | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |             except KeyError: | 
					
						
							|  |  |  |                 msg = "Invalid \\escape: {0!r}".format(esc) | 
					
						
							|  |  |  |                 raise ValueError(errmsg(msg, s, end)) | 
					
						
							|  |  |  |             end += 1 | 
					
						
							|  |  |  |         else: | 
					
						
							|  |  |  |             esc = s[end + 1:end + 5] | 
					
						
							|  |  |  |             next_end = end + 5 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |             if len(esc) != 4: | 
					
						
							|  |  |  |                 msg = "Invalid \\uXXXX escape" | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |                 raise ValueError(errmsg(msg, s, end)) | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |             uni = int(esc, 16) | 
					
						
							|  |  |  |             # Check for surrogate pair on UCS-4 systems | 
					
						
							|  |  |  |             if 0xd800 <= uni <= 0xdbff and sys.maxunicode > 65535: | 
					
						
							|  |  |  |                 msg = "Invalid \\uXXXX\\uXXXX surrogate pair" | 
					
						
							|  |  |  |                 if not s[end + 5:end + 7] == '\\u': | 
					
						
							|  |  |  |                     raise ValueError(errmsg(msg, s, end)) | 
					
						
							|  |  |  |                 esc2 = s[end + 7:end + 11] | 
					
						
							|  |  |  |                 if len(esc2) != 4: | 
					
						
							|  |  |  |                     raise ValueError(errmsg(msg, s, end)) | 
					
						
							|  |  |  |                 uni2 = int(esc2, 16) | 
					
						
							|  |  |  |                 uni = 0x10000 + (((uni - 0xd800) << 10) | (uni2 - 0xdc00)) | 
					
						
							|  |  |  |                 next_end += 6 | 
					
						
							|  |  |  |             char = chr(uni) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |             end = next_end | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         _append(char) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     return ''.join(chunks), end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  | # Use speedup if available | 
					
						
							|  |  |  | scanstring = c_scanstring or py_scanstring | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  | WHITESPACE = re.compile(r'[ \t\n\r]*', FLAGS) | 
					
						
							|  |  |  | WHITESPACE_STR = ' \t\n\r' | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  | def JSONObject(s_and_end, strict, scan_once, object_hook, object_pairs_hook, | 
					
						
							|  |  |  |         _w=WHITESPACE.match, _ws=WHITESPACE_STR): | 
					
						
							|  |  |  |     s, end = s_and_end | 
					
						
							| 
									
										
										
										
											2009-04-21 03:09:17 +00:00
										 |  |  |     pairs = [] | 
					
						
							|  |  |  |     pairs_append = pairs.append | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     # Use a slice to prevent IndexError from being raised, the following | 
					
						
							|  |  |  |     # check will raise a more specific ValueError if the string is empty | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     nextchar = s[end:end + 1] | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     # Normally we expect nextchar == '"' | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     if nextchar != '"': | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         if nextchar in _ws: | 
					
						
							|  |  |  |             end = _w(s, end).end() | 
					
						
							|  |  |  |             nextchar = s[end:end + 1] | 
					
						
							|  |  |  |         # Trivial empty object | 
					
						
							|  |  |  |         if nextchar == '}': | 
					
						
							| 
									
										
										
										
											2011-04-13 07:10:13 +03:00
										 |  |  |             if object_pairs_hook is not None: | 
					
						
							|  |  |  |                 result = object_pairs_hook(pairs) | 
					
						
							|  |  |  |                 return result, end | 
					
						
							|  |  |  |             pairs = {} | 
					
						
							|  |  |  |             if object_hook is not None: | 
					
						
							|  |  |  |                 pairs = object_hook(pairs) | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |             return pairs, end + 1 | 
					
						
							|  |  |  |         elif nextchar != '"': | 
					
						
							|  |  |  |             raise ValueError(errmsg("Expecting property name", s, end)) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     end += 1 | 
					
						
							|  |  |  |     while True: | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         key, end = scanstring(s, end, strict) | 
					
						
							|  |  |  |         # To skip some function call overhead we optimize the fast paths where | 
					
						
							|  |  |  |         # the JSON key separator is ": " or just ":". | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         if s[end:end + 1] != ':': | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |             end = _w(s, end).end() | 
					
						
							|  |  |  |             if s[end:end + 1] != ':': | 
					
						
							|  |  |  |                 raise ValueError(errmsg("Expecting : delimiter", s, end)) | 
					
						
							|  |  |  |         end += 1 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         try: | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |             if s[end] in _ws: | 
					
						
							|  |  |  |                 end += 1 | 
					
						
							|  |  |  |                 if s[end] in _ws: | 
					
						
							|  |  |  |                     end = _w(s, end + 1).end() | 
					
						
							|  |  |  |         except IndexError: | 
					
						
							|  |  |  |             pass | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             value, end = scan_once(s, end) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         except StopIteration: | 
					
						
							|  |  |  |             raise ValueError(errmsg("Expecting object", s, end)) | 
					
						
							| 
									
										
										
										
											2009-04-21 03:09:17 +00:00
										 |  |  |         pairs_append((key, value)) | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             nextchar = s[end] | 
					
						
							|  |  |  |             if nextchar in _ws: | 
					
						
							|  |  |  |                 end = _w(s, end + 1).end() | 
					
						
							|  |  |  |                 nextchar = s[end] | 
					
						
							|  |  |  |         except IndexError: | 
					
						
							|  |  |  |             nextchar = '' | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         end += 1 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         if nextchar == '}': | 
					
						
							|  |  |  |             break | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         elif nextchar != ',': | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |             raise ValueError(errmsg("Expecting , delimiter", s, end - 1)) | 
					
						
							|  |  |  |         end = _w(s, end).end() | 
					
						
							|  |  |  |         nextchar = s[end:end + 1] | 
					
						
							|  |  |  |         end += 1 | 
					
						
							|  |  |  |         if nextchar != '"': | 
					
						
							|  |  |  |             raise ValueError(errmsg("Expecting property name", s, end - 1)) | 
					
						
							| 
									
										
										
										
											2009-04-21 03:09:17 +00:00
										 |  |  |     if object_pairs_hook is not None: | 
					
						
							|  |  |  |         result = object_pairs_hook(pairs) | 
					
						
							|  |  |  |         return result, end | 
					
						
							|  |  |  |     pairs = dict(pairs) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     if object_hook is not None: | 
					
						
							|  |  |  |         pairs = object_hook(pairs) | 
					
						
							|  |  |  |     return pairs, end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2011-04-13 07:04:18 +03:00
										 |  |  | def JSONArray(s_and_end, scan_once, _w=WHITESPACE.match, _ws=WHITESPACE_STR): | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     s, end = s_and_end | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     values = [] | 
					
						
							|  |  |  |     nextchar = s[end:end + 1] | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     if nextchar in _ws: | 
					
						
							|  |  |  |         end = _w(s, end + 1).end() | 
					
						
							|  |  |  |         nextchar = s[end:end + 1] | 
					
						
							|  |  |  |     # Look-ahead for trivial empty array | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     if nextchar == ']': | 
					
						
							|  |  |  |         return values, end + 1 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     _append = values.append | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     while True: | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |             value, end = scan_once(s, end) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         except StopIteration: | 
					
						
							|  |  |  |             raise ValueError(errmsg("Expecting object", s, end)) | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         _append(value) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         nextchar = s[end:end + 1] | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         if nextchar in _ws: | 
					
						
							|  |  |  |             end = _w(s, end + 1).end() | 
					
						
							|  |  |  |             nextchar = s[end:end + 1] | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         end += 1 | 
					
						
							|  |  |  |         if nextchar == ']': | 
					
						
							|  |  |  |             break | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         elif nextchar != ',': | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |             raise ValueError(errmsg("Expecting , delimiter", s, end)) | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         try: | 
					
						
							|  |  |  |             if s[end] in _ws: | 
					
						
							|  |  |  |                 end += 1 | 
					
						
							|  |  |  |                 if s[end] in _ws: | 
					
						
							|  |  |  |                     end = _w(s, end + 1).end() | 
					
						
							|  |  |  |         except IndexError: | 
					
						
							|  |  |  |             pass | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     return values, end | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class JSONDecoder(object): | 
					
						
							|  |  |  |     """Simple JSON <http://json.org> decoder
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     Performs the following translations in decoding by default: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     +---------------+-------------------+ | 
					
						
							|  |  |  |     | JSON          | Python            | | 
					
						
							|  |  |  |     +===============+===================+ | 
					
						
							|  |  |  |     | object        | dict              | | 
					
						
							|  |  |  |     +---------------+-------------------+ | 
					
						
							|  |  |  |     | array         | list              | | 
					
						
							|  |  |  |     +---------------+-------------------+ | 
					
						
							| 
									
										
											  
											
												Merged revisions 82805-82806,83523-83527,83536,83538,83542,83546-83548,83550-83555,83558,83560 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k
........
  r82805 | georg.brandl | 2010-07-11 11:42:10 +0200 (So, 11 Jul 2010) | 1 line
  #7935: cross-reference to ast.literal_eval() from eval() docs.
........
  r82806 | georg.brandl | 2010-07-11 12:22:44 +0200 (So, 11 Jul 2010) | 1 line
  #9223: link to Command class reference, and move Command interface docs nearer to class docs.
........
  r83523 | georg.brandl | 2010-08-02 14:06:18 +0200 (Mo, 02 Aug 2010) | 1 line
  #9209 and #7781: fix two crashes in pstats interactive browser.
........
  r83524 | georg.brandl | 2010-08-02 14:20:23 +0200 (Mo, 02 Aug 2010) | 1 line
  #9428: fix running scripts from profile/cProfile with their own name and the right namespace.  Same fix as for trace.py in #1690103.
........
  r83525 | georg.brandl | 2010-08-02 14:36:24 +0200 (Mo, 02 Aug 2010) | 1 line
  Get rid of spurious "threading" entries in trace output.
........
  r83526 | georg.brandl | 2010-08-02 14:40:22 +0200 (Mo, 02 Aug 2010) | 1 line
  Fix softspace relic.
........
  r83527 | georg.brandl | 2010-08-02 14:48:46 +0200 (Mo, 02 Aug 2010) | 1 line
  #3821: beginnings of a trace.py unittest.
........
  r83536 | georg.brandl | 2010-08-02 19:49:25 +0200 (Mo, 02 Aug 2010) | 1 line
  #8578: mention danger of not incref'ing weak referenced object.
........
  r83538 | georg.brandl | 2010-08-02 20:10:13 +0200 (Mo, 02 Aug 2010) | 1 line
  #6928: fix class docs w.r.t. new metaclasses.
........
  r83542 | georg.brandl | 2010-08-02 20:56:54 +0200 (Mo, 02 Aug 2010) | 1 line
  Move test_SimpleHTTPServer into test_httpservers.
........
  r83546 | georg.brandl | 2010-08-02 21:16:34 +0200 (Mo, 02 Aug 2010) | 1 line
  #7973: Fix distutils options spelling.
........
  r83547 | georg.brandl | 2010-08-02 21:19:26 +0200 (Mo, 02 Aug 2010) | 1 line
  #7386: add example that shows that trailing path separators are stripped.
........
  r83548 | georg.brandl | 2010-08-02 21:23:34 +0200 (Mo, 02 Aug 2010) | 1 line
  #8172: how does one use a property?
........
  r83550 | georg.brandl | 2010-08-02 21:32:43 +0200 (Mo, 02 Aug 2010) | 1 line
  #9451: strengthen warning about __*__ special name usage.
........
  r83551 | georg.brandl | 2010-08-02 21:35:06 +0200 (Mo, 02 Aug 2010) | 1 line
  Remove XXX comment that was displayed.
........
  r83552 | georg.brandl | 2010-08-02 21:36:36 +0200 (Mo, 02 Aug 2010) | 1 line
  #9438: clarify that constant names also cannot be assigned as attributes.
........
  r83553 | georg.brandl | 2010-08-02 21:39:17 +0200 (Mo, 02 Aug 2010) | 1 line
  Remove redundant information.
........
  r83554 | georg.brandl | 2010-08-02 21:43:05 +0200 (Mo, 02 Aug 2010) | 1 line
  #7280: note about nasmw.exe.
........
  r83555 | georg.brandl | 2010-08-02 21:44:48 +0200 (Mo, 02 Aug 2010) | 1 line
  #8861: remove unused variable.
........
  r83558 | georg.brandl | 2010-08-02 22:05:19 +0200 (Mo, 02 Aug 2010) | 1 line
  #8648: document UTF-7 codec functions.
........
  r83560 | georg.brandl | 2010-08-02 22:16:18 +0200 (Mo, 02 Aug 2010) | 1 line
  #9087: update json docstrings -- unicode and long do not exist anymore.
........
											
										 
											2010-10-06 08:26:09 +00:00
										 |  |  |     | string        | str               | | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     +---------------+-------------------+ | 
					
						
							| 
									
										
											  
											
												Merged revisions 82805-82806,83523-83527,83536,83538,83542,83546-83548,83550-83555,83558,83560 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k
........
  r82805 | georg.brandl | 2010-07-11 11:42:10 +0200 (So, 11 Jul 2010) | 1 line
  #7935: cross-reference to ast.literal_eval() from eval() docs.
........
  r82806 | georg.brandl | 2010-07-11 12:22:44 +0200 (So, 11 Jul 2010) | 1 line
  #9223: link to Command class reference, and move Command interface docs nearer to class docs.
........
  r83523 | georg.brandl | 2010-08-02 14:06:18 +0200 (Mo, 02 Aug 2010) | 1 line
  #9209 and #7781: fix two crashes in pstats interactive browser.
........
  r83524 | georg.brandl | 2010-08-02 14:20:23 +0200 (Mo, 02 Aug 2010) | 1 line
  #9428: fix running scripts from profile/cProfile with their own name and the right namespace.  Same fix as for trace.py in #1690103.
........
  r83525 | georg.brandl | 2010-08-02 14:36:24 +0200 (Mo, 02 Aug 2010) | 1 line
  Get rid of spurious "threading" entries in trace output.
........
  r83526 | georg.brandl | 2010-08-02 14:40:22 +0200 (Mo, 02 Aug 2010) | 1 line
  Fix softspace relic.
........
  r83527 | georg.brandl | 2010-08-02 14:48:46 +0200 (Mo, 02 Aug 2010) | 1 line
  #3821: beginnings of a trace.py unittest.
........
  r83536 | georg.brandl | 2010-08-02 19:49:25 +0200 (Mo, 02 Aug 2010) | 1 line
  #8578: mention danger of not incref'ing weak referenced object.
........
  r83538 | georg.brandl | 2010-08-02 20:10:13 +0200 (Mo, 02 Aug 2010) | 1 line
  #6928: fix class docs w.r.t. new metaclasses.
........
  r83542 | georg.brandl | 2010-08-02 20:56:54 +0200 (Mo, 02 Aug 2010) | 1 line
  Move test_SimpleHTTPServer into test_httpservers.
........
  r83546 | georg.brandl | 2010-08-02 21:16:34 +0200 (Mo, 02 Aug 2010) | 1 line
  #7973: Fix distutils options spelling.
........
  r83547 | georg.brandl | 2010-08-02 21:19:26 +0200 (Mo, 02 Aug 2010) | 1 line
  #7386: add example that shows that trailing path separators are stripped.
........
  r83548 | georg.brandl | 2010-08-02 21:23:34 +0200 (Mo, 02 Aug 2010) | 1 line
  #8172: how does one use a property?
........
  r83550 | georg.brandl | 2010-08-02 21:32:43 +0200 (Mo, 02 Aug 2010) | 1 line
  #9451: strengthen warning about __*__ special name usage.
........
  r83551 | georg.brandl | 2010-08-02 21:35:06 +0200 (Mo, 02 Aug 2010) | 1 line
  Remove XXX comment that was displayed.
........
  r83552 | georg.brandl | 2010-08-02 21:36:36 +0200 (Mo, 02 Aug 2010) | 1 line
  #9438: clarify that constant names also cannot be assigned as attributes.
........
  r83553 | georg.brandl | 2010-08-02 21:39:17 +0200 (Mo, 02 Aug 2010) | 1 line
  Remove redundant information.
........
  r83554 | georg.brandl | 2010-08-02 21:43:05 +0200 (Mo, 02 Aug 2010) | 1 line
  #7280: note about nasmw.exe.
........
  r83555 | georg.brandl | 2010-08-02 21:44:48 +0200 (Mo, 02 Aug 2010) | 1 line
  #8861: remove unused variable.
........
  r83558 | georg.brandl | 2010-08-02 22:05:19 +0200 (Mo, 02 Aug 2010) | 1 line
  #8648: document UTF-7 codec functions.
........
  r83560 | georg.brandl | 2010-08-02 22:16:18 +0200 (Mo, 02 Aug 2010) | 1 line
  #9087: update json docstrings -- unicode and long do not exist anymore.
........
											
										 
											2010-10-06 08:26:09 +00:00
										 |  |  |     | number (int)  | int               | | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |     +---------------+-------------------+ | 
					
						
							|  |  |  |     | number (real) | float             | | 
					
						
							|  |  |  |     +---------------+-------------------+ | 
					
						
							|  |  |  |     | true          | True              | | 
					
						
							|  |  |  |     +---------------+-------------------+ | 
					
						
							|  |  |  |     | false         | False             | | 
					
						
							|  |  |  |     +---------------+-------------------+ | 
					
						
							|  |  |  |     | null          | None              | | 
					
						
							|  |  |  |     +---------------+-------------------+ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     It also understands ``NaN``, ``Infinity``, and ``-Infinity`` as | 
					
						
							|  |  |  |     their corresponding ``float`` values, which is outside the JSON spec. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     def __init__(self, object_hook=None, parse_float=None, | 
					
						
							| 
									
										
										
										
											2009-04-21 03:09:17 +00:00
										 |  |  |             parse_int=None, parse_constant=None, strict=True, | 
					
						
							|  |  |  |             object_pairs_hook=None): | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         """``object_hook``, if specified, will be called with the result
 | 
					
						
							|  |  |  |         of every JSON object decoded and its return value will be used in | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         place of the given ``dict``.  This can be used to provide custom | 
					
						
							|  |  |  |         deserializations (e.g. to support JSON-RPC class hinting). | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 85530,85532-85534,85538-85543,85546-85548 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k
........
  r85530 | georg.brandl | 2010-10-15 17:32:05 +0200 (Fr, 15 Okt 2010) | 1 line
  Refrain from using inline suites.
........
  r85532 | georg.brandl | 2010-10-15 18:03:02 +0200 (Fr, 15 Okt 2010) | 1 line
  #7771: reference to documentation of dictview methods and operations.
........
  r85533 | georg.brandl | 2010-10-15 18:07:41 +0200 (Fr, 15 Okt 2010) | 1 line
  #9683: remove broken dead code dealing with nested arguments removed from Py3k, and update the docs and docstrings accordingly.
........
  r85534 | georg.brandl | 2010-10-15 18:19:43 +0200 (Fr, 15 Okt 2010) | 1 line
  #9801: document how list and dict proxies created by Managers behave w.r.t. mutable items.
........
  r85538 | georg.brandl | 2010-10-15 18:35:46 +0200 (Fr, 15 Okt 2010) | 1 line
  #7303: add documentation for useful pkgutil functions and classes.
........
  r85539 | georg.brandl | 2010-10-15 18:42:14 +0200 (Fr, 15 Okt 2010) | 1 line
  Fix issue references.
........
  r85540 | georg.brandl | 2010-10-15 18:42:37 +0200 (Fr, 15 Okt 2010) | 1 line
  #6798: fix wrong docs for the arguments to several trace events.
........
  r85541 | georg.brandl | 2010-10-15 18:53:24 +0200 (Fr, 15 Okt 2010) | 1 line
  #4968: updates to inspect.is* function docs.
........
  r85542 | georg.brandl | 2010-10-15 19:01:15 +0200 (Fr, 15 Okt 2010) | 1 line
  #7790: move table of struct_time members to the actual description of struct_time.
........
  r85543 | georg.brandl | 2010-10-15 19:03:02 +0200 (Fr, 15 Okt 2010) | 1 line
  #4785: document strict argument of JSONDecoder, plus add object_pairs_hook in the docstrings.
........
  r85546 | georg.brandl | 2010-10-15 19:58:45 +0200 (Fr, 15 Okt 2010) | 1 line
  #5762: fix handling of empty namespace in minidom, which would result in AttributeError on toxml().
........
  r85547 | georg.brandl | 2010-10-15 20:00:35 +0200 (Fr, 15 Okt 2010) | 1 line
  #6098: Refrain from claiming DOM level 3 conformance in minidom.
........
  r85548 | georg.brandl | 2010-10-15 21:46:19 +0200 (Fr, 15 Okt 2010) | 1 line
  #10072: assume a bit less knowledge of the FTP protocol in the ftplib docs.
........
											
										 
											2010-11-26 08:42:45 +00:00
										 |  |  |         ``object_pairs_hook``, if specified will be called with the result of | 
					
						
							|  |  |  |         every JSON object decoded with an ordered list of pairs.  The return | 
					
						
							|  |  |  |         value of ``object_pairs_hook`` will be used instead of the ``dict``. | 
					
						
							|  |  |  |         This feature can be used to implement custom decoders that rely on the | 
					
						
							|  |  |  |         order that the key and value pairs are decoded (for example, | 
					
						
							|  |  |  |         collections.OrderedDict will remember the order of insertion). If | 
					
						
							|  |  |  |         ``object_hook`` is also defined, the ``object_pairs_hook`` takes | 
					
						
							|  |  |  |         priority. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         ``parse_float``, if specified, will be called with the string | 
					
						
							|  |  |  |         of every JSON float to be decoded. By default this is equivalent to | 
					
						
							|  |  |  |         float(num_str). This can be used to use another datatype or parser | 
					
						
							|  |  |  |         for JSON floats (e.g. decimal.Decimal). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ``parse_int``, if specified, will be called with the string | 
					
						
							|  |  |  |         of every JSON int to be decoded. By default this is equivalent to | 
					
						
							|  |  |  |         int(num_str). This can be used to use another datatype or parser | 
					
						
							|  |  |  |         for JSON integers (e.g. float). | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         ``parse_constant``, if specified, will be called with one of the | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         following strings: -Infinity, Infinity, NaN. | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         This can be used to raise an exception if invalid JSON numbers | 
					
						
							|  |  |  |         are encountered. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
											  
											
												Merged revisions 85530,85532-85534,85538-85543,85546-85548 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k
........
  r85530 | georg.brandl | 2010-10-15 17:32:05 +0200 (Fr, 15 Okt 2010) | 1 line
  Refrain from using inline suites.
........
  r85532 | georg.brandl | 2010-10-15 18:03:02 +0200 (Fr, 15 Okt 2010) | 1 line
  #7771: reference to documentation of dictview methods and operations.
........
  r85533 | georg.brandl | 2010-10-15 18:07:41 +0200 (Fr, 15 Okt 2010) | 1 line
  #9683: remove broken dead code dealing with nested arguments removed from Py3k, and update the docs and docstrings accordingly.
........
  r85534 | georg.brandl | 2010-10-15 18:19:43 +0200 (Fr, 15 Okt 2010) | 1 line
  #9801: document how list and dict proxies created by Managers behave w.r.t. mutable items.
........
  r85538 | georg.brandl | 2010-10-15 18:35:46 +0200 (Fr, 15 Okt 2010) | 1 line
  #7303: add documentation for useful pkgutil functions and classes.
........
  r85539 | georg.brandl | 2010-10-15 18:42:14 +0200 (Fr, 15 Okt 2010) | 1 line
  Fix issue references.
........
  r85540 | georg.brandl | 2010-10-15 18:42:37 +0200 (Fr, 15 Okt 2010) | 1 line
  #6798: fix wrong docs for the arguments to several trace events.
........
  r85541 | georg.brandl | 2010-10-15 18:53:24 +0200 (Fr, 15 Okt 2010) | 1 line
  #4968: updates to inspect.is* function docs.
........
  r85542 | georg.brandl | 2010-10-15 19:01:15 +0200 (Fr, 15 Okt 2010) | 1 line
  #7790: move table of struct_time members to the actual description of struct_time.
........
  r85543 | georg.brandl | 2010-10-15 19:03:02 +0200 (Fr, 15 Okt 2010) | 1 line
  #4785: document strict argument of JSONDecoder, plus add object_pairs_hook in the docstrings.
........
  r85546 | georg.brandl | 2010-10-15 19:58:45 +0200 (Fr, 15 Okt 2010) | 1 line
  #5762: fix handling of empty namespace in minidom, which would result in AttributeError on toxml().
........
  r85547 | georg.brandl | 2010-10-15 20:00:35 +0200 (Fr, 15 Okt 2010) | 1 line
  #6098: Refrain from claiming DOM level 3 conformance in minidom.
........
  r85548 | georg.brandl | 2010-10-15 21:46:19 +0200 (Fr, 15 Okt 2010) | 1 line
  #10072: assume a bit less knowledge of the FTP protocol in the ftplib docs.
........
											
										 
											2010-11-26 08:42:45 +00:00
										 |  |  |         If ``strict`` is false (true is the default), then control | 
					
						
							|  |  |  |         characters will be allowed inside strings.  Control characters in | 
					
						
							|  |  |  |         this context are those with character codes in the 0-31 range, | 
					
						
							|  |  |  |         including ``'\\t'`` (tab), ``'\\n'``, ``'\\r'`` and ``'\\0'``. | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         """
 | 
					
						
							|  |  |  |         self.object_hook = object_hook | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         self.parse_float = parse_float or float | 
					
						
							|  |  |  |         self.parse_int = parse_int or int | 
					
						
							|  |  |  |         self.parse_constant = parse_constant or _CONSTANTS.__getitem__ | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         self.strict = strict | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |         self.object_pairs_hook = object_pairs_hook | 
					
						
							|  |  |  |         self.parse_object = JSONObject | 
					
						
							|  |  |  |         self.parse_array = JSONArray | 
					
						
							|  |  |  |         self.parse_string = scanstring | 
					
						
							| 
									
										
										
										
											2011-05-14 06:38:03 +03:00
										 |  |  |         self.scan_once = scanner.make_scanner(self) | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def decode(self, s, _w=WHITESPACE.match): | 
					
						
							| 
									
										
											  
											
												Merged revisions 82805-82806,83523-83527,83536,83538,83542,83546-83548,83550-83555,83558,83560 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k
........
  r82805 | georg.brandl | 2010-07-11 11:42:10 +0200 (So, 11 Jul 2010) | 1 line
  #7935: cross-reference to ast.literal_eval() from eval() docs.
........
  r82806 | georg.brandl | 2010-07-11 12:22:44 +0200 (So, 11 Jul 2010) | 1 line
  #9223: link to Command class reference, and move Command interface docs nearer to class docs.
........
  r83523 | georg.brandl | 2010-08-02 14:06:18 +0200 (Mo, 02 Aug 2010) | 1 line
  #9209 and #7781: fix two crashes in pstats interactive browser.
........
  r83524 | georg.brandl | 2010-08-02 14:20:23 +0200 (Mo, 02 Aug 2010) | 1 line
  #9428: fix running scripts from profile/cProfile with their own name and the right namespace.  Same fix as for trace.py in #1690103.
........
  r83525 | georg.brandl | 2010-08-02 14:36:24 +0200 (Mo, 02 Aug 2010) | 1 line
  Get rid of spurious "threading" entries in trace output.
........
  r83526 | georg.brandl | 2010-08-02 14:40:22 +0200 (Mo, 02 Aug 2010) | 1 line
  Fix softspace relic.
........
  r83527 | georg.brandl | 2010-08-02 14:48:46 +0200 (Mo, 02 Aug 2010) | 1 line
  #3821: beginnings of a trace.py unittest.
........
  r83536 | georg.brandl | 2010-08-02 19:49:25 +0200 (Mo, 02 Aug 2010) | 1 line
  #8578: mention danger of not incref'ing weak referenced object.
........
  r83538 | georg.brandl | 2010-08-02 20:10:13 +0200 (Mo, 02 Aug 2010) | 1 line
  #6928: fix class docs w.r.t. new metaclasses.
........
  r83542 | georg.brandl | 2010-08-02 20:56:54 +0200 (Mo, 02 Aug 2010) | 1 line
  Move test_SimpleHTTPServer into test_httpservers.
........
  r83546 | georg.brandl | 2010-08-02 21:16:34 +0200 (Mo, 02 Aug 2010) | 1 line
  #7973: Fix distutils options spelling.
........
  r83547 | georg.brandl | 2010-08-02 21:19:26 +0200 (Mo, 02 Aug 2010) | 1 line
  #7386: add example that shows that trailing path separators are stripped.
........
  r83548 | georg.brandl | 2010-08-02 21:23:34 +0200 (Mo, 02 Aug 2010) | 1 line
  #8172: how does one use a property?
........
  r83550 | georg.brandl | 2010-08-02 21:32:43 +0200 (Mo, 02 Aug 2010) | 1 line
  #9451: strengthen warning about __*__ special name usage.
........
  r83551 | georg.brandl | 2010-08-02 21:35:06 +0200 (Mo, 02 Aug 2010) | 1 line
  Remove XXX comment that was displayed.
........
  r83552 | georg.brandl | 2010-08-02 21:36:36 +0200 (Mo, 02 Aug 2010) | 1 line
  #9438: clarify that constant names also cannot be assigned as attributes.
........
  r83553 | georg.brandl | 2010-08-02 21:39:17 +0200 (Mo, 02 Aug 2010) | 1 line
  Remove redundant information.
........
  r83554 | georg.brandl | 2010-08-02 21:43:05 +0200 (Mo, 02 Aug 2010) | 1 line
  #7280: note about nasmw.exe.
........
  r83555 | georg.brandl | 2010-08-02 21:44:48 +0200 (Mo, 02 Aug 2010) | 1 line
  #8861: remove unused variable.
........
  r83558 | georg.brandl | 2010-08-02 22:05:19 +0200 (Mo, 02 Aug 2010) | 1 line
  #8648: document UTF-7 codec functions.
........
  r83560 | georg.brandl | 2010-08-02 22:16:18 +0200 (Mo, 02 Aug 2010) | 1 line
  #9087: update json docstrings -- unicode and long do not exist anymore.
........
											
										 
											2010-10-06 08:26:09 +00:00
										 |  |  |         """Return the Python representation of ``s`` (a ``str`` instance
 | 
					
						
							|  |  |  |         containing a JSON document). | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         obj, end = self.raw_decode(s, idx=_w(s, 0).end()) | 
					
						
							|  |  |  |         end = _w(s, end).end() | 
					
						
							|  |  |  |         if end != len(s): | 
					
						
							|  |  |  |             raise ValueError(errmsg("Extra data", s, end, len(s))) | 
					
						
							|  |  |  |         return obj | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |     def raw_decode(self, s, idx=0): | 
					
						
							| 
									
										
											  
											
												Merged revisions 82805-82806,83523-83527,83536,83538,83542,83546-83548,83550-83555,83558,83560 via svnmerge from
svn+ssh://svn.python.org/python/branches/py3k
........
  r82805 | georg.brandl | 2010-07-11 11:42:10 +0200 (So, 11 Jul 2010) | 1 line
  #7935: cross-reference to ast.literal_eval() from eval() docs.
........
  r82806 | georg.brandl | 2010-07-11 12:22:44 +0200 (So, 11 Jul 2010) | 1 line
  #9223: link to Command class reference, and move Command interface docs nearer to class docs.
........
  r83523 | georg.brandl | 2010-08-02 14:06:18 +0200 (Mo, 02 Aug 2010) | 1 line
  #9209 and #7781: fix two crashes in pstats interactive browser.
........
  r83524 | georg.brandl | 2010-08-02 14:20:23 +0200 (Mo, 02 Aug 2010) | 1 line
  #9428: fix running scripts from profile/cProfile with their own name and the right namespace.  Same fix as for trace.py in #1690103.
........
  r83525 | georg.brandl | 2010-08-02 14:36:24 +0200 (Mo, 02 Aug 2010) | 1 line
  Get rid of spurious "threading" entries in trace output.
........
  r83526 | georg.brandl | 2010-08-02 14:40:22 +0200 (Mo, 02 Aug 2010) | 1 line
  Fix softspace relic.
........
  r83527 | georg.brandl | 2010-08-02 14:48:46 +0200 (Mo, 02 Aug 2010) | 1 line
  #3821: beginnings of a trace.py unittest.
........
  r83536 | georg.brandl | 2010-08-02 19:49:25 +0200 (Mo, 02 Aug 2010) | 1 line
  #8578: mention danger of not incref'ing weak referenced object.
........
  r83538 | georg.brandl | 2010-08-02 20:10:13 +0200 (Mo, 02 Aug 2010) | 1 line
  #6928: fix class docs w.r.t. new metaclasses.
........
  r83542 | georg.brandl | 2010-08-02 20:56:54 +0200 (Mo, 02 Aug 2010) | 1 line
  Move test_SimpleHTTPServer into test_httpservers.
........
  r83546 | georg.brandl | 2010-08-02 21:16:34 +0200 (Mo, 02 Aug 2010) | 1 line
  #7973: Fix distutils options spelling.
........
  r83547 | georg.brandl | 2010-08-02 21:19:26 +0200 (Mo, 02 Aug 2010) | 1 line
  #7386: add example that shows that trailing path separators are stripped.
........
  r83548 | georg.brandl | 2010-08-02 21:23:34 +0200 (Mo, 02 Aug 2010) | 1 line
  #8172: how does one use a property?
........
  r83550 | georg.brandl | 2010-08-02 21:32:43 +0200 (Mo, 02 Aug 2010) | 1 line
  #9451: strengthen warning about __*__ special name usage.
........
  r83551 | georg.brandl | 2010-08-02 21:35:06 +0200 (Mo, 02 Aug 2010) | 1 line
  Remove XXX comment that was displayed.
........
  r83552 | georg.brandl | 2010-08-02 21:36:36 +0200 (Mo, 02 Aug 2010) | 1 line
  #9438: clarify that constant names also cannot be assigned as attributes.
........
  r83553 | georg.brandl | 2010-08-02 21:39:17 +0200 (Mo, 02 Aug 2010) | 1 line
  Remove redundant information.
........
  r83554 | georg.brandl | 2010-08-02 21:43:05 +0200 (Mo, 02 Aug 2010) | 1 line
  #7280: note about nasmw.exe.
........
  r83555 | georg.brandl | 2010-08-02 21:44:48 +0200 (Mo, 02 Aug 2010) | 1 line
  #8861: remove unused variable.
........
  r83558 | georg.brandl | 2010-08-02 22:05:19 +0200 (Mo, 02 Aug 2010) | 1 line
  #8648: document UTF-7 codec functions.
........
  r83560 | georg.brandl | 2010-08-02 22:16:18 +0200 (Mo, 02 Aug 2010) | 1 line
  #9087: update json docstrings -- unicode and long do not exist anymore.
........
											
										 
											2010-10-06 08:26:09 +00:00
										 |  |  |         """Decode a JSON document from ``s`` (a ``str`` beginning with
 | 
					
						
							|  |  |  |         a JSON document) and return a 2-tuple of the Python | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         representation and the index in ``s`` where the document ended. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         This can be used to decode a JSON document from a string that may | 
					
						
							|  |  |  |         have extraneous data at the end. | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         """
 | 
					
						
							|  |  |  |         try: | 
					
						
							| 
									
										
										
										
											2009-05-02 12:36:44 +00:00
										 |  |  |             obj, end = self.scan_once(s, idx) | 
					
						
							| 
									
										
										
										
											2008-05-08 14:29:10 +00:00
										 |  |  |         except StopIteration: | 
					
						
							|  |  |  |             raise ValueError("No JSON object could be decoded") | 
					
						
							|  |  |  |         return obj, end |