omlish 0.0.0.dev382__py3-none-any.whl → 0.0.0.dev384__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 +5 -2
- omlish/inject/__init__.py +6 -1
- omlish/inject/binder.py +48 -0
- omlish/inject/keys.py +1 -1
- omlish/inject/multis.py +10 -7
- omlish/inject/tags.py +22 -0
- omlish/inject/utils.py +0 -11
- {omlish-0.0.0.dev382.dist-info → omlish-0.0.0.dev384.dist-info}/METADATA +3 -1
- {omlish-0.0.0.dev382.dist-info → omlish-0.0.0.dev384.dist-info}/RECORD +13 -12
- {omlish-0.0.0.dev382.dist-info → omlish-0.0.0.dev384.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev382.dist-info → omlish-0.0.0.dev384.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev382.dist-info → omlish-0.0.0.dev384.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev382.dist-info → omlish-0.0.0.dev384.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
__version__ = '0.0.0.
|
2
|
-
__revision__ = '
|
1
|
+
__version__ = '0.0.0.dev384'
|
2
|
+
__revision__ = '13eb429134387bdc2ec6e494bd89553b650b23e3'
|
3
3
|
|
4
4
|
|
5
5
|
#
|
@@ -22,6 +22,9 @@ class ProjectBase:
|
|
22
22
|
|
23
23
|
'Operating System :: OS Independent',
|
24
24
|
'Operating System :: POSIX',
|
25
|
+
|
26
|
+
'Programming Language :: Python :: 3',
|
27
|
+
'Programming Language :: Python :: 3.13',
|
25
28
|
]
|
26
29
|
|
27
30
|
|
omlish/inject/__init__.py
CHANGED
@@ -4,6 +4,8 @@
|
|
4
4
|
from .binder import ( # noqa
|
5
5
|
bind,
|
6
6
|
bind_as_fn,
|
7
|
+
bind_map_entry_const,
|
8
|
+
bind_set_entry_const,
|
7
9
|
)
|
8
10
|
|
9
11
|
from .bindings import ( # noqa
|
@@ -112,6 +114,10 @@ from .scopes import ( # noqa
|
|
112
114
|
enter_seeded_scope,
|
113
115
|
)
|
114
116
|
|
117
|
+
from .tags import ( # noqa
|
118
|
+
Id,
|
119
|
+
)
|
120
|
+
|
115
121
|
from .types import ( # noqa
|
116
122
|
Scope,
|
117
123
|
Tag,
|
@@ -120,5 +126,4 @@ from .types import ( # noqa
|
|
120
126
|
|
121
127
|
from .utils import ( # noqa
|
122
128
|
ConstFn,
|
123
|
-
Id,
|
124
129
|
)
|
omlish/inject/binder.py
CHANGED
@@ -11,8 +11,13 @@ from .bindings import Binding
|
|
11
11
|
from .eagers import Eager
|
12
12
|
from .elements import Element
|
13
13
|
from .elements import Elements
|
14
|
+
from .elements import as_elements
|
14
15
|
from .keys import Key
|
15
16
|
from .keys import as_key
|
17
|
+
from .multis import MapBinding
|
18
|
+
from .multis import SetBinding
|
19
|
+
from .multis import is_map_multi_key
|
20
|
+
from .multis import is_set_multi_key
|
16
21
|
from .privates import Expose
|
17
22
|
from .providers import ConstProvider
|
18
23
|
from .providers import CtorProvider
|
@@ -21,6 +26,7 @@ from .providers import LinkProvider
|
|
21
26
|
from .providers import Provider
|
22
27
|
from .scopes import SCOPE_ALIASES
|
23
28
|
from .scopes import Singleton
|
29
|
+
from .tags import Id
|
24
30
|
from .types import Scope
|
25
31
|
from .types import Unscoped
|
26
32
|
|
@@ -180,3 +186,45 @@ def bind(
|
|
180
186
|
return elements[0]
|
181
187
|
else:
|
182
188
|
return Elements(frozenset(elements))
|
189
|
+
|
190
|
+
|
191
|
+
##
|
192
|
+
|
193
|
+
|
194
|
+
def bind_set_entry_const(
|
195
|
+
multi_key: ta.Any,
|
196
|
+
obj: ta.Any,
|
197
|
+
*,
|
198
|
+
tag: ta.Any | None = None,
|
199
|
+
) -> Elements:
|
200
|
+
multi_key = as_key(multi_key)
|
201
|
+
check.arg(is_set_multi_key(multi_key))
|
202
|
+
|
203
|
+
if tag is None:
|
204
|
+
tag = Id(id(obj), tag=multi_key.tag)
|
205
|
+
obj_key: Key = Key(type(obj), tag=tag)
|
206
|
+
|
207
|
+
return as_elements(
|
208
|
+
bind(obj_key, to_const=obj),
|
209
|
+
SetBinding(multi_key, obj_key),
|
210
|
+
)
|
211
|
+
|
212
|
+
|
213
|
+
def bind_map_entry_const(
|
214
|
+
multi_key: ta.Any,
|
215
|
+
map_key: ta.Any,
|
216
|
+
obj: ta.Any,
|
217
|
+
*,
|
218
|
+
tag: ta.Any | None = None,
|
219
|
+
) -> Elements:
|
220
|
+
multi_key = as_key(multi_key)
|
221
|
+
check.arg(is_map_multi_key(multi_key))
|
222
|
+
|
223
|
+
if tag is None:
|
224
|
+
tag = Id(id(obj), tag=multi_key.tag)
|
225
|
+
obj_key: Key = Key(type(obj), tag=tag)
|
226
|
+
|
227
|
+
return as_elements(
|
228
|
+
bind(obj_key, to_const=obj),
|
229
|
+
MapBinding(multi_key, map_key, obj_key),
|
230
|
+
)
|
omlish/inject/keys.py
CHANGED
omlish/inject/multis.py
CHANGED
@@ -25,34 +25,34 @@ V = ta.TypeVar('V')
|
|
25
25
|
##
|
26
26
|
|
27
27
|
|
28
|
-
def
|
28
|
+
def is_set_multi_key(mk: Key) -> bool:
|
29
29
|
return rfl.get_concrete_type(mk.ty) is collections.abc.Set
|
30
30
|
|
31
31
|
|
32
32
|
@dc.dataclass(frozen=True)
|
33
33
|
@dc.extra_class_params(cache_hash=True)
|
34
34
|
class SetBinding(Element, lang.Final):
|
35
|
-
multi_key: Key = dc.xfield(validate=
|
35
|
+
multi_key: Key = dc.xfield(validate=is_set_multi_key)
|
36
36
|
dst: Key = dc.xfield(coerce=check.of_isinstance(Key))
|
37
37
|
|
38
38
|
|
39
39
|
@dc.dataclass(frozen=True)
|
40
40
|
@dc.extra_class_params(cache_hash=True)
|
41
41
|
class SetProvider(Provider):
|
42
|
-
multi_key: Key = dc.xfield(validate=
|
42
|
+
multi_key: Key = dc.xfield(validate=is_set_multi_key)
|
43
43
|
|
44
44
|
|
45
|
-
|
45
|
+
#
|
46
46
|
|
47
47
|
|
48
|
-
def
|
48
|
+
def is_map_multi_key(mk: Key) -> bool:
|
49
49
|
return rfl.get_concrete_type(mk.ty) is collections.abc.Mapping
|
50
50
|
|
51
51
|
|
52
52
|
@dc.dataclass(frozen=True)
|
53
53
|
@dc.extra_class_params(cache_hash=True)
|
54
54
|
class MapBinding(Element, lang.Final):
|
55
|
-
multi_key: Key = dc.xfield(validate=
|
55
|
+
multi_key: Key = dc.xfield(validate=is_map_multi_key)
|
56
56
|
map_key: ta.Any = dc.xfield()
|
57
57
|
dst: Key = dc.xfield(coerce=check.of_isinstance(Key))
|
58
58
|
|
@@ -60,7 +60,7 @@ class MapBinding(Element, lang.Final):
|
|
60
60
|
@dc.dataclass(frozen=True)
|
61
61
|
@dc.extra_class_params(cache_hash=True)
|
62
62
|
class MapProvider(Provider):
|
63
|
-
multi_key: Key = dc.xfield(validate=
|
63
|
+
multi_key: Key = dc.xfield(validate=is_map_multi_key)
|
64
64
|
|
65
65
|
|
66
66
|
##
|
@@ -94,6 +94,9 @@ class SetBinder(ElementGenerator, ta.Generic[T]):
|
|
94
94
|
yield from self._sbs
|
95
95
|
|
96
96
|
|
97
|
+
#
|
98
|
+
|
99
|
+
|
97
100
|
class MapBinder(ElementGenerator, ta.Generic[K, V]):
|
98
101
|
def __init__(self, *, tag: ta.Any = None) -> None:
|
99
102
|
super().__init__()
|
omlish/inject/tags.py
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
import typing as ta
|
2
|
+
|
3
|
+
from .. import dataclasses as dc
|
4
|
+
from .types import Tag
|
5
|
+
|
6
|
+
|
7
|
+
##
|
8
|
+
|
9
|
+
|
10
|
+
@dc.dataclass(frozen=True)
|
11
|
+
@dc.extra_class_params(cache_hash=True, terse_repr=True)
|
12
|
+
class Id:
|
13
|
+
"""A utility dataclass intended to be used as a key tag for disambiguation."""
|
14
|
+
|
15
|
+
v: int
|
16
|
+
|
17
|
+
tag: ta.Any = dc.xfield(
|
18
|
+
default=None,
|
19
|
+
kw_only=True,
|
20
|
+
validate=lambda o: not isinstance(o, Tag),
|
21
|
+
repr_fn=dc.opt_repr,
|
22
|
+
)
|
omlish/inject/utils.py
CHANGED
@@ -19,14 +19,3 @@ class ConstFn(HasOriginsImpl, lang.Final, ta.Generic[T]):
|
|
19
19
|
|
20
20
|
def __call__(self) -> T:
|
21
21
|
return self.v
|
22
|
-
|
23
|
-
|
24
|
-
##
|
25
|
-
|
26
|
-
|
27
|
-
@dc.dataclass(frozen=True)
|
28
|
-
@dc.extra_class_params(terse_repr=True)
|
29
|
-
class Id:
|
30
|
-
"""A utility dataclass intended to be used as a key tag for disambiguation."""
|
31
|
-
|
32
|
-
v: int
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omlish
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev384
|
4
4
|
Summary: omlish
|
5
5
|
Author: wrmsr
|
6
6
|
License-Expression: BSD-3-Clause
|
@@ -9,6 +9,8 @@ Classifier: Development Status :: 2 - Pre-Alpha
|
|
9
9
|
Classifier: Intended Audience :: Developers
|
10
10
|
Classifier: Operating System :: OS Independent
|
11
11
|
Classifier: Operating System :: POSIX
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
13
|
+
Classifier: Programming Language :: Python :: 3.13
|
12
14
|
Requires-Python: >=3.13
|
13
15
|
Description-Content-Type: text/markdown
|
14
16
|
License-File: LICENSE
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=aT8yZ-Zh-9wfHl5Ym5ouiWC1i0cy7Q7RlhzavB6VLPI,8587
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=YCcIz5KJ2sBcOE5C5j7gQV_BFCDb-uuGb0eoIWjBUc0,3543
|
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
|
@@ -355,25 +355,26 @@ omlish/http/coro/server/fdio.py,sha256=qZE4g5y4XESsTObSKyVggI-yzig57gSGJb4Z0rcHv
|
|
355
355
|
omlish/http/coro/server/server.py,sha256=5gvueSCUzqBqQRf0GJ6wGroD9DiWxQNi6N17MlEtBLU,18660
|
356
356
|
omlish/http/coro/server/simple.py,sha256=j1RZ3niKrgGM2qFnjdYWn_eniZzay5j49Ca4L3u8vO4,3296
|
357
357
|
omlish/http/coro/server/sockets.py,sha256=24gU6wpIZuzYWKQD8UsHyYfTZlbcUFvkqXq5KVgWpQo,2261
|
358
|
-
omlish/inject/__init__.py,sha256=
|
359
|
-
omlish/inject/binder.py,sha256=
|
358
|
+
omlish/inject/__init__.py,sha256=Ou6_wAovmxOpbdhGKsV8GbYRH0_S_h0XQSBDPeYpP0g,1978
|
359
|
+
omlish/inject/binder.py,sha256=woOK7I5fk4K4kDF684Ia003jE_lviGQXacNKAmXqx5M,5114
|
360
360
|
omlish/inject/bindings.py,sha256=PlvOnUREjvc6F8nOJdzl1k9SAf80icRB4qWFqDop87M,536
|
361
361
|
omlish/inject/eagers.py,sha256=JBY7PcjXt-Rg9scQ1ol9xpcoTLXkXC_Ie9uwTWdzUkA,340
|
362
362
|
omlish/inject/elements.py,sha256=y4luEO_-eOlVnLcUDiNGSyMXee4pusl46ZGr0JFhbcY,1405
|
363
363
|
omlish/inject/errors.py,sha256=_wkN2tF55gQzmMOMKJC_9jYHBZzaBiCDcyqI9Sf2UZs,626
|
364
364
|
omlish/inject/injector.py,sha256=fyvaRoJXo_oibx1_IiGkncP9oXnZSKtDm7-ULNKRXHE,1071
|
365
365
|
omlish/inject/inspect.py,sha256=Uq4KMloGWF_YS2mgZbrx-JXhZQnYHHKJSr68i9yoBVc,597
|
366
|
-
omlish/inject/keys.py,sha256=
|
366
|
+
omlish/inject/keys.py,sha256=7jnI2cw7cvLlzZAfe5SC50O3oPOpOB6iGZGTigyfQvs,682
|
367
367
|
omlish/inject/listeners.py,sha256=wyPsAJsl45fZHmrFwsVBxaCiT7r_Riw1I8Eowwg5NHE,592
|
368
368
|
omlish/inject/managed.py,sha256=-9aBm1vRPOjNz4kgOmpt8S2T55s727t9RiggFBH8maU,2096
|
369
|
-
omlish/inject/multis.py,sha256=
|
369
|
+
omlish/inject/multis.py,sha256=Dn63jE8P5ahSKc1IDBdzzx6ByBCgVOth5t4frG9m4UA,3336
|
370
370
|
omlish/inject/origins.py,sha256=-qXa18rIIkNwBdTrvASRDjgPYnoY6n6OPC222jJDrXg,551
|
371
371
|
omlish/inject/overrides.py,sha256=ybEcq9cDf6kvqu5mqnwi6Evj0MFjKNeE3r0oUlGw5E4,546
|
372
372
|
omlish/inject/privates.py,sha256=CyE-hvQ-F_uyCzcwfdiYVtfm9IF1WZvMDOYilFyZmWk,658
|
373
373
|
omlish/inject/providers.py,sha256=GDjSEN6iLsc-Tdu_OCPvFHWu4yP0Vn0pAyH_xjw1DPg,783
|
374
374
|
omlish/inject/scopes.py,sha256=MqGus6vCogQVRJlZUnoXFwEeHuGMSYv2NF23_OFxWHE,1995
|
375
|
+
omlish/inject/tags.py,sha256=gRDLa-WdZc9DC7KwwmoIPAi8g_qdGpRWuMT7HCd7CL0,433
|
375
376
|
omlish/inject/types.py,sha256=Z-ZEdgtCpHBNrbxxKaMVvfeD7hYXdL4rC7A9_VGxZ6g,256
|
376
|
-
omlish/inject/utils.py,sha256=
|
377
|
+
omlish/inject/utils.py,sha256=Gc2qq45KgkyqDt03WSvOEZBCiuqQ6ESwplx5ZRBcY5M,413
|
377
378
|
omlish/inject/impl/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
378
379
|
omlish/inject/impl/bindings.py,sha256=xSvUcoDz8NH-aNHPwBPEZsFg73K2WcF_A63npVbGt_k,420
|
379
380
|
omlish/inject/impl/elements.py,sha256=PM_055moROskSTQqmohEa6I0tt1OQ-VRNArXCMG6vyk,5947
|
@@ -890,9 +891,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
|
|
890
891
|
omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
|
891
892
|
omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
|
892
893
|
omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
|
893
|
-
omlish-0.0.0.
|
894
|
-
omlish-0.0.0.
|
895
|
-
omlish-0.0.0.
|
896
|
-
omlish-0.0.0.
|
897
|
-
omlish-0.0.0.
|
898
|
-
omlish-0.0.0.
|
894
|
+
omlish-0.0.0.dev384.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
895
|
+
omlish-0.0.0.dev384.dist-info/METADATA,sha256=PhVWxPb5TWMJN2-RnlTcRyIb2zPG8BQIz4F01yyIiqI,18825
|
896
|
+
omlish-0.0.0.dev384.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
897
|
+
omlish-0.0.0.dev384.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
898
|
+
omlish-0.0.0.dev384.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
899
|
+
omlish-0.0.0.dev384.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|