omlish 0.0.0.dev245__py3-none-any.whl → 0.0.0.dev247__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/collections/__init__.py +0 -1
- omlish/collections/frozen.py +2 -2
- omlish/collections/hasheq.py +1 -2
- omlish/collections/identity.py +7 -2
- omlish/collections/mappings.py +0 -16
- omlish/collections/sorted/sorted.py +1 -2
- omlish/daemons/services.py +7 -0
- omlish/dataclasses/__init__.py +3 -0
- omlish/dataclasses/utils.py +14 -0
- omlish/http/handlers.py +16 -0
- omlish/lang/__init__.py +6 -0
- omlish/lang/attrs.py +29 -0
- omlish/lang/cached/function.py +1 -0
- omlish/lang/collections.py +50 -0
- omlish/marshal/__init__.py +23 -0
- omlish/marshal/composite/wrapped.py +26 -0
- omlish/marshal/objects/dataclasses.py +36 -11
- omlish/marshal/objects/namedtuples.py +9 -9
- omlish/marshal/polymorphism/marshal.py +16 -2
- omlish/marshal/polymorphism/unmarshal.py +16 -2
- omlish/os/pidfiles/pidfile.py +20 -4
- omlish/os/signals.py +5 -1
- omlish/specs/jmespath/cli.py +1 -1
- omlish/sql/queries/rendering.py +108 -87
- {omlish-0.0.0.dev245.dist-info → omlish-0.0.0.dev247.dist-info}/METADATA +1 -1
- {omlish-0.0.0.dev245.dist-info → omlish-0.0.0.dev247.dist-info}/RECORD +31 -30
- omlish/sql/queries/rendering2.py +0 -248
- {omlish-0.0.0.dev245.dist-info → omlish-0.0.0.dev247.dist-info}/LICENSE +0 -0
- {omlish-0.0.0.dev245.dist-info → omlish-0.0.0.dev247.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev245.dist-info → omlish-0.0.0.dev247.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev245.dist-info → omlish-0.0.0.dev247.dist-info}/top_level.txt +0 -0
omlish/os/pidfiles/pidfile.py
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
"""
|
4
4
|
TODO:
|
5
5
|
- 'json pids', with code version? '.json.pid'? '.jpid'?
|
6
|
+
- json*L* pidfiles - first line is bare int, following may be json - now `head -n1 foo.pid` not cat
|
6
7
|
"""
|
7
8
|
import fcntl
|
8
9
|
import os
|
@@ -152,7 +153,12 @@ class Pidfile:
|
|
152
153
|
|
153
154
|
#
|
154
155
|
|
155
|
-
def write(
|
156
|
+
def write(
|
157
|
+
self,
|
158
|
+
pid: ta.Optional[int] = None,
|
159
|
+
*,
|
160
|
+
suffix: ta.Optional[str] = None,
|
161
|
+
) -> None:
|
156
162
|
self.acquire_lock()
|
157
163
|
|
158
164
|
if pid is None:
|
@@ -160,7 +166,11 @@ class Pidfile:
|
|
160
166
|
|
161
167
|
self._f.seek(0)
|
162
168
|
self._f.truncate()
|
163
|
-
self._f.write(
|
169
|
+
self._f.write('\n'.join([
|
170
|
+
str(pid),
|
171
|
+
*([suffix] if suffix is not None else []),
|
172
|
+
'',
|
173
|
+
]))
|
164
174
|
self._f.flush()
|
165
175
|
|
166
176
|
def clear(self) -> None:
|
@@ -171,14 +181,20 @@ class Pidfile:
|
|
171
181
|
|
172
182
|
#
|
173
183
|
|
174
|
-
def
|
184
|
+
def read_raw(self) -> ta.Optional[str]:
|
175
185
|
self.ensure_cannot_lock()
|
176
186
|
|
177
187
|
self._f.seek(0)
|
178
188
|
buf = self._f.read()
|
179
189
|
if not buf:
|
180
190
|
return None
|
181
|
-
return
|
191
|
+
return buf
|
192
|
+
|
193
|
+
def read(self) -> ta.Optional[int]:
|
194
|
+
buf = self.read_raw()
|
195
|
+
if not buf:
|
196
|
+
return None
|
197
|
+
return int(buf.splitlines()[0].strip())
|
182
198
|
|
183
199
|
def kill(self, sig: int = signal.SIGTERM) -> None:
|
184
200
|
if (pid := self.read()) is None:
|
omlish/os/signals.py
CHANGED
@@ -1,9 +1,13 @@
|
|
1
1
|
# ruff: noqa: UP006 UP007
|
2
2
|
# @omlish-lite
|
3
3
|
import signal
|
4
|
+
import typing as ta
|
4
5
|
|
5
6
|
|
6
|
-
def parse_signal(s: str) -> int:
|
7
|
+
def parse_signal(s: ta.Union[int, str]) -> int:
|
8
|
+
if isinstance(s, int):
|
9
|
+
return s
|
10
|
+
|
7
11
|
try:
|
8
12
|
return int(s)
|
9
13
|
except ValueError:
|
omlish/specs/jmespath/cli.py
CHANGED
omlish/sql/queries/rendering.py
CHANGED
@@ -16,11 +16,11 @@ def needs_parens(self, e: Expr) -> bool:
|
|
16
16
|
raise TypeError(e)
|
17
17
|
"""
|
18
18
|
import dataclasses as dc
|
19
|
-
import io
|
20
19
|
import typing as ta
|
21
20
|
|
22
21
|
from ... import dispatch
|
23
22
|
from ... import lang
|
23
|
+
from ...text import parts as tp
|
24
24
|
from ..params import ParamStyle
|
25
25
|
from ..params import make_params_preparer
|
26
26
|
from .base import Node
|
@@ -46,6 +46,12 @@ from .unary import UnaryOp
|
|
46
46
|
from .unary import UnaryOps
|
47
47
|
|
48
48
|
|
49
|
+
@dc.dataclass(frozen=True)
|
50
|
+
class RenderedQueryParts(lang.Final):
|
51
|
+
p: tp.Part
|
52
|
+
args: lang.Args
|
53
|
+
|
54
|
+
|
49
55
|
@dc.dataclass(frozen=True)
|
50
56
|
class RenderedQuery(lang.Final):
|
51
57
|
s: str
|
@@ -55,12 +61,11 @@ class RenderedQuery(lang.Final):
|
|
55
61
|
class Renderer(lang.Abstract):
|
56
62
|
def __init__(
|
57
63
|
self,
|
58
|
-
out: ta.TextIO,
|
59
64
|
*,
|
60
65
|
param_style: ParamStyle | None = None,
|
61
66
|
) -> None:
|
62
67
|
super().__init__()
|
63
|
-
|
68
|
+
|
64
69
|
self._param_style = param_style if param_style is not None else self.default_param_style
|
65
70
|
|
66
71
|
self._params_preparer = make_params_preparer(self._param_style)
|
@@ -71,18 +76,41 @@ class Renderer(lang.Abstract):
|
|
71
76
|
return self._params_preparer.prepare()
|
72
77
|
|
73
78
|
@dispatch.method
|
74
|
-
def render(self, o: ta.Any) ->
|
79
|
+
def render(self, o: ta.Any) -> tp.Part:
|
75
80
|
raise TypeError(o)
|
76
81
|
|
77
82
|
@classmethod
|
78
|
-
def
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
+
def render_query_parts(cls, o: ta.Any, *args: ta.Any, **kwargs: ta.Any) -> RenderedQueryParts:
|
84
|
+
r = cls(*args, **kwargs)
|
85
|
+
return RenderedQueryParts(
|
86
|
+
r.render(o),
|
87
|
+
r.args(),
|
88
|
+
)
|
89
|
+
|
90
|
+
@classmethod
|
91
|
+
def render_query(cls, o: ta.Any, *args: ta.Any, **kwargs: ta.Any) -> RenderedQuery:
|
92
|
+
rqp = cls.render_query_parts(o, *args, **kwargs)
|
93
|
+
return RenderedQuery(
|
94
|
+
tp.render(rqp.p),
|
95
|
+
rqp.args,
|
96
|
+
)
|
83
97
|
|
84
98
|
|
85
99
|
class StdRenderer(Renderer):
|
100
|
+
# parens
|
101
|
+
|
102
|
+
NEEDS_PAREN_TYPES: ta.AbstractSet[type[Node]] = {
|
103
|
+
Binary,
|
104
|
+
# IsNull,
|
105
|
+
# SelectExpr,
|
106
|
+
}
|
107
|
+
|
108
|
+
def needs_paren(self, node: Node) -> bool:
|
109
|
+
return type(node) in self.NEEDS_PAREN_TYPES
|
110
|
+
|
111
|
+
def paren(self, node: Node) -> tp.Part:
|
112
|
+
return tp.Wrap(self.render(node)) if self.needs_paren(node) else self.render(node)
|
113
|
+
|
86
114
|
# binary
|
87
115
|
|
88
116
|
BINARY_OP_TO_STR: ta.ClassVar[ta.Mapping[BinaryOp, str]] = {
|
@@ -103,55 +131,50 @@ class StdRenderer(Renderer):
|
|
103
131
|
}
|
104
132
|
|
105
133
|
@Renderer.render.register
|
106
|
-
def render_binary(self, o: Binary) ->
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
134
|
+
def render_binary(self, o: Binary) -> tp.Part:
|
135
|
+
return [
|
136
|
+
self.paren(o.l),
|
137
|
+
self.BINARY_OP_TO_STR[o.op],
|
138
|
+
self.paren(o.r),
|
139
|
+
]
|
112
140
|
|
113
141
|
# exprs
|
114
142
|
|
115
143
|
@Renderer.render.register
|
116
|
-
def render_literal(self, o: Literal) ->
|
117
|
-
|
144
|
+
def render_literal(self, o: Literal) -> tp.Part:
|
145
|
+
return repr(o.v)
|
118
146
|
|
119
147
|
@Renderer.render.register
|
120
|
-
def render_name_expr(self, o: NameExpr) ->
|
121
|
-
self.render(o.n)
|
148
|
+
def render_name_expr(self, o: NameExpr) -> tp.Part:
|
149
|
+
return self.render(o.n)
|
122
150
|
|
123
151
|
@Renderer.render.register
|
124
|
-
def render_param(self, o: Param) ->
|
125
|
-
self.
|
152
|
+
def render_param(self, o: Param) -> tp.Part:
|
153
|
+
return self._params_preparer.add(o.n if o.n is not None else id(o))
|
126
154
|
|
127
155
|
# idents
|
128
156
|
|
129
157
|
@Renderer.render.register
|
130
|
-
def render_ident(self, o: Ident) ->
|
131
|
-
|
158
|
+
def render_ident(self, o: Ident) -> tp.Part:
|
159
|
+
return f'"{o.s}"'
|
132
160
|
|
133
161
|
# inserts
|
134
162
|
|
135
163
|
@Renderer.render.register
|
136
|
-
def render_values(self, o: Values) ->
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
self.render(v)
|
142
|
-
self._out.write(')')
|
164
|
+
def render_values(self, o: Values) -> tp.Part:
|
165
|
+
return [
|
166
|
+
'values',
|
167
|
+
tp.Wrap(tp.List([self.render(v) for v in o.vs])),
|
168
|
+
]
|
143
169
|
|
144
170
|
@Renderer.render.register
|
145
|
-
def render_insert(self, o: Insert) ->
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
self.render(c)
|
153
|
-
self._out.write(') ')
|
154
|
-
self.render(o.data)
|
171
|
+
def render_insert(self, o: Insert) -> tp.Part:
|
172
|
+
return [
|
173
|
+
'insert into',
|
174
|
+
self.render(o.into),
|
175
|
+
tp.Wrap(tp.List([self.render(c) for c in o.columns])),
|
176
|
+
self.render(o.data),
|
177
|
+
]
|
155
178
|
|
156
179
|
# multis
|
157
180
|
|
@@ -161,32 +184,31 @@ class StdRenderer(Renderer):
|
|
161
184
|
}
|
162
185
|
|
163
186
|
@Renderer.render.register
|
164
|
-
def render_multi(self, o: Multi) ->
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
self._out.write(d)
|
170
|
-
self.render(e)
|
171
|
-
self._out.write(')')
|
187
|
+
def render_multi(self, o: Multi) -> tp.Part:
|
188
|
+
return tp.Wrap(tp.List(
|
189
|
+
[self.render(e) for e in o.es],
|
190
|
+
delimiter=' ' + self.MULTI_KIND_TO_STR[o.k], # FIXME: Part
|
191
|
+
))
|
172
192
|
|
173
193
|
# names
|
174
194
|
|
175
195
|
@Renderer.render.register
|
176
|
-
def render_name(self, o: Name) ->
|
196
|
+
def render_name(self, o: Name) -> tp.Part:
|
197
|
+
out: list[tp.Part] = []
|
177
198
|
for n, i in enumerate(o.ps):
|
178
199
|
if n:
|
179
|
-
|
180
|
-
self.render(i)
|
200
|
+
out.append('.')
|
201
|
+
out.append(self.render(i))
|
202
|
+
return tp.Concat(out)
|
181
203
|
|
182
204
|
# relations
|
183
205
|
|
184
206
|
@Renderer.render.register
|
185
|
-
def render_table(self, o: Table) ->
|
186
|
-
|
187
|
-
|
188
|
-
self.
|
189
|
-
|
207
|
+
def render_table(self, o: Table) -> tp.Part:
|
208
|
+
return [
|
209
|
+
self.render(o.n),
|
210
|
+
*(['as', self.render(o.a)] if o.a is not None else []),
|
211
|
+
]
|
190
212
|
|
191
213
|
JOIN_KIND_TO_STR: ta.ClassVar[ta.Mapping[JoinKind, str]] = {
|
192
214
|
JoinKind.DEFAULT: 'join',
|
@@ -202,38 +224,31 @@ class StdRenderer(Renderer):
|
|
202
224
|
}
|
203
225
|
|
204
226
|
@Renderer.render.register
|
205
|
-
def render_join(self, o: Join) ->
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
self._out.write(' on ')
|
213
|
-
self.render(o.c)
|
227
|
+
def render_join(self, o: Join) -> tp.Part:
|
228
|
+
return [
|
229
|
+
self.render(o.l),
|
230
|
+
self.JOIN_KIND_TO_STR[o.k],
|
231
|
+
self.render(o.r),
|
232
|
+
*(['on', self.render(o.c)] if o.c is not None else []),
|
233
|
+
]
|
214
234
|
|
215
235
|
# selects
|
216
236
|
|
217
237
|
@Renderer.render.register
|
218
|
-
def render_select_item(self, o: SelectItem) ->
|
219
|
-
|
220
|
-
|
221
|
-
self.
|
222
|
-
|
238
|
+
def render_select_item(self, o: SelectItem) -> tp.Part:
|
239
|
+
return [
|
240
|
+
self.render(o.v),
|
241
|
+
*(['as', self.render(o.a)] if o.a is not None else []),
|
242
|
+
]
|
223
243
|
|
224
244
|
@Renderer.render.register
|
225
|
-
def render_select(self, o: Select) ->
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
self.render(
|
231
|
-
|
232
|
-
self._out.write(' from ')
|
233
|
-
self.render(o.from_)
|
234
|
-
if o.where:
|
235
|
-
self._out.write(' where ')
|
236
|
-
self.render(o.where)
|
245
|
+
def render_select(self, o: Select) -> tp.Part:
|
246
|
+
return [
|
247
|
+
'select',
|
248
|
+
tp.List([self.render(i) for i in o.items]),
|
249
|
+
*(['from', self.render(o.from_)] if o.from_ is not None else []),
|
250
|
+
*(['where', self.render(o.where)] if o.where is not None else []),
|
251
|
+
]
|
237
252
|
|
238
253
|
# unary
|
239
254
|
|
@@ -247,12 +262,18 @@ class StdRenderer(Renderer):
|
|
247
262
|
}
|
248
263
|
|
249
264
|
@Renderer.render.register
|
250
|
-
def render_unary(self, o: Unary) ->
|
265
|
+
def render_unary(self, o: Unary) -> tp.Part:
|
251
266
|
pfx, sfx = self.UNARY_OP_TO_STR[o.op]
|
252
|
-
|
253
|
-
|
254
|
-
|
267
|
+
return tp.Concat([
|
268
|
+
pfx,
|
269
|
+
self.render(o.v),
|
270
|
+
sfx,
|
271
|
+
])
|
272
|
+
|
273
|
+
|
274
|
+
def render_parts(n: Node, **kwargs: ta.Any) -> RenderedQueryParts:
|
275
|
+
return StdRenderer.render_query_parts(n, **kwargs)
|
255
276
|
|
256
277
|
|
257
278
|
def render(n: Node, **kwargs: ta.Any) -> RenderedQuery:
|
258
|
-
return StdRenderer.
|
279
|
+
return StdRenderer.render_query(n, **kwargs)
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=vQTAIvR8OblSq-uP2GUfnbei0RnmAnM5j0T1-OToh9E,8253
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=bQqOi2ALumtKm7vdnP1J3xHEquOOa8I2437ZblRqbuU,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
|
@@ -136,14 +136,14 @@ omlish/codecs/funcs.py,sha256=p4imNt7TobyZVXWC-WhntHVu9KfJrO4QwdtPRh-cVOk,850
|
|
136
136
|
omlish/codecs/registry.py,sha256=2FnO5YP7ui1LzkguwESY0MP3WIdwgPTIJTM_4RyTOEg,3896
|
137
137
|
omlish/codecs/standard.py,sha256=eiZ4u9ep0XrA4Z_D1zJI0vmWyuN8HLrX4Se_r_Cq_ZM,60
|
138
138
|
omlish/codecs/text.py,sha256=JzrdwMpQPo2NBBg3K1EZszzQy5vEWmd82SIerJd4yeQ,5723
|
139
|
-
omlish/collections/__init__.py,sha256=
|
139
|
+
omlish/collections/__init__.py,sha256=fAGCii4OttPRee9q4AD-IfQpdsmoCdgPwYUMPgnJwCs,2140
|
140
140
|
omlish/collections/abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
|
141
141
|
omlish/collections/coerce.py,sha256=g68ROb_-5HgH-vI8612mU2S0FZ8-wp2ZHK5_Zy_kVC0,7037
|
142
142
|
omlish/collections/exceptions.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
|
143
|
-
omlish/collections/frozen.py,sha256=
|
144
|
-
omlish/collections/hasheq.py,sha256=
|
145
|
-
omlish/collections/identity.py,sha256=
|
146
|
-
omlish/collections/mappings.py,sha256=
|
143
|
+
omlish/collections/frozen.py,sha256=jQppK1pyQ3e_aAvw8OEKfnr7b0OB4RI5Qr1g9xXTZaQ,4137
|
144
|
+
omlish/collections/hasheq.py,sha256=SQdVICLZWKkYu4vUXrfmWBXO3i-jx01iM9IInDWkKfU,3664
|
145
|
+
omlish/collections/identity.py,sha256=1kdiByfzKHGQZgUg1vkwILt8oPPQgerGh0_HbLDdqKw,2835
|
146
|
+
omlish/collections/mappings.py,sha256=fCHQatlAstiZkWZiyIlOw637Yep7ce79EPPbJcWHHUA,2784
|
147
147
|
omlish/collections/ordered.py,sha256=tUAl99XHbSbzn7Hdh99jUBl27NcC2J7ZTI67slTMe5M,2333
|
148
148
|
omlish/collections/ranked.py,sha256=rg6DL36oOUiG5JQEAkGnT8b6f9mSndQlIovtt8GQj_w,2229
|
149
149
|
omlish/collections/unmodifiable.py,sha256=-zys__n6L7liWzhmHAIvfxprq7cUE5HoR3foGvXc_7I,4748
|
@@ -158,7 +158,7 @@ omlish/collections/persistent/treap.py,sha256=A09ZPacGyJlyRB-Wi4TNj3tE0w-RpFNliP
|
|
158
158
|
omlish/collections/persistent/treapmap.py,sha256=TxOM-ZRF5PK2xe5wRIhESNt7DGh9b_MeZfE7HLkCOs4,5804
|
159
159
|
omlish/collections/sorted/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
160
160
|
omlish/collections/sorted/skiplist.py,sha256=eU_cYQVnT-EZxv_dN9PYQZdOP0km5usEcOQRiJKL7Rw,5986
|
161
|
-
omlish/collections/sorted/sorted.py,sha256=
|
161
|
+
omlish/collections/sorted/sorted.py,sha256=euHJan3FqTYSCJGsVcYYRV-yhAAQ5_htnjymnNoVHRE,3319
|
162
162
|
omlish/concurrent/__init__.py,sha256=9p-s8MvBEYDqHIoYU3OYoe-Nni22QdkW7nhZGEukJTM,197
|
163
163
|
omlish/concurrent/executors.py,sha256=FYKCDYYuj-OgMa8quLsA47SfFNX3KDJvRENVk8NDsrA,1292
|
164
164
|
omlish/concurrent/futures.py,sha256=J2s9wYURUskqRJiBbAR0PNEAp1pXbIMYldOVBTQduQY,4239
|
@@ -183,13 +183,13 @@ omlish/daemons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
183
183
|
omlish/daemons/daemon.py,sha256=3Wkvu8M_EaCKSpKI5UN5OayRXV0oVdF62tBss9_hlr0,3479
|
184
184
|
omlish/daemons/launching.py,sha256=sNOYW939IGI4ZlLQ0bKxzXj6EyeOiwV7Upqhd5XfoHc,3747
|
185
185
|
omlish/daemons/reparent.py,sha256=7uJ9oPGt9Ud7uA8bDl_SHcuqjcsmXa3kkjp9jf29wOw,585
|
186
|
-
omlish/daemons/services.py,sha256=
|
186
|
+
omlish/daemons/services.py,sha256=YYp2SMkJ71WgzOcYSXjWHeAyKKxu3j1dfuJvWkl0Dgw,3492
|
187
187
|
omlish/daemons/spawning.py,sha256=psR73zOYjMKTqNpx1bMib8uU9wAZz62tw5TaWHrTdyY,5337
|
188
188
|
omlish/daemons/targets.py,sha256=00KmtlknMhQ5PyyVAhWl3rpeTMPym0GxvHHq6mYPZ7c,3051
|
189
189
|
omlish/daemons/waiting.py,sha256=RfgD1L33QQVbD2431dkKZGE4w6DUcGvYeRXXi8puAP4,1676
|
190
|
-
omlish/dataclasses/__init__.py,sha256=
|
190
|
+
omlish/dataclasses/__init__.py,sha256=9YNCTSCKvNxy0rwxrlh-Sx0qCdn69ROxdDOnmNuKrH0,1640
|
191
191
|
omlish/dataclasses/static.py,sha256=6pZG2iTR9NN8pKm-5ukDABnaVlTKFOzMwkg-rbxURoo,7691
|
192
|
-
omlish/dataclasses/utils.py,sha256=
|
192
|
+
omlish/dataclasses/utils.py,sha256=BTXYyH0enSEP5kWxMnPTJ8_UPd7h4wF2RVPITNC8H4M,3872
|
193
193
|
omlish/dataclasses/impl/LICENSE,sha256=Oy-B_iHRgcSZxZolbI4ZaEVdZonSaaqFNzv7avQdo78,13936
|
194
194
|
omlish/dataclasses/impl/__init__.py,sha256=zqGBC5gSbjJxaqG_zS1LL1PX-zAfhIua8UqOE4IwO2k,789
|
195
195
|
omlish/dataclasses/impl/api.py,sha256=RhU4f50GVdn-dxilia8NA3F7VIm2R5z78pFfpIVXPRQ,6635
|
@@ -320,7 +320,7 @@ omlish/http/consts.py,sha256=7BJ4D1MdIvqBcepkgCfBFHolgTwbOlqsOEiee_IjxOA,2289
|
|
320
320
|
omlish/http/cookies.py,sha256=uuOYlHR6e2SC3GM41V0aozK10nef9tYg83Scqpn5-HM,6351
|
321
321
|
omlish/http/dates.py,sha256=Otgp8wRxPgNGyzx8LFowu1vC4EKJYARCiAwLFncpfHM,2875
|
322
322
|
omlish/http/encodings.py,sha256=w2WoKajpaZnQH8j-IBvk5ZFL2O2pAU_iBvZnkocaTlw,164
|
323
|
-
omlish/http/handlers.py,sha256=
|
323
|
+
omlish/http/handlers.py,sha256=ub0TiDCjFIVCUQZZZuDEB3tzJx6T6l_AMRl4s0ZrNy4,3896
|
324
324
|
omlish/http/headers.py,sha256=ZMmjrEiYjzo0YTGyK0YsvjdwUazktGqzVVYorY4fd44,5081
|
325
325
|
omlish/http/json.py,sha256=9XwAsl4966Mxrv-1ytyCqhcE6lbBJw-0_tFZzGszgHE,7440
|
326
326
|
omlish/http/jwt.py,sha256=6Rigk1WrJ059DY4jDIKnxjnChWb7aFdermj2AI2DSvk,4346
|
@@ -399,10 +399,11 @@ omlish/iterators/iterators.py,sha256=ghI4dO6WPyyFOLTIIMaHQ_IOy2xXaFpGPqveZ5YGIBU
|
|
399
399
|
omlish/iterators/recipes.py,sha256=53mkexitMhkwXQZbL6DrhpT0WePQ_56uXd5Jaw3DfzI,467
|
400
400
|
omlish/iterators/tools.py,sha256=Pi4ybXytUXVZ3xwK89xpPImQfYYId9p1vIFQvVqVLqA,2551
|
401
401
|
omlish/iterators/unique.py,sha256=0jAX3kwzVfRNhe0Tmh7kVP_Q2WBIn8POo_O-rgFV0rQ,1390
|
402
|
-
omlish/lang/__init__.py,sha256=
|
403
|
-
omlish/lang/attrs.py,sha256=
|
402
|
+
omlish/lang/__init__.py,sha256=7QEQKrw1ojkB3kwFQrh-p7EH-UQI7sMemtxNX2OTTJI,4685
|
403
|
+
omlish/lang/attrs.py,sha256=fofCKN0X8TMu1yGqHpLpNLih9r9HWl3D3Vn3b6O791w,3891
|
404
404
|
omlish/lang/clsdct.py,sha256=sJYadm-fwzti-gsi98knR5qQUxriBmOqQE_qz3RopNk,1743
|
405
405
|
omlish/lang/cmp.py,sha256=5vbzWWbqdzDmNKAGL19z6ZfUKe5Ci49e-Oegf9f4BsE,1346
|
406
|
+
omlish/lang/collections.py,sha256=I0x5BI_cjTbL-uunoKFWA_RfNEz3gyuPkYIajdTH1CA,1236
|
406
407
|
omlish/lang/contextmanagers.py,sha256=UPH6daYwSP9cH5AfSVsJyEHk1UURMGhVPM5ZRhp_Hvw,7576
|
407
408
|
omlish/lang/datetimes.py,sha256=ehI_DhQRM-bDxAavnp470XcekbbXc4Gdw9y1KpHDJT0,223
|
408
409
|
omlish/lang/descriptors.py,sha256=mZ2h9zJ__MMpw8hByjRbAiONcwfVb6GD0btNnVi8C5w,6573
|
@@ -419,7 +420,7 @@ omlish/lang/strings.py,sha256=egdv8PxLNG40-5V93agP5j2rBUDIsahCx048zV7uEbU,4690
|
|
419
420
|
omlish/lang/sys.py,sha256=UoZz_PJYVKLQAKqYxxn-LHz1okK_38I__maZgnXMcxU,406
|
420
421
|
omlish/lang/typing.py,sha256=Zdad9Zv0sa-hIaUXPrzPidT7sDVpRcussAI7D-j-I1c,3296
|
421
422
|
omlish/lang/cached/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
422
|
-
omlish/lang/cached/function.py,sha256=
|
423
|
+
omlish/lang/cached/function.py,sha256=5pS3FCTxOradeMsrKg7JbXHsWhqdaa2C34apkXkwqqU,8785
|
423
424
|
omlish/lang/cached/property.py,sha256=kzbao_35PlszdK_9oJBWrMmFFlVK_Xhx7YczHhTJ6cc,2764
|
424
425
|
omlish/lang/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
425
426
|
omlish/lang/classes/abstract.py,sha256=bIcuAetV_aChhpSURypmjjcqP07xi20uVYPKh1kvQNU,3710
|
@@ -476,7 +477,7 @@ omlish/manifests/base.py,sha256=D1WvJYcBR_njkc0gpALpFCWh1h3agb9qgqphnbbPlm4,935
|
|
476
477
|
omlish/manifests/load.py,sha256=9mdsS3egmSX9pymO-m-y2Fhs4p6ruOdbsYaKT1-1Hwg,6655
|
477
478
|
omlish/manifests/static.py,sha256=7YwOVh_Ek9_aTrWsWNO8kWS10_j4K7yv3TpXZSHsvDY,501
|
478
479
|
omlish/manifests/types.py,sha256=IOt9dOe0r8okCHSL82ryi3sn4VZ6AT80g_QQR6oZtCE,306
|
479
|
-
omlish/marshal/__init__.py,sha256=
|
480
|
+
omlish/marshal/__init__.py,sha256=8jKG43_yJzX6MP0RMUJeLUn-BnWiMXDjpKH5-DnAIT4,3109
|
480
481
|
omlish/marshal/base.py,sha256=s1wQRPG2Y6kH0qQXoL3d60ldYaVTqLuFs0NdbYXwAGg,6842
|
481
482
|
omlish/marshal/exceptions.py,sha256=jwQWn4LcPnadT2KRI_1JJCOSkwWh0yHnYK9BmSkNN4U,302
|
482
483
|
omlish/marshal/factories.py,sha256=Q926jSVjaQLEmStnHLhm_c_vqEysN1LnDCwAsFLIzXw,2970
|
@@ -493,18 +494,19 @@ omlish/marshal/composite/mappings.py,sha256=92oAqYzzTdRNhFDtmukpJd8anoi3pt2nX5Xh
|
|
493
494
|
omlish/marshal/composite/maybes.py,sha256=4rxTv769Uk4gQGAnE6urVnMscF1vhcnwqP_lm5QzSoM,2211
|
494
495
|
omlish/marshal/composite/newtypes.py,sha256=lYCacdR2BlLWMT1kc8o08UjsmJ6aYlAHkrzG8BozWCM,849
|
495
496
|
omlish/marshal/composite/optionals.py,sha256=iQgSrb9Xyb_IP81YREAZ0xKYXImLgMILGLBnYL2lFWw,1508
|
497
|
+
omlish/marshal/composite/wrapped.py,sha256=F0pMC2WtJaPnOmzLT1FKFo9Tkzy1XbdBm9iROyp-myw,745
|
496
498
|
omlish/marshal/objects/__init__.py,sha256=F4wej8L_tedC8ETYxAnmKfdPR9TjsqIus9Z3nZofYuc,182
|
497
|
-
omlish/marshal/objects/dataclasses.py,sha256=
|
499
|
+
omlish/marshal/objects/dataclasses.py,sha256=sz2GhOEL0wPQj1sNrH0dRN7MefiI72iaDPXIrdtgA64,8491
|
498
500
|
omlish/marshal/objects/helpers.py,sha256=85GZp4h3Yo0GYGmnZpKgNxkWnSk8h2R21nfDLU2DtM0,1110
|
499
501
|
omlish/marshal/objects/marshal.py,sha256=rdZsDWKgLBZxV0ZQlwHTJv9iUg0lC57trJHBOFKvuLo,2636
|
500
502
|
omlish/marshal/objects/metadata.py,sha256=QVD7DRhXbLda_Edgpc3OD1xT9fthmeaaj6l_nTE1PMM,3307
|
501
|
-
omlish/marshal/objects/namedtuples.py,sha256=
|
503
|
+
omlish/marshal/objects/namedtuples.py,sha256=nW3IA21PJ7D62_orr2qxnRt794N1TcFqwOO2rPOglmw,2842
|
502
504
|
omlish/marshal/objects/unmarshal.py,sha256=-83sSgL6WX6C3JfXZr64ZLYi3SsJC9kyiGAbEQbVHQI,3620
|
503
505
|
omlish/marshal/polymorphism/__init__.py,sha256=e2UTrSL0qp7w_1vkdxDWd7sXlWhep2KPV49-BB64ma8,130
|
504
|
-
omlish/marshal/polymorphism/marshal.py,sha256=
|
506
|
+
omlish/marshal/polymorphism/marshal.py,sha256=A-fhr4adRDbis3GwGp2fefwT68YT3A4HyogQbMCH69E,2248
|
505
507
|
omlish/marshal/polymorphism/metadata.py,sha256=hbXqkYKXhfJeMllzI0Ubeeqbq201khVN8uprgVhMpHM,3046
|
506
508
|
omlish/marshal/polymorphism/unions.py,sha256=YwsK9T3okGiHj88LTFNdUvuH7VkCsD-aTnZseKzhpdA,4350
|
507
|
-
omlish/marshal/polymorphism/unmarshal.py,sha256=
|
509
|
+
omlish/marshal/polymorphism/unmarshal.py,sha256=NnNQrJv85tQGkhC4MfvCTOBw7SXRbNNQOlTBXLiup4A,2439
|
508
510
|
omlish/marshal/singular/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
509
511
|
omlish/marshal/singular/base64.py,sha256=gQIkFN60lNEuSiu3MDQFoHwMZTtzDbrBRtNpFZ2HXew,1098
|
510
512
|
omlish/marshal/singular/datetimes.py,sha256=1PDVFF6TGkGxGUno8TaFGRof0DQUookYf_X2Nl8T4V0,3723
|
@@ -534,7 +536,7 @@ omlish/os/journald.py,sha256=2nI8Res1poXkbLc31--MPUlzYMESnCcPUkIxDOCjZW0,3903
|
|
534
536
|
omlish/os/linux.py,sha256=whJ6scwMKSFBdXiVhJW0BCpJV4jOGMr-a_a3Bhwz6Ls,18938
|
535
537
|
omlish/os/mangle.py,sha256=M0v-SDt4TMnL68I45GekQrUaXkTIILXIlPdqRxKBTKM,524
|
536
538
|
omlish/os/paths.py,sha256=hqPiyg_eYaRoIVPdAeX4oeLEV4Kpln_XsH0tHvbOf8Q,844
|
537
|
-
omlish/os/signals.py,sha256=
|
539
|
+
omlish/os/signals.py,sha256=_ycu36jyOAfm1YnEOoEql6w3R5sJ-3pk94NEOvXeGHo,347
|
538
540
|
omlish/os/sizes.py,sha256=ohkALLvqSqBX4iR-7DMKJ4pfOCRdZXV8htH4QywUNM0,152
|
539
541
|
omlish/os/temp.py,sha256=P97KiVeNB7rfGn4tlgU5ro86JUxAsiphLMlxsjQgfB0,1198
|
540
542
|
omlish/os/deathpacts/__init__.py,sha256=IFJkHVWff-VhBbQX38th1RlmjUF2ptKh5TPIzP9Ei2M,229
|
@@ -545,7 +547,7 @@ omlish/os/pidfiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuF
|
|
545
547
|
omlish/os/pidfiles/__main__.py,sha256=AF8TwjK4xgHVnoLAP9dIWgKvT0vGhHJlfDW0tKZ7tx4,200
|
546
548
|
omlish/os/pidfiles/cli.py,sha256=2SSsP4O3VdpsDIMAkWgWSjh_YNIPzCD9l5LNN2qrIjo,2074
|
547
549
|
omlish/os/pidfiles/manager.py,sha256=qSEwNaWT1KOAnU0KxliwvU_uowme5jyf1FyIPsGwnTY,2391
|
548
|
-
omlish/os/pidfiles/pidfile.py,sha256=
|
550
|
+
omlish/os/pidfiles/pidfile.py,sha256=v0p5NTW8tFv1frCBzgjRkXnljsw8PQ1exfc7kjZJ5L8,4359
|
549
551
|
omlish/os/pidfiles/pinning.py,sha256=v9RlJ4BnJZcaZZXiiRqbmzLluaSOkeeEb_WrbKEClBQ,6643
|
550
552
|
omlish/reflect/__init__.py,sha256=Er2yBHibVO16hFNA1szQF2_f43Y3HRCBWtS-fjsOIYc,798
|
551
553
|
omlish/reflect/inspect.py,sha256=WCo2YpBYauKw6k758FLlZ_H4Q05rgVPs96fEv9w6zHQ,1538
|
@@ -600,7 +602,7 @@ omlish/specs/jmespath/LICENSE,sha256=IH-ZZlZkS8XMkf_ubNVD1aYHQ2l_wd0tmHtXrCcYpRU
|
|
600
602
|
omlish/specs/jmespath/__init__.py,sha256=9tsrquw1kXe1KAhTP3WeL0GlGBiTguQVxsC-lUYTWP4,2087
|
601
603
|
omlish/specs/jmespath/__main__.py,sha256=wIXm6bs08etNG_GZlN2rBkADPb0rKfL2HSkm8spnpxw,200
|
602
604
|
omlish/specs/jmespath/ast.py,sha256=XhcUGodHIdsY3-hVZEfpeW6LBehRjLbxVFXkMfZhRdk,5386
|
603
|
-
omlish/specs/jmespath/cli.py,sha256=
|
605
|
+
omlish/specs/jmespath/cli.py,sha256=6lCzF3wtFvcPGFjZuq9erypFTpX2Xzu4XtKSbV1meG4,2162
|
604
606
|
omlish/specs/jmespath/exceptions.py,sha256=Co1HiUBPFNwFgZY3FV_ayuZoSgZIAmDcImImxauYNxc,4435
|
605
607
|
omlish/specs/jmespath/functions.py,sha256=lE_MlW5rDQirDCE9HtcAG-17kuHhH36RaPaQfk97xDY,22595
|
606
608
|
omlish/specs/jmespath/lexer.py,sha256=hlPGCXPzGhd9ySj-z2cGTbyC9z3e0Io78IMYJZSEwNk,12647
|
@@ -668,8 +670,7 @@ omlish/sql/queries/names.py,sha256=4sDvgRobMEt_6mDeuYVbCqHzLCOwpXUdEyyB4-QjxKo,1
|
|
668
670
|
omlish/sql/queries/ops.py,sha256=B7IDfjr2DW5LJhWoNaY1WW90BJhe5ZtmxIELhWXbW-0,129
|
669
671
|
omlish/sql/queries/params.py,sha256=iR8tnetkZFWY378iUbPe08d86g-Wf1J3YqfZr_KhIwQ,1175
|
670
672
|
omlish/sql/queries/relations.py,sha256=7YrEC9IjoVpRGLAFKRSRsHHnTmx-g7hBNXsOgP2HOuI,2998
|
671
|
-
omlish/sql/queries/rendering.py,sha256=
|
672
|
-
omlish/sql/queries/rendering2.py,sha256=S7BD7i2tMEWdxOtvw-udWfk5nei-vV3hUghR7qEIL-I,6469
|
673
|
+
omlish/sql/queries/rendering.py,sha256=3oSwzx713J81V0JM4FnVgNpeHjaenoWrds41M9j__Dg,7328
|
673
674
|
omlish/sql/queries/selects.py,sha256=RFySZ9sb-nE29QrLLbQ7JYZW_V_ifaFTcl-RQTgQncY,1369
|
674
675
|
omlish/sql/queries/std.py,sha256=J2ZDfDyLzRm8q5-TLAN6I_qjhs-7RpfW23yuCYYLf5k,643
|
675
676
|
omlish/sql/queries/stmts.py,sha256=pBqwD7dRlqMu6uh6vR3xaWOEgbZCcFWbOQ9ryYd17T4,441
|
@@ -732,9 +733,9 @@ omlish/text/mangle.py,sha256=kfzFLfvepH-chl1P89_mdc5vC4FSqyPA2aVtgzuB8IY,1133
|
|
732
733
|
omlish/text/minja.py,sha256=jZC-fp3Xuhx48ppqsf2Sf1pHbC0t8XBB7UpUUoOk2Qw,5751
|
733
734
|
omlish/text/parts.py,sha256=JkNZpyR2tv2CNcTaWJJhpQ9E4F0yPR8P_YfDbZfMtwQ,6182
|
734
735
|
omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
|
735
|
-
omlish-0.0.0.
|
736
|
-
omlish-0.0.0.
|
737
|
-
omlish-0.0.0.
|
738
|
-
omlish-0.0.0.
|
739
|
-
omlish-0.0.0.
|
740
|
-
omlish-0.0.0.
|
736
|
+
omlish-0.0.0.dev247.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
737
|
+
omlish-0.0.0.dev247.dist-info/METADATA,sha256=82nI3LSDtkEUH8RynMRyrECBuyL-TP_WYtoC8UNk_OU,4176
|
738
|
+
omlish-0.0.0.dev247.dist-info/WHEEL,sha256=52BFRY2Up02UkjOa29eZOS2VxUrpPORXg1pkohGGUS8,91
|
739
|
+
omlish-0.0.0.dev247.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
740
|
+
omlish-0.0.0.dev247.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
741
|
+
omlish-0.0.0.dev247.dist-info/RECORD,,
|