omlish 0.0.0.dev85__py3-none-any.whl → 0.0.0.dev86__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- omlish/__about__.py +2 -2
- omlish/formats/json/stream/lex.py +33 -17
- omlish/http/sse.py +3 -0
- {omlish-0.0.0.dev85.dist-info → omlish-0.0.0.dev86.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev85.dist-info → omlish-0.0.0.dev86.dist-info}/RECORD +9 -9
- {omlish-0.0.0.dev85.dist-info → omlish-0.0.0.dev86.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev85.dist-info → omlish-0.0.0.dev86.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev85.dist-info → omlish-0.0.0.dev86.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev85.dist-info → omlish-0.0.0.dev86.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
@@ -52,14 +52,18 @@ SCALAR_VALUE_TYPES: tuple[type, ...] = tuple(
|
|
52
52
|
##
|
53
53
|
|
54
54
|
|
55
|
+
class Position(ta.NamedTuple):
|
56
|
+
ofs: int
|
57
|
+
line: int
|
58
|
+
col: int
|
59
|
+
|
60
|
+
|
55
61
|
class Token(ta.NamedTuple):
|
56
62
|
kind: TokenKind
|
57
63
|
value: ScalarValue
|
58
64
|
raw: str | None
|
59
65
|
|
60
|
-
|
61
|
-
line: int
|
62
|
-
col: int
|
66
|
+
pos: Position
|
63
67
|
|
64
68
|
def __iter__(self):
|
65
69
|
raise TypeError
|
@@ -94,9 +98,7 @@ CONST_TOKENS: ta.Mapping[str, tuple[TokenKind, str | float | None]] = {
|
|
94
98
|
class JsonLexError(Exception):
|
95
99
|
message: str
|
96
100
|
|
97
|
-
|
98
|
-
line: int
|
99
|
-
col: int
|
101
|
+
pos: Position
|
100
102
|
|
101
103
|
|
102
104
|
class JsonStreamLexer(GenMachine[str, Token]):
|
@@ -108,13 +110,21 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
108
110
|
self._include_raw = include_raw
|
109
111
|
|
110
112
|
self._ofs = 0
|
111
|
-
self._line =
|
113
|
+
self._line = 1
|
112
114
|
self._col = 0
|
113
115
|
|
114
116
|
self._buf = io.StringIO()
|
115
117
|
|
116
118
|
super().__init__(self._do_main())
|
117
119
|
|
120
|
+
@property
|
121
|
+
def pos(self) -> Position:
|
122
|
+
return Position(
|
123
|
+
self._ofs,
|
124
|
+
self._line,
|
125
|
+
self._col,
|
126
|
+
)
|
127
|
+
|
118
128
|
def _char_in(self, c: str) -> str:
|
119
129
|
if c and len(c) != 1:
|
120
130
|
raise ValueError(c)
|
@@ -134,14 +144,13 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
134
144
|
kind: TokenKind,
|
135
145
|
value: ScalarValue,
|
136
146
|
raw: str,
|
147
|
+
pos: Position,
|
137
148
|
) -> ta.Sequence[Token]:
|
138
149
|
tok = Token(
|
139
150
|
kind,
|
140
151
|
value,
|
141
152
|
raw if self._include_raw else None,
|
142
|
-
|
143
|
-
self._line,
|
144
|
-
self._col,
|
153
|
+
pos,
|
145
154
|
)
|
146
155
|
return (tok,)
|
147
156
|
|
@@ -152,7 +161,7 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
152
161
|
return raw
|
153
162
|
|
154
163
|
def _raise(self, msg: str) -> ta.NoReturn:
|
155
|
-
raise JsonLexError(msg, self.
|
164
|
+
raise JsonLexError(msg, self.pos)
|
156
165
|
|
157
166
|
def _do_main(self):
|
158
167
|
while True:
|
@@ -165,7 +174,7 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
165
174
|
continue
|
166
175
|
|
167
176
|
if c in CONTROL_TOKENS:
|
168
|
-
yield self._make_tok(CONTROL_TOKENS[c], c, c)
|
177
|
+
yield self._make_tok(CONTROL_TOKENS[c], c, c, self.pos)
|
169
178
|
continue
|
170
179
|
|
171
180
|
if c == '"':
|
@@ -180,8 +189,11 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
180
189
|
self._raise(f'Unexpected character: {c}')
|
181
190
|
|
182
191
|
def _do_string(self):
|
192
|
+
check.state(self._buf.tell() == 0)
|
183
193
|
self._buf.write('"')
|
184
194
|
|
195
|
+
pos = self.pos
|
196
|
+
|
185
197
|
last = None
|
186
198
|
while True:
|
187
199
|
try:
|
@@ -199,13 +211,16 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
199
211
|
|
200
212
|
raw = self._flip_buf()
|
201
213
|
sv = json.loads(raw)
|
202
|
-
yield self._make_tok('STRING', sv, raw)
|
214
|
+
yield self._make_tok('STRING', sv, raw, pos)
|
203
215
|
|
204
216
|
return self._do_main()
|
205
217
|
|
206
218
|
def _do_number(self, c: str):
|
219
|
+
check.state(self._buf.tell() == 0)
|
207
220
|
self._buf.write(c)
|
208
221
|
|
222
|
+
pos = self.pos
|
223
|
+
|
209
224
|
while True:
|
210
225
|
try:
|
211
226
|
c = self._char_in((yield None)) # noqa
|
@@ -240,7 +255,7 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
240
255
|
self._raise(f'Invalid number format: {raw}')
|
241
256
|
|
242
257
|
tk, tv = CONST_TOKENS[raw]
|
243
|
-
yield self._make_tok(tk, tv, raw)
|
258
|
+
yield self._make_tok(tk, tv, raw, pos)
|
244
259
|
|
245
260
|
return self._do_main()
|
246
261
|
|
@@ -250,7 +265,7 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
250
265
|
nv = float(raw)
|
251
266
|
else:
|
252
267
|
nv = int(raw)
|
253
|
-
yield self._make_tok('NUMBER', nv, raw)
|
268
|
+
yield self._make_tok('NUMBER', nv, raw, pos)
|
254
269
|
|
255
270
|
#
|
256
271
|
|
@@ -258,7 +273,7 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
258
273
|
return None
|
259
274
|
|
260
275
|
if c in CONTROL_TOKENS:
|
261
|
-
yield self._make_tok(CONTROL_TOKENS[c], c, c)
|
276
|
+
yield self._make_tok(CONTROL_TOKENS[c], c, c, pos)
|
262
277
|
|
263
278
|
elif not c.isspace():
|
264
279
|
self._raise(f'Unexpected character after number: {c}')
|
@@ -266,6 +281,7 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
266
281
|
return self._do_main()
|
267
282
|
|
268
283
|
def _do_const(self, c: str):
|
284
|
+
pos = self.pos
|
269
285
|
raw = c
|
270
286
|
while True:
|
271
287
|
try:
|
@@ -280,6 +296,6 @@ class JsonStreamLexer(GenMachine[str, Token]):
|
|
280
296
|
self._raise(f'Invalid literal: {raw}')
|
281
297
|
|
282
298
|
tk, tv = CONST_TOKENS[raw]
|
283
|
-
yield self._make_tok(tk, tv, raw)
|
299
|
+
yield self._make_tok(tk, tv, raw, pos)
|
284
300
|
|
285
301
|
return self._do_main()
|
omlish/http/sse.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=hTFp9tvE72BxKloIq1s1SS0LRQlIsvMtO69Sbc47rKg,1704
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=bmf1Xnu5T4--9ykGD63NIvhEZE9Fhk9w3IlmwLH40vU,3345
|
3
3
|
omlish/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
omlish/argparse.py,sha256=Dc73G8lyoQBLvXhMYUbzQUh4SJu_OTvKUXjSUxq_ang,7499
|
5
5
|
omlish/c3.py,sha256=4vogWgwPb8TbNS2KkZxpoWbwjj7MuHG2lQG-hdtkvjI,8062
|
@@ -201,7 +201,7 @@ omlish/formats/json/cli/cli.py,sha256=GkdNokklRuDWiXAIai1wijSBFVJlpdlNLTQ3Lyucos
|
|
201
201
|
omlish/formats/json/cli/formats.py,sha256=tqEZKby4HeafGcaUs-m8B-2ZV12dRo40rzL-V99cp00,1714
|
202
202
|
omlish/formats/json/stream/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
203
203
|
omlish/formats/json/stream/build.py,sha256=6deXBxTx1toFAPShz2Jo5OiXxH5Y4ppG8gDPRFoUgjA,2461
|
204
|
-
omlish/formats/json/stream/lex.py,sha256=
|
204
|
+
omlish/formats/json/stream/lex.py,sha256=01K_M9na7-3xv0h3VDBobLXuTS-w4YesNJ6GhOaDtYA,6494
|
205
205
|
omlish/formats/json/stream/parse.py,sha256=WkbW7tvcdrTSluKhw70nPvjsq943eryVcjx8FSz78tM,5198
|
206
206
|
omlish/formats/json/stream/render.py,sha256=B9ZNuBiDJOT25prhIsZu1ICKjxk4eMPwpgQF37NPufs,3212
|
207
207
|
omlish/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -224,7 +224,7 @@ omlish/http/headers.py,sha256=ZMmjrEiYjzo0YTGyK0YsvjdwUazktGqzVVYorY4fd44,5081
|
|
224
224
|
omlish/http/json.py,sha256=9XwAsl4966Mxrv-1ytyCqhcE6lbBJw-0_tFZzGszgHE,7440
|
225
225
|
omlish/http/multipart.py,sha256=R9ycpHsXRcmh0uoc43aYb7BdWL-8kSQHe7J-M81aQZM,2240
|
226
226
|
omlish/http/sessions.py,sha256=VZ_WS5uiQG5y7i3u8oKuQMqf8dPKUOjFm_qk_0OvI8c,4793
|
227
|
-
omlish/http/sse.py,sha256=
|
227
|
+
omlish/http/sse.py,sha256=MDs9RvxQXoQliImcc6qK1ERajEYM7Q1l8xmr-9ceNBc,2315
|
228
228
|
omlish/http/wsgi.py,sha256=czZsVUX-l2YTlMrUjKN49wRoP4rVpS0qpeBn4O5BoMY,948
|
229
229
|
omlish/inject/__init__.py,sha256=JQ7x8l9MjU-kJ5ap7cPVq7SY7zbbCIrjyJAF0UeE5-s,1886
|
230
230
|
omlish/inject/binder.py,sha256=H8AQ4ecmBOtDL8fMgrU1yUJl1gBADLNcdysRbvO8Wso,4167
|
@@ -454,9 +454,9 @@ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
|
|
454
454
|
omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,3296
|
455
455
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
456
456
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
457
|
-
omlish-0.0.0.
|
458
|
-
omlish-0.0.0.
|
459
|
-
omlish-0.0.0.
|
460
|
-
omlish-0.0.0.
|
461
|
-
omlish-0.0.0.
|
462
|
-
omlish-0.0.0.
|
457
|
+
omlish-0.0.0.dev86.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
458
|
+
omlish-0.0.0.dev86.dist-info/METADATA,sha256=w6dXN4XU0iMfkJxV1fEHQ96o_V5idhf7cy3GApDwdAc,3987
|
459
|
+
omlish-0.0.0.dev86.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
|
460
|
+
omlish-0.0.0.dev86.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
461
|
+
omlish-0.0.0.dev86.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
462
|
+
omlish-0.0.0.dev86.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|