omlish 0.0.0.dev229__py3-none-any.whl → 0.0.0.dev231__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
Files changed (58) hide show
  1. omlish/__about__.py +2 -2
  2. omlish/collections/__init__.py +15 -15
  3. omlish/collections/frozen.py +0 -2
  4. omlish/collections/identity.py +0 -3
  5. omlish/collections/indexed.py +0 -2
  6. omlish/collections/mappings.py +0 -3
  7. omlish/collections/ordered.py +0 -2
  8. omlish/collections/persistent/__init__.py +0 -0
  9. omlish/collections/sorted/__init__.py +0 -0
  10. omlish/collections/{skiplist.py → sorted/skiplist.py} +0 -1
  11. omlish/collections/{sorted.py → sorted/sorted.py} +2 -5
  12. omlish/collections/unmodifiable.py +0 -2
  13. omlish/daemons/__init__.py +0 -0
  14. omlish/daemons/daemon.py +200 -0
  15. omlish/daemons/reparent.py +16 -0
  16. omlish/daemons/spawning.py +166 -0
  17. omlish/daemons/targets.py +89 -0
  18. omlish/daemons/waiting.py +95 -0
  19. omlish/dispatch/dispatch.py +4 -1
  20. omlish/dispatch/methods.py +4 -0
  21. omlish/formats/json/__init__.py +5 -0
  22. omlish/io/compress/brotli.py +3 -3
  23. omlish/io/fdio/__init__.py +3 -0
  24. omlish/lang/__init__.py +0 -2
  25. omlish/lang/contextmanagers.py +15 -10
  26. omlish/libc.py +2 -4
  27. omlish/lite/timeouts.py +1 -1
  28. omlish/marshal/__init__.py +10 -10
  29. omlish/marshal/base.py +1 -1
  30. omlish/marshal/standard.py +2 -2
  31. omlish/marshal/trivial/__init__.py +0 -0
  32. omlish/marshal/{forbidden.py → trivial/forbidden.py} +7 -7
  33. omlish/marshal/{nop.py → trivial/nop.py} +5 -5
  34. omlish/os/deathpacts/__init__.py +15 -0
  35. omlish/os/deathpacts/base.py +76 -0
  36. omlish/os/deathpacts/heartbeatfile.py +85 -0
  37. omlish/os/{death.py → deathpacts/pipe.py} +20 -90
  38. omlish/os/forkhooks.py +55 -31
  39. omlish/os/pidfiles/manager.py +11 -44
  40. omlish/os/pidfiles/pidfile.py +18 -1
  41. omlish/reflect/__init__.py +1 -0
  42. omlish/reflect/inspect.py +43 -0
  43. omlish/sql/queries/__init__.py +4 -4
  44. omlish/sql/queries/rendering2.py +248 -0
  45. omlish/text/parts.py +26 -23
  46. {omlish-0.0.0.dev229.dist-info → omlish-0.0.0.dev231.dist-info}/METADATA +1 -1
  47. {omlish-0.0.0.dev229.dist-info → omlish-0.0.0.dev231.dist-info}/RECORD +57 -45
  48. omlish/formats/json/delimted.py +0 -4
  49. /omlish/collections/{persistent.py → persistent/persistent.py} +0 -0
  50. /omlish/collections/{treap.py → persistent/treap.py} +0 -0
  51. /omlish/collections/{treapmap.py → persistent/treapmap.py} +0 -0
  52. /omlish/marshal/{utils.py → proxy.py} +0 -0
  53. /omlish/marshal/{singular → trivial}/any.py +0 -0
  54. /omlish/sql/queries/{building.py → std.py} +0 -0
  55. {omlish-0.0.0.dev229.dist-info → omlish-0.0.0.dev231.dist-info}/LICENSE +0 -0
  56. {omlish-0.0.0.dev229.dist-info → omlish-0.0.0.dev231.dist-info}/WHEEL +0 -0
  57. {omlish-0.0.0.dev229.dist-info → omlish-0.0.0.dev231.dist-info}/entry_points.txt +0 -0
  58. {omlish-0.0.0.dev229.dist-info → omlish-0.0.0.dev231.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,248 @@
1
+ """
2
+ TODO:
3
+ - minimal parens
4
+ - text.parts
5
+ - QuoteStyle
6
+ - ParamStyle
7
+
8
+ ==
9
+
10
+ def needs_parens(self, e: Expr) -> bool:
11
+ if isinstance(e, (Literal, Ident, Name)):
12
+ return True
13
+ elif isinstance(e, Expr):
14
+ return False
15
+ else:
16
+ raise TypeError(e)
17
+ """
18
+ import dataclasses as dc
19
+ import typing as ta
20
+
21
+ from ... import dispatch
22
+ from ... import lang
23
+ from ...text import parts as tp
24
+ from ..params import ParamStyle
25
+ from ..params import make_params_preparer
26
+ from .base import Node
27
+ from .binary import Binary
28
+ from .binary import BinaryOp
29
+ from .binary import BinaryOps
30
+ from .exprs import Literal
31
+ from .exprs import NameExpr
32
+ from .idents import Ident
33
+ from .inserts import Insert
34
+ from .inserts import Values
35
+ from .multi import Multi
36
+ from .multi import MultiKind
37
+ from .names import Name
38
+ from .params import Param
39
+ from .relations import Join
40
+ from .relations import JoinKind
41
+ from .relations import Table
42
+ from .selects import Select
43
+ from .selects import SelectItem
44
+ from .unary import Unary
45
+ from .unary import UnaryOp
46
+ from .unary import UnaryOps
47
+
48
+
49
+ @dc.dataclass(frozen=True)
50
+ class RenderedQuery(lang.Final):
51
+ t: tp.Part
52
+ args: lang.Args
53
+
54
+
55
+ class Renderer(lang.Abstract):
56
+ def __init__(
57
+ self,
58
+ *,
59
+ param_style: ParamStyle | None = None,
60
+ ) -> None:
61
+ super().__init__()
62
+
63
+ self._param_style = param_style if param_style is not None else self.default_param_style
64
+
65
+ self._params_preparer = make_params_preparer(self._param_style)
66
+
67
+ default_param_style: ta.ClassVar[ParamStyle] = ParamStyle.PYFORMAT
68
+
69
+ def args(self) -> lang.Args:
70
+ return self._params_preparer.prepare()
71
+
72
+ @dispatch.method
73
+ def render(self, o: ta.Any) -> tp.Part:
74
+ raise TypeError(o)
75
+
76
+
77
+ class StdRenderer(Renderer):
78
+ # parens
79
+
80
+ NEEDS_PAREN_TYPES: ta.AbstractSet[type[Node]] = {
81
+ Binary,
82
+ # IsNull,
83
+ # SelectExpr,
84
+ }
85
+
86
+ def needs_paren(self, node: Node) -> bool:
87
+ return type(node) in self.NEEDS_PAREN_TYPES
88
+
89
+ def paren(self, node: Node) -> tp.Part:
90
+ return tp.Wrap(self.render(node)) if self.needs_paren(node) else self.render(node)
91
+
92
+ # binary
93
+
94
+ BINARY_OP_TO_STR: ta.ClassVar[ta.Mapping[BinaryOp, str]] = {
95
+ BinaryOps.EQ: '=',
96
+ BinaryOps.NE: '!=',
97
+ BinaryOps.LT: '<',
98
+ BinaryOps.LE: '<=',
99
+ BinaryOps.GT: '>',
100
+ BinaryOps.GE: '>=',
101
+
102
+ BinaryOps.ADD: '+',
103
+ BinaryOps.SUB: '-',
104
+ BinaryOps.MUL: '*',
105
+ BinaryOps.DIV: '/',
106
+ BinaryOps.MOD: '%',
107
+
108
+ BinaryOps.CONCAT: '||',
109
+ }
110
+
111
+ @Renderer.render.register
112
+ def render_binary(self, o: Binary) -> tp.Part:
113
+ return [
114
+ self.paren(o.l),
115
+ self.BINARY_OP_TO_STR[o.op],
116
+ self.paren(o.r),
117
+ ]
118
+
119
+ # exprs
120
+
121
+ @Renderer.render.register
122
+ def render_literal(self, o: Literal) -> tp.Part:
123
+ return repr(o.v)
124
+
125
+ @Renderer.render.register
126
+ def render_name_expr(self, o: NameExpr) -> tp.Part:
127
+ return self.render(o.n)
128
+
129
+ @Renderer.render.register
130
+ def render_param(self, o: Param) -> tp.Part:
131
+ return self._params_preparer.add(o.n if o.n is not None else id(o))
132
+
133
+ # idents
134
+
135
+ @Renderer.render.register
136
+ def render_ident(self, o: Ident) -> tp.Part:
137
+ return f'"{o.s}"'
138
+
139
+ # inserts
140
+
141
+ @Renderer.render.register
142
+ def render_values(self, o: Values) -> tp.Part:
143
+ return [
144
+ 'values',
145
+ tp.Wrap(tp.List([self.render(v) for v in o.vs])),
146
+ ]
147
+
148
+ @Renderer.render.register
149
+ def render_insert(self, o: Insert) -> tp.Part:
150
+ return [
151
+ 'insert into',
152
+ self.render(o.into),
153
+ tp.Wrap(tp.List([self.render(c) for c in o.columns])),
154
+ ]
155
+
156
+ # multis
157
+
158
+ MULTI_KIND_TO_STR: ta.ClassVar[ta.Mapping[MultiKind, str]] = {
159
+ MultiKind.AND: 'and',
160
+ MultiKind.OR: 'or',
161
+ }
162
+
163
+ @Renderer.render.register
164
+ def render_multi(self, o: Multi) -> tp.Part:
165
+ return tp.Wrap(tp.List(
166
+ [self.render(e) for e in o.es],
167
+ delimiter=' ' + self.MULTI_KIND_TO_STR[o.k], # FIXME: Part
168
+ ))
169
+
170
+ # names
171
+
172
+ @Renderer.render.register
173
+ def render_name(self, o: Name) -> tp.Part:
174
+ out: list[tp.Part] = []
175
+ for n, i in enumerate(o.ps):
176
+ if n:
177
+ out.append('.')
178
+ out.append(self.render(i))
179
+ return tp.Concat(out)
180
+
181
+ # relations
182
+
183
+ @Renderer.render.register
184
+ def render_table(self, o: Table) -> tp.Part:
185
+ return [
186
+ self.render(o.n),
187
+ *(['as', self.render(o.a)] if o.a is not None else []),
188
+ ]
189
+
190
+ JOIN_KIND_TO_STR: ta.ClassVar[ta.Mapping[JoinKind, str]] = {
191
+ JoinKind.DEFAULT: 'join',
192
+ JoinKind.INNER: 'inner join',
193
+ JoinKind.LEFT: 'left join',
194
+ JoinKind.LEFT_OUTER: 'left outer join',
195
+ JoinKind.RIGHT: 'right join',
196
+ JoinKind.RIGHT_OUTER: 'right outer join',
197
+ JoinKind.FULL: 'full join',
198
+ JoinKind.FULL_OUTER: 'full outer join',
199
+ JoinKind.CROSS: 'cross join',
200
+ JoinKind.NATURAL: 'natural join',
201
+ }
202
+
203
+ @Renderer.render.register
204
+ def render_join(self, o: Join) -> tp.Part:
205
+ return [
206
+ self.render(o.l),
207
+ self.JOIN_KIND_TO_STR[o.k],
208
+ self.render(o.r),
209
+ *(['on', self.render(o.c)] if o.c is not None else []),
210
+ ]
211
+
212
+ # selects
213
+
214
+ @Renderer.render.register
215
+ def render_select_item(self, o: SelectItem) -> tp.Part:
216
+ return [
217
+ self.render(o.v),
218
+ *(['as', self.render(o.a)] if o.a is not None else []),
219
+ ]
220
+
221
+ @Renderer.render.register
222
+ def render_select(self, o: Select) -> tp.Part:
223
+ return [
224
+ 'select',
225
+ tp.List([self.render(i) for i in o.items]),
226
+ *(['from', self.render(o.from_)] if o.from_ is not None else []),
227
+ *(['where', self.render(o.where)] if o.where is not None else []),
228
+ ]
229
+
230
+ # unary
231
+
232
+ UNARY_OP_TO_STR: ta.ClassVar[ta.Mapping[UnaryOp, tuple[str, str]]] = {
233
+ UnaryOps.NOT: ('not ', ''),
234
+ UnaryOps.IS_NULL: ('', ' is null'),
235
+ UnaryOps.IS_NOT_NULL: ('', ' is not null'),
236
+
237
+ UnaryOps.POS: ('+', ''),
238
+ UnaryOps.NEG: ('-', ''),
239
+ }
240
+
241
+ @Renderer.render.register
242
+ def render_unary(self, o: Unary) -> tp.Part:
243
+ pfx, sfx = self.UNARY_OP_TO_STR[o.op]
244
+ return tp.Concat([
245
+ pfx,
246
+ self.render(o.v),
247
+ sfx,
248
+ ])
omlish/text/parts.py CHANGED
@@ -3,10 +3,8 @@ import io
3
3
  import typing as ta
4
4
 
5
5
  from .. import check
6
- from .. import collections as col
7
6
  from .. import dataclasses as dc
8
7
  from .. import dispatch
9
- from .. import lang
10
8
 
11
9
 
12
10
  T = ta.TypeVar('T')
@@ -19,54 +17,54 @@ PartT = ta.TypeVar('PartT', bound=Part)
19
17
  ##
20
18
 
21
19
 
22
- def _check_part(o: PartT) -> PartT:
20
+ def check_part(o: PartT) -> PartT:
23
21
  if isinstance(o, (str, DataPart)):
24
22
  pass
25
23
  elif isinstance(o, ta.Sequence):
26
24
  for c in o:
27
- _check_part(c)
25
+ check_part(c)
28
26
  else:
29
27
  raise TypeError(o)
30
28
  return o
31
29
 
32
30
 
33
- def _check_opt_part(o: PartT | None) -> PartT | None:
31
+ def check_opt_part(o: PartT | None) -> PartT | None:
34
32
  if o is None:
35
33
  return None
36
- return _check_part(o)
34
+ return check_part(o)
37
35
 
38
36
 
39
37
  ##
40
38
 
41
39
 
42
- class DataPart(dc.Frozen, lang.Abstract):
40
+ class DataPart(dc.Case):
43
41
  pass
44
42
 
45
43
 
46
- class Wrap(DataPart, lang.Final):
47
- part: Part = dc.xfield(coerce=_check_part)
44
+ class Wrap(DataPart):
45
+ part: Part
48
46
  wrapper: tuple[str, str] = ('(', ')')
49
47
 
50
48
 
51
- class List(DataPart, lang.Final):
52
- parts: ta.Sequence[Part | None] = dc.xfield(coerce=col.seq_of(_check_opt_part))
53
- delimiter: str = dc.field(default=',') # FIXME: , check_type=str)
54
- trailer: bool = dc.field(default=False) # FIXME: , check_type=bool)
49
+ class List(DataPart):
50
+ parts: ta.Sequence[Part | None]
51
+ delimiter: str = ',' # FIXME: Part
52
+ trailer: bool = False
55
53
 
56
54
 
57
- class Concat(DataPart, lang.Final):
58
- parts: ta.Sequence[Part] = dc.xfield(coerce=col.seq_of(_check_part))
55
+ class Concat(DataPart):
56
+ parts: ta.Sequence[Part]
59
57
 
60
58
 
61
- class Block(DataPart, lang.Final):
62
- parts: ta.Sequence[Part] = dc.xfield(coerce=col.seq_of(_check_part))
59
+ class Block(DataPart):
60
+ parts: ta.Sequence[Part]
63
61
 
64
62
 
65
- class Section(DataPart, lang.Final):
66
- parts: ta.Sequence[Part] = dc.xfield(coerce=col.seq_of(_check_part))
63
+ class Section(DataPart):
64
+ parts: ta.Sequence[Part]
67
65
 
68
66
 
69
- class Meta(DataPart, lang.Final):
67
+ class Meta(DataPart):
70
68
  node: ta.Any
71
69
 
72
70
 
@@ -115,7 +113,6 @@ class PartTransform:
115
113
 
116
114
 
117
115
  class RemoveMetas(PartTransform):
118
-
119
116
  @PartTransform.__call__.register
120
117
  def __call__meta(self, part: Meta) -> Part:
121
118
  return []
@@ -140,7 +137,6 @@ def _drop_empties(it: ta.Iterable[T]) -> list[T]:
140
137
 
141
138
 
142
139
  class CompactPart(PartTransform):
143
-
144
140
  @PartTransform.__call__.register
145
141
  def __call__sequence(self, part: collections.abc.Sequence) -> Part:
146
142
  return _drop_empties(self(c) for c in part)
@@ -173,12 +169,19 @@ compact_part = CompactPart()
173
169
 
174
170
 
175
171
  class PartRenderer:
176
- def __init__(self, buf: io.StringIO, *, indent: str = ' ') -> None:
172
+ def __init__(
173
+ self,
174
+ buf: io.StringIO,
175
+ *,
176
+ indent: int | str = 4,
177
+ ) -> None:
177
178
  super().__init__()
178
179
 
179
180
  self._buf = buf
180
181
 
181
182
  self._indents = 0
183
+ if isinstance(indent, int):
184
+ indent = ' ' * indent
182
185
  self._indent = indent
183
186
 
184
187
  self._blank_lines = 0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omlish
3
- Version: 0.0.0.dev229
3
+ Version: 0.0.0.dev231
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=YGmAnUBszmosQQ_7Hh2wwtDiYdYZ4unNKYzOtALuels,7968
2
- omlish/__about__.py,sha256=v1jrq16HMURvVailEoEMurzFCMZNGPDHSAYFTfSJJtA,3380
2
+ omlish/__about__.py,sha256=ZBkJyvFWxZFNvvD7zkGGThXCoE7JjItJdlIadSjnLho,3380
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=ubu7lHwss5V4UznbejAI0qXhXahrU01MysuHOZI9C4U,8116
5
5
  omlish/cached.py,sha256=UI-XTFBwA6YXWJJJeBn-WkwBkfzDjLBBaZf4nIJA9y0,510
@@ -7,7 +7,7 @@ omlish/check.py,sha256=THqm6jD1a0skAO5EC8SOVg58yq96Vk5wcuruBkCYxyU,2016
7
7
  omlish/datetimes.py,sha256=HajeM1kBvwlTa-uR1TTZHmZ3zTPnnUr1uGGQhiO1XQ0,2152
8
8
  omlish/defs.py,sha256=9uUjJuVIbCBL3g14fyzAp-9gH935MFofvlfOGwcBIaM,4913
9
9
  omlish/dynamic.py,sha256=kIZokHHid8a0pIAPXMNiXrVJvJJyBnY49WP1a2m-HUQ,6525
10
- omlish/libc.py,sha256=20YdP3Sh45d-c13OMV0Od6FEAIxqKvU3d5kCOIW9xCQ,15650
10
+ omlish/libc.py,sha256=8K4c66YV1ziJerl5poAAYCmsV-VSsHkT3EHhPW04ufg,15639
11
11
  omlish/outcome.py,sha256=ABIE0zjjTyTNtn-ZqQ_9_mUzLiBQ3sDAyqc9JVD8N2k,7852
12
12
  omlish/runmodule.py,sha256=PWvuAaJ9wQQn6bx9ftEL3_d04DyotNn8dR_twm2pgw0,700
13
13
  omlish/shlex.py,sha256=bsW2XUD8GiMTUTDefJejZ5AyqT1pTgWMPD0BMoF02jE,248
@@ -134,27 +134,29 @@ omlish/codecs/funcs.py,sha256=p4imNt7TobyZVXWC-WhntHVu9KfJrO4QwdtPRh-cVOk,850
134
134
  omlish/codecs/registry.py,sha256=Ald3fs707cJsUovYjNmxdT2zAQworvDxwMFk7DBT8r0,3995
135
135
  omlish/codecs/standard.py,sha256=eiZ4u9ep0XrA4Z_D1zJI0vmWyuN8HLrX4Se_r_Cq_ZM,60
136
136
  omlish/codecs/text.py,sha256=JzrdwMpQPo2NBBg3K1EZszzQy5vEWmd82SIerJd4yeQ,5723
137
- omlish/collections/__init__.py,sha256=I-HDYNL1EF7vx-M3wMk5cTdX-lA4EnZtBF5wcd7Qbhg,2110
137
+ omlish/collections/__init__.py,sha256=ddzZS3C2rvDo65hspO9KlFsrinElxPWvYEgVyBUZdb0,2164
138
138
  omlish/collections/abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
139
139
  omlish/collections/coerce.py,sha256=g68ROb_-5HgH-vI8612mU2S0FZ8-wp2ZHK5_Zy_kVC0,7037
140
140
  omlish/collections/exceptions.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
141
- omlish/collections/frozen.py,sha256=DGxemj_pVID85tSBm-Wns_x4ov0wOEIT6X5bVgJtmkA,4152
141
+ omlish/collections/frozen.py,sha256=mxhd8pw5zIXUiRHiBVZWYCYT7wYDVG3tAY5PNU-WH-I,4150
142
142
  omlish/collections/hasheq.py,sha256=XcOCE6f2lXizDCOXxSX6vJv-rLcpDo2OWCYIKGSWuic,3697
143
- omlish/collections/identity.py,sha256=jhEpC8tnfh3Sg-MJff1Fp9eMydt150wits_UeVdctUk,2723
144
- omlish/collections/indexed.py,sha256=tFQsIWH4k9QqsF5VB7DsIVNsRThiQNx-ooRF36X_PnU,2203
145
- omlish/collections/mappings.py,sha256=laXV4WU1VZPGwaJQsJCQsmL3BVeUfELljTZ6a5sfg0s,3206
146
- omlish/collections/ordered.py,sha256=RzEC3fHvrDeJQSWThVDNYQKke263Vje1II5YwtDwT1Q,2335
147
- omlish/collections/persistent.py,sha256=KG471s0bhhReQrjlmX0xaN9HeAIcrtT264ddZCxsExo,875
148
- omlish/collections/skiplist.py,sha256=xjuKZtSScp1VnOi9lpf7I090vGp1DnjA5ELjFhMeGps,5987
149
- omlish/collections/sorted.py,sha256=E5ZOdNn7Jju1EcQ7CX2Ltk9StIXsBOzqvh7EsT3ZA2U,3354
150
- omlish/collections/treap.py,sha256=A09ZPacGyJlyRB-Wi4TNj3tE0w-RpFNliPgpDaa6Vwg,7719
151
- omlish/collections/treapmap.py,sha256=TxOM-ZRF5PK2xe5wRIhESNt7DGh9b_MeZfE7HLkCOs4,5804
152
- omlish/collections/unmodifiable.py,sha256=QmUEi9IBXqiM_KGgH2rqg15VmkHJo1MZ6kwq2twEMho,4750
143
+ omlish/collections/identity.py,sha256=SwnUE5D3v9RBjATDE1LUr_vO3Rb2NHcmTK64GZIcsO8,2720
144
+ omlish/collections/indexed.py,sha256=tLa88qgWGzTZGssMFgvhgraIEkNEUvcIk5p4yjNEquQ,2201
145
+ omlish/collections/mappings.py,sha256=YunNPyADrpitZGTJcXV0k4bmJddj1avDvEavz0coJWU,3203
146
+ omlish/collections/ordered.py,sha256=tUAl99XHbSbzn7Hdh99jUBl27NcC2J7ZTI67slTMe5M,2333
147
+ omlish/collections/unmodifiable.py,sha256=-zys__n6L7liWzhmHAIvfxprq7cUE5HoR3foGvXc_7I,4748
153
148
  omlish/collections/utils.py,sha256=Q0lHhNDokVxdOvApmu1QX5fABYwbn1ATiIwp194Ur_E,2889
154
149
  omlish/collections/cache/__init__.py,sha256=D1gO71VcwxFTZP9gAc9isHfg_TEdalwhsJcgGLvS9hg,233
155
150
  omlish/collections/cache/descriptor.py,sha256=t-1Gh4DTABDuNmeDJlpoW4LV3gi_uSlBd9ZfBINfYCM,5023
156
151
  omlish/collections/cache/impl.py,sha256=ySRU9UJG7jH9VPvuXdwZQ_rSqrleY-1mtie5Ml738wY,14755
157
152
  omlish/collections/cache/types.py,sha256=yNjwd6CGyTJQdxN2CQxFqqBAlcs1Z7vvNV-aU1K7p8E,685
153
+ omlish/collections/persistent/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
154
+ omlish/collections/persistent/persistent.py,sha256=KG471s0bhhReQrjlmX0xaN9HeAIcrtT264ddZCxsExo,875
155
+ omlish/collections/persistent/treap.py,sha256=A09ZPacGyJlyRB-Wi4TNj3tE0w-RpFNliPgpDaa6Vwg,7719
156
+ omlish/collections/persistent/treapmap.py,sha256=TxOM-ZRF5PK2xe5wRIhESNt7DGh9b_MeZfE7HLkCOs4,5804
157
+ omlish/collections/sorted/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
158
+ omlish/collections/sorted/skiplist.py,sha256=eU_cYQVnT-EZxv_dN9PYQZdOP0km5usEcOQRiJKL7Rw,5986
159
+ omlish/collections/sorted/sorted.py,sha256=3dl3MD3soVP9j2m4lnDZFYA9fho6Ic1MpMpYePZTW-0,3353
158
160
  omlish/concurrent/__init__.py,sha256=9p-s8MvBEYDqHIoYU3OYoe-Nni22QdkW7nhZGEukJTM,197
159
161
  omlish/concurrent/executors.py,sha256=FYKCDYYuj-OgMa8quLsA47SfFNX3KDJvRENVk8NDsrA,1292
160
162
  omlish/concurrent/futures.py,sha256=J2s9wYURUskqRJiBbAR0PNEAp1pXbIMYldOVBTQduQY,4239
@@ -173,6 +175,12 @@ omlish/configs/processing/matching.py,sha256=R64RxpPB1uX5Ztvvk2dQ2xi_xwlaxkxQgZw
173
175
  omlish/configs/processing/names.py,sha256=weHmaTclzgM9lUn3aBtw-kwZ3mc2N-CZlFg3Kd_UsKo,1093
174
176
  omlish/configs/processing/rewriting.py,sha256=v7PfHtuTn5v_5Y6Au7oMN2Z0nxAMy1iYyO5CXnTvZhs,4226
175
177
  omlish/configs/processing/strings.py,sha256=qFS2oh6z02IaM_q4lTKLdufzkJqAJ6J-Qjrz5S-QJoM,826
178
+ omlish/daemons/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
+ omlish/daemons/daemon.py,sha256=rK5T_ZbQPwwF-yLgS03fmJ0cZsVGSjTF5M4xSq_YiM0,5534
180
+ omlish/daemons/reparent.py,sha256=UaG2X6VJHJPOlUwHPNRH3aWGgF0Fg771jjO9IRPLlyY,280
181
+ omlish/daemons/spawning.py,sha256=cx00xeqSrfhlFbjCtKqaBHvMuHwB9hdjuKNHzAAo_dw,4030
182
+ omlish/daemons/targets.py,sha256=scq6BYgzi0H2apfgD74U0D8_msQuYAel3Qiij74YWVo,1501
183
+ omlish/daemons/waiting.py,sha256=RfgD1L33QQVbD2431dkKZGE4w6DUcGvYeRXXi8puAP4,1676
176
184
  omlish/dataclasses/__init__.py,sha256=D7I6ZJjEFeLN2re8oOZ_7JKWiG2plrPnaUFq3iEXYmQ,1553
177
185
  omlish/dataclasses/utils.py,sha256=N2seT8cJtfOv-41D7F3E-q4us-FCTQmnxxPv3dt1OcI,3796
178
186
  omlish/dataclasses/impl/LICENSE,sha256=Oy-B_iHRgcSZxZolbI4ZaEVdZonSaaqFNzv7avQdo78,13936
@@ -220,9 +228,9 @@ omlish/diag/replserver/server.py,sha256=Hnfp-aFgUtkWGyVXjWJ33HhhBrrtZnJu5FZRV6MT
220
228
  omlish/dispatch/__init__.py,sha256=GsiGJ91NKiQptSROtnCSkrZExBkvfDwYvdoTu5dBqF0,117
221
229
  omlish/dispatch/_dispatch2.py,sha256=v3tCNyxGpOwY8qTwdp54TlM8mG6OVwtQoUZfYJ_griU,1756
222
230
  omlish/dispatch/_dispatch3.py,sha256=Vnu5DfoPWFJLodudBqoZBXGTi2wYk-Az56MXJgdQvwc,2608
223
- omlish/dispatch/dispatch.py,sha256=8XQiLVoAq4u2oO0DnDSXQB9Q5qDk569l4CIFBqwDSyc,3847
231
+ omlish/dispatch/dispatch.py,sha256=p3-RqBf9RKZaNub1FMGHZkETewF43mU_rv4fYD_ERqU,4090
224
232
  omlish/dispatch/functions.py,sha256=S8ElsLi6DKxTdtFGigWaF0vAquwy2sK-3f4iRLaYq70,1522
225
- omlish/dispatch/methods.py,sha256=XHjwwC9Gn4iDWxbyLAcbdSwRgVaq-8Bnn5cAwf5oZdA,5403
233
+ omlish/dispatch/methods.py,sha256=Sg134xzG41-__czfnWdzDlXdsxVt7ELOq90N2E6NSzI,5501
226
234
  omlish/docker/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
227
235
  omlish/docker/all.py,sha256=2BqXMehpqj4j6-rVq_iOMcjoWgw4oyC3jWeHd_jPOZo,487
228
236
  omlish/docker/cli.py,sha256=gtb9kitVfGnd4cr587NsVVk8D5Ok5y5SAsqD_SwGrSA,2565
@@ -246,10 +254,9 @@ omlish/formats/yaml.py,sha256=ffOwGnLA6chdiFyaS7X0TBMGmHG9AoGudzKVWfQ1UOs,7389
246
254
  omlish/formats/ini/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
247
255
  omlish/formats/ini/codec.py,sha256=omuFg0kiDksv8rRlWd_v32ebzEcKlgmiPgGID3bRi2M,631
248
256
  omlish/formats/ini/sections.py,sha256=7wYyZdVTQbMPFpjQEACKJfAEPzUBrogINsrvFgxJoZ0,1015
249
- omlish/formats/json/__init__.py,sha256=y7T-Jm-7FuQFzb-6uedky0ZhBaKtCKzcu291juXfiWI,669
257
+ omlish/formats/json/__init__.py,sha256=1lEtsA5v3F34nlhnWCn2CtoC3cgDIubSsxGz5J9wkZs,780
250
258
  omlish/formats/json/codecs.py,sha256=E5KErfqsgGZq763ixXLT3qysbk5MIsypT92xG5aSaIs,796
251
259
  omlish/formats/json/consts.py,sha256=A0cTAGGLyjo-gcYIQrL4JIaardI0yPMhQoNmh42BaRg,387
252
- omlish/formats/json/delimted.py,sha256=UpcTP-KAc6HgMtb9n-Ldgux18OlZjb_9BDFTWol2vo8,29
253
260
  omlish/formats/json/encoding.py,sha256=O4iIWle7W_-RwpOvJNlqOfkbnDyiQHexV5Za4hlrFzw,497
254
261
  omlish/formats/json/json.py,sha256=Mdqv2vdMi7gp96eV0BIYH5UdWpjWfsh-tSMZeywG-08,331
255
262
  omlish/formats/json/literals.py,sha256=6ptwZyfTXodEtAjDnUhsx6XU3KRZWWYWKYtZ8T7rzsQ,5625
@@ -360,7 +367,7 @@ omlish/io/compress/__init__.py,sha256=fJFPT4ONfqxmsA4jR6qbMt2woIyyEgnc_qOWK9o1kI
360
367
  omlish/io/compress/abc.py,sha256=P9YoQX8XYoq2UfBsinKLUuwwqV1ODUIJzjTraRWGF1M,3090
361
368
  omlish/io/compress/adapters.py,sha256=LJHhjwMHXstoLyX_q0QhGoBAcqyYGWfzhzQbGBXHzHY,6148
362
369
  omlish/io/compress/base.py,sha256=zwPnicyrEY-zersxdhxGHXxn02ycl8ew2uZXEecJea4,615
363
- omlish/io/compress/brotli.py,sha256=Q2t9uRqBEgRyJCSPsTaJv5w7d-rhsjDMluA4VRBHa_A,1182
370
+ omlish/io/compress/brotli.py,sha256=sNDX5HmEVqg9_xID5NTFPAWuvlNPw5ixfOnnIWwZf_o,1189
364
371
  omlish/io/compress/bz2.py,sha256=HtwBuBYHJ3MyWO9xJ0XhWpyIYTA3OszLrpu_J4kRRPA,1534
365
372
  omlish/io/compress/codecs.py,sha256=VBc_MAz0W8lVKTKavot3aVKOuPmEUquzarMtpyuteiU,1804
366
373
  omlish/io/compress/gzip.py,sha256=tSjZmLWc7BZugYhmv07Pjr_TaVD1X-0JnZIlAk67iyQ,12213
@@ -374,7 +381,7 @@ omlish/io/coro/consts.py,sha256=4r6IMLBMic6MJHVn9UiORIkkPAuxsqtzFT3KV0fatC0,33
374
381
  omlish/io/coro/direct.py,sha256=Y--rP3wvBAYMeYctokb5IGd8UyQGmEFChyKISmRg5k0,294
375
382
  omlish/io/coro/readers.py,sha256=9VcXuBQ7BSoFen8UVuYFwnl2jJVjyilWV7QeqLNQtKU,4131
376
383
  omlish/io/coro/stepped.py,sha256=eAppRniUZ00rk3goWLU4zsd52MhZB2_YrOmFqs3RfR4,4929
377
- omlish/io/fdio/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
384
+ omlish/io/fdio/__init__.py,sha256=XJMieft-Z-JEkpeARn0M1Jj7HYCjRHwfs2QfE8gdzQs,137
378
385
  omlish/io/fdio/handlers.py,sha256=VDPEff3yXPnCj2jZEkrzuI42bKC8wD8fLmOG97hKrgo,1350
379
386
  omlish/io/fdio/kqueue.py,sha256=YgGBQibkAUYODYDiGl7Enjtx1oQsJXuDsBLBXgqlLQw,3832
380
387
  omlish/io/fdio/manager.py,sha256=q4wWf7nKrNtjx6yPEvrVnFt4UtK_BTvVlquEGw7poEo,1250
@@ -384,11 +391,11 @@ omlish/iterators/iterators.py,sha256=ghI4dO6WPyyFOLTIIMaHQ_IOy2xXaFpGPqveZ5YGIBU
384
391
  omlish/iterators/recipes.py,sha256=53mkexitMhkwXQZbL6DrhpT0WePQ_56uXd5Jaw3DfzI,467
385
392
  omlish/iterators/tools.py,sha256=Pi4ybXytUXVZ3xwK89xpPImQfYYId9p1vIFQvVqVLqA,2551
386
393
  omlish/iterators/unique.py,sha256=0jAX3kwzVfRNhe0Tmh7kVP_Q2WBIn8POo_O-rgFV0rQ,1390
387
- omlish/lang/__init__.py,sha256=_DddR5PNgjqr51AB5DPUq0iKVqJrKz55WMJnBm97LL0,4127
394
+ omlish/lang/__init__.py,sha256=bE8ra_QM5M4k8v3qFtreTjQswaZClIOaqXt9fE43MD0,4079
388
395
  omlish/lang/cached.py,sha256=tQaqMu1LID0q4NSTk5vPXsgxIBWSFAmjs5AhQoEHoCQ,7833
389
396
  omlish/lang/clsdct.py,sha256=sJYadm-fwzti-gsi98knR5qQUxriBmOqQE_qz3RopNk,1743
390
397
  omlish/lang/cmp.py,sha256=5vbzWWbqdzDmNKAGL19z6ZfUKe5Ci49e-Oegf9f4BsE,1346
391
- omlish/lang/contextmanagers.py,sha256=V-XRwj1Em17Pr92i9mSYeeElQs9pmfM_B4jTF732qIg,10400
398
+ omlish/lang/contextmanagers.py,sha256=Mrn8NJ3pP0Zxi-IoGqSjZDdWUctsyee2vrZ2FtZvNmo,10529
392
399
  omlish/lang/datetimes.py,sha256=ehI_DhQRM-bDxAavnp470XcekbbXc4Gdw9y1KpHDJT0,223
393
400
  omlish/lang/descriptors.py,sha256=njkYDS1gn5p4-3v1jr-s_srauC7tvvt571RjE7Q4LXE,6616
394
401
  omlish/lang/exceptions.py,sha256=qJBo3NU1mOWWm-NhQUHCY5feYXR3arZVyEHinLsmRH4,47
@@ -433,7 +440,7 @@ omlish/lite/resources.py,sha256=YNSmX1Ohck1aoWRs55a-o5ChVbFJIQhtbqE-XwF55Oc,326
433
440
  omlish/lite/runtime.py,sha256=XQo408zxTdJdppUZqOWHyeUR50VlCpNIExNGHz4U6O4,459
434
441
  omlish/lite/secrets.py,sha256=3Mz3V2jf__XU9qNHcH56sBSw95L3U2UPL24bjvobG0c,816
435
442
  omlish/lite/strings.py,sha256=QGxT1Yh4oI8ycsfeobxnjEhvDob_GiAKLeIhZwo1j24,1986
436
- omlish/lite/timeouts.py,sha256=wZ6PP1D3B8jpAI7-cQm7wkGTh2sE366XIn6FSMH6DZ4,4959
443
+ omlish/lite/timeouts.py,sha256=lhXo0zwpLM7nr2-AliBRui2BO9jh7B8ALxetwOq6hYI,4968
437
444
  omlish/lite/timing.py,sha256=aVu3hEDB_jyTF_ryZI7iU-xg4q8CNwqpp9Apfru_iwY,196
438
445
  omlish/lite/types.py,sha256=fP5EMyBdEp2LmDxcHjUDtwAMdR06ISr9lKOL7smWfHM,140
439
446
  omlish/lite/typing.py,sha256=U3-JaEnkDSYxK4tsu_MzUn3RP6qALBe5FXQXpD-licE,1090
@@ -455,17 +462,15 @@ omlish/logs/utils.py,sha256=mzHrZ9ji75p5A8qR29eUr05CBAHMb8J753MSkID_VaQ,393
455
462
  omlish/manifests/__init__.py,sha256=P2B0dpT8D7l5lJwRGPA92IcQj6oeXfd90X5-q9BJrKg,51
456
463
  omlish/manifests/load.py,sha256=LrWAvBfdzDkFdLuVwfw2RwFvLjxx-rvfkpU9eBsWeIc,5626
457
464
  omlish/manifests/types.py,sha256=d8bv5tknCJqclRfxCpao_8XxHo2yofhLpVHQTB-MfNw,260
458
- omlish/marshal/__init__.py,sha256=o7EtBHbciL3OLz6zsMny-UGjyAfFXO1zRGIqVOPEKw0,2591
459
- omlish/marshal/base.py,sha256=HEzfby-PgGzIhiRpBkFrkw5-hKacRSC5W_jwLjT8aYw,6740
465
+ omlish/marshal/__init__.py,sha256=00D3S6qwUld1TUWd67hVHuNcrj3c_FAFSkCVXgGWT-s,2607
466
+ omlish/marshal/base.py,sha256=tJ4iNuD7cW2GpGMznOhkAf2hugqp2pF2em0FaQcekrk,6740
460
467
  omlish/marshal/exceptions.py,sha256=jwQWn4LcPnadT2KRI_1JJCOSkwWh0yHnYK9BmSkNN4U,302
461
468
  omlish/marshal/factories.py,sha256=Q926jSVjaQLEmStnHLhm_c_vqEysN1LnDCwAsFLIzXw,2970
462
- omlish/marshal/forbidden.py,sha256=NDe828hqCQw-AgxcEm8MiDZNxWoBwf3o7sTyvQsSsQ0,867
463
469
  omlish/marshal/global_.py,sha256=K76wB1-pdg4VWgiqR7wyxRNYr-voJApexYW2nV-R4DM,1127
464
470
  omlish/marshal/naming.py,sha256=lIklR_Od4x1ghltAgOzqcKhHs-leeSv2YmFhCHO7GIs,613
465
- omlish/marshal/nop.py,sha256=2mWve_dicFAiUQ2Y5asKkUW-XGmEE9Qi2ClIasFad0c,461
471
+ omlish/marshal/proxy.py,sha256=puKJpwPpuDlMOIrKMcLTRLJyMiL6n_Xs-p59AuDEymA,543
466
472
  omlish/marshal/registries.py,sha256=FvC6qXHCizNB2QmU_N3orxW7iqfGYkiUXYYdTRWS6HA,2353
467
- omlish/marshal/standard.py,sha256=ncaoD_OyCzS5H8bt3WAp5z7k1mWPFeOgAYBVaBLq4Sg,3783
468
- omlish/marshal/utils.py,sha256=puKJpwPpuDlMOIrKMcLTRLJyMiL6n_Xs-p59AuDEymA,543
473
+ omlish/marshal/standard.py,sha256=nuWeto3DGFCUMRKeUusev57ty9c1Fo4P3Y0QogNq8Lo,3781
469
474
  omlish/marshal/values.py,sha256=ssHiWdg_L6M17kAn8GiGdPW7UeQOm3RDikWkvwblf5I,263
470
475
  omlish/marshal/composite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
471
476
  omlish/marshal/composite/iterables.py,sha256=tOMjJ-nyYBrRnAGAlT2scV3iR9QSic8La-1qFcy9yNk,2642
@@ -487,13 +492,16 @@ omlish/marshal/polymorphism/metadata.py,sha256=hbXqkYKXhfJeMllzI0Ubeeqbq201khVN8
487
492
  omlish/marshal/polymorphism/unions.py,sha256=YwsK9T3okGiHj88LTFNdUvuH7VkCsD-aTnZseKzhpdA,4350
488
493
  omlish/marshal/polymorphism/unmarshal.py,sha256=gdWTgpl4hXBqac1gHmg_23VMb7x42CE2x-3oRpCaLwU,2047
489
494
  omlish/marshal/singular/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
490
- omlish/marshal/singular/any.py,sha256=42XmUbX_AaiHGFwS2QmA-huPCcZ1_jzVyrnBUYVm21U,787
491
495
  omlish/marshal/singular/base64.py,sha256=gQIkFN60lNEuSiu3MDQFoHwMZTtzDbrBRtNpFZ2HXew,1098
492
496
  omlish/marshal/singular/datetimes.py,sha256=1PDVFF6TGkGxGUno8TaFGRof0DQUookYf_X2Nl8T4V0,3723
493
497
  omlish/marshal/singular/enums.py,sha256=0FSRj8fiM9LrRrFtlWrMsjG-ualfirGNSP0H-36J4sA,1481
494
498
  omlish/marshal/singular/numbers.py,sha256=12a8HxjDHMTgtJTxO7VY_h5llaPyYB-QEPY09dUFOec,1680
495
499
  omlish/marshal/singular/primitives.py,sha256=EZi2AIi_Onw1pekAiL4ujz4w-ASuOGWCu4MUIE_dCnk,1299
496
500
  omlish/marshal/singular/uuids.py,sha256=rZoE6NE5z6x_ZRmVMjjR2iK7CR8ijfDOvhMKgmm8Mgk,918
501
+ omlish/marshal/trivial/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
502
+ omlish/marshal/trivial/any.py,sha256=42XmUbX_AaiHGFwS2QmA-huPCcZ1_jzVyrnBUYVm21U,787
503
+ omlish/marshal/trivial/forbidden.py,sha256=7buKYamev2T3Q4RAhCBRzHO700vs8biH0--V5iBDqx4,874
504
+ omlish/marshal/trivial/nop.py,sha256=41bpwsLGeDGqIwzZ7j88lbc4wIYh0EcPROhCU98mQxo,466
497
505
  omlish/math/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
498
506
  omlish/math/bits.py,sha256=yip1l8agOYzT7bFyMGc0RR3XlnGCfHMpjw_SECLLh1I,3477
499
507
  omlish/math/floats.py,sha256=UimhOT7KRl8LXTzOI5cQWoX_9h6WNWe_3vcOuO7-h_8,327
@@ -503,22 +511,25 @@ omlish/multiprocessing/proxies.py,sha256=bInhGds2rv6xT9q3qRMlZuSXFAjwfspkiohXZ36
503
511
  omlish/multiprocessing/spawn.py,sha256=sTvPLIJGYnjjI6ASqhFzHF-97tCnaOXX7u7s-33SUMw,1875
504
512
  omlish/os/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
505
513
  omlish/os/atomics.py,sha256=KhWNeh4mzU3M-TF0v8uR6hUqMfZJW42MeyIK9Jl6R0k,5246
506
- omlish/os/death.py,sha256=-VdNDTECyo9qUZHJriR1_mLSmczquKBIa2ltNYqSqAA,4868
507
514
  omlish/os/deathsig.py,sha256=hk9Yq2kyDdI-cI7OQH7mOfpRbOKzY_TfPKEqgrjVYbA,641
508
515
  omlish/os/fcntl.py,sha256=riQf9iEEEIC28lJp8ud06MU56w2XJHJ9nBFtck_hdhc,1501
509
516
  omlish/os/files.py,sha256=WJ_42vsZIZukQURN3TTccp-n74ZNhbux_ps3TLbHj18,1106
510
- omlish/os/forkhooks.py,sha256=PbcMrPF_7D0QBm73e55I_XIk4yQzsdj-L6rpe_eyAFM,5024
517
+ omlish/os/forkhooks.py,sha256=yjodOvs90ClXskv5oBIJbHn0Y7dzajLmZmOpRMKbyxM,5656
511
518
  omlish/os/journald.py,sha256=2nI8Res1poXkbLc31--MPUlzYMESnCcPUkIxDOCjZW0,3903
512
519
  omlish/os/linux.py,sha256=whJ6scwMKSFBdXiVhJW0BCpJV4jOGMr-a_a3Bhwz6Ls,18938
513
520
  omlish/os/paths.py,sha256=hqPiyg_eYaRoIVPdAeX4oeLEV4Kpln_XsH0tHvbOf8Q,844
514
521
  omlish/os/sizes.py,sha256=ohkALLvqSqBX4iR-7DMKJ4pfOCRdZXV8htH4QywUNM0,152
515
522
  omlish/os/temp.py,sha256=P97KiVeNB7rfGn4tlgU5ro86JUxAsiphLMlxsjQgfB0,1198
523
+ omlish/os/deathpacts/__init__.py,sha256=IFJkHVWff-VhBbQX38th1RlmjUF2ptKh5TPIzP9Ei2M,229
524
+ omlish/os/deathpacts/base.py,sha256=EGN3BWSXPv0s9kl_QLrWE31hTybDHCmsLc_w3U2VyHc,1740
525
+ omlish/os/deathpacts/heartbeatfile.py,sha256=OybdvhM2kxBTuoJWOJJ5LcX-0lg3jTOvvD2HUunxDWU,1731
526
+ omlish/os/deathpacts/pipe.py,sha256=ZH-l-fIKyurocCehqOgvaYRurxIEMWe8D7l2dsJeGws,3214
516
527
  omlish/os/pidfiles/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
517
- omlish/os/pidfiles/manager.py,sha256=XP_0ynjWDG2wjRN3sIKjmFafpf-er3AYm8E7aXs16fA,3209
518
- omlish/os/pidfiles/pidfile.py,sha256=WmZt_c8fvztPgZQnYHhcQCKWgHqAEsaI3Ggz6Wqgkc8,3748
528
+ omlish/os/pidfiles/manager.py,sha256=qSEwNaWT1KOAnU0KxliwvU_uowme5jyf1FyIPsGwnTY,2391
529
+ omlish/os/pidfiles/pidfile.py,sha256=wrttUQB7rk2SJ7MqtaRlqVGii5Kg6LWm3eV2auHb3zA,4125
519
530
  omlish/os/pidfiles/pinning.py,sha256=_AwYjJc1UGX7mdCOk4mItJJcsOJo3RW2ebBOm2noW5Y,6359
520
- omlish/reflect/__init__.py,sha256=JBWwxKwP4IEaomkK0PTju02STU1BVXT14SCrShT1Sm0,769
521
- omlish/reflect/inspect.py,sha256=veJ424-9oZrqyvhVpvxOi7hcKW-PDBkdYL2yjrFlk4o,495
531
+ omlish/reflect/__init__.py,sha256=Er2yBHibVO16hFNA1szQF2_f43Y3HRCBWtS-fjsOIYc,798
532
+ omlish/reflect/inspect.py,sha256=WCo2YpBYauKw6k758FLlZ_H4Q05rgVPs96fEv9w6zHQ,1538
522
533
  omlish/reflect/ops.py,sha256=RJ6jzrM4ieFsXzWyNXWV43O_WgzEaUvlHSc5N2ezW2A,2044
523
534
  omlish/reflect/subst.py,sha256=g3q7NmNWsmc67mcchmCE3WFPCMDSBq-FXn4ah-DWL_U,3622
524
535
  omlish/reflect/types.py,sha256=lYxK_hlC4kVDMKeDYJp0mymSth21quwuFAMAEFBznyE,9151
@@ -615,10 +626,9 @@ omlish/sql/alchemy/duckdb.py,sha256=kr7pIhiBLNAuZrcigHDtFg9zHkVcrRW3LfryO9VJ4mk,
615
626
  omlish/sql/alchemy/exprs.py,sha256=gO4Fj4xEY-PuDgV-N8hBMy55glZz7O-4H7v1LWabfZY,323
616
627
  omlish/sql/alchemy/secrets.py,sha256=WEeaec1ejQcE3Yaa7p5BSP9AMGEzy1lwr7QMSRL0VBw,180
617
628
  omlish/sql/alchemy/sqlean.py,sha256=RbkuOuFIfM4fowwKk8-sQ6Dxk-tTUwxS94nY5Kxt52s,403
618
- omlish/sql/queries/__init__.py,sha256=8wdq6PBf5YzqQWFu-CE8om6BN38sDAD9UEz9VzkojzM,1337
629
+ omlish/sql/queries/__init__.py,sha256=N8oQFKY99g_MQhrPmvlBAkMeGIRURE9UxMO244mytzY,1332
619
630
  omlish/sql/queries/base.py,sha256=_8O3MbH_OEjBnhp2oIJUZ3ClaQ8l4Sj9BdPdsP0Ie-g,224
620
631
  omlish/sql/queries/binary.py,sha256=dcEzeEn104AMPuQ7QrJU2O-YCN3SUdxB5S4jaWKOUqY,2253
621
- omlish/sql/queries/building.py,sha256=J2ZDfDyLzRm8q5-TLAN6I_qjhs-7RpfW23yuCYYLf5k,643
622
632
  omlish/sql/queries/exprs.py,sha256=THeSyFF8bouDvU-Keej-hyFUwbp63bw0HpAF4lCYuiQ,1187
623
633
  omlish/sql/queries/idents.py,sha256=w2RxO6SR3K-u30S259OtnAZaPv7YA70PzY9R7RtuCQ8,891
624
634
  omlish/sql/queries/inserts.py,sha256=H0Dv_6l--T7WXuoJQbLFd23PnjXA-3RETegjYnPr9lc,1281
@@ -629,7 +639,9 @@ omlish/sql/queries/ops.py,sha256=B7IDfjr2DW5LJhWoNaY1WW90BJhe5ZtmxIELhWXbW-0,129
629
639
  omlish/sql/queries/params.py,sha256=iR8tnetkZFWY378iUbPe08d86g-Wf1J3YqfZr_KhIwQ,1175
630
640
  omlish/sql/queries/relations.py,sha256=7YrEC9IjoVpRGLAFKRSRsHHnTmx-g7hBNXsOgP2HOuI,2998
631
641
  omlish/sql/queries/rendering.py,sha256=8naCMwxVEFAJaMP5m2bf6kCyhvwFZhXiWYEma51fQ4k,6813
642
+ omlish/sql/queries/rendering2.py,sha256=S7BD7i2tMEWdxOtvw-udWfk5nei-vV3hUghR7qEIL-I,6469
632
643
  omlish/sql/queries/selects.py,sha256=RFySZ9sb-nE29QrLLbQ7JYZW_V_ifaFTcl-RQTgQncY,1369
644
+ omlish/sql/queries/std.py,sha256=J2ZDfDyLzRm8q5-TLAN6I_qjhs-7RpfW23yuCYYLf5k,643
633
645
  omlish/sql/queries/stmts.py,sha256=pBqwD7dRlqMu6uh6vR3xaWOEgbZCcFWbOQ9ryYd17T4,441
634
646
  omlish/sql/queries/unary.py,sha256=MEYBDZn_H0bexmUrJeONOv5-gIpYowUaXOsEHeQM4ks,1144
635
647
  omlish/sql/tabledefs/__init__.py,sha256=TvtQsp-jJu6_ZahyCOFAaElSSBcRftNyJpdiDPGYCDk,190
@@ -687,11 +699,11 @@ omlish/text/delimit.py,sha256=ubPXcXQmtbOVrUsNh5gH1mDq5H-n1y2R4cPL5_DQf68,4928
687
699
  omlish/text/glyphsplit.py,sha256=kqqjglRdxGo0czYZxOz9Vi8aBmVsCOq8h6lPwRA5xe0,3803
688
700
  omlish/text/indent.py,sha256=YjtJEBYWuk8--b9JU_T6q4yxV85_TR7VEVr5ViRCFwk,1336
689
701
  omlish/text/minja.py,sha256=jZC-fp3Xuhx48ppqsf2Sf1pHbC0t8XBB7UpUUoOk2Qw,5751
690
- omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
702
+ omlish/text/parts.py,sha256=JkNZpyR2tv2CNcTaWJJhpQ9E4F0yPR8P_YfDbZfMtwQ,6182
691
703
  omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
692
- omlish-0.0.0.dev229.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
693
- omlish-0.0.0.dev229.dist-info/METADATA,sha256=e2WiLQbZDPufjlJeoco5XhS16N4Ey5SjNynHbSHlaOI,4176
694
- omlish-0.0.0.dev229.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
695
- omlish-0.0.0.dev229.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
696
- omlish-0.0.0.dev229.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
697
- omlish-0.0.0.dev229.dist-info/RECORD,,
704
+ omlish-0.0.0.dev231.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
705
+ omlish-0.0.0.dev231.dist-info/METADATA,sha256=glvhjWJ8XJlRwe1JuGQQYJBpwdsJhjPFHEWn7Z985oE,4176
706
+ omlish-0.0.0.dev231.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
707
+ omlish-0.0.0.dev231.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
708
+ omlish-0.0.0.dev231.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
709
+ omlish-0.0.0.dev231.dist-info/RECORD,,
@@ -1,4 +0,0 @@
1
- """
2
- TODO:
3
- - jsonl codec
4
- """
File without changes
File without changes
File without changes
File without changes