omlish 0.0.0.dev229__py3-none-any.whl → 0.0.0.dev231__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.
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