omlish 0.0.0.dev433__py3-none-any.whl → 0.0.0.dev434__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 (35) hide show
  1. omlish/__about__.py +2 -2
  2. omlish/asyncs/all.py +0 -13
  3. omlish/inject/__init__.py +152 -126
  4. omlish/inject/binder.py +7 -4
  5. omlish/inject/impl/elements.py +6 -8
  6. omlish/inject/impl/injector.py +58 -32
  7. omlish/inject/impl/inspect.py +1 -0
  8. omlish/inject/impl/maysync.py +44 -0
  9. omlish/inject/impl/multis.py +5 -5
  10. omlish/inject/impl/privates.py +8 -8
  11. omlish/inject/impl/providers.py +24 -31
  12. omlish/inject/impl/providers2.py +43 -0
  13. omlish/inject/impl/scopes.py +19 -25
  14. omlish/inject/impl/sync.py +42 -0
  15. omlish/inject/injector.py +9 -11
  16. omlish/inject/inspect.py +1 -3
  17. omlish/inject/listeners.py +4 -4
  18. omlish/inject/managed.py +52 -20
  19. omlish/inject/maysync.py +27 -0
  20. omlish/inject/providers.py +6 -0
  21. omlish/inject/scopes.py +38 -10
  22. omlish/inject/sync.py +46 -0
  23. omlish/lang/__init__.py +12 -3
  24. omlish/lang/asyncs.py +18 -0
  25. omlish/lang/contextmanagers.py +23 -0
  26. omlish/lite/asyncs.py +21 -0
  27. omlish/lite/maysync.py +21 -0
  28. {omlish-0.0.0.dev433.dist-info → omlish-0.0.0.dev434.dist-info}/METADATA +1 -4
  29. {omlish-0.0.0.dev433.dist-info → omlish-0.0.0.dev434.dist-info}/RECORD +33 -30
  30. omlish/asyncs/bridge.py +0 -359
  31. omlish/asyncs/utils.py +0 -18
  32. {omlish-0.0.0.dev433.dist-info → omlish-0.0.0.dev434.dist-info}/WHEEL +0 -0
  33. {omlish-0.0.0.dev433.dist-info → omlish-0.0.0.dev434.dist-info}/entry_points.txt +0 -0
  34. {omlish-0.0.0.dev433.dist-info → omlish-0.0.0.dev434.dist-info}/licenses/LICENSE +0 -0
  35. {omlish-0.0.0.dev433.dist-info → omlish-0.0.0.dev434.dist-info}/top_level.txt +0 -0
omlish/inject/scopes.py CHANGED
@@ -7,16 +7,17 @@ from .. import dataclasses as dc
7
7
  from .. import lang
8
8
  from .bindings import Binding
9
9
  from .elements import Element
10
+ from .injector import AsyncInjector
10
11
  from .keys import Key
11
12
  from .keys import as_key
12
13
  from .providers import Provider
13
14
  from .types import Scope
14
15
 
15
16
 
16
- if ta.TYPE_CHECKING:
17
- from . import injector as injector_
18
- else:
19
- injector_ = lang.proxy_import('.injector', __package__)
17
+ with lang.auto_proxy_import(globals()):
18
+ from . import injector as _injector
19
+ from . import maysync as _maysync
20
+ from . import sync as _sync
20
21
 
21
22
 
22
23
  ##
@@ -65,7 +66,7 @@ class SeededScope(Scope, lang.Final):
65
66
 
66
67
  class Manager(lang.Abstract):
67
68
  @abc.abstractmethod
68
- def __call__(self, seeds: ta.Mapping[Key, ta.Any]) -> ta.ContextManager[None]:
69
+ def __call__(self, seeds: ta.Mapping[Key, ta.Any]) -> ta.AsyncContextManager[None]:
69
70
  raise NotImplementedError
70
71
 
71
72
 
@@ -81,11 +82,38 @@ def bind_scope_seed(k: ta.Any, ss: SeededScope) -> Element:
81
82
  return Binding(k, ScopeSeededProvider(ss, k))
82
83
 
83
84
 
84
- @contextlib.contextmanager
85
- def enter_seeded_scope(
86
- i: injector_.Injector,
85
+ ##
86
+
87
+
88
+ @contextlib.asynccontextmanager
89
+ async def async_enter_seeded_scope(
90
+ i: '_injector.AsyncInjector',
87
91
  ss: SeededScope,
88
92
  keys: ta.Mapping[Key, ta.Any],
89
- ) -> ta.Generator[None]:
90
- with i.provide(Key(SeededScope.Manager, tag=ss))(keys):
93
+ ) -> ta.AsyncGenerator[None]:
94
+ async with (await i.provide(Key(SeededScope.Manager, tag=ss)))(keys):
91
95
  yield
96
+
97
+
98
+ def enter_seeded_scope(
99
+ i: '_sync.Injector',
100
+ ss: SeededScope,
101
+ keys: ta.Mapping[Key, ta.Any],
102
+ ) -> ta.ContextManager[None]:
103
+ return lang.run_maysync_context_manager(async_enter_seeded_scope(
104
+ i[AsyncInjector],
105
+ ss,
106
+ keys,
107
+ ))
108
+
109
+
110
+ def maysync_enter_seeded_scope(
111
+ i: '_maysync.MaysyncInjector',
112
+ ss: SeededScope,
113
+ keys: ta.Mapping[Key, ta.Any],
114
+ ) -> ta.ContextManager[None]:
115
+ return lang.sync_async_context_manager(async_enter_seeded_scope(
116
+ i[AsyncInjector],
117
+ ss,
118
+ keys,
119
+ ))
omlish/inject/sync.py ADDED
@@ -0,0 +1,46 @@
1
+ import abc
2
+ import typing as ta
3
+
4
+ from .. import lang
5
+ from .elements import Elemental
6
+ from .elements import as_elements
7
+ from .inspect import KwargsTarget
8
+ from .keys import Key
9
+
10
+
11
+ with lang.auto_proxy_import(globals()):
12
+ from .impl import sync as _sync
13
+
14
+
15
+ T = ta.TypeVar('T')
16
+
17
+
18
+ ##
19
+
20
+
21
+ class Injector(lang.Abstract):
22
+ @abc.abstractmethod
23
+ def try_provide(self, key: ta.Any) -> lang.Maybe[ta.Any]:
24
+ raise NotImplementedError
25
+
26
+ @abc.abstractmethod
27
+ def provide(self, key: ta.Any) -> ta.Any:
28
+ raise NotImplementedError
29
+
30
+ @abc.abstractmethod
31
+ def provide_kwargs(self, kt: KwargsTarget) -> ta.Mapping[str, ta.Any]:
32
+ raise NotImplementedError
33
+
34
+ @abc.abstractmethod
35
+ def inject(self, obj: ta.Any) -> ta.Any:
36
+ raise NotImplementedError
37
+
38
+ def __getitem__(
39
+ self,
40
+ target: Key[T] | type[T],
41
+ ) -> T:
42
+ return self.provide(target)
43
+
44
+
45
+ def create_injector(*args: Elemental) -> Injector:
46
+ return _sync.create_injector(as_elements(*args))
omlish/lang/__init__.py CHANGED
@@ -15,6 +15,9 @@ with _auto_proxy_init(
15
15
 
16
16
  sync_await,
17
17
  sync_async_list,
18
+
19
+ SyncAsyncContextManager,
20
+ sync_async_context_manager,
18
21
  )
19
22
 
20
23
  from .attrstorage import ( # noqa
@@ -184,6 +187,9 @@ with _auto_proxy_init(
184
187
  Timer,
185
188
 
186
189
  double_check_setdefault,
190
+
191
+ call_with_exit_stack,
192
+ call_with_async_exit_stack,
187
193
  )
188
194
 
189
195
  from .datetimes import ( # noqa
@@ -487,9 +493,6 @@ with _auto_proxy_init(
487
493
  )
488
494
 
489
495
  from ..lite.maysync import ( # noqa
490
- mark_maysync,
491
- is_maysync,
492
-
493
496
  AnyMaysyncFn,
494
497
 
495
498
  MaywaitableAlreadyConsumedError,
@@ -504,6 +507,12 @@ with _auto_proxy_init(
504
507
  is_running_maysync,
505
508
 
506
509
  run_maysync,
510
+
511
+ RunMaysyncContextManager,
512
+ run_maysync_context_manager,
513
+
514
+ mark_maysync,
515
+ is_maysync,
507
516
  )
508
517
 
509
518
  from ..lite.objects import ( # noqa
omlish/lang/asyncs.py CHANGED
@@ -79,3 +79,21 @@ def sync_async_list(
79
79
  raise TypeError(lst)
80
80
 
81
81
  return lst
82
+
83
+
84
+ @ta.final
85
+ class SyncAsyncContextManager(ta.Generic[T]):
86
+ def __init__(self, acm: ta.AsyncContextManager[T]) -> None:
87
+ self._acm = acm
88
+
89
+ def __repr__(self) -> str:
90
+ return f'{self.__class__.__name__}({self._acm!r})'
91
+
92
+ def __enter__(self) -> T:
93
+ return sync_await(self._acm.__aenter__())
94
+
95
+ def __exit__(self, exc_type, exc_val, exc_tb):
96
+ return sync_await(self._acm.__aexit__(exc_type, exc_val, exc_tb))
97
+
98
+
99
+ sync_async_context_manager = SyncAsyncContextManager
@@ -20,6 +20,8 @@ T = ta.TypeVar('T')
20
20
  K = ta.TypeVar('K')
21
21
  V = ta.TypeVar('V')
22
22
 
23
+ P = ta.ParamSpec('P')
24
+
23
25
 
24
26
  ##
25
27
 
@@ -382,3 +384,24 @@ def double_check_setdefault(
382
384
  v = fn()
383
385
  dct[k] = v
384
386
  return v
387
+
388
+
389
+ ##
390
+
391
+
392
+ def call_with_exit_stack(
393
+ fn: ta.Callable[ta.Concatenate[contextlib.ExitStack, P], T],
394
+ *args: ta.Any,
395
+ **kwargs: ta.Any,
396
+ ) -> T:
397
+ with contextlib.ExitStack() as es:
398
+ return fn(es, *args, **kwargs)
399
+
400
+
401
+ async def call_with_async_exit_stack(
402
+ fn: ta.Callable[ta.Concatenate[contextlib.AsyncExitStack, P], ta.Awaitable[T]],
403
+ *args: ta.Any,
404
+ **kwargs: ta.Any,
405
+ ) -> T:
406
+ async with contextlib.AsyncExitStack() as aes:
407
+ return await fn(aes, *args, **kwargs)
omlish/lite/asyncs.py CHANGED
@@ -18,3 +18,24 @@ def as_async(fn: ta.Callable[..., T], *, wrap: bool = False) -> ta.Callable[...,
18
18
  return fn(*args, **kwargs)
19
19
 
20
20
  return functools.wraps(fn)(inner) if wrap else inner
21
+
22
+
23
+ ##
24
+
25
+
26
+ @ta.final
27
+ class SyncToAsyncContextManager(ta.Generic[T]):
28
+ def __init__(self, cm: ta.ContextManager[T]) -> None:
29
+ self._cm = cm
30
+
31
+ def __repr__(self) -> str:
32
+ return f'{self.__class__.__name__}({self._cm!r})'
33
+
34
+ async def __aenter__(self) -> T:
35
+ return self._cm.__enter__()
36
+
37
+ async def __aexit__(self, exc_type, exc_value, traceback, /):
38
+ return self._cm.__exit__(exc_type, exc_value, traceback)
39
+
40
+
41
+ as_async_context_manager = SyncToAsyncContextManager
omlish/lite/maysync.py CHANGED
@@ -523,6 +523,27 @@ def run_maysync(m):
523
523
  ##
524
524
 
525
525
 
526
+ @ta.final
527
+ class RunMaysyncContextManager(ta.Generic[T]):
528
+ def __init__(self, acm: ta.AsyncContextManager[T]) -> None:
529
+ self._acm = acm
530
+
531
+ def __repr__(self) -> str:
532
+ return f'{self.__class__.__name__}({self._acm!r})'
533
+
534
+ def __enter__(self) -> T:
535
+ return run_maysync(self._acm.__aenter__())
536
+
537
+ def __exit__(self, exc_type, exc_val, exc_tb):
538
+ return run_maysync(self._acm.__aexit__(exc_type, exc_val, exc_tb))
539
+
540
+
541
+ run_maysync_context_manager = RunMaysyncContextManager
542
+
543
+
544
+ ##
545
+
546
+
526
547
  _MAYSYNC_MARK_ATTR = '__maysync__'
527
548
 
528
549
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev433
3
+ Version: 0.0.0.dev434
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -294,9 +294,6 @@ examples are:
294
294
  - **pytest** - What is used for all standard testing - as lite code has no dependencies of any kind its testing uses
295
295
  stdlib's [unittest](https://docs.python.org/3/library/unittest.html).
296
296
  - **wrapt** - For (optionally-enabled) injector circular proxies.
297
- - **greenlet** - For some gnarly stuff like the
298
- [sync<->async bridge](https://github.com/wrmsr/omlish/blob/master/omlish/asyncs/bridge.py) and the
299
- [io trampoline](https://github.com/wrmsr/omlish/blob/master/omextra/io/trampoline.py).
300
297
  - **sqlalchemy** - Parts of the codebase use SQLAlchemy for db stuff, but it is being migrated away from in favor of the
301
298
  internal api. It will however likely still remain as an optional dep for the api adapter.
302
299
 
@@ -1,5 +1,5 @@
1
1
  omlish/.omlish-manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
2
- omlish/__about__.py,sha256=Zv_1p0fhbJrF6QKOgRP0K5IQT7b_xpYlyQIa4fTot7w,3575
2
+ omlish/__about__.py,sha256=m7yiLBUWx0CVlaZfQTSqMs9tncfitfDQ8RfhF4ieLow,3575
3
3
  omlish/__init__.py,sha256=SsyiITTuK0v74XpKV8dqNaCmjOlan1JZKrHQv5rWKPA,253
4
4
  omlish/c3.py,sha256=ZNIMl1kwg3qdei4DiUrJPQe5M81S1e76N-GuNSwLBAE,8683
5
5
  omlish/cached.py,sha256=MLap_p0rdGoDIMVhXVHm1tsbcWobJF0OanoodV03Ju8,542
@@ -19,13 +19,11 @@ omlish/argparse/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  omlish/argparse/all.py,sha256=NeeMM5MIebY7XDAHaCxUzeesEoUYwsf5i9PrBUcO1cI,1057
20
20
  omlish/argparse/cli.py,sha256=60cfq_WFLwL3YsIQxGAQ7XDi-LzNjH33RavcKdRnhUU,8737
21
21
  omlish/asyncs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
22
- omlish/asyncs/all.py,sha256=cS7dTWR8l3vF0oWYYiV9JXp0YGxOecVyCuJ2fydAPU0,526
23
- omlish/asyncs/bridge.py,sha256=BPwEeiv3iG0uMk23PIWFkdGLyiBq_x3qnzheV7ysOqY,10129
22
+ omlish/asyncs/all.py,sha256=zE9zBNepDSczQ-QhnzwFz59IZIex3HuUqfKIgwbJLgY,329
24
23
  omlish/asyncs/buffers.py,sha256=_Ds4Aa1bUWQwQTGmcYsKLjcJ_d5HgbSkPTFrG9y-eMQ,1424
25
24
  omlish/asyncs/flavors.py,sha256=1mNxGNRVmjUHzA13K5ht8vdJv4CLEmzYTQ6BZXr1520,4866
26
25
  omlish/asyncs/trio.py,sha256=fmZ5b_lKdVV8NQ3euCUutWgnkqTFzSnOjvJSA_jvmrE,367
27
26
  omlish/asyncs/trio_asyncio.py,sha256=b6H5H32pB79Uz5xvWEmuhXTJgTAeKFHBHzocv_Rpt5A,1332
28
- omlish/asyncs/utils.py,sha256=-oaa6nheDxMOxVDTfRylWZGlyOja3UVJEV2IibJXQv4,369
29
27
  omlish/asyncs/anyio/__init__.py,sha256=AkwRD3XFWmEzBeHV-eAzwpA4F04bl7xyyapigrxMR8g,1747
30
28
  omlish/asyncs/anyio/backends.py,sha256=jJIymWoiedaEJJm82gvKiJ41EWLQZ-bcyNHpbDpKKi4,1584
31
29
  omlish/asyncs/anyio/futures.py,sha256=Nm1gLerZEnHk-rlsmr0UfK168IWIK6zA8EebZFtoY_E,2052
@@ -350,38 +348,43 @@ omlish/http/coro/server/fdio.py,sha256=qZE4g5y4XESsTObSKyVggI-yzig57gSGJb4Z0rcHv
350
348
  omlish/http/coro/server/server.py,sha256=lkpcx4cb0mwDFYpP3MvW6mX0_1fKXUI8snm_bycyUwo,18681
351
349
  omlish/http/coro/server/simple.py,sha256=j1RZ3niKrgGM2qFnjdYWn_eniZzay5j49Ca4L3u8vO4,3296
352
350
  omlish/http/coro/server/sockets.py,sha256=24gU6wpIZuzYWKQD8UsHyYfTZlbcUFvkqXq5KVgWpQo,2261
353
- omlish/inject/__init__.py,sha256=dRTx6sIuWzUD7enaWRCOoehTz4g26nRblb8N-gpiwUQ,2074
354
- omlish/inject/binder.py,sha256=woOK7I5fk4K4kDF684Ia003jE_lviGQXacNKAmXqx5M,5114
351
+ omlish/inject/__init__.py,sha256=1s_2338tLi2VWKy8HijBSkAlkanVY1uZ8iZec8SOEws,2929
352
+ omlish/inject/binder.py,sha256=_TNPGcqtaVqCLoxMx2LBVSvZWmAUs4JcxAqnCpy7PG0,5253
355
353
  omlish/inject/bindings.py,sha256=PlvOnUREjvc6F8nOJdzl1k9SAf80icRB4qWFqDop87M,536
356
354
  omlish/inject/eagers.py,sha256=JBY7PcjXt-Rg9scQ1ol9xpcoTLXkXC_Ie9uwTWdzUkA,340
357
355
  omlish/inject/elements.py,sha256=y4luEO_-eOlVnLcUDiNGSyMXee4pusl46ZGr0JFhbcY,1405
358
356
  omlish/inject/errors.py,sha256=_wkN2tF55gQzmMOMKJC_9jYHBZzaBiCDcyqI9Sf2UZs,626
359
- omlish/inject/injector.py,sha256=fyvaRoJXo_oibx1_IiGkncP9oXnZSKtDm7-ULNKRXHE,1071
360
- omlish/inject/inspect.py,sha256=Uq4KMloGWF_YS2mgZbrx-JXhZQnYHHKJSr68i9yoBVc,597
357
+ omlish/inject/injector.py,sha256=j78j4ArahsY_C3vgOIhzv29pDjp0o97yvmxHIr7jk2E,1125
358
+ omlish/inject/inspect.py,sha256=FWGEtxiFV_Sqqza9xnbYm4JgV2LE4D0s5iszV9Nd5_M,547
361
359
  omlish/inject/keys.py,sha256=7jnI2cw7cvLlzZAfe5SC50O3oPOpOB6iGZGTigyfQvs,682
362
- omlish/inject/listeners.py,sha256=Ffaun2fVWAgAwKgLdgziJynG_jhAWaaPEsy-2I2Cmpw,599
360
+ omlish/inject/listeners.py,sha256=bav7-uzfpajFAmH_snM0PW2oCfMavmhbE6R4-gjOmJ8,620
363
361
  omlish/inject/lite.py,sha256=AFOCj_SznDCPjkiVSKdFXL2hH1q2o4kaDnzkxRWDpsI,2615
364
- omlish/inject/managed.py,sha256=-9aBm1vRPOjNz4kgOmpt8S2T55s727t9RiggFBH8maU,2096
362
+ omlish/inject/managed.py,sha256=DKU4f_-20TXM51zrGU2XP-IX6Pzg8H9JfVJTIZH_-T8,2930
363
+ omlish/inject/maysync.py,sha256=xsVl2p-urkflKTFVQW86c3BJ6bnNeJrWC-u-UcSF1gU,441
365
364
  omlish/inject/multis.py,sha256=Dn63jE8P5ahSKc1IDBdzzx6ByBCgVOth5t4frG9m4UA,3336
366
365
  omlish/inject/origins.py,sha256=-qXa18rIIkNwBdTrvASRDjgPYnoY6n6OPC222jJDrXg,551
367
366
  omlish/inject/overrides.py,sha256=ybEcq9cDf6kvqu5mqnwi6Evj0MFjKNeE3r0oUlGw5E4,546
368
367
  omlish/inject/privates.py,sha256=CyE-hvQ-F_uyCzcwfdiYVtfm9IF1WZvMDOYilFyZmWk,658
369
- omlish/inject/providers.py,sha256=GDjSEN6iLsc-Tdu_OCPvFHWu4yP0Vn0pAyH_xjw1DPg,783
370
- omlish/inject/scopes.py,sha256=3N7rnX7LyFabDfiN-qC9M-l9EPbPQuf8dBvdVNkaSr8,1891
368
+ omlish/inject/providers.py,sha256=Usvi0YgjS5jrAqQFhzeU2artxRSTM4zIoz72lac1PEA,931
369
+ omlish/inject/scopes.py,sha256=p1uOUMtlzhIWH0HC08HCIxeWYIHb2i9O-Rhgzp32Csw,2576
370
+ omlish/inject/sync.py,sha256=c60h6CSzk4XDOy4peZ9BuJypsp-OTFh_ZnF50LmxMTg,1007
371
371
  omlish/inject/tags.py,sha256=gRDLa-WdZc9DC7KwwmoIPAi8g_qdGpRWuMT7HCd7CL0,433
372
372
  omlish/inject/types.py,sha256=Z-ZEdgtCpHBNrbxxKaMVvfeD7hYXdL4rC7A9_VGxZ6g,256
373
373
  omlish/inject/utils.py,sha256=Gc2qq45KgkyqDt03WSvOEZBCiuqQ6ESwplx5ZRBcY5M,413
374
374
  omlish/inject/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
375
375
  omlish/inject/impl/bindings.py,sha256=xSvUcoDz8NH-aNHPwBPEZsFg73K2WcF_A63npVbGt_k,420
376
- omlish/inject/impl/elements.py,sha256=PM_055moROskSTQqmohEa6I0tt1OQ-VRNArXCMG6vyk,5947
377
- omlish/inject/impl/injector.py,sha256=agM5NKugC9du_vBgawL9H_02A76GPQFjG-3cQVjz25s,7600
378
- omlish/inject/impl/inspect.py,sha256=reXkNsjyvJXva5379tHTWklVK0vzqGLP0BgI_4VVPgQ,3116
379
- omlish/inject/impl/multis.py,sha256=Y287xntr1wBNYpwQBc0f_Ca7UkXjkscKhgGHZK_zdbg,2053
376
+ omlish/inject/impl/elements.py,sha256=5wb_JCyfEKrJ1Y6TIZVS-gwgmLTZIUXZ_TV735RKcEM,5901
377
+ omlish/inject/impl/injector.py,sha256=0e8Il9ObzWMDBJDLQk9RRBkK83mk-nIRlKU_LtmQfLI,8266
378
+ omlish/inject/impl/inspect.py,sha256=HLhz5DfP9dwvbIYnwqsfR9ADjCoWs9q4Gh7J4BpImf4,3135
379
+ omlish/inject/impl/maysync.py,sha256=7GWjrvJStOx85BCvk8IJAmmkoGkChFAAi2h7j2pe6Qs,1207
380
+ omlish/inject/impl/multis.py,sha256=fa31UdkBYdAulfYdrkU1klDZicuQRyaBDbG28kaw8SI,2092
380
381
  omlish/inject/impl/origins.py,sha256=dgGdkoMN6I4DZrWjlpZYijeFsrF6Up1WPq_QSAgTtuQ,1676
381
- omlish/inject/impl/privates.py,sha256=alpCYyk5VJ9lJknbRH2nLVNFYVvFhkj-VC1Vco3zCFQ,2613
382
- omlish/inject/impl/providers.py,sha256=G3qUYlk05-xzvF6BiEGrtFNfzLYMC9lebOg_Wl1oFL4,2273
382
+ omlish/inject/impl/privates.py,sha256=uxMAl0MOPu-MeLd-q1DySu7J5FcdRVL1B0XgC4dnB6I,2667
383
+ omlish/inject/impl/providers.py,sha256=qqPUF9qZZ-CGTTc7ZPskjexM2aK8xdY0gLPMshB5VKw,2127
384
+ omlish/inject/impl/providers2.py,sha256=NOIbX_sTAL8uXf-lMoOiFTFZQMe6ywLU7nIghgF_ISw,1326
383
385
  omlish/inject/impl/proxy.py,sha256=S1qNn-5pbsAj9hhasQZ9nnFSCX8SuAYCcBOZ6BtKxlk,1641
384
- omlish/inject/impl/scopes.py,sha256=sL250qM4-hCwwO28GdynM02OMb09FMmIvo_ifYhNhj0,5909
386
+ omlish/inject/impl/scopes.py,sha256=5AMVzO9HgJT7yNwBCG2us9pUxQZpySsalb0qI2ZMeJ4,5876
387
+ omlish/inject/impl/sync.py,sha256=v0FrcMfEFIT358AmAuERvzJ3o19r6DLZj6_0hjuW5Dk,1090
385
388
  omlish/io/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
386
389
  omlish/io/abc.py,sha256=M40QB2udYpCEqmlxCcHv6FlJYJY6ymmJQBlaklYv0U8,1256
387
390
  omlish/io/buffers.py,sha256=WRuojN-EICJ9eIhy6U2Tw2-oTBIwHTBhN86wQiD2s88,7293
@@ -415,14 +418,14 @@ omlish/iterators/iterators.py,sha256=RxW35yQ5ed8vBQ22IqpDXFx-i5JiLQdp7-pkMZXhJJ8
415
418
  omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,472
416
419
  omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
417
420
  omlish/iterators/unique.py,sha256=BSE-eanva8byFCJi09Nt2zzTsVr8LnTqY1PIInGYRs0,1396
418
- omlish/lang/__init__.py,sha256=lgRNRbIwj0FAU6PH4MMU9fqP5A1NI9wcHHWK8LjFyBg,10222
419
- omlish/lang/asyncs.py,sha256=rfpLE2ZacVKGYB9DSFuMBurQzkPRjB1qljcS3sIuSsw,1767
421
+ omlish/lang/__init__.py,sha256=HqVWUkrUArOsjGoWrL-Ck6Zz2U6kKpj2DzbpHed-k1o,10431
422
+ omlish/lang/asyncs.py,sha256=LV_4I3-WbLY8-SUXYJvKlzfL-Hd5ASFOlyPi3uMJYJk,2266
420
423
  omlish/lang/attrstorage.py,sha256=UUnoENCMQF3twBfxBcIKa5mpXsAxWnNYDayhU8xgmpU,5224
421
424
  omlish/lang/casing.py,sha256=3_c7cxQOc4z_YezaU2B4NCTAsPh_kDL4wUTK5kZU6kg,4675
422
425
  omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
423
426
  omlish/lang/collections.py,sha256=kVMp1JJ6ycvKzuiOmf2ZF5Eg2mm3vJGPjkUcV_IACMk,2528
424
427
  omlish/lang/comparison.py,sha256=MOwEG0Yny-jBPHO9kQto9FSRyeNpQW24UABsghkrHxY,1356
425
- omlish/lang/contextmanagers.py,sha256=daUaNgoFHSMaz2E9FVqgPLQOLrGf9BjMHtanVnyWvDI,9036
428
+ omlish/lang/contextmanagers.py,sha256=jkQ9YHhQySYHPH0BrWxBrNzMuG7IpSWcPvcdfMIBE4A,9578
426
429
  omlish/lang/datetimes.py,sha256=01tg21QOx-PWDlm-CSFTalym3vpqF0EKzeinmtcVNoU,379
427
430
  omlish/lang/descriptors.py,sha256=sVJ1Pr4ihp26Tu9UCvDSyfSf-DhBnFGnbpYIFF32c7g,6877
428
431
  omlish/lang/enums.py,sha256=F9tflHfaAoV2MpyuhZzpfX9-H55M3zNa9hCszsngEo8,111
@@ -473,7 +476,7 @@ omlish/lifecycles/transitions.py,sha256=3IFdWGtAeoy3XRlIyW7yCKV4e4Iof9ytkqklGMRF
473
476
  omlish/lite/__init__.py,sha256=cyZEpGob7XjU8DohyNxVe5CQRk4CQ5vrHL42OdhQb8w,148
474
477
  omlish/lite/abstract.py,sha256=Z3kLviPNGLkmA8m8BZILzWxez_sP18OyzgMP3-c2-RI,4068
475
478
  omlish/lite/args.py,sha256=ILJXAiN3KjIoJwY42aKpYPngUdxHIy9ssVIExFVz3fE,978
476
- omlish/lite/asyncs.py,sha256=MMRbC38mbsgBPovGLjq4iBdn74DjMVzGc4nVZxN_DUY,441
479
+ omlish/lite/asyncs.py,sha256=sTXTUTTVI8m1a1P6NxObQKk-NFKlmpcnNbucr4Fg-NU,937
477
480
  omlish/lite/attrops.py,sha256=bUa2ILC4Z89-B1IWSac9XV_VvjKDnQXKDR0mZ6e9SMk,8764
478
481
  omlish/lite/cached.py,sha256=ocQcppTwGdSnKPYMz75VoH526UUT8YtDJeRczBX0-wI,1306
479
482
  omlish/lite/check.py,sha256=ytCkwZoKfOlJqylL-AGm8C2WfsWJd2q3kFbnZCzX3_M,13844
@@ -485,7 +488,7 @@ omlish/lite/inject.py,sha256=Z0d3dnjxt9czMFwWk_y-Yl7yItCUa5Nf1YRu4GkMA5k,29045
485
488
  omlish/lite/json.py,sha256=m0Ce9eqUZG23-H7-oOp8n1sf4fzno5vtK4AK_4Vc-Mg,706
486
489
  omlish/lite/marshal.py,sha256=J0VNr9_LjGLjxKW0wlZtIFnh_US7zwstCmtpe9Pk_D0,22969
487
490
  omlish/lite/maybes.py,sha256=NusCpK0FVqkIutw6_Wldn69G5VyKYhat7SegBIQmGpk,4412
488
- omlish/lite/maysync.py,sha256=bxq6NSooAc70oACqRAWHDSgs6alrxSv1tiaRKTs32qA,14417
491
+ omlish/lite/maysync.py,sha256=NiltEfX_mc7jWgWZ9XAqkDzMlLVprTAZvXRObXJT_IE,14926
489
492
  omlish/lite/objects.py,sha256=HzN_4J6w6WDLKDrW8jSNUKgfAR5vUsB42rtSCu04oqQ,1921
490
493
  omlish/lite/pycharm.py,sha256=FRHGcCDo42UzZXqNwW_DkhI-6kb_CmJKPiQ8F6mYkLA,1174
491
494
  omlish/lite/reflect.py,sha256=aTRQJ-hgnyRxr0dFxivUTScmUgP7zcw_iDQZIsarG24,2119
@@ -894,9 +897,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
894
897
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
895
898
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
896
899
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
897
- omlish-0.0.0.dev433.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
898
- omlish-0.0.0.dev433.dist-info/METADATA,sha256=a9lNv9FCJuo46oSrJsrL-E9-E4739mvReWcPY-T9BtM,19243
899
- omlish-0.0.0.dev433.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
900
- omlish-0.0.0.dev433.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
901
- omlish-0.0.0.dev433.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
902
- omlish-0.0.0.dev433.dist-info/RECORD,,
900
+ omlish-0.0.0.dev434.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
901
+ omlish-0.0.0.dev434.dist-info/METADATA,sha256=fQJYAY6N-2PAgl3mzD4PjfFG_SymockqND184l4ForI,19005
902
+ omlish-0.0.0.dev434.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
903
+ omlish-0.0.0.dev434.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
904
+ omlish-0.0.0.dev434.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
905
+ omlish-0.0.0.dev434.dist-info/RECORD,,