omlish 0.0.0.dev81__py3-none-any.whl → 0.0.0.dev82__py3-none-any.whl
Sign up to get free protection for your applications and to get access to all the features.
- omlish/__about__.py +2 -2
- omlish/dataclasses/impl/__init__.py +8 -0
- omlish/dataclasses/impl/params.py +3 -0
- omlish/dataclasses/impl/slots.py +61 -7
- omlish/formats/json/__init__.py +8 -1
- omlish/formats/json/backends/__init__.py +7 -0
- omlish/formats/json/backends/base.py +38 -0
- omlish/formats/json/backends/default.py +10 -0
- omlish/formats/json/backends/jiter.py +25 -0
- omlish/formats/json/backends/orjson.py +46 -2
- omlish/formats/json/backends/std.py +39 -0
- omlish/formats/json/backends/ujson.py +49 -0
- omlish/formats/json/cli.py +36 -6
- omlish/formats/json/consts.py +22 -0
- omlish/formats/json/encoding.py +17 -0
- omlish/formats/json/json.py +9 -39
- omlish/formats/json/render.py +49 -28
- omlish/formats/json/stream/__init__.py +0 -0
- omlish/formats/json/stream/build.py +113 -0
- omlish/formats/json/{stream.py → stream/lex.py} +68 -172
- omlish/formats/json/stream/parse.py +244 -0
- omlish/formats/json/stream/render.py +119 -0
- omlish/genmachine.py +14 -2
- omlish/marshal/base.py +2 -0
- omlish/marshal/newtypes.py +24 -0
- omlish/marshal/standard.py +4 -0
- omlish/reflect/__init__.py +1 -0
- omlish/reflect/types.py +6 -1
- {omlish-0.0.0.dev81.dist-info → omlish-0.0.0.dev82.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev81.dist-info → omlish-0.0.0.dev82.dist-info}/RECORD +34 -24
- {omlish-0.0.0.dev81.dist-info → omlish-0.0.0.dev82.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev81.dist-info → omlish-0.0.0.dev82.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev81.dist-info → omlish-0.0.0.dev82.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev81.dist-info → omlish-0.0.0.dev82.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,244 @@
|
|
1
|
+
import typing as ta
|
2
|
+
|
3
|
+
from .... import lang
|
4
|
+
from ....genmachine import GenMachine
|
5
|
+
from .lex import SCALAR_VALUE_TYPES
|
6
|
+
from .lex import VALUE_TOKEN_KINDS
|
7
|
+
from .lex import ScalarValue
|
8
|
+
from .lex import Token
|
9
|
+
|
10
|
+
|
11
|
+
##
|
12
|
+
|
13
|
+
|
14
|
+
class BeginObject(lang.Marker):
|
15
|
+
pass
|
16
|
+
|
17
|
+
|
18
|
+
class Key(ta.NamedTuple):
|
19
|
+
key: str
|
20
|
+
|
21
|
+
|
22
|
+
class EndObject(lang.Marker):
|
23
|
+
pass
|
24
|
+
|
25
|
+
|
26
|
+
class BeginArray(lang.Marker):
|
27
|
+
pass
|
28
|
+
|
29
|
+
|
30
|
+
class EndArray(lang.Marker):
|
31
|
+
pass
|
32
|
+
|
33
|
+
|
34
|
+
JsonStreamParserEvent: ta.TypeAlias = ta.Union[ # noqa
|
35
|
+
type[BeginObject],
|
36
|
+
Key,
|
37
|
+
type[EndObject],
|
38
|
+
|
39
|
+
type[BeginArray],
|
40
|
+
type[EndArray],
|
41
|
+
|
42
|
+
ScalarValue,
|
43
|
+
]
|
44
|
+
|
45
|
+
|
46
|
+
class JsonStreamParserEvents(lang.Namespace):
|
47
|
+
BeginObject = BeginObject
|
48
|
+
Key = Key
|
49
|
+
EndObject = EndObject
|
50
|
+
|
51
|
+
BeginArray = BeginArray
|
52
|
+
EndArray = EndArray
|
53
|
+
|
54
|
+
|
55
|
+
##
|
56
|
+
|
57
|
+
|
58
|
+
def yield_parser_events(obj: ta.Any) -> ta.Generator[JsonStreamParserEvent, None, None]:
|
59
|
+
if isinstance(obj, SCALAR_VALUE_TYPES):
|
60
|
+
yield obj # type: ignore
|
61
|
+
|
62
|
+
elif isinstance(obj, ta.Mapping):
|
63
|
+
yield BeginObject
|
64
|
+
for k, v in obj.items():
|
65
|
+
yield Key(k)
|
66
|
+
yield from yield_parser_events(v)
|
67
|
+
yield EndObject
|
68
|
+
|
69
|
+
elif isinstance(obj, ta.Sequence):
|
70
|
+
yield BeginArray
|
71
|
+
for v in obj:
|
72
|
+
yield from yield_parser_events(v)
|
73
|
+
yield EndArray
|
74
|
+
|
75
|
+
else:
|
76
|
+
raise TypeError(obj)
|
77
|
+
|
78
|
+
|
79
|
+
##
|
80
|
+
|
81
|
+
|
82
|
+
class JsonStreamObject(list):
|
83
|
+
def __repr__(self) -> str:
|
84
|
+
return f'{self.__class__.__name__}({super().__repr__()})'
|
85
|
+
|
86
|
+
|
87
|
+
class JsonStreamParser(GenMachine[Token, JsonStreamParserEvent]):
|
88
|
+
def __init__(self) -> None:
|
89
|
+
super().__init__(self._do_value())
|
90
|
+
|
91
|
+
self._stack: list[ta.Literal['OBJECT', 'KEY', 'ARRAY']] = []
|
92
|
+
|
93
|
+
#
|
94
|
+
|
95
|
+
def _emit_event(self, v):
|
96
|
+
if not self._stack:
|
97
|
+
return ((v,), self._do_value())
|
98
|
+
|
99
|
+
tt = self._stack[-1]
|
100
|
+
if tt == 'KEY':
|
101
|
+
self._stack.pop()
|
102
|
+
if not self._stack:
|
103
|
+
raise self.StateError
|
104
|
+
|
105
|
+
tt2 = self._stack[-1]
|
106
|
+
if tt2 == 'OBJECT':
|
107
|
+
return ((v,), self._do_after_pair())
|
108
|
+
|
109
|
+
else:
|
110
|
+
raise self.StateError
|
111
|
+
|
112
|
+
elif tt == 'ARRAY':
|
113
|
+
return ((v,), self._do_after_element())
|
114
|
+
|
115
|
+
else:
|
116
|
+
raise self.StateError
|
117
|
+
|
118
|
+
#
|
119
|
+
|
120
|
+
def _do_value(self):
|
121
|
+
try:
|
122
|
+
tok = yield None
|
123
|
+
except GeneratorExit:
|
124
|
+
if self._stack:
|
125
|
+
raise self.StateError from None
|
126
|
+
else:
|
127
|
+
raise
|
128
|
+
|
129
|
+
if tok.kind in VALUE_TOKEN_KINDS:
|
130
|
+
y, r = self._emit_event(tok.value)
|
131
|
+
yield y
|
132
|
+
return r
|
133
|
+
|
134
|
+
elif tok.kind == 'LBRACE':
|
135
|
+
y, r = self._emit_begin_object()
|
136
|
+
yield y
|
137
|
+
return r
|
138
|
+
|
139
|
+
elif tok.kind == 'LBRACKET':
|
140
|
+
y, r = self._emit_begin_array()
|
141
|
+
yield y
|
142
|
+
return r
|
143
|
+
|
144
|
+
elif tok.kind == 'RBRACKET':
|
145
|
+
y, r = self._emit_end_array()
|
146
|
+
yield y
|
147
|
+
return r
|
148
|
+
|
149
|
+
else:
|
150
|
+
raise self.StateError
|
151
|
+
|
152
|
+
#
|
153
|
+
|
154
|
+
def _emit_begin_object(self):
|
155
|
+
self._stack.append('OBJECT')
|
156
|
+
return ((BeginObject,), self._do_object_body())
|
157
|
+
|
158
|
+
def _emit_end_object(self):
|
159
|
+
if not self._stack:
|
160
|
+
raise self.StateError
|
161
|
+
|
162
|
+
tt = self._stack.pop()
|
163
|
+
if tt != 'OBJECT':
|
164
|
+
raise self.StateError
|
165
|
+
|
166
|
+
return self._emit_event(EndObject)
|
167
|
+
|
168
|
+
def _do_object_body(self):
|
169
|
+
try:
|
170
|
+
tok = yield None
|
171
|
+
except GeneratorExit:
|
172
|
+
raise self.StateError from None
|
173
|
+
|
174
|
+
if tok.kind == 'STRING':
|
175
|
+
k = tok.value
|
176
|
+
|
177
|
+
try:
|
178
|
+
tok = yield None
|
179
|
+
except GeneratorExit:
|
180
|
+
raise self.StateError from None
|
181
|
+
if tok.kind != 'COLON':
|
182
|
+
raise self.StateError
|
183
|
+
|
184
|
+
yield (Key(k),)
|
185
|
+
self._stack.append('KEY')
|
186
|
+
return self._do_value()
|
187
|
+
|
188
|
+
elif tok.kind == 'RBRACE':
|
189
|
+
y, r = self._emit_end_object()
|
190
|
+
yield y
|
191
|
+
return r
|
192
|
+
|
193
|
+
else:
|
194
|
+
raise self.StateError
|
195
|
+
|
196
|
+
def _do_after_pair(self):
|
197
|
+
try:
|
198
|
+
tok = yield None
|
199
|
+
except GeneratorExit:
|
200
|
+
raise self.StateError from None
|
201
|
+
|
202
|
+
if tok.kind == 'COMMA':
|
203
|
+
return self._do_object_body()
|
204
|
+
|
205
|
+
elif tok.kind == 'RBRACE':
|
206
|
+
y, r = self._emit_end_object()
|
207
|
+
yield y
|
208
|
+
return r
|
209
|
+
|
210
|
+
else:
|
211
|
+
raise self.StateError
|
212
|
+
|
213
|
+
#
|
214
|
+
|
215
|
+
def _emit_begin_array(self):
|
216
|
+
self._stack.append('ARRAY')
|
217
|
+
return ((BeginArray,), self._do_value())
|
218
|
+
|
219
|
+
def _emit_end_array(self):
|
220
|
+
if not self._stack:
|
221
|
+
raise self.StateError
|
222
|
+
|
223
|
+
tt = self._stack.pop()
|
224
|
+
if tt != 'ARRAY':
|
225
|
+
raise self.StateError
|
226
|
+
|
227
|
+
return self._emit_event(EndArray)
|
228
|
+
|
229
|
+
def _do_after_element(self):
|
230
|
+
try:
|
231
|
+
tok = yield None
|
232
|
+
except GeneratorExit:
|
233
|
+
raise self.StateError from None
|
234
|
+
|
235
|
+
if tok.kind == 'COMMA':
|
236
|
+
return self._do_value()
|
237
|
+
|
238
|
+
elif tok.kind == 'RBRACKET':
|
239
|
+
y, r = self._emit_end_array()
|
240
|
+
yield y
|
241
|
+
return r
|
242
|
+
|
243
|
+
else:
|
244
|
+
raise self.StateError
|
@@ -0,0 +1,119 @@
|
|
1
|
+
import json
|
2
|
+
import typing as ta
|
3
|
+
|
4
|
+
from ..render import AbstractJsonRenderer
|
5
|
+
from ..render import JsonRendererOut
|
6
|
+
from .build import JsonObjectBuilder
|
7
|
+
from .parse import BeginArray
|
8
|
+
from .parse import BeginObject
|
9
|
+
from .parse import EndArray
|
10
|
+
from .parse import EndObject
|
11
|
+
from .parse import JsonStreamParserEvent
|
12
|
+
from .parse import Key
|
13
|
+
|
14
|
+
|
15
|
+
##
|
16
|
+
|
17
|
+
|
18
|
+
class StreamJsonRenderer(AbstractJsonRenderer[ta.Iterable[JsonStreamParserEvent]]):
|
19
|
+
def __init__(
|
20
|
+
self,
|
21
|
+
out: JsonRendererOut,
|
22
|
+
opts: AbstractJsonRenderer.Options = AbstractJsonRenderer.Options(),
|
23
|
+
) -> None:
|
24
|
+
if opts.sort_keys:
|
25
|
+
raise TypeError('Not yet implemented')
|
26
|
+
|
27
|
+
super().__init__(out, opts)
|
28
|
+
|
29
|
+
self._stack: list[tuple[ta.Literal['OBJECT', 'ARRAY'], int]] = []
|
30
|
+
self._builder: JsonObjectBuilder | None = None
|
31
|
+
|
32
|
+
def _render_value(
|
33
|
+
self,
|
34
|
+
o: ta.Any,
|
35
|
+
state: AbstractJsonRenderer.State = AbstractJsonRenderer.State.VALUE,
|
36
|
+
) -> None:
|
37
|
+
if self._opts.style is not None:
|
38
|
+
pre, post = self._opts.style(o, state)
|
39
|
+
self._write(pre)
|
40
|
+
else:
|
41
|
+
post = None
|
42
|
+
|
43
|
+
if o is None or isinstance(o, bool):
|
44
|
+
self._write(self._literals[o])
|
45
|
+
|
46
|
+
elif isinstance(o, (str, int, float)):
|
47
|
+
self._write(json.dumps(o))
|
48
|
+
|
49
|
+
else:
|
50
|
+
raise TypeError(o)
|
51
|
+
|
52
|
+
if post:
|
53
|
+
self._write(post)
|
54
|
+
|
55
|
+
def _render(self, e: JsonStreamParserEvent) -> None:
|
56
|
+
if e != EndArray and self._stack and (tt := self._stack[-1])[0] == 'ARRAY':
|
57
|
+
if tt[1]:
|
58
|
+
self._write(self._comma)
|
59
|
+
self._write_indent()
|
60
|
+
|
61
|
+
self._stack[-1] = ('ARRAY', tt[1] + 1)
|
62
|
+
|
63
|
+
#
|
64
|
+
|
65
|
+
if e is None or isinstance(e, (str, int, float, bool)):
|
66
|
+
self._render_value(e)
|
67
|
+
|
68
|
+
#
|
69
|
+
|
70
|
+
elif e is BeginObject:
|
71
|
+
self._stack.append(('OBJECT', 0))
|
72
|
+
self._write('{')
|
73
|
+
self._level += 1
|
74
|
+
|
75
|
+
elif isinstance(e, Key):
|
76
|
+
if not self._stack or (tt := self._stack.pop())[0] != 'OBJECT':
|
77
|
+
raise Exception
|
78
|
+
|
79
|
+
if tt[1]:
|
80
|
+
self._write(self._comma)
|
81
|
+
self._write_indent()
|
82
|
+
self._render_value(e.key, AbstractJsonRenderer.State.KEY)
|
83
|
+
self._write(self._colon)
|
84
|
+
|
85
|
+
self._stack.append(('OBJECT', tt[1] + 1))
|
86
|
+
|
87
|
+
elif e is EndObject:
|
88
|
+
if not self._stack or (tt := self._stack.pop())[0] != 'OBJECT':
|
89
|
+
raise Exception
|
90
|
+
|
91
|
+
self._level -= 1
|
92
|
+
if tt[1]:
|
93
|
+
self._write_indent()
|
94
|
+
self._write('}')
|
95
|
+
|
96
|
+
#
|
97
|
+
|
98
|
+
elif e is BeginArray:
|
99
|
+
self._stack.append(('ARRAY', 0))
|
100
|
+
self._write('[')
|
101
|
+
self._level += 1
|
102
|
+
|
103
|
+
elif e is EndArray:
|
104
|
+
if not self._stack or (tt := self._stack.pop())[0] != 'ARRAY':
|
105
|
+
raise Exception
|
106
|
+
|
107
|
+
self._level -= 1
|
108
|
+
if tt[1]:
|
109
|
+
self._write_indent()
|
110
|
+
self._write(']')
|
111
|
+
|
112
|
+
#
|
113
|
+
|
114
|
+
else:
|
115
|
+
raise TypeError(e)
|
116
|
+
|
117
|
+
def render(self, events: ta.Iterable[JsonStreamParserEvent]) -> None:
|
118
|
+
for e in events:
|
119
|
+
self._render(e)
|
omlish/genmachine.py
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
"""
|
2
2
|
TODO:
|
3
3
|
- feed_iter helper
|
4
|
+
- accept yielding outputs on transitions, *except* on initial state - add test
|
4
5
|
|
5
6
|
See:
|
6
7
|
- https://github.com/pytransitions/transitions
|
@@ -25,10 +26,19 @@ class GenMachine(ta.Generic[I, O]):
|
|
25
26
|
`None` to terminate.
|
26
27
|
"""
|
27
28
|
|
28
|
-
def __init__(self, initial: MachineGen) -> None:
|
29
|
+
def __init__(self, initial: MachineGen | None = None) -> None:
|
29
30
|
super().__init__()
|
31
|
+
|
32
|
+
if initial is None:
|
33
|
+
initial = self._initial_state()
|
34
|
+
if initial is None:
|
35
|
+
raise TypeError('No initial state')
|
36
|
+
|
30
37
|
self._advance(initial)
|
31
38
|
|
39
|
+
def _initial_state(self) -> MachineGen | None:
|
40
|
+
return None
|
41
|
+
|
32
42
|
_gen: MachineGen | None
|
33
43
|
|
34
44
|
def __repr__(self) -> str:
|
@@ -57,7 +67,8 @@ class GenMachine(ta.Generic[I, O]):
|
|
57
67
|
return self
|
58
68
|
|
59
69
|
def __exit__(self, exc_type, exc_val, exc_tb):
|
60
|
-
|
70
|
+
if exc_type is None:
|
71
|
+
self.close()
|
61
72
|
|
62
73
|
#
|
63
74
|
|
@@ -74,6 +85,7 @@ class GenMachine(ta.Generic[I, O]):
|
|
74
85
|
|
75
86
|
def _advance(self, gen: MachineGen) -> None:
|
76
87
|
self._gen = gen
|
88
|
+
|
77
89
|
if (n := next(self._gen)) is not None: # noqa
|
78
90
|
raise GenMachine.ClosedError
|
79
91
|
|
omlish/marshal/base.py
CHANGED
@@ -6,6 +6,8 @@ TODO:
|
|
6
6
|
- streaming? Start/EndObject, etc..
|
7
7
|
- lang.Marker - class name, handle type[Foo]
|
8
8
|
- can't disambiguate from str - can't coexist in bare union
|
9
|
+
- factories being free MatchFns does more harm than good - in practice these are such big guns you want to write a
|
10
|
+
class body if only ceremonially
|
9
11
|
|
10
12
|
See:
|
11
13
|
- https://github.com/python-attrs/cattrs
|
@@ -0,0 +1,24 @@
|
|
1
|
+
from .. import check
|
2
|
+
from .. import reflect as rfl
|
3
|
+
from .base import MarshalContext
|
4
|
+
from .base import Marshaler
|
5
|
+
from .base import MarshalerFactory
|
6
|
+
from .base import UnmarshalContext
|
7
|
+
from .base import Unmarshaler
|
8
|
+
from .base import UnmarshalerFactory
|
9
|
+
|
10
|
+
|
11
|
+
class NewtypeMarshalerFactory(MarshalerFactory):
|
12
|
+
def guard(self, ctx: MarshalContext, rty: rfl.Type) -> bool:
|
13
|
+
return isinstance(rty, rfl.NewType)
|
14
|
+
|
15
|
+
def fn(self, ctx: MarshalContext, rty: rfl.Type) -> Marshaler:
|
16
|
+
return ctx.make(check.isinstance(rty, rfl.NewType).ty)
|
17
|
+
|
18
|
+
|
19
|
+
class NewtypeUnmarshalerFactory(UnmarshalerFactory):
|
20
|
+
def guard(self, ctx: UnmarshalContext, rty: rfl.Type) -> bool:
|
21
|
+
return isinstance(rty, rfl.NewType)
|
22
|
+
|
23
|
+
def fn(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
|
24
|
+
return ctx.make(check.isinstance(rty, rfl.NewType).ty)
|
omlish/marshal/standard.py
CHANGED
@@ -21,6 +21,8 @@ from .mappings import MappingMarshalerFactory
|
|
21
21
|
from .mappings import MappingUnmarshalerFactory
|
22
22
|
from .maybes import MaybeMarshalerFactory
|
23
23
|
from .maybes import MaybeUnmarshalerFactory
|
24
|
+
from .newtypes import NewtypeMarshalerFactory
|
25
|
+
from .newtypes import NewtypeUnmarshalerFactory
|
24
26
|
from .numbers import NUMBERS_MARSHALER_FACTORY
|
25
27
|
from .numbers import NUMBERS_UNMARSHALER_FACTORY
|
26
28
|
from .optionals import OptionalMarshalerFactory
|
@@ -38,6 +40,7 @@ from .uuids import UUID_UNMARSHALER_FACTORY
|
|
38
40
|
|
39
41
|
STANDARD_MARSHALER_FACTORIES: list[MarshalerFactory] = [
|
40
42
|
PRIMITIVE_MARSHALER_FACTORY,
|
43
|
+
NewtypeMarshalerFactory(),
|
41
44
|
OptionalMarshalerFactory(),
|
42
45
|
PrimitiveUnionMarshalerFactory(),
|
43
46
|
DataclassMarshalerFactory(),
|
@@ -68,6 +71,7 @@ def new_standard_marshaler_factory() -> MarshalerFactory:
|
|
68
71
|
|
69
72
|
STANDARD_UNMARSHALER_FACTORIES: list[UnmarshalerFactory] = [
|
70
73
|
PRIMITIVE_UNMARSHALER_FACTORY,
|
74
|
+
NewtypeUnmarshalerFactory(),
|
71
75
|
OptionalUnmarshalerFactory(),
|
72
76
|
PrimitiveUnionUnmarshalerFactory(),
|
73
77
|
DataclassUnmarshalerFactory(),
|
omlish/reflect/__init__.py
CHANGED
omlish/reflect/types.py
CHANGED
@@ -107,6 +107,10 @@ def get_orig_class(obj: ta.Any) -> ta.Any:
|
|
107
107
|
return obj.__orig_class__ # noqa
|
108
108
|
|
109
109
|
|
110
|
+
def get_newtype_supertype(obj: ta.Any) -> ta.Any:
|
111
|
+
return obj.__supertype__
|
112
|
+
|
113
|
+
|
110
114
|
##
|
111
115
|
|
112
116
|
|
@@ -164,6 +168,7 @@ class Generic:
|
|
164
168
|
@dc.dataclass(frozen=True)
|
165
169
|
class NewType:
|
166
170
|
obj: ta.Any
|
171
|
+
ty: Type
|
167
172
|
|
168
173
|
|
169
174
|
@dc.dataclass(frozen=True)
|
@@ -243,7 +248,7 @@ class Reflector:
|
|
243
248
|
return Union(frozenset(self.type(a) for a in ta.get_args(obj)))
|
244
249
|
|
245
250
|
if isinstance(obj, ta.NewType): # noqa
|
246
|
-
return NewType(obj)
|
251
|
+
return NewType(obj, get_newtype_supertype(obj))
|
247
252
|
|
248
253
|
if (
|
249
254
|
is_simple_generic_alias_type(oty) or
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=ucaSu1XcJPryi-AqINUejkVDeJAFk7Bp5ar5_tJTgME,1692
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=ZpKphb42APnlM0x6-ckvJM_4L1XAmYiDRoE3l5SxqIs,3370
|
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
|
@@ -10,7 +10,7 @@ omlish/defs.py,sha256=T3bq_7h_tO3nDB5RAFBn7DkdeQgqheXzkFColbOHZko,4890
|
|
10
10
|
omlish/dynamic.py,sha256=35C_cCX_Vq2HrHzGk5T-zbrMvmUdiIiwDzDNixczoDo,6541
|
11
11
|
omlish/fnpairs.py,sha256=Sl8CMFNyDS-1JYAjSWqnT5FmUm9Lj6o7FxSRo7g4jww,10875
|
12
12
|
omlish/fnpipes.py,sha256=AJkgz9nvRRm7oqw7ZgYyz21klu276LWi54oYCLg-vOg,2196
|
13
|
-
omlish/genmachine.py,sha256=
|
13
|
+
omlish/genmachine.py,sha256=RlU-y_dt2nRdvoo7Z3HsUELlBn3KuyI4qUnqLVbChRI,2450
|
14
14
|
omlish/iterators.py,sha256=GGLC7RIT86uXMjhIIIqnff_Iu5SI_b9rXYywYGFyzmo,7292
|
15
15
|
omlish/libc.py,sha256=8r7Ejyhttk9ruCfBkxNTrlzir5WPbDE2vmY7VPlceMA,15362
|
16
16
|
omlish/matchfns.py,sha256=I1IlQGfEyk_AcFSy6ulVS3utC-uwyZM2YfUXYHc9Bw0,6152
|
@@ -126,7 +126,7 @@ omlish/configs/strings.py,sha256=0brx1duL85r1GpfbNvbHcSvH4jWzutwuvMFXda9NeI0,265
|
|
126
126
|
omlish/dataclasses/__init__.py,sha256=k358fyF6LWsiWfd7u1d4CHDn2F4wQZCb5hXtSSc1Hck,1374
|
127
127
|
omlish/dataclasses/utils.py,sha256=MzEeF8W6Yr5BjOVJOM0Au4YIMGAarXWxT0C6gzlhmfU,3425
|
128
128
|
omlish/dataclasses/impl/LICENSE,sha256=Oy-B_iHRgcSZxZolbI4ZaEVdZonSaaqFNzv7avQdo78,13936
|
129
|
-
omlish/dataclasses/impl/__init__.py,sha256=
|
129
|
+
omlish/dataclasses/impl/__init__.py,sha256=zqGBC5gSbjJxaqG_zS1LL1PX-zAfhIua8UqOE4IwO2k,789
|
130
130
|
omlish/dataclasses/impl/api.py,sha256=p7W519_EnDAWlkOVS-4BpP4SxadWIiUzC3RldSoB28o,6431
|
131
131
|
omlish/dataclasses/impl/as_.py,sha256=CD-t7hkC1EP2F_jvZKIA_cVoDuwZ-Ln_xC4fJumPYX0,2598
|
132
132
|
omlish/dataclasses/impl/copy.py,sha256=Tn8_n6Vohs-w4otbGdubBEvhd3TsSTaM3EfNGdS2LYo,591
|
@@ -141,13 +141,13 @@ omlish/dataclasses/impl/main.py,sha256=Ti0PKbFKraKvfmoPuR-G7nLVNzRC8mvEuXhCuC-M2
|
|
141
141
|
omlish/dataclasses/impl/metaclass.py,sha256=Fb0ExFiyYdOpvck4ayXMr_vEVDvHLhe28Ns3F4aduM8,3222
|
142
142
|
omlish/dataclasses/impl/metadata.py,sha256=4veWwTr-aA0KP-Y1cPEeOcXHup9EKJTYNJ0ozIxtzD4,1401
|
143
143
|
omlish/dataclasses/impl/order.py,sha256=zWvWDkSTym8cc7vO1cLHqcBhhjOlucHOCUVJcdh4jt0,1369
|
144
|
-
omlish/dataclasses/impl/params.py,sha256=
|
144
|
+
omlish/dataclasses/impl/params.py,sha256=MWRL0IhulYP0dycWnK3j-0ej0uTgeE_jIlKFiE9MnI0,2836
|
145
145
|
omlish/dataclasses/impl/processing.py,sha256=DFxyFjL_h3awRyF_5eyTnB8QkuApx7Zc4QFnVoltlao,459
|
146
146
|
omlish/dataclasses/impl/reflect.py,sha256=a19BbNxrmjNTbXzWuAl_794RCIQSMYyVqQ2Bf-DnNnM,5305
|
147
147
|
omlish/dataclasses/impl/replace.py,sha256=wS9GHX4fIwaPv1JBJzIewdBfXyK3X3V7_t55Da87dYo,1217
|
148
148
|
omlish/dataclasses/impl/repr.py,sha256=oLXBTxqp88NKmz82HrJeGiTEiwK4l5LlXQT9Q0-tX3c,1605
|
149
149
|
omlish/dataclasses/impl/simple.py,sha256=EovA-GpmQYtB_svItO2byTAWqbKGF4njz0MdQts3QBU,3157
|
150
|
-
omlish/dataclasses/impl/slots.py,sha256=
|
150
|
+
omlish/dataclasses/impl/slots.py,sha256=qXRLbtFWUs_2UV1fFUdv53_6fBLKJ_8McjNiP9YQlGM,5264
|
151
151
|
omlish/dataclasses/impl/utils.py,sha256=aER2iL3UAtgS1BdLuEvTr9Tr2wC28wk1kiOeO-jIymw,6138
|
152
152
|
omlish/diag/__init__.py,sha256=4S8v0myJM4Zld6_FV6cPe_nSv0aJb6kXftEit0HkiGE,1141
|
153
153
|
omlish/diag/asts.py,sha256=BveUUNUcaAm4Hg55f4ZxGSI313E4L8cCZ5XjHpEkKVI,3325
|
@@ -182,16 +182,25 @@ omlish/formats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
182
182
|
omlish/formats/dotenv.py,sha256=UjZl3gac-0U24sDjCCGMcCqO1UCWG2Zs8PZ4JdAg2YE,17348
|
183
183
|
omlish/formats/props.py,sha256=JwFJbKblqzqnzXf7YKFzQSDfcAXzkKsfoYvad6FPy98,18945
|
184
184
|
omlish/formats/yaml.py,sha256=wTW8ECG9jyA7qIFUqKZUro4KAKpN4IvcW_qhlrKveXM,6836
|
185
|
-
omlish/formats/json/__init__.py,sha256=
|
185
|
+
omlish/formats/json/__init__.py,sha256=xqW2APLGvCTO9dVTOlroR_AdrA5bCkdmUnbTkYHhJ7U,379
|
186
186
|
omlish/formats/json/__main__.py,sha256=1wxxKZVkj_u7HCcewwMIbGuZj_Wph95yrUbm474Op9M,188
|
187
|
-
omlish/formats/json/cli.py,sha256=
|
188
|
-
omlish/formats/json/
|
189
|
-
omlish/formats/json/
|
190
|
-
omlish/formats/json/
|
191
|
-
omlish/formats/json/
|
192
|
-
omlish/formats/json/backends/
|
193
|
-
omlish/formats/json/backends/
|
194
|
-
omlish/formats/json/backends/
|
187
|
+
omlish/formats/json/cli.py,sha256=HimX6N-VWnBh6MhyxjXKHw_VNn7tUkelRflpjWv3X3I,6210
|
188
|
+
omlish/formats/json/consts.py,sha256=u-x-qXqZvK0tWk3l3TrCTjk4mSjKmZ_ATdmd1hwHNAY,263
|
189
|
+
omlish/formats/json/encoding.py,sha256=O4iIWle7W_-RwpOvJNlqOfkbnDyiQHexV5Za4hlrFzw,497
|
190
|
+
omlish/formats/json/json.py,sha256=Mdqv2vdMi7gp96eV0BIYH5UdWpjWfsh-tSMZeywG-08,331
|
191
|
+
omlish/formats/json/render.py,sha256=H6q1R3gL6ULAnfEhQRKDOzDJjWizdsRDYxIerBSEbq8,3797
|
192
|
+
omlish/formats/json/backends/__init__.py,sha256=gnaNDCxy_KmmPUPDnjxO5_WjuWxLGbI9FYWx8ZJuQUU,97
|
193
|
+
omlish/formats/json/backends/base.py,sha256=WqtyoM82pyM0NyqpPwndrebr1bUVU1QlpmVQNrcAO8c,1114
|
194
|
+
omlish/formats/json/backends/default.py,sha256=_roVwUL40yU4spmUR9O86Ps9ytlpVU_EqolN-wdlSe8,218
|
195
|
+
omlish/formats/json/backends/jiter.py,sha256=8qv_XWGpcupPtVm6Z_egHio_iY1Kk8eqkvXTF6fVZr4,1193
|
196
|
+
omlish/formats/json/backends/orjson.py,sha256=wR8pMGFtkhZGHcNVk7vNYUnv8lUapdK89p6QpETIs9w,3778
|
197
|
+
omlish/formats/json/backends/std.py,sha256=PM00Kh9ZR2XzollHMEvdo35Eml1N-zFfRW-LOCV5ftM,3085
|
198
|
+
omlish/formats/json/backends/ujson.py,sha256=BNJCU4kluGHdqTUKLJEuHhE2m2TmqR7HEN289S0Eokg,2278
|
199
|
+
omlish/formats/json/stream/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
200
|
+
omlish/formats/json/stream/build.py,sha256=2Bikvvcaqad85J3kvmD6I5Dqp8NstyP6Gb2COeN-lxs,2780
|
201
|
+
omlish/formats/json/stream/lex.py,sha256=hMnsZld72XE7GCWdjbUANRxrruuBSSQeCm8wypMiMv0,6172
|
202
|
+
omlish/formats/json/stream/parse.py,sha256=WkbW7tvcdrTSluKhw70nPvjsq943eryVcjx8FSz78tM,5198
|
203
|
+
omlish/formats/json/stream/render.py,sha256=B9ZNuBiDJOT25prhIsZu1ICKjxk4eMPwpgQF37NPufs,3212
|
195
204
|
omlish/graphs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
196
205
|
omlish/graphs/dags.py,sha256=zp55lYgUdRCxmADwiGDHeehMJczZFA_tzdWqy77icOk,3047
|
197
206
|
omlish/graphs/domination.py,sha256=oCGoWzWTxLwow0LDyGjjEf2AjFiOiDz4WaBtczwSbsQ,7576
|
@@ -298,7 +307,7 @@ omlish/logs/noisy.py,sha256=Ubc-eTH6ZbGYsLfUUi69JAotwuUwzb-SJBeGo_0dIZI,348
|
|
298
307
|
omlish/logs/utils.py,sha256=MgGovbP0zUrZ3FGD3qYNQWn-l0jy0Y0bStcQvv5BOmQ,391
|
299
308
|
omlish/marshal/__init__.py,sha256=G0MDeBStBjz9Njq-rt5C6WbuCik6c8st7cipwMVw668,2139
|
300
309
|
omlish/marshal/any.py,sha256=e82OyYK3Emm1P1ClnsnxP7fIWC2iNVyW0H5nK4mLmWM,779
|
301
|
-
omlish/marshal/base.py,sha256=
|
310
|
+
omlish/marshal/base.py,sha256=7ZpJOMPlvtslhDdRlNZCC5MiUGu7Qfoq_S_miD0lmQY,6738
|
302
311
|
omlish/marshal/base64.py,sha256=F-3ogJdcFCtWINRgJgWT0rErqgx6f4qahhcg8OrkqhE,1089
|
303
312
|
omlish/marshal/dataclasses.py,sha256=G6Uh8t4vvNBAx2BhzH8ksj8Hq_bo6npFphQhyF298VU,6892
|
304
313
|
omlish/marshal/datetimes.py,sha256=0ffg8cEvx9SMKIXZGD9b7MqpLfmgw0uKKdn6YTfoqok,3714
|
@@ -312,6 +321,7 @@ omlish/marshal/iterables.py,sha256=6I_ZdJemLSQtJ4J5NrB9wi-eyxiJZS61HzHXp1yeiX8,2
|
|
312
321
|
omlish/marshal/mappings.py,sha256=s2cFSLyo0PM1eoQ2-SONtFSOldk5ARsBj55-icvWZ5o,2787
|
313
322
|
omlish/marshal/maybes.py,sha256=mgK3QsWHkXgRqo076KxYKH6elRxzJ_QDTodv93mgHR0,2198
|
314
323
|
omlish/marshal/naming.py,sha256=lIklR_Od4x1ghltAgOzqcKhHs-leeSv2YmFhCHO7GIs,613
|
324
|
+
omlish/marshal/newtypes.py,sha256=fRpXLoCpoiaqcvl7v92I1_Qt7udn4vsPc1P3UfcBu-8,841
|
315
325
|
omlish/marshal/nop.py,sha256=2mWve_dicFAiUQ2Y5asKkUW-XGmEE9Qi2ClIasFad0c,461
|
316
326
|
omlish/marshal/numbers.py,sha256=kFRIX9l1yofiYzafV6SnYfEg0PiCsAqeRHOeT6BSxlM,1672
|
317
327
|
omlish/marshal/objects.py,sha256=74tUmMymimSqgd4a6kyMh_owJe6J7YQXwCXEF-JWt1c,8419
|
@@ -319,7 +329,7 @@ omlish/marshal/optionals.py,sha256=r0XB5rqfasvgZJNrKYd6Unq2U4nHt3JURi26j0dYHlw,1
|
|
319
329
|
omlish/marshal/polymorphism.py,sha256=gCQ4_uzuqOcWstihK3twiMc-10G1ZHWLuLZxbajbecY,5644
|
320
330
|
omlish/marshal/primitives.py,sha256=f_6m24Cb-FDGsZpYSas11nLt3xCCEUXugw3Hv4-aNhg,1291
|
321
331
|
omlish/marshal/registries.py,sha256=FvC6qXHCizNB2QmU_N3orxW7iqfGYkiUXYYdTRWS6HA,2353
|
322
|
-
omlish/marshal/standard.py,sha256=
|
332
|
+
omlish/marshal/standard.py,sha256=vcC17ZZW33lRki7jrRd-saHGUZcXEHOpbPNGxWWbLWI,3143
|
323
333
|
omlish/marshal/unions.py,sha256=ZWl0maHwh1V_cSnNmuCbbCQZzqlNtOModsTwnVTXNPA,2735
|
324
334
|
omlish/marshal/utils.py,sha256=puKJpwPpuDlMOIrKMcLTRLJyMiL6n_Xs-p59AuDEymA,543
|
325
335
|
omlish/marshal/uuids.py,sha256=H4B7UX_EPNmP2tC8bubcKrPLTS4aQu98huvbXQ3Zv2g,910
|
@@ -328,11 +338,11 @@ omlish/math/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
328
338
|
omlish/math/bits.py,sha256=yip1l8agOYzT7bFyMGc0RR3XlnGCfHMpjw_SECLLh1I,3477
|
329
339
|
omlish/math/floats.py,sha256=UimhOT7KRl8LXTzOI5cQWoX_9h6WNWe_3vcOuO7-h_8,327
|
330
340
|
omlish/math/stats.py,sha256=MegzKVsmv2kra4jDWLOUgV0X7Ee2Tbl5u6ql1v4-dEY,10053
|
331
|
-
omlish/reflect/__init__.py,sha256=
|
341
|
+
omlish/reflect/__init__.py,sha256=qvrh1NM4GxJH-nUCMgc-ZxEHiDhintAkTky-UOcfn5o,752
|
332
342
|
omlish/reflect/isinstance.py,sha256=x5T9S2634leinBT4hl3CZZkRttvdvvlxChkC_x9Qu2s,1176
|
333
343
|
omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
|
334
344
|
omlish/reflect/subst.py,sha256=JM2RGv2-Rcex8wCqhmgvRG59zD242P9jM3O2QLjKWWo,3586
|
335
|
-
omlish/reflect/types.py,sha256=
|
345
|
+
omlish/reflect/types.py,sha256=wvK0XyCQAlkUqSbbm9Fll9VbkIMp3pLnIfF1rtKj5Hg,7901
|
336
346
|
omlish/secrets/__init__.py,sha256=SGB1KrlNrxlNpazEHYy95NTzteLi8ndoEgMhU7luBl8,420
|
337
347
|
omlish/secrets/crypto.py,sha256=6CsLy0UEqCrBK8Xx_3-iFF6SKtu2GlEqUQ8-MliY3tk,3709
|
338
348
|
omlish/secrets/marshal.py,sha256=U9uSRTWzZmumfNZeh_dROwVdGrARsp155TylRbjilP8,2048
|
@@ -440,9 +450,9 @@ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
|
|
440
450
|
omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,3296
|
441
451
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
442
452
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
443
|
-
omlish-0.0.0.
|
444
|
-
omlish-0.0.0.
|
445
|
-
omlish-0.0.0.
|
446
|
-
omlish-0.0.0.
|
447
|
-
omlish-0.0.0.
|
448
|
-
omlish-0.0.0.
|
453
|
+
omlish-0.0.0.dev82.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
454
|
+
omlish-0.0.0.dev82.dist-info/METADATA,sha256=tbUAyvNpmqNdIkCTSasl8G13hBLWp7xBvuiFgJDkYsA,4047
|
455
|
+
omlish-0.0.0.dev82.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
|
456
|
+
omlish-0.0.0.dev82.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
457
|
+
omlish-0.0.0.dev82.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
458
|
+
omlish-0.0.0.dev82.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|