omlish 0.0.0.dev83__py3-none-any.whl → 0.0.0.dev84__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 +3 -3
- omlish/dataclasses/impl/fields.py +1 -1
- omlish/dataclasses/impl/init.py +18 -2
- omlish/formats/json/stream/build.py +63 -67
- {omlish-0.0.0.dev83.dist-info → omlish-0.0.0.dev84.dist-info}/METADATA +3 -3
- {omlish-0.0.0.dev83.dist-info → omlish-0.0.0.dev84.dist-info}/RECORD +10 -10
- {omlish-0.0.0.dev83.dist-info → omlish-0.0.0.dev84.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev83.dist-info → omlish-0.0.0.dev84.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev83.dist-info → omlish-0.0.0.dev84.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev83.dist-info → omlish-0.0.0.dev84.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
__version__ = '0.0.0.
|
2
|
-
__revision__ = '
|
1
|
+
__version__ = '0.0.0.dev84'
|
2
|
+
__revision__ = 'b3347da7d48862b90c274893e4f9bfa477fecc70'
|
3
3
|
|
4
4
|
|
5
5
|
#
|
@@ -101,7 +101,7 @@ class Project(ProjectBase):
|
|
101
101
|
|
102
102
|
'apsw ~= 3.46',
|
103
103
|
|
104
|
-
'sqlean.py ~= 3.45
|
104
|
+
'sqlean.py ~= 3.45',
|
105
105
|
|
106
106
|
'duckdb ~= 1.1',
|
107
107
|
],
|
omlish/dataclasses/impl/init.py
CHANGED
@@ -23,6 +23,19 @@ from .utils import set_new_attribute
|
|
23
23
|
MISSING = dc.MISSING
|
24
24
|
|
25
25
|
|
26
|
+
##
|
27
|
+
|
28
|
+
|
29
|
+
def raise_validation_error(
|
30
|
+
obj: ta.Any,
|
31
|
+
fn: ta.Callable,
|
32
|
+
) -> ta.NoReturn:
|
33
|
+
raise ValidationError(obj, fn)
|
34
|
+
|
35
|
+
|
36
|
+
##
|
37
|
+
|
38
|
+
|
26
39
|
class InitFields(ta.NamedTuple):
|
27
40
|
all: ta.Sequence[dc.Field]
|
28
41
|
ordered: ta.Sequence[dc.Field]
|
@@ -57,6 +70,9 @@ def init_param(f: dc.Field) -> str:
|
|
57
70
|
return f'{f.name}: __dataclass_type_{f.name}__{default}' # noqa
|
58
71
|
|
59
72
|
|
73
|
+
##
|
74
|
+
|
75
|
+
|
60
76
|
class InitBuilder:
|
61
77
|
|
62
78
|
def __init__(
|
@@ -100,7 +116,7 @@ class InitBuilder:
|
|
100
116
|
'__dataclass_builtins_object__': object,
|
101
117
|
'__dataclass_builtins_isinstance__': isinstance,
|
102
118
|
'__dataclass_builtins_TypeError__': TypeError,
|
103
|
-
'
|
119
|
+
'__dataclass_raise_validation_error__': raise_validation_error,
|
104
120
|
'__dataclass_raise_field_validation_error__': raise_field_validation_error,
|
105
121
|
})
|
106
122
|
|
@@ -128,7 +144,7 @@ class InitBuilder:
|
|
128
144
|
locals[cn] = fn
|
129
145
|
csig = inspect.signature(fn)
|
130
146
|
cas = ', '.join(p.name for p in csig.parameters.values())
|
131
|
-
body_lines.append(f'if not {cn}({cas}):
|
147
|
+
body_lines.append(f'if not {cn}({cas}): __dataclass_raise_validation_error__({self._self_name}, {cn})')
|
132
148
|
|
133
149
|
inits = self._info.merged_metadata.get(Init, [])
|
134
150
|
mro_dct = lang.build_mro_dict(self._info.cls)
|
@@ -1,6 +1,5 @@
|
|
1
1
|
import typing as ta
|
2
2
|
|
3
|
-
from ....genmachine import GenMachine
|
4
3
|
from .lex import SCALAR_VALUE_TYPES
|
5
4
|
from .parse import BeginArray
|
6
5
|
from .parse import BeginObject
|
@@ -14,7 +13,7 @@ from .parse import Key
|
|
14
13
|
##
|
15
14
|
|
16
15
|
|
17
|
-
class JsonObjectBuilder
|
16
|
+
class JsonObjectBuilder:
|
18
17
|
def __init__(
|
19
18
|
self,
|
20
19
|
*,
|
@@ -23,91 +22,88 @@ class JsonObjectBuilder(GenMachine[JsonStreamParserEvent, ta.Any]):
|
|
23
22
|
self._stack: list[JsonStreamObject | list | Key] = []
|
24
23
|
self._yield_object_lists = yield_object_lists
|
25
24
|
|
26
|
-
|
25
|
+
class StateError(Exception):
|
26
|
+
pass
|
27
27
|
|
28
|
-
def
|
29
|
-
|
30
|
-
|
31
|
-
def emit_value(v):
|
32
|
-
if not stk:
|
33
|
-
return (v,)
|
28
|
+
def __enter__(self) -> ta.Self:
|
29
|
+
return self
|
34
30
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
if not stk:
|
39
|
-
raise self.StateError
|
31
|
+
def __exit__(self, exc_type, exc_val, exc_tb):
|
32
|
+
if exc_type is None:
|
33
|
+
self.close()
|
40
34
|
|
41
|
-
|
42
|
-
|
43
|
-
|
35
|
+
def close(self) -> None:
|
36
|
+
if self._stack:
|
37
|
+
raise self.StateError
|
44
38
|
|
45
|
-
|
46
|
-
|
39
|
+
def _emit_value(self, v):
|
40
|
+
if not (stk := self._stack):
|
41
|
+
return (v,)
|
47
42
|
|
48
|
-
|
49
|
-
|
50
|
-
|
43
|
+
tv = stk[-1]
|
44
|
+
if isinstance(tv, Key):
|
45
|
+
stk.pop()
|
46
|
+
if not stk:
|
47
|
+
raise self.StateError
|
51
48
|
|
52
|
-
|
49
|
+
tv2 = stk[-1]
|
50
|
+
if not isinstance(tv2, JsonStreamObject):
|
53
51
|
raise self.StateError
|
54
52
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
else:
|
62
|
-
raise
|
53
|
+
tv2.append((tv.key, v))
|
54
|
+
return ()
|
55
|
+
|
56
|
+
elif isinstance(tv, list):
|
57
|
+
tv.append(v)
|
58
|
+
return ()
|
63
59
|
|
64
|
-
|
60
|
+
else:
|
61
|
+
raise self.StateError
|
65
62
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
63
|
+
def __call__(self, e: JsonStreamParserEvent) -> ta.Any:
|
64
|
+
stk = self._stack
|
65
|
+
|
66
|
+
#
|
67
|
+
|
68
|
+
if isinstance(e, SCALAR_VALUE_TYPES):
|
69
|
+
return self._emit_value(e)
|
70
70
|
|
71
|
-
|
71
|
+
#
|
72
72
|
|
73
|
-
|
74
|
-
|
75
|
-
|
73
|
+
elif e is BeginObject:
|
74
|
+
stk.append(JsonStreamObject())
|
75
|
+
return ()
|
76
76
|
|
77
|
-
|
78
|
-
|
79
|
-
|
77
|
+
elif isinstance(e, Key):
|
78
|
+
if not stk or not isinstance(stk[-1], JsonStreamObject):
|
79
|
+
raise self.StateError
|
80
80
|
|
81
|
-
|
82
|
-
|
81
|
+
stk.append(e)
|
82
|
+
return ()
|
83
83
|
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
84
|
+
elif e is EndObject:
|
85
|
+
tv: ta.Any
|
86
|
+
if not stk or not isinstance(tv := stk.pop(), JsonStreamObject):
|
87
|
+
raise self.StateError
|
88
88
|
|
89
|
-
|
90
|
-
|
89
|
+
if not self._yield_object_lists:
|
90
|
+
tv = dict(tv)
|
91
91
|
|
92
|
-
|
93
|
-
yield t
|
94
|
-
continue
|
92
|
+
return self._emit_value(tv)
|
95
93
|
|
96
|
-
|
94
|
+
#
|
97
95
|
|
98
|
-
|
99
|
-
|
100
|
-
|
96
|
+
elif e is BeginArray:
|
97
|
+
stk.append([])
|
98
|
+
return ()
|
101
99
|
|
102
|
-
|
103
|
-
|
104
|
-
|
100
|
+
elif e is EndArray:
|
101
|
+
if not stk or not isinstance(tv := stk.pop(), list):
|
102
|
+
raise self.StateError
|
105
103
|
|
106
|
-
|
107
|
-
yield t
|
108
|
-
continue
|
104
|
+
return self._emit_value(tv)
|
109
105
|
|
110
|
-
|
106
|
+
#
|
111
107
|
|
112
|
-
|
113
|
-
|
108
|
+
else:
|
109
|
+
raise TypeError(e)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: omlish
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev84
|
4
4
|
Summary: omlish
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -40,9 +40,9 @@ Requires-Dist: aiomysql ~=0.2 ; extra == 'all'
|
|
40
40
|
Requires-Dist: aiosqlite ~=0.20 ; extra == 'all'
|
41
41
|
Requires-Dist: asyncpg ~=0.30 ; extra == 'all'
|
42
42
|
Requires-Dist: apsw ~=3.46 ; extra == 'all'
|
43
|
+
Requires-Dist: sqlean.py ~=3.45 ; extra == 'all'
|
43
44
|
Requires-Dist: duckdb ~=1.1 ; extra == 'all'
|
44
45
|
Requires-Dist: pytest ~=8.0 ; extra == 'all'
|
45
|
-
Requires-Dist: sqlean.py ~=3.45 ; (python_version < "3.13") and extra == 'all'
|
46
46
|
Provides-Extra: async
|
47
47
|
Requires-Dist: anyio ~=4.6 ; extra == 'async'
|
48
48
|
Requires-Dist: sniffio ~=1.3 ; extra == 'async'
|
@@ -87,8 +87,8 @@ Requires-Dist: aiomysql ~=0.2 ; extra == 'sqldrivers'
|
|
87
87
|
Requires-Dist: aiosqlite ~=0.20 ; extra == 'sqldrivers'
|
88
88
|
Requires-Dist: asyncpg ~=0.30 ; extra == 'sqldrivers'
|
89
89
|
Requires-Dist: apsw ~=3.46 ; extra == 'sqldrivers'
|
90
|
+
Requires-Dist: sqlean.py ~=3.45 ; extra == 'sqldrivers'
|
90
91
|
Requires-Dist: duckdb ~=1.1 ; extra == 'sqldrivers'
|
91
|
-
Requires-Dist: sqlean.py ~=3.45 ; (python_version < "3.13") and extra == 'sqldrivers'
|
92
92
|
Provides-Extra: testing
|
93
93
|
Requires-Dist: pytest ~=8.0 ; extra == 'testing'
|
94
94
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=hTFp9tvE72BxKloIq1s1SS0LRQlIsvMtO69Sbc47rKg,1704
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=oOKwJVkrCVI_eRBapOS36eRWek5mbyQvP62epTd67RE,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
|
@@ -132,10 +132,10 @@ omlish/dataclasses/impl/as_.py,sha256=CD-t7hkC1EP2F_jvZKIA_cVoDuwZ-Ln_xC4fJumPYX
|
|
132
132
|
omlish/dataclasses/impl/copy.py,sha256=Tn8_n6Vohs-w4otbGdubBEvhd3TsSTaM3EfNGdS2LYo,591
|
133
133
|
omlish/dataclasses/impl/descriptors.py,sha256=rEYE1Len99agTQCC25hSPMnM19BgPr0ZChABGi58Fdk,2476
|
134
134
|
omlish/dataclasses/impl/exceptions.py,sha256=-vqxZmfXVflymVuiM553XTlJProse5HEMktTpfdPCIY,1275
|
135
|
-
omlish/dataclasses/impl/fields.py,sha256=
|
135
|
+
omlish/dataclasses/impl/fields.py,sha256=4_5qMz9LlOS6U67cDKQ-oorTtSGGxR77I4hw88soM44,6878
|
136
136
|
omlish/dataclasses/impl/frozen.py,sha256=x87DSM8FIMZ3c_BIUE8NooCkExFjPsabeqIueEP5qKs,2988
|
137
137
|
omlish/dataclasses/impl/hashing.py,sha256=FKnHuXCg9ylrzK2TLGqO5yfRN4HX3F415CSLlVYXtYE,3190
|
138
|
-
omlish/dataclasses/impl/init.py,sha256=
|
138
|
+
omlish/dataclasses/impl/init.py,sha256=5kYcMDlI6EVeLQ6RCTk1bvYjb-cwg0AYfVE9FPZJlYI,6365
|
139
139
|
omlish/dataclasses/impl/internals.py,sha256=UvZYjrLT1S8ntyxJ_vRPIkPOF00K8HatGAygErgoXTU,2990
|
140
140
|
omlish/dataclasses/impl/main.py,sha256=Ti0PKbFKraKvfmoPuR-G7nLVNzRC8mvEuXhCuC-M2kc,2574
|
141
141
|
omlish/dataclasses/impl/metaclass.py,sha256=Fb0ExFiyYdOpvck4ayXMr_vEVDvHLhe28Ns3F4aduM8,3222
|
@@ -200,7 +200,7 @@ omlish/formats/json/cli/__main__.py,sha256=1wxxKZVkj_u7HCcewwMIbGuZj_Wph95yrUbm4
|
|
200
200
|
omlish/formats/json/cli/cli.py,sha256=GkdNokklRuDWiXAIai1wijSBFVJlpdlNLTQ3Lyucos0,5493
|
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
|
-
omlish/formats/json/stream/build.py,sha256=
|
203
|
+
omlish/formats/json/stream/build.py,sha256=6deXBxTx1toFAPShz2Jo5OiXxH5Y4ppG8gDPRFoUgjA,2461
|
204
204
|
omlish/formats/json/stream/lex.py,sha256=hMnsZld72XE7GCWdjbUANRxrruuBSSQeCm8wypMiMv0,6172
|
205
205
|
omlish/formats/json/stream/parse.py,sha256=WkbW7tvcdrTSluKhw70nPvjsq943eryVcjx8FSz78tM,5198
|
206
206
|
omlish/formats/json/stream/render.py,sha256=B9ZNuBiDJOT25prhIsZu1ICKjxk4eMPwpgQF37NPufs,3212
|
@@ -453,9 +453,9 @@ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
|
|
453
453
|
omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,3296
|
454
454
|
omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
|
455
455
|
omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
|
456
|
-
omlish-0.0.0.
|
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.
|
456
|
+
omlish-0.0.0.dev84.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
457
|
+
omlish-0.0.0.dev84.dist-info/METADATA,sha256=Ui6NExa9RJ31Hhf-FtoRkeGzkSw-2RiAy2bI-1Octl8,3987
|
458
|
+
omlish-0.0.0.dev84.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
|
459
|
+
omlish-0.0.0.dev84.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
460
|
+
omlish-0.0.0.dev84.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
461
|
+
omlish-0.0.0.dev84.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|