omlish 0.0.0.dev264__py3-none-any.whl → 0.0.0.dev265__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.dev264'
2
- __revision__ = '4a101c8e5b339dfa81732f13f8df74dec23b204f'
1
+ __version__ = '0.0.0.dev265'
2
+ __revision__ = 'f83c70eb0c46f33c859473df28f39340c4f9899b'
3
3
 
4
4
 
5
5
  #
omlish/inject/bindings.py CHANGED
@@ -8,6 +8,9 @@ from .types import Scope
8
8
  from .types import Unscoped
9
9
 
10
10
 
11
+ ##
12
+
13
+
11
14
  @dc.dataclass(frozen=True)
12
15
  @dc.extra_params(cache_hash=True)
13
16
  class Binding(Element, lang.Final):
omlish/inject/eagers.py CHANGED
@@ -9,6 +9,9 @@ from .elements import Element
9
9
  from .keys import Key
10
10
 
11
11
 
12
+ ##
13
+
14
+
12
15
  @dc.dataclass(frozen=True)
13
16
  @dc.extra_params(cache_hash=True)
14
17
  class Eager(Element, lang.Final):
omlish/inject/elements.py CHANGED
@@ -6,6 +6,9 @@ from .. import lang
6
6
  from .impl.origins import HasOriginsImpl
7
7
 
8
8
 
9
+ ##
10
+
11
+
9
12
  class Element(HasOriginsImpl, lang.Abstract, lang.PackageSealed):
10
13
  """Note: inheritors must be dataclasses."""
11
14
 
@@ -29,7 +32,7 @@ class Elements(lang.Final):
29
32
  yield from c
30
33
 
31
34
 
32
- Elemental = ta.Union[ # noqa
35
+ Elemental: ta.TypeAlias = ta.Union[ # noqa
33
36
  Element,
34
37
  Elements,
35
38
  ElementGenerator,
@@ -60,6 +60,9 @@ else:
60
60
  ElementT = ta.TypeVar('ElementT', bound=Element)
61
61
 
62
62
 
63
+ ##
64
+
65
+
63
66
  class ElementCollection(lang.Final):
64
67
  def __init__(self, es: Elements) -> None:
65
68
  super().__init__()
@@ -45,6 +45,9 @@ from .scopes import make_scope_impl
45
45
  log = logging.getLogger(__name__)
46
46
 
47
47
 
48
+ ##
49
+
50
+
48
51
  DEFAULT_SCOPES: list[Scope] = [
49
52
  Unscoped(),
50
53
  Singleton(),
@@ -14,6 +14,9 @@ from .providers import LinkProviderImpl
14
14
  from .providers import ProviderImpl
15
15
 
16
16
 
17
+ ##
18
+
19
+
17
20
  @dc.dataclass(frozen=True, eq=False)
18
21
  class SetProviderImpl(ProviderImpl, lang.Final):
19
22
  ps: ta.Sequence[ProviderImpl]
@@ -4,6 +4,9 @@ from ... import check
4
4
  from ... import lang
5
5
 
6
6
 
7
+ ##
8
+
9
+
7
10
  @lang.cached_function
8
11
  def _cyclic_dependency_proxy() -> tuple[type, ta.Callable[[ta.Any, ta.Any], None]]:
9
12
  import wrapt # noqa
@@ -38,6 +38,9 @@ else:
38
38
  injector_ = lang.proxy_import('.injector', __package__)
39
39
 
40
40
 
41
+ ##
42
+
43
+
41
44
  class ScopeImpl(lang.Abstract):
42
45
  @property
43
46
  @abc.abstractmethod
omlish/inject/injector.py CHANGED
@@ -17,6 +17,9 @@ else:
17
17
  T = ta.TypeVar('T')
18
18
 
19
19
 
20
+ ##
21
+
22
+
20
23
  class Injector(lang.Abstract):
21
24
  @abc.abstractmethod
22
25
  def try_provide(self, key: ta.Any) -> lang.Maybe[ta.Any]:
omlish/inject/inspect.py CHANGED
@@ -13,6 +13,9 @@ else:
13
13
  T = ta.TypeVar('T')
14
14
 
15
15
 
16
+ ##
17
+
18
+
16
19
  class Kwarg(ta.NamedTuple):
17
20
  name: str
18
21
  key: Key
omlish/inject/keys.py CHANGED
@@ -10,6 +10,9 @@ from .types import Tag
10
10
  T = ta.TypeVar('T')
11
11
 
12
12
 
13
+ ##
14
+
15
+
13
16
  @dc.dataclass(frozen=True)
14
17
  @dc.extra_params(cache_hash=True)
15
18
  class Key(lang.Final, ta.Generic[T]):
@@ -8,6 +8,9 @@ from .injector import Injector
8
8
  from .keys import Key
9
9
 
10
10
 
11
+ ##
12
+
13
+
11
14
  ProvisionListener: ta.TypeAlias = ta.Callable[[
12
15
  Injector,
13
16
  Key,
omlish/inject/multis.py CHANGED
@@ -69,6 +69,7 @@ class MapProvider(Provider):
69
69
  class SetBinder(ElementGenerator, ta.Generic[T]):
70
70
  def __init__(self, *, tag: ta.Any = None) -> None:
71
71
  super().__init__()
72
+
72
73
  self._tag: ta.Any = tag
73
74
  self._sbs: list[SetBinding] = []
74
75
 
@@ -96,6 +97,7 @@ class SetBinder(ElementGenerator, ta.Generic[T]):
96
97
  class MapBinder(ElementGenerator, ta.Generic[K, V]):
97
98
  def __init__(self, *, tag: ta.Any = None) -> None:
98
99
  super().__init__()
100
+
99
101
  self._tag: ta.Any = tag
100
102
  self._mbs: list[MapBinding] = []
101
103
 
omlish/inject/origins.py CHANGED
@@ -8,6 +8,9 @@ from .. import lang
8
8
  T = ta.TypeVar('T')
9
9
 
10
10
 
11
+ ##
12
+
13
+
11
14
  @dc.dataclass(frozen=True)
12
15
  @dc.extra_params(cache_hash=True)
13
16
  class Origin:
@@ -8,6 +8,9 @@ from .elements import Elements
8
8
  from .elements import as_elements
9
9
 
10
10
 
11
+ ##
12
+
13
+
11
14
  @dc.dataclass(frozen=True)
12
15
  @dc.extra_params(cache_hash=True)
13
16
  class Overrides(Element, lang.Final):
omlish/inject/privates.py CHANGED
@@ -9,6 +9,9 @@ from .keys import Key
9
9
  from .keys import as_key
10
10
 
11
11
 
12
+ ##
13
+
14
+
12
15
  @dc.dataclass(frozen=True)
13
16
  @dc.extra_params(cache_hash=True)
14
17
  class Expose(Element, lang.Final):
@@ -6,6 +6,9 @@ from .. import lang
6
6
  from .keys import Key
7
7
 
8
8
 
9
+ ##
10
+
11
+
9
12
  class _Missing(lang.NotInstantiable):
10
13
  pass
11
14
 
omlish/inject/types.py CHANGED
@@ -3,6 +3,9 @@ import collections
3
3
  from .. import lang
4
4
 
5
5
 
6
+ ##
7
+
8
+
6
9
  Tag = collections.namedtuple('Tag', 'tag') # noqa
7
10
 
8
11
 
omlish/inject/utils.py CHANGED
@@ -8,6 +8,9 @@ from .impl.origins import HasOriginsImpl
8
8
  T = ta.TypeVar('T')
9
9
 
10
10
 
11
+ ##
12
+
13
+
11
14
  @dc.dataclass(frozen=True, eq=False)
12
15
  class ConstFn(HasOriginsImpl, lang.Final, ta.Generic[T]):
13
16
  """An origin tracking provider function for a constant value. Equivalent to `lambda: v` but transparent."""
omlish/lang/__init__.py CHANGED
@@ -199,6 +199,7 @@ from .maybes import ( # noqa
199
199
 
200
200
  from .objects import ( # noqa
201
201
  SimpleProxy,
202
+ anon_object,
202
203
  arg_repr,
203
204
  attr_repr,
204
205
  build_mro_dict,
omlish/lang/objects.py CHANGED
@@ -199,3 +199,21 @@ class SimpleProxy(ta.Generic[T]):
199
199
 
200
200
  def __delattr__(self, item):
201
201
  delattr(object.__getattribute__(self, '__wrapped__'), item)
202
+
203
+
204
+ ##
205
+
206
+
207
+ class _AnonObject:
208
+ def __init__(self, **attrs: ta.Any) -> None:
209
+ super().__init__()
210
+
211
+ for k, v in attrs.items():
212
+ setattr(self, k, v)
213
+
214
+ def __init_subclass__(cls, **kwargs):
215
+ raise TypeError
216
+
217
+
218
+ def anon_object(**attrs: ta.Any) -> ta.Any:
219
+ return _AnonObject(**attrs)
omlish/term/codes.py CHANGED
@@ -29,6 +29,7 @@ def strip_ansi_codes(s: str) -> str:
29
29
  class ControlSequence:
30
30
  def __init__(self, fn: ta.Callable[..., str], desc: str) -> None:
31
31
  super().__init__()
32
+
32
33
  self._fn = fn
33
34
  self._desc = desc
34
35
 
@@ -40,19 +41,6 @@ class ControlSequence:
40
41
  return self._fn(*args, **kwargs)
41
42
 
42
43
 
43
- CUU = ControlSequence(lambda n: CSI + str(n) + 'A', 'Cursor Up')
44
- CUD = ControlSequence(lambda n: CSI + str(n) + 'B', 'Cursor Down')
45
- CUF = ControlSequence(lambda n: CSI + str(n) + 'C', 'Cursor Forward')
46
- CUB = ControlSequence(lambda n: CSI + str(n) + 'D', 'Cursor Back')
47
-
48
- CNL = ControlSequence(lambda n: CSI + str(n) + 'E', 'Cursor Next Line')
49
- CPL = ControlSequence(lambda n: CSI + str(n) + 'F', 'Cursor Previous Line')
50
- CHA = ControlSequence(lambda n: CSI + str(n) + 'G', 'Cursor Horizontal Line Absolute')
51
-
52
- CUP = ControlSequence(lambda n, m: CSI + str(n) + ';' + str(m) + 'H', 'Cursor Position')
53
- HVP = ControlSequence(lambda n, m: CSI + str(n) + ';' + str(m) + 'f', 'Horizontal Vertical Position')
54
-
55
-
56
44
  def _str_val(val: ta.Any) -> str:
57
45
  if isinstance(val, enum.Enum):
58
46
  return str(val.value)
@@ -60,6 +48,26 @@ def _str_val(val: ta.Any) -> str:
60
48
  return str(val)
61
49
 
62
50
 
51
+ def _opt_str_val(v):
52
+ if v is None:
53
+ return ''
54
+ else:
55
+ return _str_val(v)
56
+
57
+
58
+ CUU = ControlSequence(lambda n=None: CSI + _opt_str_val(n) + 'A', 'Cursor Up')
59
+ CUD = ControlSequence(lambda n=None: CSI + _opt_str_val(n) + 'B', 'Cursor Down')
60
+ CUF = ControlSequence(lambda n=None: CSI + _opt_str_val(n) + 'C', 'Cursor Forward')
61
+ CUB = ControlSequence(lambda n=None: CSI + _opt_str_val(n) + 'D', 'Cursor Back')
62
+
63
+ CNL = ControlSequence(lambda n=None: CSI + _opt_str_val(n) + 'E', 'Cursor Next Line')
64
+ CPL = ControlSequence(lambda n=None: CSI + _opt_str_val(n) + 'F', 'Cursor Previous Line')
65
+ CHA = ControlSequence(lambda n=None: CSI + _opt_str_val(n) + 'G', 'Cursor Horizontal Line Absolute')
66
+
67
+ CUP = ControlSequence(lambda n, m: CSI + str(n) + ';' + str(m) + 'H', 'Cursor Position')
68
+ HVP = ControlSequence(lambda n, m: CSI + str(n) + ';' + str(m) + 'f', 'Horizontal Vertical Position')
69
+
70
+
63
71
  class EDs(enum.Enum):
64
72
  FROM_CURSOR_TO_END = 0
65
73
  FROM_CURSOR_TO_BEGINNING = 1
@@ -67,7 +75,7 @@ class EDs(enum.Enum):
67
75
  ALL_AND_SCROLLBACK = 3
68
76
 
69
77
 
70
- ED = ControlSequence(lambda n: CSI + _str_val(n) + 'J', 'Erase in Display')
78
+ ED = ControlSequence(lambda n=None: CSI + _opt_str_val(n) + 'J', 'Erase in Display')
71
79
 
72
80
 
73
81
  class ELs(enum.Enum):
@@ -76,10 +84,10 @@ class ELs(enum.Enum):
76
84
  ALL = 2
77
85
 
78
86
 
79
- EL = ControlSequence(lambda n: CSI + _str_val(n) + 'K', 'Erase in Line')
87
+ EL = ControlSequence(lambda n=None: CSI + _opt_str_val(n) + 'K', 'Erase in Line')
80
88
 
81
- SU = ControlSequence(lambda n: CSI + str(n) + 'S', 'Scroll Up')
82
- SD = ControlSequence(lambda n: CSI + str(n) + 'T', 'Scroll Down')
89
+ SU = ControlSequence(lambda n=None: CSI + _opt_str_val(n) + 'S', 'Scroll Up')
90
+ SD = ControlSequence(lambda n=None: CSI + _opt_str_val(n) + 'T', 'Scroll Down')
83
91
 
84
92
  DSR = ControlSequence(lambda: CSI + '6n', 'Device Status Report')
85
93
 
@@ -1,3 +1,5 @@
1
+ # ruff: noqa: UP006 UP007
2
+ # @omlish-lite
1
3
  import sys
2
4
  import time
3
5
  import typing as ta
@@ -20,12 +22,12 @@ class ProgressBar:
20
22
 
21
23
  def __init__(
22
24
  self,
23
- total: int | None = None,
25
+ total: ta.Optional[int] = None,
24
26
  *,
25
27
  length: int = 40,
26
28
  interval: float = .2,
27
- start_time: float | None = None,
28
- out: ta.TextIO | None = None,
29
+ start_time: ta.Optional[float] = None,
30
+ out: ta.Optional[ta.TextIO] = None,
29
31
  ) -> None:
30
32
  super().__init__()
31
33
 
@@ -73,17 +75,25 @@ class ProgressBar:
73
75
  info = ' | '.join(info_parts)
74
76
  return f'{bar} {info}'
75
77
 
78
+ # Note: omitted, kept lite for now
79
+ # _LINE_UPDATE_PREFIX: ta.ClassVar[str] = ''.join([
80
+ # codes.EL(codes.ELs.ALL),
81
+ # codes.CHA(),
82
+ # ])
83
+
84
+ _LINE_UPDATE_PREFIX: ta.ClassVar[str] = '\033[2K\033['
85
+
76
86
  def print(
77
87
  self,
78
88
  *,
79
- now: float | None = None,
89
+ now: ta.Optional[float] = None,
80
90
  **kwargs: ta.Any,
81
91
  ) -> None:
82
92
  if now is None:
83
93
  now = time.time()
84
94
 
85
95
  line = self.render(**kwargs)
86
- self._out.write(f'\033[2K\033[G{line}')
96
+ self._out.write(f'{self._LINE_UPDATE_PREFIX}{line}')
87
97
  self._out.flush()
88
98
 
89
99
  self._last_print = now
@@ -92,7 +102,7 @@ class ProgressBar:
92
102
  self,
93
103
  n: int = 1,
94
104
  *,
95
- now: float | None = None,
105
+ now: ta.Optional[float] = None,
96
106
  silent: bool = False,
97
107
  ) -> None:
98
108
  if now is None:
@@ -110,8 +120,8 @@ def progress_bar(
110
120
  seq: ta.Iterable[T],
111
121
  *,
112
122
  no_tty_check: bool = False,
113
- total: int | None = None,
114
- out: ta.TextIO | None = None,
123
+ total: ta.Optional[int] = None,
124
+ out: ta.Optional[ta.TextIO] = None,
115
125
  **kwargs: ta.Any,
116
126
  ) -> ta.Generator[T, None, None]:
117
127
  if out is None:
@@ -137,3 +147,14 @@ def progress_bar(
137
147
 
138
148
  pb.print(complete=True)
139
149
  out.write('\n')
150
+
151
+
152
+ ##
153
+
154
+
155
+ if __name__ == '__main__':
156
+ def _main() -> None:
157
+ for _ in progress_bar(range(100), no_tty_check=True):
158
+ time.sleep(0.01)
159
+
160
+ _main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev264
3
+ Version: 0.0.0.dev265
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=x26AIwDzScUvnX-p4xlq6Zc5QYrAo0Vmgf1qHc1KL_M,8253
2
- omlish/__about__.py,sha256=NCoxY6m5jqrv72C1ciVF47Og5QOkzDr0iV7q2xpGC1w,3380
2
+ omlish/__about__.py,sha256=mUc6xs3AcgIXA_LmHEaA24dsIsYHNDRy7m0iT9wQ9og,3380
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=rer-TPOFDU6fYq_AWio_AmA-ckZ8JDY5shIzQ_yXfzA,8414
5
5
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
@@ -346,34 +346,34 @@ omlish/http/coro/simple.py,sha256=inWA_ss6Nz5Rqmy4dL9_SGah4anYoDecDTRQqVIGYeY,32
346
346
  omlish/http/coro/sockets.py,sha256=rtpZZ-XCOfC5tXr4Fmo1HSn-8f5nxfIOlJaPUkQeDyU,1654
347
347
  omlish/inject/__init__.py,sha256=n0RC9UDGsBQQ39cST39-XJqJPq2M0tnnh9yJubW9azo,1891
348
348
  omlish/inject/binder.py,sha256=3-6KMOcSgFE5bvthy3YUrRzCX5w7YSGmdJ3Tv2yXZGw,4022
349
- omlish/inject/bindings.py,sha256=pLXn2U3kvmAS-68IOG-tr77DbiI-wp9hGyy4lhG6_H8,525
350
- omlish/inject/eagers.py,sha256=5AkGYuwijG0ihsH9NSaZotggalJ5_xWXhHE9mkn6IBA,329
351
- omlish/inject/elements.py,sha256=npppGgYBQja0oPHkdBDmRhpm3md1mZT1FVcIQ--W2qI,1398
349
+ omlish/inject/bindings.py,sha256=KTjm3aXcywnYhFyIL8aaW6ijSuiFMd3WjFSiCMU5Wrk,530
350
+ omlish/inject/eagers.py,sha256=3kGf56-DWviFNTl5mnaeSptkdkBJuCrK-7JiQFIEU-4,334
351
+ omlish/inject/elements.py,sha256=Jq2SwWFRw2WFK9sFzyrlcE8iB6kfykNoxtyWv2yChk8,1417
352
352
  omlish/inject/exceptions.py,sha256=_wkN2tF55gQzmMOMKJC_9jYHBZzaBiCDcyqI9Sf2UZs,626
353
- omlish/inject/injector.py,sha256=CoCUeMm1Oot4sG4Ti1sKCWrhlvtJ5QAeAI22AFWu2RQ,1066
354
- omlish/inject/inspect.py,sha256=tw49r1RJVHrEHmT8WWA3_Bl9Z0L3lEGRqlLhbM5OmAM,592
355
- omlish/inject/keys.py,sha256=BczsGcNvoziQYggGKX3_XpRZQ3b0F_pYWSDLBg5lRvE,654
356
- omlish/inject/listeners.py,sha256=AIWUs4OTUPeURU1tS2CXeEbJwC1bZiuya9K6I2ElMns,581
353
+ omlish/inject/injector.py,sha256=fyvaRoJXo_oibx1_IiGkncP9oXnZSKtDm7-ULNKRXHE,1071
354
+ omlish/inject/inspect.py,sha256=Uq4KMloGWF_YS2mgZbrx-JXhZQnYHHKJSr68i9yoBVc,597
355
+ omlish/inject/keys.py,sha256=BGcSiitwHa1mbbfYsd49H26zQJTgPf5ZEBaweMhiPAE,659
356
+ omlish/inject/listeners.py,sha256=h15rSrRTjXEHhR6KbP1svYkxPVscT020drOBE4zfiUQ,586
357
357
  omlish/inject/managed.py,sha256=ASHaY57v9POUOpwgCiinTbE14U28ysl3D6RcFkLfcOQ,2114
358
- omlish/inject/multis.py,sha256=a3DparPZjLdkAYFuEFTI6kM3BhNpJbtjeAMRdbeJx0c,3363
359
- omlish/inject/origins.py,sha256=OVQkiuRxx6ZtE8ZliufdndtFexcfpj-wZSDkUeGUCYM,534
360
- omlish/inject/overrides.py,sha256=hrm243slCw_DDRbn3dK5QK1jfHezVokG-WYO2JaQOV8,535
361
- omlish/inject/privates.py,sha256=hZOa_keY3KlXAzyiZ-sfN697UKXpkfXXNUIEmGT5TAA,641
362
- omlish/inject/providers.py,sha256=Z6UzNCwRhKHHR0L5CyBMo4F-1M_xElLkPA6EKQWcqlw,754
358
+ omlish/inject/multis.py,sha256=wbX1yTHDRYQ9Gyu0t-nwiHYqeuY8P1W77gE5pxGcwEg,3365
359
+ omlish/inject/origins.py,sha256=h_nqvg-rGKEtLcqM50oDXJHAGcndg09Bq90cxLectNA,539
360
+ omlish/inject/overrides.py,sha256=C0CJs-1qomN9WJje0y1H3KQNc9e2T6QAJkWMJg9NViI,540
361
+ omlish/inject/privates.py,sha256=vsjvvNtpabUVPoVxHb5LpXbuNK_Jg9q_PG7-AAOb-nQ,646
362
+ omlish/inject/providers.py,sha256=V6wOsjq8T2XJJAmjpzeBQfyWeswfAuLzyt1yLueEpPc,759
363
363
  omlish/inject/scopes.py,sha256=iQ8gD5V2z6ahkJhfy7zycMnUky-scfT_M-GjLjKN6Uw,1989
364
- omlish/inject/types.py,sha256=11WVEPkZ-_8cv1BeTDRU-soIYxB_6x7dyWtsa2Iej9U,251
365
- omlish/inject/utils.py,sha256=_UOZqA8IcLWPqf4Mcg9iIusQ5yxP_6Txg6PWtUYl23o,408
364
+ omlish/inject/types.py,sha256=Z-ZEdgtCpHBNrbxxKaMVvfeD7hYXdL4rC7A9_VGxZ6g,256
365
+ omlish/inject/utils.py,sha256=Gc2qq45KgkyqDt03WSvOEZBCiuqQ6ESwplx5ZRBcY5M,413
366
366
  omlish/inject/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
367
367
  omlish/inject/impl/bindings.py,sha256=8H586RCgmvwq53XBL9WMbb-1-Tdw_hh9zxIDCwcHA1c,414
368
- omlish/inject/impl/elements.py,sha256=bJBbHce_eZyIua2wbcejMwd9Uv-QeYcQ-c5N1qOXSmU,5950
369
- omlish/inject/impl/injector.py,sha256=8Pm2TbI-ySfibpHG2kFeF1nBHkh5v-NEynykljkQ8ew,7560
368
+ omlish/inject/impl/elements.py,sha256=0Z45GCERzd5vKDi4exU1tMM1Ro0Hd4pMS_h-XoEpYPk,5955
369
+ omlish/inject/impl/injector.py,sha256=Kf1guZHd2LlnRR7Jx-OlXw55OtqS0D3SFxCx98AY-68,7565
370
370
  omlish/inject/impl/inspect.py,sha256=J0d2HJ-Z2-cHD4mJ0Kf5oJCOa2bMVG68Oh0Mhe3Cay4,3120
371
- omlish/inject/impl/multis.py,sha256=rRIWNCiTGaSWQUz_jxEy8LUmzdJDAlG94sLHYDS-ncg,2048
371
+ omlish/inject/impl/multis.py,sha256=j2QHSpJp0jPv10yZEZJwi0w62kXFQ25gkHa026xv4-Q,2053
372
372
  omlish/inject/impl/origins.py,sha256=-cdcwz3BWb5LuC9Yn5ynYOwyPsKH06-kCc-3U0PxZ5w,1640
373
373
  omlish/inject/impl/privates.py,sha256=alpCYyk5VJ9lJknbRH2nLVNFYVvFhkj-VC1Vco3zCFQ,2613
374
374
  omlish/inject/impl/providers.py,sha256=QnwhsujJFIHC0JTgd2Wlo1kP53i3CWTrj1nKU2DNxwg,2375
375
- omlish/inject/impl/proxy.py,sha256=1ko0VaKqzu9UG8bIldp9xtUrAVUOFTKWKTjOCqIGr4s,1636
376
- omlish/inject/impl/scopes.py,sha256=hKnzNieB-fJSFEXDP_QG1mCfIKoVFIfFlf9LiIt5tk4,5920
375
+ omlish/inject/impl/proxy.py,sha256=gyCME_W48Zrl7QJMKiIPwGpSctf5fhvh4ZldgtA9MEE,1641
376
+ omlish/inject/impl/scopes.py,sha256=_gIRFsFBLDVAUIrw9burDu4ph9TtgI-ksZWnHaKenKI,5925
377
377
  omlish/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
378
378
  omlish/io/abc.py,sha256=M40QB2udYpCEqmlxCcHv6FlJYJY6ymmJQBlaklYv0U8,1256
379
379
  omlish/io/buffers.py,sha256=Pu8CZUfiTJO_qq7cuPYAnNIag_7LJfr4ODaICsFZ6IU,5855
@@ -408,7 +408,7 @@ omlish/iterators/iterators.py,sha256=iTQQwBE6Wzoy36dnbPIws17zbjE3zNN4KwVw4Fzh-gY
408
408
  omlish/iterators/recipes.py,sha256=53mkexitMhkwXQZbL6DrhpT0WePQ_56uXd5Jaw3DfzI,467
409
409
  omlish/iterators/tools.py,sha256=Pi4ybXytUXVZ3xwK89xpPImQfYYId9p1vIFQvVqVLqA,2551
410
410
  omlish/iterators/unique.py,sha256=0jAX3kwzVfRNhe0Tmh7kVP_Q2WBIn8POo_O-rgFV0rQ,1390
411
- omlish/lang/__init__.py,sha256=OUR1wf7Syr8VdQwSJd9_92m-b6Gm4O11dqm92NnsC8s,5076
411
+ omlish/lang/__init__.py,sha256=aSU-1zjUxrLH-3FPpogKIxPBfOMiCzC9TOKRBajo1fA,5093
412
412
  omlish/lang/attrs.py,sha256=fofCKN0X8TMu1yGqHpLpNLih9r9HWl3D3Vn3b6O791w,3891
413
413
  omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
414
414
  omlish/lang/collections.py,sha256=aGi0j6VzVe2nz4l357Y4RD5_XNl8OJbmM5qM6BclrrY,1895
@@ -422,7 +422,7 @@ omlish/lang/generators.py,sha256=5LX17j-Ej3QXhwBgZvRTm_dq3n9veC4IOUcVmvSu2vU,524
422
422
  omlish/lang/imports.py,sha256=Gdl6xCF89xiMOE1yDmdvKWamLq8HX-XPianO58Jdpmw,9218
423
423
  omlish/lang/iterables.py,sha256=HOjcxOwyI5bBApDLsxRAGGhTTmw7fdZl2kEckxRVl-0,1994
424
424
  omlish/lang/maybes.py,sha256=dAgrUoAhCgyrHRqa73CkaGnpXwGc-o9n-NIThrNXnbU,3416
425
- omlish/lang/objects.py,sha256=ih3z47DysrW11Vf3vF8rdALsnhK19Afp6wTU8AHAPWM,4982
425
+ omlish/lang/objects.py,sha256=WlpOJv7kN7GiIquzcd4VEKjRlHmGAKt7yYnHaQL-2QQ,5297
426
426
  omlish/lang/outcomes.py,sha256=mpFy_VoM-b74L1aCFsjsZVUHx_icZ1AHMOKeVesjOp4,8628
427
427
  omlish/lang/params.py,sha256=QmNVBfJsfxjDG5ilDPgHV7sK4UwRztkSQdLTo0umb8I,6648
428
428
  omlish/lang/resolving.py,sha256=OuN2mDTPNyBUbcrswtvFKtj4xgH4H4WglgqSKv3MTy0,1606
@@ -720,8 +720,8 @@ omlish/subprocesses/sync.py,sha256=HKmKM99_Y7tkJRg_n5onXrw41IZt5M5fqU0281LY-mo,3
720
720
  omlish/subprocesses/utils.py,sha256=MJb6hvKhZceTmBeFVqlc5oM7rDxWkUzSzK9nKvbIvM8,396
721
721
  omlish/subprocesses/wrap.py,sha256=HMvCZrO2H227oGNN03KjB3FI-M5bAICqp19W8oG2f5M,763
722
722
  omlish/term/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
723
- omlish/term/codes.py,sha256=d8oii_9UJDm_TAowXYH3XDckX0XNBf2kiEPJKkVMMow,6149
724
- omlish/term/progressbar.py,sha256=TiwdmPSMa5jQj35i1NQURTWQGy4eWUNx_XiPM38JtvQ,3184
723
+ omlish/term/codes.py,sha256=fDRhUYzCzllcvCfMMgEroJaQoxqFsfTivpYdVmnwcCE,6390
724
+ omlish/term/progressbar.py,sha256=B5DfB_1pAE99z5628fpZbXYg-dfhmEqmyBBWH5tdbgE,3666
725
725
  omlish/term/vt100/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
726
726
  omlish/term/vt100/c.py,sha256=cAhDKXI81PZRtFmTotfad3HZGREP1QnOlWYoAw6v-Fw,3532
727
727
  omlish/term/vt100/states.py,sha256=OxPUxfFTcfz56MhtDgIigEApChOtN6XO1g6R2H08mu4,8303
@@ -768,9 +768,9 @@ omlish/text/parts.py,sha256=Q9NvoyEGQKIWgiPD4D_Qc66cWAuyEKE033dT9m7c3Wk,6662
768
768
  omlish/text/random.py,sha256=8feS5JE_tSjYlMl-lp0j93kCfzBae9AM2cXlRLebXMA,199
769
769
  omlish/text/go/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
770
770
  omlish/text/go/quoting.py,sha256=N9EYdnFdEX_A8fOviH-1w4jwV3XOQ7VU2WsoUNubYVY,9137
771
- omlish-0.0.0.dev264.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
772
- omlish-0.0.0.dev264.dist-info/METADATA,sha256=VHKy0N654AgbVllFdUlYG9DMKlCVRO7aj_cDdKJV5jI,4198
773
- omlish-0.0.0.dev264.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
774
- omlish-0.0.0.dev264.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
775
- omlish-0.0.0.dev264.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
776
- omlish-0.0.0.dev264.dist-info/RECORD,,
771
+ omlish-0.0.0.dev265.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
772
+ omlish-0.0.0.dev265.dist-info/METADATA,sha256=bfiaKjcUegKuHHiSKfGvlXXvdg9KKeuO3T_2-rfv6p8,4198
773
+ omlish-0.0.0.dev265.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
774
+ omlish-0.0.0.dev265.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
775
+ omlish-0.0.0.dev265.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
776
+ omlish-0.0.0.dev265.dist-info/RECORD,,