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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
omlish/__about__.py CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev142'
2
- __revision__ = 'fe684cfe6dc46f867fb6990935e8b145b67bbefa'
1
+ __version__ = '0.0.0.dev144'
2
+ __revision__ = '4d901652b9972fb965683ca3ac965147536a9dd4'
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.dev144
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=MT0BTpx7mPru-9X9bEnyKHLlujaF7_MenPp4KN78i3c,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.dev144.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
504
+ omlish-0.0.0.dev144.dist-info/METADATA,sha256=iSpb58aExr5aGcD3lhNq7BsAewClNKVvMdnbWH4u3sU,4264
505
+ omlish-0.0.0.dev144.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
506
+ omlish-0.0.0.dev144.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
507
+ omlish-0.0.0.dev144.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
508
+ omlish-0.0.0.dev144.dist-info/RECORD,,