diff options
author | Bob Ippolito <bob@redivi.com> | 2017-11-05 10:28:38 -0800 |
---|---|---|
committer | Bob Ippolito <bob@redivi.com> | 2017-11-05 10:28:38 -0800 |
commit | 0d36c5cd16055d55e6eceaf252f072a9339e0746 (patch) | |
tree | cc67ee76dab75a922c6970808ae61b29a90be077 /simplejson/scanner.py | |
parent | db2a216a858e8fd2cbfd53ac52c7972e5d3b3c5a (diff) | |
download | simplejson-0d36c5cd16055d55e6eceaf252f072a9339e0746.tar.gz |
Fix #184 threaded import issue, prep v3.12.0v3.12.0
Diffstat (limited to 'simplejson/scanner.py')
-rw-r--r-- | simplejson/scanner.py | 52 |
1 files changed, 2 insertions, 50 deletions
diff --git a/simplejson/scanner.py b/simplejson/scanner.py index 5abed35..85e385e 100644 --- a/simplejson/scanner.py +++ b/simplejson/scanner.py @@ -1,9 +1,10 @@ """JSON token scanner """ import re +from .errors import JSONDecodeError def _import_c_make_scanner(): try: - from simplejson._speedups import make_scanner + from ._speedups import make_scanner return make_scanner except ImportError: return None @@ -15,55 +16,6 @@ NUMBER_RE = re.compile( r'(-?(?:0|[1-9]\d*))(\.\d+)?([eE][-+]?\d+)?', (re.VERBOSE | re.MULTILINE | re.DOTALL)) -class JSONDecodeError(ValueError): - """Subclass of ValueError with the following additional properties: - - msg: The unformatted error message - doc: The JSON document being parsed - pos: The start index of doc where parsing failed - end: The end index of doc where parsing failed (may be None) - lineno: The line corresponding to pos - colno: The column corresponding to pos - endlineno: The line corresponding to end (may be None) - endcolno: The column corresponding to end (may be None) - - """ - # Note that this exception is used from _speedups - def __init__(self, msg, doc, pos, end=None): - ValueError.__init__(self, errmsg(msg, doc, pos, end=end)) - self.msg = msg - self.doc = doc - self.pos = pos - self.end = end - self.lineno, self.colno = linecol(doc, pos) - if end is not None: - self.endlineno, self.endcolno = linecol(doc, end) - else: - self.endlineno, self.endcolno = None, None - - def __reduce__(self): - return self.__class__, (self.msg, self.doc, self.pos, self.end) - - -def linecol(doc, pos): - lineno = doc.count('\n', 0, pos) + 1 - if lineno == 1: - colno = pos + 1 - else: - colno = pos - doc.rindex('\n', 0, pos) - return lineno, colno - - -def errmsg(msg, doc, pos, end=None): - lineno, colno = linecol(doc, pos) - msg = msg.replace('%r', repr(doc[pos:pos + 1])) - if end is None: - fmt = '%s: line %d column %d (char %d)' - return fmt % (msg, lineno, colno, pos) - endlineno, endcolno = linecol(doc, end) - fmt = '%s: line %d column %d - line %d column %d (char %d - %d)' - return fmt % (msg, lineno, colno, endlineno, endcolno, pos, end) - def py_make_scanner(context): parse_object = context.parse_object |