summaryrefslogtreecommitdiff
path: root/simplejson/scanner.py
diff options
context:
space:
mode:
authorBob Ippolito <bob@redivi.com>2017-11-05 10:28:38 -0800
committerBob Ippolito <bob@redivi.com>2017-11-05 10:28:38 -0800
commit0d36c5cd16055d55e6eceaf252f072a9339e0746 (patch)
treecc67ee76dab75a922c6970808ae61b29a90be077 /simplejson/scanner.py
parentdb2a216a858e8fd2cbfd53ac52c7972e5d3b3c5a (diff)
downloadsimplejson-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.py52
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