omlish 0.0.0.dev142__py3-none-any.whl → 0.0.0.dev143__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
omlish/__about__.py CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev142'
2
- __revision__ = 'fe684cfe6dc46f867fb6990935e8b145b67bbefa'
1
+ __version__ = '0.0.0.dev143'
2
+ __revision__ = '72813c4e4d25f26261452612724f0bce16c77125'
3
3
 
4
4
 
5
5
  #
@@ -334,4 +334,5 @@ def map_of_or_none(
334
334
  value_fn = _unpack_fn(value_fn)
335
335
  return inner
336
336
 
337
+
337
338
  # endregion
omlish/docker/__init__.py CHANGED
@@ -14,7 +14,6 @@ from .compose import ( # noqa
14
14
  )
15
15
 
16
16
  from .helpers import ( # noqa
17
- DOCKER_FOR_MAC_HOSTNAME,
18
17
  DOCKER_HOST_PLATFORM_KEY,
19
18
  get_docker_host_platform,
20
19
  timebomb_payload,
@@ -32,5 +31,7 @@ from .hub import ( # noqa
32
31
 
33
32
 
34
33
  from ..lite.docker import ( # noqa
34
+ DOCKER_FOR_MAC_HOSTNAME,
35
+
35
36
  is_likely_in_docker,
36
37
  )
omlish/docker/helpers.py CHANGED
@@ -21,12 +21,6 @@ def timebomb_payload(delay_s: float, name: str = _DEFAULT_TIMEBOMB_NAME) -> str:
21
21
  ##
22
22
 
23
23
 
24
- DOCKER_FOR_MAC_HOSTNAME = 'docker.for.mac.localhost'
25
-
26
-
27
- ##
28
-
29
-
30
24
  # Set by pyproject, docker-dev script
31
25
  DOCKER_HOST_PLATFORM_KEY = 'DOCKER_HOST_PLATFORM'
32
26
 
omlish/lite/docker.py CHANGED
@@ -2,6 +2,9 @@ import re
2
2
  import sys
3
3
 
4
4
 
5
+ DOCKER_FOR_MAC_HOSTNAME = 'docker.for.mac.localhost'
6
+
7
+
5
8
  _LIKELY_IN_DOCKER_PATTERN = re.compile(r'^overlay / .*/(docker|desktop-containerd)/')
6
9
 
7
10
 
omlish/lite/marshal.py CHANGED
@@ -32,21 +32,26 @@ T = ta.TypeVar('T')
32
32
  ##
33
33
 
34
34
 
35
+ @dc.dataclass(frozen=True)
36
+ class ObjMarshalOptions:
37
+ raw_bytes: bool = False
38
+
39
+
35
40
  class ObjMarshaler(abc.ABC):
36
41
  @abc.abstractmethod
37
- def marshal(self, o: ta.Any) -> ta.Any:
42
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
38
43
  raise NotImplementedError
39
44
 
40
45
  @abc.abstractmethod
41
- def unmarshal(self, o: ta.Any) -> ta.Any:
46
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
42
47
  raise NotImplementedError
43
48
 
44
49
 
45
50
  class NopObjMarshaler(ObjMarshaler):
46
- def marshal(self, o: ta.Any) -> ta.Any:
51
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
47
52
  return o
48
53
 
49
- def unmarshal(self, o: ta.Any) -> ta.Any:
54
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
50
55
  return o
51
56
 
52
57
 
@@ -54,29 +59,29 @@ class NopObjMarshaler(ObjMarshaler):
54
59
  class ProxyObjMarshaler(ObjMarshaler):
55
60
  m: ta.Optional[ObjMarshaler] = None
56
61
 
57
- def marshal(self, o: ta.Any) -> ta.Any:
58
- return check_not_none(self.m).marshal(o)
62
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
63
+ return check_not_none(self.m).marshal(o, opts)
59
64
 
60
- def unmarshal(self, o: ta.Any) -> ta.Any:
61
- return check_not_none(self.m).unmarshal(o)
65
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
66
+ return check_not_none(self.m).unmarshal(o, opts)
62
67
 
63
68
 
64
69
  @dc.dataclass(frozen=True)
65
70
  class CastObjMarshaler(ObjMarshaler):
66
71
  ty: type
67
72
 
68
- def marshal(self, o: ta.Any) -> ta.Any:
73
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
69
74
  return o
70
75
 
71
- def unmarshal(self, o: ta.Any) -> ta.Any:
76
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
72
77
  return self.ty(o)
73
78
 
74
79
 
75
80
  class DynamicObjMarshaler(ObjMarshaler):
76
- def marshal(self, o: ta.Any) -> ta.Any:
81
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
77
82
  return marshal_obj(o)
78
83
 
79
- def unmarshal(self, o: ta.Any) -> ta.Any:
84
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
80
85
  return o
81
86
 
82
87
 
@@ -84,21 +89,36 @@ class DynamicObjMarshaler(ObjMarshaler):
84
89
  class Base64ObjMarshaler(ObjMarshaler):
85
90
  ty: type
86
91
 
87
- def marshal(self, o: ta.Any) -> ta.Any:
92
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
88
93
  return base64.b64encode(o).decode('ascii')
89
94
 
90
- def unmarshal(self, o: ta.Any) -> ta.Any:
95
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
91
96
  return self.ty(base64.b64decode(o))
92
97
 
93
98
 
99
+ @dc.dataclass(frozen=True)
100
+ class BytesSwitchedObjMarshaler(ObjMarshaler):
101
+ m: ObjMarshaler
102
+
103
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
104
+ if opts.raw_bytes:
105
+ return o
106
+ return self.m.marshal(o, opts)
107
+
108
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
109
+ if opts.raw_bytes:
110
+ return o
111
+ return self.m.unmarshal(o, opts)
112
+
113
+
94
114
  @dc.dataclass(frozen=True)
95
115
  class EnumObjMarshaler(ObjMarshaler):
96
116
  ty: type
97
117
 
98
- def marshal(self, o: ta.Any) -> ta.Any:
118
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
99
119
  return o.name
100
120
 
101
- def unmarshal(self, o: ta.Any) -> ta.Any:
121
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
102
122
  return self.ty.__members__[o] # type: ignore
103
123
 
104
124
 
@@ -106,15 +126,15 @@ class EnumObjMarshaler(ObjMarshaler):
106
126
  class OptionalObjMarshaler(ObjMarshaler):
107
127
  item: ObjMarshaler
108
128
 
109
- def marshal(self, o: ta.Any) -> ta.Any:
129
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
110
130
  if o is None:
111
131
  return None
112
- return self.item.marshal(o)
132
+ return self.item.marshal(o, opts)
113
133
 
114
- def unmarshal(self, o: ta.Any) -> ta.Any:
134
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
115
135
  if o is None:
116
136
  return None
117
- return self.item.unmarshal(o)
137
+ return self.item.unmarshal(o, opts)
118
138
 
119
139
 
120
140
  @dc.dataclass(frozen=True)
@@ -123,11 +143,11 @@ class MappingObjMarshaler(ObjMarshaler):
123
143
  km: ObjMarshaler
124
144
  vm: ObjMarshaler
125
145
 
126
- def marshal(self, o: ta.Any) -> ta.Any:
127
- return {self.km.marshal(k): self.vm.marshal(v) for k, v in o.items()}
146
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
147
+ return {self.km.marshal(k, opts): self.vm.marshal(v, opts) for k, v in o.items()}
128
148
 
129
- def unmarshal(self, o: ta.Any) -> ta.Any:
130
- return self.ty((self.km.unmarshal(k), self.vm.unmarshal(v)) for k, v in o.items())
149
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
150
+ return self.ty((self.km.unmarshal(k, opts), self.vm.unmarshal(v, opts)) for k, v in o.items())
131
151
 
132
152
 
133
153
  @dc.dataclass(frozen=True)
@@ -135,11 +155,11 @@ class IterableObjMarshaler(ObjMarshaler):
135
155
  ty: type
136
156
  item: ObjMarshaler
137
157
 
138
- def marshal(self, o: ta.Any) -> ta.Any:
139
- return [self.item.marshal(e) for e in o]
158
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
159
+ return [self.item.marshal(e, opts) for e in o]
140
160
 
141
- def unmarshal(self, o: ta.Any) -> ta.Any:
142
- return self.ty(self.item.unmarshal(e) for e in o)
161
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
162
+ return self.ty(self.item.unmarshal(e, opts) for e in o)
143
163
 
144
164
 
145
165
  @dc.dataclass(frozen=True)
@@ -148,11 +168,11 @@ class DataclassObjMarshaler(ObjMarshaler):
148
168
  fs: ta.Mapping[str, ObjMarshaler]
149
169
  nonstrict: bool = False
150
170
 
151
- def marshal(self, o: ta.Any) -> ta.Any:
152
- return {k: m.marshal(getattr(o, k)) for k, m in self.fs.items()}
171
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
172
+ return {k: m.marshal(getattr(o, k), opts) for k, m in self.fs.items()}
153
173
 
154
- def unmarshal(self, o: ta.Any) -> ta.Any:
155
- return self.ty(**{k: self.fs[k].unmarshal(v) for k, v in o.items() if not self.nonstrict or k in self.fs})
174
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
175
+ return self.ty(**{k: self.fs[k].unmarshal(v, opts) for k, v in o.items() if not self.nonstrict or k in self.fs})
156
176
 
157
177
 
158
178
  @dc.dataclass(frozen=True)
@@ -172,50 +192,50 @@ class PolymorphicObjMarshaler(ObjMarshaler):
172
192
  {i.tag: i for i in impls},
173
193
  )
174
194
 
175
- def marshal(self, o: ta.Any) -> ta.Any:
195
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
176
196
  impl = self.impls_by_ty[type(o)]
177
- return {impl.tag: impl.m.marshal(o)}
197
+ return {impl.tag: impl.m.marshal(o, opts)}
178
198
 
179
- def unmarshal(self, o: ta.Any) -> ta.Any:
199
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
180
200
  [(t, v)] = o.items()
181
201
  impl = self.impls_by_tag[t]
182
- return impl.m.unmarshal(v)
202
+ return impl.m.unmarshal(v, opts)
183
203
 
184
204
 
185
205
  @dc.dataclass(frozen=True)
186
206
  class DatetimeObjMarshaler(ObjMarshaler):
187
207
  ty: type
188
208
 
189
- def marshal(self, o: ta.Any) -> ta.Any:
209
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
190
210
  return o.isoformat()
191
211
 
192
- def unmarshal(self, o: ta.Any) -> ta.Any:
212
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
193
213
  return self.ty.fromisoformat(o) # type: ignore
194
214
 
195
215
 
196
216
  class DecimalObjMarshaler(ObjMarshaler):
197
- def marshal(self, o: ta.Any) -> ta.Any:
217
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
198
218
  return str(check_isinstance(o, decimal.Decimal))
199
219
 
200
- def unmarshal(self, v: ta.Any) -> ta.Any:
220
+ def unmarshal(self, v: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
201
221
  return decimal.Decimal(check_isinstance(v, str))
202
222
 
203
223
 
204
224
  class FractionObjMarshaler(ObjMarshaler):
205
- def marshal(self, o: ta.Any) -> ta.Any:
225
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
206
226
  fr = check_isinstance(o, fractions.Fraction)
207
227
  return [fr.numerator, fr.denominator]
208
228
 
209
- def unmarshal(self, v: ta.Any) -> ta.Any:
229
+ def unmarshal(self, v: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
210
230
  num, denom = check_isinstance(v, list)
211
231
  return fractions.Fraction(num, denom)
212
232
 
213
233
 
214
234
  class UuidObjMarshaler(ObjMarshaler):
215
- def marshal(self, o: ta.Any) -> ta.Any:
235
+ def marshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
216
236
  return str(o)
217
237
 
218
- def unmarshal(self, o: ta.Any) -> ta.Any:
238
+ def unmarshal(self, o: ta.Any, opts: ObjMarshalOptions) -> ta.Any:
219
239
  return uuid.UUID(o)
220
240
 
221
241
 
@@ -225,7 +245,7 @@ class UuidObjMarshaler(ObjMarshaler):
225
245
  _DEFAULT_OBJ_MARSHALERS: ta.Dict[ta.Any, ObjMarshaler] = {
226
246
  **{t: NopObjMarshaler() for t in (type(None),)},
227
247
  **{t: CastObjMarshaler(t) for t in (int, float, str, bool)},
228
- **{t: Base64ObjMarshaler(t) for t in (bytes, bytearray)},
248
+ **{t: BytesSwitchedObjMarshaler(Base64ObjMarshaler(t)) for t in (bytes, bytearray)},
229
249
  **{t: IterableObjMarshaler(t, DynamicObjMarshaler()) for t in (list, tuple, set, frozenset)},
230
250
  **{t: MappingObjMarshaler(t, DynamicObjMarshaler(), DynamicObjMarshaler()) for t in (dict,)},
231
251
 
@@ -258,12 +278,16 @@ class ObjMarshalerManager:
258
278
  def __init__(
259
279
  self,
260
280
  *,
281
+ default_options: ObjMarshalOptions = ObjMarshalOptions(),
282
+
261
283
  default_obj_marshalers: ta.Dict[ta.Any, ObjMarshaler] = _DEFAULT_OBJ_MARSHALERS, # noqa
262
284
  generic_mapping_types: ta.Dict[ta.Any, type] = _OBJ_MARSHALER_GENERIC_MAPPING_TYPES, # noqa
263
285
  generic_iterable_types: ta.Dict[ta.Any, type] = _OBJ_MARSHALER_GENERIC_ITERABLE_TYPES, # noqa
264
286
  ) -> None:
265
287
  super().__init__()
266
288
 
289
+ self._default_options = default_options
290
+
267
291
  self._obj_marshalers = dict(default_obj_marshalers)
268
292
  self._generic_mapping_types = generic_mapping_types
269
293
  self._generic_iterable_types = generic_iterable_types
@@ -372,11 +396,35 @@ class ObjMarshalerManager:
372
396
 
373
397
  #
374
398
 
375
- def marshal_obj(self, o: ta.Any, ty: ta.Any = None) -> ta.Any:
376
- return self.get_obj_marshaler(ty if ty is not None else type(o)).marshal(o)
377
-
378
- def unmarshal_obj(self, o: ta.Any, ty: ta.Union[ta.Type[T], ta.Any]) -> T:
379
- return self.get_obj_marshaler(ty).unmarshal(o)
399
+ def marshal_obj(
400
+ self,
401
+ o: ta.Any,
402
+ ty: ta.Any = None,
403
+ opts: ta.Optional[ObjMarshalOptions] = None,
404
+ ) -> ta.Any:
405
+ m = self.get_obj_marshaler(ty if ty is not None else type(o))
406
+ return m.marshal(o, opts or self._default_options)
407
+
408
+ def unmarshal_obj(
409
+ self,
410
+ o: ta.Any,
411
+ ty: ta.Union[ta.Type[T], ta.Any],
412
+ opts: ta.Optional[ObjMarshalOptions] = None,
413
+ ) -> T:
414
+ m = self.get_obj_marshaler(ty)
415
+ return m.unmarshal(o, opts or self._default_options)
416
+
417
+ def roundtrip_obj(
418
+ self,
419
+ o: ta.Any,
420
+ ty: ta.Any = None,
421
+ opts: ta.Optional[ObjMarshalOptions] = None,
422
+ ) -> ta.Any:
423
+ if ty is None:
424
+ ty = type(o)
425
+ m: ta.Any = self.marshal_obj(o, ty, opts)
426
+ u: ta.Any = self.unmarshal_obj(m, ty, opts)
427
+ return u
380
428
 
381
429
 
382
430
  ##
omlish/lite/pycharm.py ADDED
@@ -0,0 +1,48 @@
1
+ # ruff: noqa: UP006 UP007
2
+ import dataclasses as dc
3
+ import typing as ta
4
+
5
+
6
+ DEFAULT_PYCHARM_VERSION = '242.23726.102'
7
+
8
+
9
+ @dc.dataclass(frozen=True)
10
+ class PycharmRemoteDebug:
11
+ port: int
12
+ host: ta.Optional[str] = 'localhost'
13
+ install_version: ta.Optional[str] = DEFAULT_PYCHARM_VERSION
14
+
15
+
16
+ def pycharm_debug_connect(prd: PycharmRemoteDebug) -> None:
17
+ if prd.install_version is not None:
18
+ import subprocess
19
+ import sys
20
+ subprocess.check_call([
21
+ sys.executable,
22
+ '-mpip',
23
+ 'install',
24
+ f'pydevd-pycharm~={prd.install_version}',
25
+ ])
26
+
27
+ pydevd_pycharm = __import__('pydevd_pycharm') # noqa
28
+ pydevd_pycharm.settrace(
29
+ prd.host,
30
+ port=prd.port,
31
+ stdoutToServer=True,
32
+ stderrToServer=True,
33
+ )
34
+
35
+
36
+ def pycharm_debug_preamble(prd: PycharmRemoteDebug) -> str:
37
+ import inspect
38
+ import textwrap
39
+
40
+ return textwrap.dedent(f"""
41
+ {inspect.getsource(pycharm_debug_connect)}
42
+
43
+ pycharm_debug_connect(PycharmRemoteDebug(
44
+ {prd.port!r},
45
+ host={prd.host!r},
46
+ install_version={prd.install_version!r},
47
+ ))
48
+ """)
omlish/logs/abc.py CHANGED
@@ -1,7 +1,6 @@
1
1
  # ruff: noqa: A002
2
2
  # ruff: noqa: N802
3
3
  # ruff: noqa: N815
4
-
5
4
  import types
6
5
  import typing as ta
7
6
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev142
3
+ Version: 0.0.0.dev143
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=RX24SRc6DCEg77PUVnaXOKCWa5TF_c9RQJdGIf7gl9c,1135
2
- omlish/__about__.py,sha256=gYImx_2ywPtIhvEJQGFFnnWF2QT4QpesLm-52cZyEoU,3409
2
+ omlish/__about__.py,sha256=hp55UtsiLw1Gm7q_ob-JsBND4my9FR1FdD_oDJG-nJ4,3409
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/argparse.py,sha256=cqKGAqcxuxv_s62z0gq29L9KAvg_3-_rFvXKjVpRJjo,8126
5
5
  omlish/c3.py,sha256=ubu7lHwss5V4UznbejAI0qXhXahrU01MysuHOZI9C4U,8116
@@ -93,7 +93,7 @@ omlish/bootstrap/marshal.py,sha256=ZxdAeMNd2qXRZ1HUK89HmEhz8tqlS9OduW34QBscKw0,5
93
93
  omlish/bootstrap/sys.py,sha256=iLHUNIuIPv-k-Mc6aHj5sSET78olCVt7t0HquFDO4iQ,8762
94
94
  omlish/collections/__init__.py,sha256=zeUvcAz073ekko37QKya6sElTMfKTuF1bKrdbMtaRpI,2142
95
95
  omlish/collections/abc.py,sha256=sP7BpTVhx6s6C59mTFeosBi4rHOWC6tbFBYbxdZmvh0,2365
96
- omlish/collections/coerce.py,sha256=o11AMrUiyoadd8WkdqeKPIpXf2xd0LyylzNCyJivCLU,7036
96
+ omlish/collections/coerce.py,sha256=g68ROb_-5HgH-vI8612mU2S0FZ8-wp2ZHK5_Zy_kVC0,7037
97
97
  omlish/collections/exceptions.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
98
98
  omlish/collections/frozen.py,sha256=DGxemj_pVID85tSBm-Wns_x4ov0wOEIT6X5bVgJtmkA,4152
99
99
  omlish/collections/hasheq.py,sha256=XcOCE6f2lXizDCOXxSX6vJv-rLcpDo2OWCYIKGSWuic,3697
@@ -167,10 +167,10 @@ omlish/dispatch/_dispatch3.py,sha256=Vnu5DfoPWFJLodudBqoZBXGTi2wYk-Az56MXJgdQvwc
167
167
  omlish/dispatch/dispatch.py,sha256=8XQiLVoAq4u2oO0DnDSXQB9Q5qDk569l4CIFBqwDSyc,3847
168
168
  omlish/dispatch/functions.py,sha256=S8ElsLi6DKxTdtFGigWaF0vAquwy2sK-3f4iRLaYq70,1522
169
169
  omlish/dispatch/methods.py,sha256=XHjwwC9Gn4iDWxbyLAcbdSwRgVaq-8Bnn5cAwf5oZdA,5403
170
- omlish/docker/__init__.py,sha256=NYVbZRHpvRx0HYKjn5dZ5XeFDYa9zRKg6zqPGw6IvWs,527
170
+ omlish/docker/__init__.py,sha256=TK2UOuawDMDbsdANLtGfOPpKQbDQf-rU2fXneb9elxw,528
171
171
  omlish/docker/cli.py,sha256=gtb9kitVfGnd4cr587NsVVk8D5Ok5y5SAsqD_SwGrSA,2565
172
172
  omlish/docker/compose.py,sha256=4drmnGQzbkOFJ9B6XSg9rnXkJeZz1ETmdcMe1PE790U,1237
173
- omlish/docker/helpers.py,sha256=9uyHpPVbsB2jqTzvU7jiLzTkDN1omqofse1w4B4GH5E,612
173
+ omlish/docker/helpers.py,sha256=dGmCSDd-Rpdu3YCdyVEaTx_8GdbXGR4lw12ctyGPxzg,552
174
174
  omlish/docker/hub.py,sha256=7LIuJGdA-N1Y1dmo50ynKM1KUTcnQM_5XbtPbdT_QLU,3940
175
175
  omlish/docker/manifests.py,sha256=LR4FpOGNUT3bZQ-gTjB6r_-1C3YiG30QvevZjrsVUQM,7068
176
176
  omlish/formats/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -314,15 +314,16 @@ omlish/lite/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
314
314
  omlish/lite/cached.py,sha256=rrc_JEv3sKJIEmCBB6g7DwPvkb1hNFmhg0mxkvuXDJw,848
315
315
  omlish/lite/check.py,sha256=pQC412ffe_Zh7eHa4C1UYn6fA71Ls1vpVM0ZIOroPAY,1765
316
316
  omlish/lite/contextmanagers.py,sha256=DRarS2gx15tbse1YzyI8ZLdBmWYjFgmKPe-i4CSNDYg,1458
317
- omlish/lite/docker.py,sha256=3IVZZtIm7-UdB2SwArmN_MosTva1_KifyYp3YWjODbE,337
317
+ omlish/lite/docker.py,sha256=Dj_7lQjs2sFPc_SmUn5CpJF3LnQQnckEBYGBKz8u5tE,392
318
318
  omlish/lite/inject.py,sha256=aRRmFb6azTKF208ogYwVCEopNZx7496Ta1GZmL_IKBA,23716
319
319
  omlish/lite/io.py,sha256=3ECgUXdRnXyS6pGTSoVr6oB4moI38EpWxTq08zaTM-U,5339
320
320
  omlish/lite/journald.py,sha256=f5Y2Q6-6O3iK_7MoGiwZwoQEOcP7LfkxxQNUR9tMjJM,3882
321
321
  omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
322
322
  omlish/lite/logs.py,sha256=1pcGu0ekhVCcLUckLSP16VccnAoprjtl5Vkdfm7y1Wg,6184
323
- omlish/lite/marshal.py,sha256=CGiWXjsdYZ-lKVyPL9p5GISN2DjDjf5l_PbtmqPy34E,10835
323
+ omlish/lite/marshal.py,sha256=a3_wuMjiCXHYngzgLhJU2C2BFznVC_VlrzRJ5_hpuRI,12989
324
324
  omlish/lite/maybes.py,sha256=7OlHJ8Q2r4wQ-aRbZSlJY7x0e8gDvufFdlohGEIJ3P4,833
325
325
  omlish/lite/pidfile.py,sha256=PRSDOAXmNkNwxh-Vwif0Nrs8RAmWroiNhLKIbdjwzBc,1723
326
+ omlish/lite/pycharm.py,sha256=CUArgzaG8ZZ0evN7tdrML5WXyF-G_BvF_s3Z4SI2LA0,1164
326
327
  omlish/lite/reflect.py,sha256=ad_ya_zZJOQB8HoNjs9yc66R54zgflwJVPJqiBXMzqA,1681
327
328
  omlish/lite/runtime.py,sha256=lVw5_yuQNHXZLwGf_l59u8IrAtBLZWPTml6owQ55uro,439
328
329
  omlish/lite/secrets.py,sha256=3Mz3V2jf__XU9qNHcH56sBSw95L3U2UPL24bjvobG0c,816
@@ -343,7 +344,7 @@ omlish/lite/http/handlers.py,sha256=Yu0P3nqz-frklwCM2PbiWvoJNE-NqeTFLBvpNpqcdtA,
343
344
  omlish/lite/http/parsing.py,sha256=jLdbBTQQhKU701j3_Ixl77nQE3rZld2qbJNAFhuW_cc,13977
344
345
  omlish/lite/http/versions.py,sha256=M6WhZeeyun-3jL_NCViNONOfLCiApuFOfe5XNJwzSvw,394
345
346
  omlish/logs/__init__.py,sha256=FbOyAW-lGH8gyBlSVArwljdYAU6RnwZLI5LwAfuNnrk,438
346
- omlish/logs/abc.py,sha256=rWySJcr1vatu-AR1EYtODRhi-TjFaixqUzXeWg1c0GA,8006
347
+ omlish/logs/abc.py,sha256=ho4ABKYMKX-V7g4sp1BByuOLzslYzLlQ0MESmjEpT-o,8005
347
348
  omlish/logs/configs.py,sha256=EE0jlNaXJbGnM7V-y4xS5VwyTBSTzFzc0BYaVjg0JmA,1283
348
349
  omlish/logs/formatters.py,sha256=q79nMnR2mRIStPyGrydQHpYTXgC5HHptt8lH3W2Wwbs,671
349
350
  omlish/logs/handlers.py,sha256=UpzUf3kWBBzWOnrtljoZsLjISw3Ix-ePz3Nsmp6lRgE,255
@@ -499,9 +500,9 @@ omlish/text/glyphsplit.py,sha256=Ug-dPRO7x-OrNNr8g1y6DotSZ2KH0S-VcOmUobwa4B0,329
499
500
  omlish/text/indent.py,sha256=6Jj6TFY9unaPa4xPzrnZemJ-fHsV53IamP93XGjSUHs,1274
500
501
  omlish/text/parts.py,sha256=7vPF1aTZdvLVYJ4EwBZVzRSy8XB3YqPd7JwEnNGGAOo,6495
501
502
  omlish/text/random.py,sha256=jNWpqiaKjKyTdMXC-pWAsSC10AAP-cmRRPVhm59ZWLk,194
502
- omlish-0.0.0.dev142.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
503
- omlish-0.0.0.dev142.dist-info/METADATA,sha256=EPRUQHZXDZjgMc8n3C1oqYnq3Ar4HiMbiE3HNruo4bs,4264
504
- omlish-0.0.0.dev142.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
505
- omlish-0.0.0.dev142.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
506
- omlish-0.0.0.dev142.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
507
- omlish-0.0.0.dev142.dist-info/RECORD,,
503
+ omlish-0.0.0.dev143.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
504
+ omlish-0.0.0.dev143.dist-info/METADATA,sha256=aJ6Jj2-7Q6PSTI2elpZ-POY5Ud1lpJWQEjhmbtPaWFs,4264
505
+ omlish-0.0.0.dev143.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
506
+ omlish-0.0.0.dev143.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
507
+ omlish-0.0.0.dev143.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
508
+ omlish-0.0.0.dev143.dist-info/RECORD,,