omlish 0.0.0.dev250__py3-none-any.whl → 0.0.0.dev252__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.
@@ -0,0 +1,256 @@
1
+ # type: ignore
2
+ # ruff: noqa
3
+ # flake8: noqa
4
+ # Generated from Protobuf3.g4 by ANTLR 4.13.2
5
+ from omlish.antlr._runtime._all import *
6
+ if "." in __name__:
7
+ from .Protobuf3Parser import Protobuf3Parser
8
+ else:
9
+ from Protobuf3Parser import Protobuf3Parser
10
+
11
+ # This class defines a complete generic visitor for a parse tree produced by Protobuf3Parser.
12
+
13
+ class Protobuf3Visitor(ParseTreeVisitor):
14
+
15
+ # Visit a parse tree produced by Protobuf3Parser#proto.
16
+ def visitProto(self, ctx:Protobuf3Parser.ProtoContext):
17
+ return self.visitChildren(ctx)
18
+
19
+
20
+ # Visit a parse tree produced by Protobuf3Parser#syntax.
21
+ def visitSyntax(self, ctx:Protobuf3Parser.SyntaxContext):
22
+ return self.visitChildren(ctx)
23
+
24
+
25
+ # Visit a parse tree produced by Protobuf3Parser#syntaxExtra.
26
+ def visitSyntaxExtra(self, ctx:Protobuf3Parser.SyntaxExtraContext):
27
+ return self.visitChildren(ctx)
28
+
29
+
30
+ # Visit a parse tree produced by Protobuf3Parser#importStmt.
31
+ def visitImportStmt(self, ctx:Protobuf3Parser.ImportStmtContext):
32
+ return self.visitChildren(ctx)
33
+
34
+
35
+ # Visit a parse tree produced by Protobuf3Parser#packageStmt.
36
+ def visitPackageStmt(self, ctx:Protobuf3Parser.PackageStmtContext):
37
+ return self.visitChildren(ctx)
38
+
39
+
40
+ # Visit a parse tree produced by Protobuf3Parser#option.
41
+ def visitOption(self, ctx:Protobuf3Parser.OptionContext):
42
+ return self.visitChildren(ctx)
43
+
44
+
45
+ # Visit a parse tree produced by Protobuf3Parser#optionName.
46
+ def visitOptionName(self, ctx:Protobuf3Parser.OptionNameContext):
47
+ return self.visitChildren(ctx)
48
+
49
+
50
+ # Visit a parse tree produced by Protobuf3Parser#optionBody.
51
+ def visitOptionBody(self, ctx:Protobuf3Parser.OptionBodyContext):
52
+ return self.visitChildren(ctx)
53
+
54
+
55
+ # Visit a parse tree produced by Protobuf3Parser#optionBodyVariable.
56
+ def visitOptionBodyVariable(self, ctx:Protobuf3Parser.OptionBodyVariableContext):
57
+ return self.visitChildren(ctx)
58
+
59
+
60
+ # Visit a parse tree produced by Protobuf3Parser#topLevelDef.
61
+ def visitTopLevelDef(self, ctx:Protobuf3Parser.TopLevelDefContext):
62
+ return self.visitChildren(ctx)
63
+
64
+
65
+ # Visit a parse tree produced by Protobuf3Parser#message.
66
+ def visitMessage(self, ctx:Protobuf3Parser.MessageContext):
67
+ return self.visitChildren(ctx)
68
+
69
+
70
+ # Visit a parse tree produced by Protobuf3Parser#messageBody.
71
+ def visitMessageBody(self, ctx:Protobuf3Parser.MessageBodyContext):
72
+ return self.visitChildren(ctx)
73
+
74
+
75
+ # Visit a parse tree produced by Protobuf3Parser#messageBodyContent.
76
+ def visitMessageBodyContent(self, ctx:Protobuf3Parser.MessageBodyContentContext):
77
+ return self.visitChildren(ctx)
78
+
79
+
80
+ # Visit a parse tree produced by Protobuf3Parser#enumDef.
81
+ def visitEnumDef(self, ctx:Protobuf3Parser.EnumDefContext):
82
+ return self.visitChildren(ctx)
83
+
84
+
85
+ # Visit a parse tree produced by Protobuf3Parser#enumBody.
86
+ def visitEnumBody(self, ctx:Protobuf3Parser.EnumBodyContext):
87
+ return self.visitChildren(ctx)
88
+
89
+
90
+ # Visit a parse tree produced by Protobuf3Parser#enumField.
91
+ def visitEnumField(self, ctx:Protobuf3Parser.EnumFieldContext):
92
+ return self.visitChildren(ctx)
93
+
94
+
95
+ # Visit a parse tree produced by Protobuf3Parser#enumValueOption.
96
+ def visitEnumValueOption(self, ctx:Protobuf3Parser.EnumValueOptionContext):
97
+ return self.visitChildren(ctx)
98
+
99
+
100
+ # Visit a parse tree produced by Protobuf3Parser#extend.
101
+ def visitExtend(self, ctx:Protobuf3Parser.ExtendContext):
102
+ return self.visitChildren(ctx)
103
+
104
+
105
+ # Visit a parse tree produced by Protobuf3Parser#service.
106
+ def visitService(self, ctx:Protobuf3Parser.ServiceContext):
107
+ return self.visitChildren(ctx)
108
+
109
+
110
+ # Visit a parse tree produced by Protobuf3Parser#rpc.
111
+ def visitRpc(self, ctx:Protobuf3Parser.RpcContext):
112
+ return self.visitChildren(ctx)
113
+
114
+
115
+ # Visit a parse tree produced by Protobuf3Parser#reserved.
116
+ def visitReserved(self, ctx:Protobuf3Parser.ReservedContext):
117
+ return self.visitChildren(ctx)
118
+
119
+
120
+ # Visit a parse tree produced by Protobuf3Parser#ranges.
121
+ def visitRanges(self, ctx:Protobuf3Parser.RangesContext):
122
+ return self.visitChildren(ctx)
123
+
124
+
125
+ # Visit a parse tree produced by Protobuf3Parser#rangeRule.
126
+ def visitRangeRule(self, ctx:Protobuf3Parser.RangeRuleContext):
127
+ return self.visitChildren(ctx)
128
+
129
+
130
+ # Visit a parse tree produced by Protobuf3Parser#fieldNames.
131
+ def visitFieldNames(self, ctx:Protobuf3Parser.FieldNamesContext):
132
+ return self.visitChildren(ctx)
133
+
134
+
135
+ # Visit a parse tree produced by Protobuf3Parser#typeRule.
136
+ def visitTypeRule(self, ctx:Protobuf3Parser.TypeRuleContext):
137
+ return self.visitChildren(ctx)
138
+
139
+
140
+ # Visit a parse tree produced by Protobuf3Parser#simpleType.
141
+ def visitSimpleType(self, ctx:Protobuf3Parser.SimpleTypeContext):
142
+ return self.visitChildren(ctx)
143
+
144
+
145
+ # Visit a parse tree produced by Protobuf3Parser#fieldNumber.
146
+ def visitFieldNumber(self, ctx:Protobuf3Parser.FieldNumberContext):
147
+ return self.visitChildren(ctx)
148
+
149
+
150
+ # Visit a parse tree produced by Protobuf3Parser#field.
151
+ def visitField(self, ctx:Protobuf3Parser.FieldContext):
152
+ return self.visitChildren(ctx)
153
+
154
+
155
+ # Visit a parse tree produced by Protobuf3Parser#fieldOptions.
156
+ def visitFieldOptions(self, ctx:Protobuf3Parser.FieldOptionsContext):
157
+ return self.visitChildren(ctx)
158
+
159
+
160
+ # Visit a parse tree produced by Protobuf3Parser#fieldOption.
161
+ def visitFieldOption(self, ctx:Protobuf3Parser.FieldOptionContext):
162
+ return self.visitChildren(ctx)
163
+
164
+
165
+ # Visit a parse tree produced by Protobuf3Parser#oneof.
166
+ def visitOneof(self, ctx:Protobuf3Parser.OneofContext):
167
+ return self.visitChildren(ctx)
168
+
169
+
170
+ # Visit a parse tree produced by Protobuf3Parser#oneofField.
171
+ def visitOneofField(self, ctx:Protobuf3Parser.OneofFieldContext):
172
+ return self.visitChildren(ctx)
173
+
174
+
175
+ # Visit a parse tree produced by Protobuf3Parser#mapField.
176
+ def visitMapField(self, ctx:Protobuf3Parser.MapFieldContext):
177
+ return self.visitChildren(ctx)
178
+
179
+
180
+ # Visit a parse tree produced by Protobuf3Parser#keyType.
181
+ def visitKeyType(self, ctx:Protobuf3Parser.KeyTypeContext):
182
+ return self.visitChildren(ctx)
183
+
184
+
185
+ # Visit a parse tree produced by Protobuf3Parser#reservedWord.
186
+ def visitReservedWord(self, ctx:Protobuf3Parser.ReservedWordContext):
187
+ return self.visitChildren(ctx)
188
+
189
+
190
+ # Visit a parse tree produced by Protobuf3Parser#fullIdent.
191
+ def visitFullIdent(self, ctx:Protobuf3Parser.FullIdentContext):
192
+ return self.visitChildren(ctx)
193
+
194
+
195
+ # Visit a parse tree produced by Protobuf3Parser#messageName.
196
+ def visitMessageName(self, ctx:Protobuf3Parser.MessageNameContext):
197
+ return self.visitChildren(ctx)
198
+
199
+
200
+ # Visit a parse tree produced by Protobuf3Parser#enumName.
201
+ def visitEnumName(self, ctx:Protobuf3Parser.EnumNameContext):
202
+ return self.visitChildren(ctx)
203
+
204
+
205
+ # Visit a parse tree produced by Protobuf3Parser#messageOrEnumName.
206
+ def visitMessageOrEnumName(self, ctx:Protobuf3Parser.MessageOrEnumNameContext):
207
+ return self.visitChildren(ctx)
208
+
209
+
210
+ # Visit a parse tree produced by Protobuf3Parser#fieldName.
211
+ def visitFieldName(self, ctx:Protobuf3Parser.FieldNameContext):
212
+ return self.visitChildren(ctx)
213
+
214
+
215
+ # Visit a parse tree produced by Protobuf3Parser#oneofName.
216
+ def visitOneofName(self, ctx:Protobuf3Parser.OneofNameContext):
217
+ return self.visitChildren(ctx)
218
+
219
+
220
+ # Visit a parse tree produced by Protobuf3Parser#mapName.
221
+ def visitMapName(self, ctx:Protobuf3Parser.MapNameContext):
222
+ return self.visitChildren(ctx)
223
+
224
+
225
+ # Visit a parse tree produced by Protobuf3Parser#serviceName.
226
+ def visitServiceName(self, ctx:Protobuf3Parser.ServiceNameContext):
227
+ return self.visitChildren(ctx)
228
+
229
+
230
+ # Visit a parse tree produced by Protobuf3Parser#rpcName.
231
+ def visitRpcName(self, ctx:Protobuf3Parser.RpcNameContext):
232
+ return self.visitChildren(ctx)
233
+
234
+
235
+ # Visit a parse tree produced by Protobuf3Parser#messageType.
236
+ def visitMessageType(self, ctx:Protobuf3Parser.MessageTypeContext):
237
+ return self.visitChildren(ctx)
238
+
239
+
240
+ # Visit a parse tree produced by Protobuf3Parser#messageOrEnumType.
241
+ def visitMessageOrEnumType(self, ctx:Protobuf3Parser.MessageOrEnumTypeContext):
242
+ return self.visitChildren(ctx)
243
+
244
+
245
+ # Visit a parse tree produced by Protobuf3Parser#emptyStmt.
246
+ def visitEmptyStmt(self, ctx:Protobuf3Parser.EmptyStmtContext):
247
+ return self.visitChildren(ctx)
248
+
249
+
250
+ # Visit a parse tree produced by Protobuf3Parser#constant.
251
+ def visitConstant(self, ctx:Protobuf3Parser.ConstantContext):
252
+ return self.visitChildren(ctx)
253
+
254
+
255
+
256
+ del Protobuf3Parser
File without changes
@@ -0,0 +1,54 @@
1
+ import enum
2
+ import typing as ta
3
+
4
+ from ... import dataclasses as dc
5
+
6
+
7
+ ##
8
+
9
+
10
+ class SimpleType(enum.Enum):
11
+ DOUBLE = 'double'
12
+ FLOAT = 'float'
13
+ INT32 = 'int32'
14
+ INT64 = 'int64'
15
+ UINT32 = 'uint32'
16
+ UINT64 = 'uint64'
17
+ SINT32 = 'sint32'
18
+ SINT64 = 'sint64'
19
+ FIXED32 = 'fixed32'
20
+ FIXED64 = 'fixed64'
21
+ SFIXED32 = 'sfixed32'
22
+ SFIXED64 = 'sfixed64'
23
+ BOOL = 'bool'
24
+ STRING = 'string'
25
+ BYTES = 'bytes'
26
+
27
+
28
+ class TypeRef(dc.Frozen):
29
+ name: str
30
+
31
+
32
+ Type: ta.TypeAlias = SimpleType | TypeRef
33
+
34
+
35
+ ##
36
+
37
+
38
+ class Field(dc.Frozen):
39
+ name: str
40
+ type: Type
41
+ num: int
42
+ repeated: bool = False
43
+
44
+
45
+ class Message(dc.Frozen):
46
+ name: str
47
+ fields: ta.Sequence[Field]
48
+
49
+
50
+ ##
51
+
52
+
53
+ class ProtoFile(dc.Frozen):
54
+ messages: ta.Sequence[Message] | None = None
@@ -0,0 +1,97 @@
1
+ # ruff: noqa: N802 N803
2
+ import typing as ta
3
+
4
+ from ... import check
5
+ from ...antlr import runtime as antlr4
6
+ from ...antlr.errors import SilentRaisingErrorListener
7
+ from . import nodes as no
8
+ from ._antlr.Protobuf3Lexer import Protobuf3Lexer # type: ignore
9
+ from ._antlr.Protobuf3Parser import Protobuf3Parser # type: ignore
10
+ from ._antlr.Protobuf3Visitor import Protobuf3Visitor # type: ignore
11
+
12
+
13
+ ##
14
+
15
+
16
+ class _ParseVisitor(Protobuf3Visitor):
17
+ def visit(self, ctx: antlr4.ParserRuleContext):
18
+ check.isinstance(ctx, antlr4.ParserRuleContext)
19
+ node = ctx.accept(self)
20
+ return node
21
+
22
+ def aggregateResult(self, aggregate, nextResult):
23
+ if aggregate is not None:
24
+ check.none(nextResult)
25
+ return aggregate
26
+ else:
27
+ check.none(aggregate)
28
+ return nextResult
29
+
30
+ #
31
+
32
+ def visitField(self, ctx: Protobuf3Parser.FieldContext):
33
+ name = ctx.fieldName().getText()
34
+ type_: no.Type = check.isinstance(self.visitTypeRule(ctx.typeRule()), (no.SimpleType, no.TypeRef))
35
+ num = int(ctx.fieldNumber().getText())
36
+ repeated = ctx.REPEATED() is not None
37
+ return no.Field(
38
+ name=name,
39
+ type=type_,
40
+ num=num,
41
+ repeated=repeated,
42
+ )
43
+
44
+ def visitMessage(self, ctx: Protobuf3Parser.MessageContext):
45
+ name = ctx.messageName().getText()
46
+ fields: list[no.Field] = []
47
+ for mbc_ctx in ctx.messageBody().messageBodyContent():
48
+ mbc = self.visitMessageBodyContent(mbc_ctx)
49
+ if isinstance(mbc, no.Field):
50
+ fields.append(mbc)
51
+ return no.Message(
52
+ name=name,
53
+ fields=fields,
54
+ )
55
+
56
+ def visitMessageOrEnumType(self, ctx: Protobuf3Parser.MessageOrEnumTypeContext):
57
+ return no.TypeRef(ctx.getText())
58
+
59
+ def visitProto(self, ctx: Protobuf3Parser.ProtoContext):
60
+ messages: list[no.Message] = []
61
+ for ex_ctx in ctx.syntaxExtra():
62
+ ex = self.visitSyntaxExtra(ex_ctx)
63
+ if isinstance(ex, no.Message):
64
+ messages.append(ex)
65
+ return no.ProtoFile(
66
+ messages=messages,
67
+ )
68
+
69
+ def visitSimpleType(self, ctx: Protobuf3Parser.SimpleTypeContext):
70
+ return no.SimpleType(ctx.getText())
71
+
72
+
73
+ ##
74
+
75
+
76
+ def create_parser(buf: str) -> Protobuf3Parser:
77
+ lexer = Protobuf3Lexer(antlr4.InputStream(buf))
78
+ lexer.removeErrorListeners()
79
+ lexer.addErrorListener(SilentRaisingErrorListener())
80
+
81
+ stream = antlr4.CommonTokenStream(lexer)
82
+ stream.fill()
83
+
84
+ parser = Protobuf3Parser(stream)
85
+ parser.removeErrorListeners()
86
+ parser.addErrorListener(SilentRaisingErrorListener())
87
+
88
+ return parser
89
+
90
+
91
+ ##
92
+
93
+
94
+ def parse_proto(buf: str, **kwargs: ta.Any) -> ta.Any:
95
+ parser = create_parser(buf, **kwargs)
96
+ node = _ParseVisitor().visit(parser.proto())
97
+ return node
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omlish
3
- Version: 0.0.0.dev250
3
+ Version: 0.0.0.dev252
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -13,7 +13,7 @@ Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
15
  Provides-Extra: all
16
- Requires-Dist: anyio~=4.8; extra == "all"
16
+ Requires-Dist: anyio~=4.9; extra == "all"
17
17
  Requires-Dist: sniffio~=1.3; extra == "all"
18
18
  Requires-Dist: greenlet~=3.1; extra == "all"
19
19
  Requires-Dist: trio~=0.29; extra == "all"
@@ -43,7 +43,7 @@ Requires-Dist: apsw~=3.47; extra == "all"
43
43
  Requires-Dist: sqlean.py~=3.45; extra == "all"
44
44
  Requires-Dist: duckdb~=1.2; extra == "all"
45
45
  Requires-Dist: pytest~=8.0; extra == "all"
46
- Requires-Dist: anyio~=4.8; extra == "all"
46
+ Requires-Dist: anyio~=4.9; extra == "all"
47
47
  Requires-Dist: sniffio~=1.3; extra == "all"
48
48
  Requires-Dist: asttokens~=3.0; extra == "all"
49
49
  Requires-Dist: executing~=2.2; extra == "all"
@@ -51,7 +51,7 @@ Requires-Dist: orjson~=3.10; extra == "all"
51
51
  Requires-Dist: pyyaml~=6.0; extra == "all"
52
52
  Requires-Dist: wrapt~=1.17; extra == "all"
53
53
  Provides-Extra: async
54
- Requires-Dist: anyio~=4.8; extra == "async"
54
+ Requires-Dist: anyio~=4.9; extra == "async"
55
55
  Requires-Dist: sniffio~=1.3; extra == "async"
56
56
  Requires-Dist: greenlet~=3.1; extra == "async"
57
57
  Requires-Dist: trio~=0.29; extra == "async"
@@ -91,7 +91,7 @@ Requires-Dist: duckdb~=1.2; extra == "sqldrivers"
91
91
  Provides-Extra: testing
92
92
  Requires-Dist: pytest~=8.0; extra == "testing"
93
93
  Provides-Extra: plus
94
- Requires-Dist: anyio~=4.8; extra == "plus"
94
+ Requires-Dist: anyio~=4.9; extra == "plus"
95
95
  Requires-Dist: sniffio~=1.3; extra == "plus"
96
96
  Requires-Dist: asttokens~=3.0; extra == "plus"
97
97
  Requires-Dist: executing~=2.2; extra == "plus"
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=x26AIwDzScUvnX-p4xlq6Zc5QYrAo0Vmgf1qHc1KL_M,8253
2
- omlish/__about__.py,sha256=LCIKYHw0FYdPvCdmhqyF7FaJsL17sOU3m3dX5HFBUbg,3380
2
+ omlish/__about__.py,sha256=irK5EMsRK45Vveo-bLYvfj4i3jGa_hT0w6FNpRHdcso,3380
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=ubu7lHwss5V4UznbejAI0qXhXahrU01MysuHOZI9C4U,8116
5
5
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
@@ -237,7 +237,7 @@ omlish/dispatch/_dispatch2.py,sha256=70k1tKKvuhxtAu6v4skECfHKIKVWrmlt7G_JKLUsKEs
237
237
  omlish/dispatch/_dispatch3.py,sha256=9Zjd7bINAC3keiaBdssc4v5dY0-8OI6XooV2DR9U7Z0,2818
238
238
  omlish/dispatch/dispatch.py,sha256=KA5l49AiGLRjp4J7RDJW9RiDp9WUD1ewR1AOPEF8g38,3062
239
239
  omlish/dispatch/functions.py,sha256=8Qvj62XKn9SKfiqoVQdBD3wVRE4JUWpZDqs0oouuDIw,1519
240
- omlish/dispatch/impls.py,sha256=f7uLDjtDcykx_iFYRSmIrQYbVmXlaqXZ3qFIuOTUiD8,1967
240
+ omlish/dispatch/impls.py,sha256=0t1N3EZUHi-V3kzgOVUezE7ghevZt1G3r0eo2q_do7c,2151
241
241
  omlish/dispatch/methods.py,sha256=dr8xQo-zVRckIo_V2Wp8Reqor3NE6APuzomUfsSBGdk,5498
242
242
  omlish/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
243
243
  omlish/docker/all.py,sha256=xXRgJgLGPwAtr7bDMJ_Dp9jTfOwfGvohNhc6LsoELJc,514
@@ -289,7 +289,7 @@ omlish/formats/json5/__init__.py,sha256=BsjPz5zJDji3GjQ8x8hWvcl1GYPV_ZIHnE3c2Sr8
289
289
  omlish/formats/json5/codec.py,sha256=ldnxCRo0JP1fkGLt0mMxJlLvNxqIF_1KUCcSp1HtI-M,452
290
290
  omlish/formats/json5/errors.py,sha256=AHkR9ySjAoQdUrizpqgL8fg0M5oe5mHZkml3KZHEvC4,38
291
291
  omlish/formats/json5/literals.py,sha256=rj4-9KFXfgdq5oK_eUkp57cgoMQ8T0gRaG9ga430he4,2429
292
- omlish/formats/json5/parsing.py,sha256=v1CPnJF73yX6eDe1GNfDVXFxBhBeoHrG5E5Tf5f6oL8,2341
292
+ omlish/formats/json5/parsing.py,sha256=FrH6CgAYoqHGgJMPfbhNNuvwxi20i5rus9pGHU-BcW0,2346
293
293
  omlish/formats/json5/_antlr/Json5Lexer.py,sha256=8TKxlENDsl6CPfoLR06uQSvhDnzGcY7fKsIhFJ_g6N4,23237
294
294
  omlish/formats/json5/_antlr/Json5Listener.py,sha256=fSiOzSS0CMjxaCev3sxZqJlW-buqIyDLwgnuRv-Uh80,2095
295
295
  omlish/formats/json5/_antlr/Json5Parser.py,sha256=nbbwoCPvEVRcEh5_t092XLmsXIHnbzONvH0W0g_BYkQ,19677
@@ -415,7 +415,7 @@ omlish/lang/imports.py,sha256=Gdl6xCF89xiMOE1yDmdvKWamLq8HX-XPianO58Jdpmw,9218
415
415
  omlish/lang/iterables.py,sha256=HOjcxOwyI5bBApDLsxRAGGhTTmw7fdZl2kEckxRVl-0,1994
416
416
  omlish/lang/maybes.py,sha256=dAgrUoAhCgyrHRqa73CkaGnpXwGc-o9n-NIThrNXnbU,3416
417
417
  omlish/lang/objects.py,sha256=65XsD7UtblRdNe2ID1-brn_QvRkJhBIk5nyZWcQNeqU,4574
418
- omlish/lang/params.py,sha256=AaUHI59qBLV7I-q1qPIEPTKGvgXzSRsmkNR2jTma5ZY,6688
418
+ omlish/lang/params.py,sha256=QmNVBfJsfxjDG5ilDPgHV7sK4UwRztkSQdLTo0umb8I,6648
419
419
  omlish/lang/resolving.py,sha256=OuN2mDTPNyBUbcrswtvFKtj4xgH4H4WglgqSKv3MTy0,1606
420
420
  omlish/lang/resources.py,sha256=WKkAddC3ctMK1bvGw-elGe8ZxAj2IaUTKVSu2nfgHTo,2839
421
421
  omlish/lang/strings.py,sha256=egdv8PxLNG40-5V93agP5j2rBUDIsahCx048zV7uEbU,4690
@@ -447,7 +447,7 @@ omlish/lite/imports.py,sha256=o9WWrNrWg0hKeMvaj91giaovED_9VFanN2MyEHBGekY,1346
447
447
  omlish/lite/inject.py,sha256=-tTsOqqef-Ix5Tgl2DP_JAsNWJQDFUptERl3lk14Uzs,29007
448
448
  omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
449
449
  omlish/lite/logs.py,sha256=CWFG0NKGhqNeEgryF5atN2gkPYbUdTINEw_s1phbINM,51
450
- omlish/lite/marshal.py,sha256=UMwSLEM-QvkvnSHmcChJVkIXkGp9WAyMYyZMB-NZefw,18463
450
+ omlish/lite/marshal.py,sha256=4DCbLoimLwJakihpvMjJ_kpc7v9aZQY8P3-gkoqEGUE,18471
451
451
  omlish/lite/maybes.py,sha256=7OlHJ8Q2r4wQ-aRbZSlJY7x0e8gDvufFdlohGEIJ3P4,833
452
452
  omlish/lite/pycharm.py,sha256=pUOJevrPClSqTCEOkQBO11LKX2003tfDcp18a03QFrc,1163
453
453
  omlish/lite/reflect.py,sha256=pzOY2PPuHH0omdtglkN6DheXDrGopdL3PtTJnejyLFU,2189
@@ -523,7 +523,7 @@ omlish/marshal/trivial/nop.py,sha256=41bpwsLGeDGqIwzZ7j88lbc4wIYh0EcPROhCU98mQxo
523
523
  omlish/math/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
524
524
  omlish/math/bits.py,sha256=LC3dTgrvodNbfxy9dvlya61eQuDEy0azzQLCvEbFHj4,3476
525
525
  omlish/math/floats.py,sha256=UimhOT7KRl8LXTzOI5cQWoX_9h6WNWe_3vcOuO7-h_8,327
526
- omlish/math/stats.py,sha256=C700sib97E-IywlNKoByHFEtgA51n7Lffg7d3WSO4js,10052
526
+ omlish/math/stats.py,sha256=iQh-g6M_ig0mJJ4Frs4njxDmpw515HjGSpQSiggJH4U,10042
527
527
  omlish/multiprocessing/__init__.py,sha256=jwlWGOaSGcX8DkzyZwJ49nfkHocWWeKgKb7kMpgcj_Y,485
528
528
  omlish/multiprocessing/proxies.py,sha256=bInhGds2rv6xT9q3qRMlZuSXFAjwfspkiohXZ36aUpY,484
529
529
  omlish/multiprocessing/spawn.py,sha256=sTvPLIJGYnjjI6ASqhFzHF-97tCnaOXX7u7s-33SUMw,1875
@@ -579,7 +579,7 @@ omlish/sockets/server/handlers.py,sha256=PPsb1X5oU9dN8jfztaMGsRiqWTyEANT-1aSLbS6
579
579
  omlish/sockets/server/server.py,sha256=FkaishIxJuU4it9tTI7wzlGqJYzFGXzDrd_HgV0jAmU,6253
580
580
  omlish/sockets/server/ssl.py,sha256=VE0GpdA-gYsN2m9_uvfDwWmXtIbRQqJomVdpGJO8o2M,1061
581
581
  omlish/sockets/server/threading.py,sha256=YmW3Ym_p5j_F4SIH9BgRHIObywjq1HS39j9CGWIcMAY,2856
582
- omlish/specs/__init__.py,sha256=zZwF8yXTEkSstYtORkDhVLK-_hWU8WOJCuBpognb_NY,118
582
+ omlish/specs/__init__.py,sha256=fxpcfXEWESH2kiPStKhl2dAdfLkZVTt_cssZKyqBLiQ,87
583
583
  omlish/specs/irc/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
584
584
  omlish/specs/irc/messages/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
585
585
  omlish/specs/irc/messages/base.py,sha256=JQWq4L-USYFw1DmHPpL3FiAwvynf6Hi48-zNdC__jT0,1240
@@ -614,7 +614,7 @@ omlish/specs/jmespath/visitor.py,sha256=yneRMO4qf3k2Mdcm2cPC0ozRgOaudzlxRVRGatzt
614
614
  omlish/specs/jsonrpc/__init__.py,sha256=E0EogYSKmbj1D-V57tBgPDTyVuD8HosHqVg0Vh1CVwM,416
615
615
  omlish/specs/jsonrpc/errors.py,sha256=-Zgmlo6bV6J8w5f8h9axQgLquIFBHDgIwcpufEH5NsE,707
616
616
  omlish/specs/jsonrpc/marshal.py,sha256=hM1rPZddoha_87qcQtBWkyaZshCXlPoHPJg6J_nBi9k,1915
617
- omlish/specs/jsonrpc/types.py,sha256=g19j2_FCVJDXFqAkQ5U4LICkL4Z7vEBMU0t_aOEqio4,2159
617
+ omlish/specs/jsonrpc/types.py,sha256=50aARffC_FdxAaRxEJMNhydygj9sP8L3Kb2fx5vQGm4,2164
618
618
  omlish/specs/jsonschema/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
619
619
  omlish/specs/jsonschema/types.py,sha256=qoxExgKfrI-UZXdk3qcVZIEyp1WckFbb85_eGInEoAY,467
620
620
  omlish/specs/jsonschema/keywords/__init__.py,sha256=kZNJCujSpflCOrPNeJT8C1a5sfStn6cwiXXzbu9YPyg,753
@@ -640,6 +640,15 @@ omlish/specs/jsonschema/schemas/draft202012/vocabularies/validation.json,sha256=
640
640
  omlish/specs/openapi/__init__.py,sha256=zilQhafjvteRDF_TUIRgF293dBC6g-TJChmUb6T9VBQ,77
641
641
  omlish/specs/openapi/marshal.py,sha256=Z-E2Knm04C81N8AA8cibCVSl2ImhSpHZVc7yAhmPx88,2135
642
642
  omlish/specs/openapi/openapi.py,sha256=y4h04jeB7ORJSVrcy7apaBdpwLjIyscv1Ub5SderH2c,12682
643
+ omlish/specs/proto/Protobuf3.g4,sha256=chDrovFsuZaHf5W35WZNts3jOa1ssPwvWiJR4yVIgjw,5552
644
+ omlish/specs/proto/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
645
+ omlish/specs/proto/nodes.py,sha256=nwA6KyU9pZHLE9cO9dh46qTl6vfYJ8SjuUDlLBuoOms,776
646
+ omlish/specs/proto/parsing.py,sha256=Rrdhvl-QHBxykGFd9XltqG8GBPgHaw5rRM8wuELCdsA,2861
647
+ omlish/specs/proto/_antlr/Protobuf3Lexer.py,sha256=-FpQNpCJyhHf2dM4ngLtAtb7sssrtAXeR0W4WuKY4Yo,19471
648
+ omlish/specs/proto/_antlr/Protobuf3Listener.py,sha256=hjzAJjcj4xWRim-68v-6QwIsPVdPwOFUGz1rusRcaWU,14506
649
+ omlish/specs/proto/_antlr/Protobuf3Parser.py,sha256=VmkUyJx3WxIgAecOa1BGwbO9fVNysZt5-arQ-wDubpk,132411
650
+ omlish/specs/proto/_antlr/Protobuf3Visitor.py,sha256=zEVBXly2k9Cqmgdb45QwpLR-fZCEq8hpp2WQj-s7Wps,8782
651
+ omlish/specs/proto/_antlr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
643
652
  omlish/sql/__init__.py,sha256=TpZLsEJKJzvJ0eMzuV8hwOJJbkxBCV1RZPUMLAVB6io,173
644
653
  omlish/sql/abc.py,sha256=yrUSO2OSY6rtMyA0_MlrEFEyIKXLJymSPpmJwEjEJuc,4038
645
654
  omlish/sql/dbapi.py,sha256=o6umqE7zVFI_ax0TnCKAikhAIPXChYOwVULb_OdcL1c,2974
@@ -735,9 +744,9 @@ omlish/text/mangle.py,sha256=kfzFLfvepH-chl1P89_mdc5vC4FSqyPA2aVtgzuB8IY,1133
735
744
  omlish/text/minja.py,sha256=jZC-fp3Xuhx48ppqsf2Sf1pHbC0t8XBB7UpUUoOk2Qw,5751
736
745
  omlish/text/parts.py,sha256=JkNZpyR2tv2CNcTaWJJhpQ9E4F0yPR8P_YfDbZfMtwQ,6182
737
746
  omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
738
- omlish-0.0.0.dev250.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
739
- omlish-0.0.0.dev250.dist-info/METADATA,sha256=I94K5DI1DH2JEs5HA15SkuwlyDsnTF5PYIeSr5rKrGo,4176
740
- omlish-0.0.0.dev250.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
741
- omlish-0.0.0.dev250.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
742
- omlish-0.0.0.dev250.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
743
- omlish-0.0.0.dev250.dist-info/RECORD,,
747
+ omlish-0.0.0.dev252.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
748
+ omlish-0.0.0.dev252.dist-info/METADATA,sha256=d3I-8A12dfY6BUTJyIZ70ySFdyaJLUuDZstZPmrYvD0,4176
749
+ omlish-0.0.0.dev252.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
750
+ omlish-0.0.0.dev252.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
751
+ omlish-0.0.0.dev252.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
752
+ omlish-0.0.0.dev252.dist-info/RECORD,,