1- import ijson
1+ from decimal import InvalidOperation
2+ from ijson .common import integer_or_decimal , IncompleteJSONError
3+ from ijson .backends .python import UnexpectedSymbol
24from _elementtree import ParseError
35from socket import timeout
46import re
57
6-
8+ # BUFSIZE isn't included in newer ijson versions so we define it ourselves:
9+ # See: https://github.com/isagalaev/ijson/blob/c594cdd3c94c8b4a018577966b3ad22bb44c2620/ijson/backends/python.py#L14
10+ BUFSIZE = 16 * 1024
711LEXEME_RE = re .compile (b"[a-z0-9eE\.\+-]+|\S" )
812BYTE_ARRAY_CHARACTERS = bytearray (b',}:{"' )
913IS_WEBSOCKET = False
@@ -17,7 +21,7 @@ def __init__(self, socket, is_websocket=False):
1721 self .lexer = self .lexer (socket )
1822
1923 @staticmethod
20- def lexer (socket , buf_size = ijson . backend . BUFSIZE ):
24+ def lexer (socket , buf_size = BUFSIZE ):
2125 data = socket .recv () if IS_WEBSOCKET else socket .recv (buf_size )
2226 if not data :
2327 return
@@ -45,7 +49,7 @@ def lexer(socket, buf_size=ijson.backend.BUFSIZE):
4549 except ValueError :
4650 data = socket .recv ().encode ("utf-8" ) if IS_WEBSOCKET else socket .recv (buf_size )
4751 if not data :
48- raise ijson . backend . common . IncompleteJSONError ("Incomplete string lexeme" )
52+ raise IncompleteJSONError ("Incomplete string lexeme" )
4953
5054 buf += data [1 :- 1 ] if IS_WEBSOCKET else data
5155
@@ -157,11 +161,11 @@ def parse_value(lexer, symbol=None, pos=0):
157161 return
158162
159163 try :
160- yield ("number" , ijson . backend . common . number (symbol ))
161- except ijson . backend . decimal . InvalidOperation :
162- raise ijson . backend . UnexpectedSymbol (symbol , pos )
164+ yield ("number" , integer_or_decimal (symbol ))
165+ except InvalidOperation :
166+ raise UnexpectedSymbol (symbol , pos )
163167 except StopIteration :
164- raise ijson . backend . common . IncompleteJSONError ("Incomplete JSON data" )
168+ raise IncompleteJSONError ("Incomplete JSON data" )
165169
166170 @staticmethod
167171 def parse_array (lexer ):
@@ -176,11 +180,11 @@ def parse_array(lexer):
176180 if symbol == "]" :
177181 break
178182 if symbol != "," :
179- raise ijson . backend . UnexpectedSymbol (symbol , pos )
183+ raise UnexpectedSymbol (symbol , pos )
180184 pos , symbol = next (lexer )
181185 yield ("end_array" , None )
182186 except StopIteration :
183- raise ijson . backend . common . IncompleteJSONError ("Incomplete JSON data" )
187+ raise IncompleteJSONError ("Incomplete JSON data" )
184188
185189 @staticmethod
186190 def parse_object (lexer ):
@@ -190,22 +194,22 @@ def parse_object(lexer):
190194 if symbol != "}" :
191195 while True :
192196 if symbol [0 ] != '"' :
193- raise ijson . backend . UnexpectedSymbol (symbol , pos )
197+ raise UnexpectedSymbol (symbol , pos )
194198 yield ("map_key" , IncrementalJsonParser .unescape (symbol [1 :- 1 ]))
195199 pos , symbol = next (lexer )
196200 if symbol != ":" :
197- raise ijson . backend . UnexpectedSymbol (symbol , pos )
201+ raise UnexpectedSymbol (symbol , pos )
198202 for event in IncrementalJsonParser .parse_value (lexer , None , pos ):
199203 yield event
200204 pos , symbol = next (lexer )
201205 if symbol == "}" :
202206 break
203207 if symbol != "," :
204- raise ijson . backend . UnexpectedSymbol (symbol , pos )
208+ raise UnexpectedSymbol (symbol , pos )
205209 pos , symbol = next (lexer )
206210 yield ("end_map" , None )
207211 except StopIteration :
208- raise ijson . backend . common . IncompleteJSONError ("Incomplete JSON data" )
212+ raise IncompleteJSONError ("Incomplete JSON data" )
209213
210214 @staticmethod
211215 def unescape (s ):
0 commit comments