omlish 0.0.0.dev415__py3-none-any.whl → 0.0.0.dev416__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.
@@ -1,50 +1,60 @@
1
- from .inspect import ( # noqa
2
- get_annotations,
3
- get_filtered_type_hints,
4
- has_annotations,
5
- )
1
+ from .. import lang as _lang
6
2
 
7
- from .ops import ( # noqa
8
- get_concrete_type,
9
- get_underlying,
10
- strip_annotations,
11
- strip_objs,
12
- to_annotation,
13
- types_equivalent,
14
- )
15
3
 
16
- from .subst import ( # noqa
17
- ALIAS_UPDATING_GENERIC_SUBSTITUTION,
18
- DEFAULT_GENERIC_SUBSTITUTION,
19
- GenericSubstitution,
20
- generic_mro,
21
- get_generic_bases,
22
- get_type_var_replacements,
23
- replace_type_vars,
24
- )
4
+ with _lang.auto_proxy_init(
5
+ globals(),
6
+ update_exports=True,
7
+ # eager=True,
8
+ ):
9
+ ##
25
10
 
26
- from .types import ( # noqa
27
- ANY,
28
- Annotated,
29
- Any,
30
- DEFAULT_REFLECTOR,
31
- Generic,
32
- GenericLike,
33
- Literal,
34
- NewType,
35
- Protocol,
36
- ReflectTypeError,
37
- Reflector,
38
- TYPES,
39
- Type,
40
- TypeInfo,
41
- Union,
42
- get_newtype_supertype,
43
- get_orig_bases,
44
- get_orig_class,
45
- get_params,
46
- get_type_var_bound,
47
- is_type,
48
- is_union_type,
49
- type_,
50
- )
11
+ from .inspect import ( # noqa
12
+ get_annotations,
13
+ get_filtered_type_hints,
14
+ has_annotations,
15
+ )
16
+
17
+ from .ops import ( # noqa
18
+ get_concrete_type,
19
+ get_underlying,
20
+ strip_annotations,
21
+ strip_objs,
22
+ to_annotation,
23
+ types_equivalent,
24
+ )
25
+
26
+ from .subst import ( # noqa
27
+ ALIAS_UPDATING_GENERIC_SUBSTITUTION,
28
+ DEFAULT_GENERIC_SUBSTITUTION,
29
+ GenericSubstitution,
30
+ generic_mro,
31
+ get_generic_bases,
32
+ get_type_var_replacements,
33
+ replace_type_vars,
34
+ )
35
+
36
+ from .types import ( # noqa
37
+ ANY,
38
+ Annotated,
39
+ Any,
40
+ DEFAULT_REFLECTOR,
41
+ Generic,
42
+ GenericLike,
43
+ Literal,
44
+ NewType,
45
+ Protocol,
46
+ ReflectTypeError,
47
+ Reflector,
48
+ TYPES,
49
+ Type,
50
+ TypeInfo,
51
+ Union,
52
+ get_newtype_supertype,
53
+ get_orig_bases,
54
+ get_orig_class,
55
+ get_params,
56
+ get_type_var_bound,
57
+ is_type,
58
+ is_union_type,
59
+ type_,
60
+ )
omlish/reflect/types.py CHANGED
@@ -18,6 +18,7 @@ TODO:
18
18
  """
19
19
  import abc
20
20
  import dataclasses as dc
21
+ import threading
21
22
  import types
22
23
  import typing as ta
23
24
 
@@ -56,21 +57,149 @@ class _Special:
56
57
  origin: type
57
58
  nparams: int
58
59
 
60
+ @classmethod
61
+ def from_alias(cls, sa: _SpecialGenericAlias) -> '_Special': # type: ignore
62
+ return cls(
63
+ sa._name, # type: ignore # noqa
64
+ sa,
65
+ sa.__origin__, # type: ignore
66
+ sa._nparams, # type: ignore # noqa
67
+ )
59
68
 
60
- _KNOWN_SPECIALS = [
61
- _Special(
62
- v._name, # noqa
63
- v,
64
- v.__origin__,
65
- v._nparams, # noqa
66
- )
67
- for v in ta.__dict__.values() # noqa
68
- if isinstance(v, _SpecialGenericAlias)
69
- ]
70
69
 
71
- _KNOWN_SPECIALS_BY_NAME = {s.name: s for s in _KNOWN_SPECIALS}
72
- _KNOWN_SPECIALS_BY_ALIAS = {s.alias: s for s in _KNOWN_SPECIALS}
73
- _KNOWN_SPECIALS_BY_ORIGIN = {s.origin: s for s in _KNOWN_SPECIALS}
70
+ @dc.dataclass(frozen=True)
71
+ class _LazySpecial:
72
+ name: str
73
+
74
+
75
+ class _KnownSpecials:
76
+ def __init__(
77
+ self,
78
+ specials: ta.Iterable[_Special] = (),
79
+ lazy_specials: ta.Iterable[_LazySpecial] = (),
80
+ ) -> None:
81
+ super().__init__()
82
+
83
+ self._lock = threading.RLock()
84
+
85
+ self._lst: list[_Special] = []
86
+ self._by_name: dict[str, _Special] = {}
87
+ self._by_alias: dict[_SpecialGenericAlias, _Special] = {} # type: ignore
88
+ self._by_origin: dict[type, _Special] = {}
89
+
90
+ self._lazies_by_name: dict[str, _LazySpecial] = {}
91
+
92
+ for sp in specials:
93
+ self._add(sp)
94
+ for lz in lazy_specials:
95
+ self._add_lazy(lz)
96
+
97
+ #
98
+
99
+ def _add(self, sp: _Special) -> None:
100
+ uds: list[tuple[ta.Any, ta.MutableMapping]] = [
101
+ (sp.name, self._by_name),
102
+ (sp.alias, self._by_alias),
103
+ (sp.origin, self._by_origin),
104
+ ]
105
+ for k, dct in uds:
106
+ if k in dct:
107
+ raise KeyError(k)
108
+
109
+ if sp.name in self._lazies_by_name:
110
+ raise KeyError(sp.name)
111
+
112
+ self._lst.append(sp)
113
+ for k, dct in uds:
114
+ dct[k] = sp
115
+
116
+ def add(self, *specials: _Special) -> ta.Self:
117
+ with self._lock:
118
+ for sp in specials:
119
+ self._add(sp)
120
+ return self
121
+
122
+ #
123
+
124
+ def _add_lazy(self, lz: _LazySpecial) -> None:
125
+ if lz.name in self._lazies_by_name:
126
+ raise KeyError(lz.name)
127
+ if lz.name in self._by_name:
128
+ raise KeyError(lz.name)
129
+
130
+ self._lazies_by_name[lz.name] = lz
131
+
132
+ def add_lazy(self, *lazy_specials: _LazySpecial) -> ta.Self:
133
+ with self._lock:
134
+ for lz in lazy_specials:
135
+ self._add_lazy(lz)
136
+ return self
137
+
138
+ #
139
+
140
+ def _get_lazy_by_name(self, name: str) -> _Special | None:
141
+ if name not in self._lazies_by_name:
142
+ return None
143
+
144
+ with self._lock:
145
+ if (x := self._by_name.get(name)) is not None:
146
+ return x
147
+
148
+ if (lz := self._lazies_by_name.get(name)) is None:
149
+ return None
150
+
151
+ sa = getattr(ta, lz.name)
152
+ if not isinstance(sa, _SpecialGenericAlias):
153
+ raise TypeError(sa)
154
+
155
+ sp = _Special.from_alias(sa)
156
+ del self._lazies_by_name[lz.name]
157
+ self._add(sp)
158
+
159
+ return sp
160
+
161
+ def get_by_name(self, name: str) -> _Special | None:
162
+ try:
163
+ return self._by_name.get(name)
164
+ except KeyError:
165
+ pass
166
+ return self._get_lazy_by_name(name)
167
+
168
+ def get_by_alias(self, alias: _SpecialGenericAlias) -> _Special | None: # type: ignore
169
+ try:
170
+ return self._by_alias[alias]
171
+ except KeyError:
172
+ pass
173
+ return self._get_lazy_by_name(alias._name) # type: ignore # noqa
174
+
175
+ def get_by_origin(self, origin: type) -> _Special | None:
176
+ return self._by_origin.get(origin)
177
+
178
+
179
+ _KNOWN_SPECIALS = _KnownSpecials(
180
+ [
181
+ _Special.from_alias(v)
182
+ for v in ta.__dict__.values() # noqa
183
+ if isinstance(v, _SpecialGenericAlias)
184
+ ],
185
+ [
186
+ _LazySpecial(n)
187
+ for n in [
188
+ # https://github.com/python/cpython/commit/e8be0c9c5a7c2327b3dd64009f45ee0682322dcb
189
+ 'Pattern',
190
+ 'Match',
191
+ 'ContextManager',
192
+ 'AsyncContextManager',
193
+ # https://github.com/python/cpython/commit/305be5fb1a1ece7f9651ae98053dbe79bf439aa4
194
+ 'ForwardRef',
195
+ ]
196
+ if n not in ta.__dict__
197
+ ],
198
+ )
199
+
200
+
201
+ ##
202
+
74
203
 
75
204
  _MAX_KNOWN_SPECIAL_TYPE_VARS = 16
76
205
 
@@ -99,7 +228,7 @@ def get_params(obj: ta.Any) -> tuple[ta.TypeVar, ...]:
99
228
  if issubclass(obj, ta.Generic): # type: ignore
100
229
  return obj.__dict__.get('__parameters__', ()) # noqa
101
230
 
102
- if (ks := _KNOWN_SPECIALS_BY_ORIGIN.get(obj)) is not None:
231
+ if (ks := _KNOWN_SPECIALS.get_by_origin(obj)) is not None:
103
232
  if (np := ks.nparams) < 0:
104
233
  raise TypeError(obj)
105
234
  return _KNOWN_SPECIAL_TYPE_VARS[:np]
@@ -442,7 +571,7 @@ class Reflector:
442
571
  # Special Generic
443
572
 
444
573
  if isinstance(obj, _SpecialGenericAlias):
445
- if (ks := _KNOWN_SPECIALS_BY_ALIAS.get(obj)) is not None:
574
+ if (ks := _KNOWN_SPECIALS.get_by_alias(obj)) is not None:
446
575
  if check_only:
447
576
  return None
448
577
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev415
3
+ Version: 0.0.0.dev416
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -109,7 +109,8 @@ Dynamic: license-file
109
109
 
110
110
  # Overview
111
111
 
112
- Core utilities and foundational code. It's relatively large but completely self-contained.
112
+ Core utilities and foundational code. It's relatively large but completely self-contained, and has **no required
113
+ dependencies of any kind**.
113
114
 
114
115
  # Notable packages
115
116
 
@@ -121,14 +122,18 @@ Core utilities and foundational code. It's relatively large but completely self-
121
122
  - **[cached](https://github.com/wrmsr/omlish/blob/master/omlish/lang/cached)** - The standard `cached_function` /
122
123
  `cached_property` tools, which are more capable than
123
124
  [`functools.lru_cache`](https://docs.python.org/3/library/functools.html#functools.lru_cache).
124
- - **[imports](https://github.com/wrmsr/omlish/blob/master/omlish/lang/imports.py)** - Import tools like `proxy_import`
125
- for late-loaded imports and `proxy_init` for late-loaded module globals.
125
+ - **[imports](https://github.com/wrmsr/omlish/blob/master/omlish/lang/imports.py)** - Import tools like:
126
+ - `proxy_import` - For late-loaded imports.
127
+ - `proxy_init` - For late-loaded module globals.
128
+ - `auto_proxy_init` - For automatic late-loaded package exports.
126
129
  - **[classes](https://github.com/wrmsr/omlish/blob/master/omlish/lang/classes)** - Class tools and bases, such as
127
130
  `Abstract` (which checks at subclass definition not instantiation), `Sealed` / `PackageSealed`, and `Final`.
128
131
  - **[maybes](https://github.com/wrmsr/omlish/blob/master/omlish/lite/maybes.py)** - A simple, nestable formalization
129
132
  of the presence or absence of an object, as in [many](https://en.cppreference.com/w/cpp/utility/optional)
130
133
  [other](https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html)
131
134
  [languages](https://doc.rust-lang.org/std/option/).
135
+ - **[maysyncs](https://github.com/wrmsr/omlish/blob/master/omlish/lite/maysyncs.py)** - A lightweight means of sharing
136
+ code between sync and async contexts, eliminating the need for maintaining sync and async versions of functions.
132
137
 
133
138
  - **[bootstrap](https://github.com/wrmsr/omlish/blob/master/omlish/bootstrap)** - A centralized, configurable,
134
139
  all-in-one collection of various process-initialization minutiae like resource limiting, profiling, remote debugging,
@@ -224,12 +229,12 @@ Core utilities and foundational code. It's relatively large but completely self-
224
229
 
225
230
  - **[sql](https://github.com/wrmsr/omlish/blob/master/omlish/sql)** - A collection of SQL utilities, including:
226
231
 
227
- - **[alchemy](https://github.com/wrmsr/omlish/blob/master/omlish/sql/alchemy)** - SQLAlchemy utilities. The codebase
228
- is moving away from SQLAlchemy however in favor of its own internal SQL api.
229
232
  - **[api](https://github.com/wrmsr/omlish/blob/master/omlish/sql/api)** - An abstracted api for SQL interaction, with
230
233
  support for dbapi compatible drivers (and a SQLAlchemy adapter).
231
234
  - **[queries](https://github.com/wrmsr/omlish/blob/master/omlish/sql/queries)** - A SQL query builder with a fluent
232
235
  interface.
236
+ - **[alchemy](https://github.com/wrmsr/omlish/blob/master/omlish/sql/alchemy)** - SQLAlchemy utilities. The codebase
237
+ is moving away from SQLAlchemy however in favor of its own internal SQL api.
233
238
 
234
239
  - **[testing](https://github.com/wrmsr/omlish/blob/master/omlish/testing)** - Test - primarily pytest - helpers,
235
240
  including:
@@ -279,15 +284,15 @@ Code written in this style has notable differences from standard code, including
279
284
 
280
285
  # Dependencies
281
286
 
282
- This library has no required dependencies of any kind, but there are numerous optional integrations - see
287
+ This library has no required dependencies of any kind, but there are some optional integrations - see
283
288
  [`__about__.py`](https://github.com/wrmsr/omlish/blob/master/omlish/__about__.py) for a full list, but some specific
284
289
  examples are:
285
290
 
291
+ - **asttokens / executing** - For getting runtime source representations of function call arguments, an optional
292
+ capability of [check](https://github.com/wrmsr/omlish/blob/master/omlish/check.py).
286
293
  - **anyio** - While lite code must use only asyncio, non-trivial async standard code prefers to be written to anyio.
287
294
  - **pytest** - What is used for all standard testing - as lite code has no dependencies of any kind its testing uses
288
295
  stdlib's [unittest](https://docs.python.org/3/library/unittest.html).
289
- - **asttokens / executing** - For getting runtime source representations of function call arguments, an optional
290
- capability of [check](https://github.com/wrmsr/omlish/blob/master/omlish/check.py).
291
296
  - **wrapt** - For (optionally-enabled) injector circular proxies.
292
297
  - **greenlet** - For some gnarly stuff like the
293
298
  [sync<->async bridge](https://github.com/wrmsr/omlish/blob/master/omlish/asyncs/bridge.py) and the
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
2
- omlish/__about__.py,sha256=XApjmdmf3_-YewbzWxs8nlvwRONv4D2GSRsgM19MOXo,3568
2
+ omlish/__about__.py,sha256=EjCF-wXGdYqFgAoxlZU8VG56ljmhUrK9lIx_c_loDxc,3568
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
@@ -135,7 +135,7 @@ omlish/daemons/services.py,sha256=laoUeJU7eVHuWl1062FBjPSD7jchOjhpYDc5FT2B3dM,34
135
135
  omlish/daemons/spawning.py,sha256=psR73zOYjMKTqNpx1bMib8uU9wAZz62tw5TaWHrTdyY,5337
136
136
  omlish/daemons/targets.py,sha256=00KmtlknMhQ5PyyVAhWl3rpeTMPym0GxvHHq6mYPZ7c,3051
137
137
  omlish/daemons/waiting.py,sha256=RfgD1L33QQVbD2431dkKZGE4w6DUcGvYeRXXi8puAP4,1676
138
- omlish/dataclasses/__init__.py,sha256=yzdjXDaa3moImIEjmBd55RUFpMpcsYsoSYkO_fNCL8g,3273
138
+ omlish/dataclasses/__init__.py,sha256=Bi8vKuOAXGypBB13-N8zUCAHL5nrE-Hwbz-erE48kuc,3326
139
139
  omlish/dataclasses/_internals.py,sha256=_THiziiIslUyYC98Y_tZd5aZgvEF3FAGkDSwzRfcDuo,3247
140
140
  omlish/dataclasses/debug.py,sha256=giBiv6aXvX0IagwNCW64qBzNjfOFr3-VmgDy_KYlb-k,29
141
141
  omlish/dataclasses/errors.py,sha256=tyv3WR6az66uGGiq9FIuCHvy1Ef-G7zeMY7mMG6hy2Y,2527
@@ -424,7 +424,7 @@ omlish/iterators/iterators.py,sha256=RxW35yQ5ed8vBQ22IqpDXFx-i5JiLQdp7-pkMZXhJJ8
424
424
  omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,472
425
425
  omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
426
426
  omlish/iterators/unique.py,sha256=BSE-eanva8byFCJi09Nt2zzTsVr8LnTqY1PIInGYRs0,1396
427
- omlish/lang/__init__.py,sha256=Tsvtn9FC0eNYueMlASmwRK8MQsPTJUxMqWvVh52o5AU,7588
427
+ omlish/lang/__init__.py,sha256=dyVY_3Scl1EWXXN4Pb26y4C7FVnBATP1KKfng2qbhag,9415
428
428
  omlish/lang/asyncs.py,sha256=SmzkYghQID77vcgm1Evnd3r9_jd5DlfzJ8uQK7nkh0E,1517
429
429
  omlish/lang/attrs.py,sha256=zFiVuGVOq88x45464T_LxDa-ZEq_RD9zJLq2zeVEBDc,5105
430
430
  omlish/lang/casing.py,sha256=cFUlbDdXLhwnWwcYx4qnM5c4zGX7hIRUfcjiZbxUD28,4636
@@ -440,6 +440,7 @@ omlish/lang/functions.py,sha256=aLdxhmqG0Pj9tBgsKdoCu_q15r82WIkNqDDSPQU19L8,5689
440
440
  omlish/lang/generators.py,sha256=a4D5HU_mySs2T2z3xCmE_s3t4QJkj0YRrK4-hhpGd0A,5197
441
441
  omlish/lang/iterables.py,sha256=y1SX2Co3VsOeX2wlfFF7K3rwLvF7Dtre7VY6EpfwAwA,3338
442
442
  omlish/lang/lazyglobals.py,sha256=G1hwpyIgM4PUkVJ_St3K-EdQkHQdWpFOcXao6I5LwyY,1435
443
+ omlish/lang/maybes.py,sha256=ES1LK-9ebh2GNKZ7YfrS4OEoYHFhfiWkme4wU6Blzo4,77
443
444
  omlish/lang/maysyncs.py,sha256=S90OrGQ8OShmcg7dt0Tf1GLTGCKwOPO80PRzaZHKsxY,1630
444
445
  omlish/lang/objects.py,sha256=eOhFyFiwvxqpbLs5QTEkXU3rdSt_tQXDgHoWF5SA28E,6119
445
446
  omlish/lang/outcomes.py,sha256=0PqxoKaGbBXU9UYZ6AE2QSq94Z-gFDt6wYdp0KomNQw,8712
@@ -465,7 +466,7 @@ omlish/lang/classes/virtual.py,sha256=z0MYQD9Q5MkX8DzF325wDB4J9XoYbsB09jZ1omC62T
465
466
  omlish/lang/imports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
466
467
  omlish/lang/imports/conditional.py,sha256=R-E47QD95mMonPImWlrde3rnJrFKCCkYz71c94W05sc,1006
467
468
  omlish/lang/imports/lazy.py,sha256=Fhtb5tSAttff6G2pZdF8bh__GZlqJWHaMKtA8KubuX4,1479
468
- omlish/lang/imports/proxyinit.py,sha256=ALpV9LahE8SQl6jNO92Mk4PcaQPce9Cv53K8AwnH5fQ,16749
469
+ omlish/lang/imports/proxyinit.py,sha256=j3RMoA1Mop8XOspLQLkAoGQg0OZFpU6-BpXHoP7qa-0,19613
469
470
  omlish/lang/imports/resolving.py,sha256=DeRarn35Fryg5JhVhy8wbiC9lvr58AnllI9B_reswUE,2085
470
471
  omlish/lang/imports/traversal.py,sha256=pbFQIa880NGjSfcLsno2vE_G41_CLwDHb-7gWg2J3BI,2855
471
472
  omlish/lifecycles/__init__.py,sha256=1FjYceXs-4fc-S-C9zFYmc2axHs4znnQHcJVHdY7a6E,578
@@ -522,17 +523,17 @@ omlish/manifests/globals.py,sha256=kVqQ-fT4kc7xWzLHoI731GviitFPv2v2yqw-p7t7Exs,2
522
523
  omlish/manifests/loading.py,sha256=Br1OyI23pis_FfYju9xoacms608lzB1Zh_IqdVw_7vg,17201
523
524
  omlish/manifests/static.py,sha256=9BaPBLkuzxHmg5A-5k9BjjBFINCdmFOIu06dMFgCfz4,497
524
525
  omlish/manifests/types.py,sha256=NeOGuIVrcbqjCDbQ3MnCxxHAgHnw0CkWJsBzo230PWE,453
525
- omlish/marshal/__init__.py,sha256=Y2SKxP4jGU6iCm4hYKYxixu3OBCkcI9B7a6CZad_g34,4678
526
- omlish/marshal/globals.py,sha256=iAmTeTrIC-BeLgZob5P3J6U9Ac3vGcd79KnyVZnuf_w,1555
526
+ omlish/marshal/__init__.py,sha256=GE6LMH-PmdXTkyGo7Z1FwWKnT2thK4U-YisbH20zJ2o,4700
527
+ omlish/marshal/globals.py,sha256=GtuI94yMqGHV9Hz3Hc9Tdzuv280uVjrBlIc57ZEC3MM,1914
527
528
  omlish/marshal/naming.py,sha256=Mk5YrbES836_KflNNRoc5Ajd96iMYLQIMERKx1KpT4g,865
528
529
  omlish/marshal/standard.py,sha256=k6QAGFNjiypxjI90snJcoGqNoTQ8ZkTzrW7m-Yrn2wk,4906
529
530
  omlish/marshal/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
530
- omlish/marshal/base/contexts.py,sha256=e8ivHzDdzwxTDq232PUOemnmcTuGCxuYYurqVcwFC8U,2064
531
+ omlish/marshal/base/contexts.py,sha256=T8AzEq1Fh78NRAj8YHbc_ugKtuSBFRlIyY00uCpY3sM,2139
531
532
  omlish/marshal/base/errors.py,sha256=jmN3vl_U_hB6L0wAvuO7ORG27vXF7KEUk-1TxxK2mYA,308
532
533
  omlish/marshal/base/options.py,sha256=OoDErPmI0kswnqAtr7QYndlPYhIqIDarx833tKFT2R4,23
533
- omlish/marshal/base/overrides.py,sha256=Nn7xlTHnm8UClvmDu4dk9gMNxWi-ZZ03v9FAOQ0r3qc,722
534
- omlish/marshal/base/registries.py,sha256=j9xAK-nuE7R6TXWU6FTR97p2Z41F8-rW0c3DPs0iMQE,2334
535
- omlish/marshal/base/types.py,sha256=bg2EXSyZYI1ETCfcAzm4Ltv9AiqnMFiDWGIF50_CgpA,1514
534
+ omlish/marshal/base/overrides.py,sha256=tdYdgKIqVEBV7L_MZCNzcRwvpnmxa-1Fm8pIAWDeEpw,997
535
+ omlish/marshal/base/registries.py,sha256=N0I6xa_n32KAXgVdO9IuRASZC5Sh2J2T7w6K7wsWx1Q,2481
536
+ omlish/marshal/base/types.py,sha256=AtrpoVUPwsp_CQ13TlJ5ri_LqIPUHlAr64--D9XIlW8,2837
536
537
  omlish/marshal/base/values.py,sha256=QF6OateG5kjRPHYza08wscThhg20oryf-aVQrxjfkC0,212
537
538
  omlish/marshal/composite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
538
539
  omlish/marshal/composite/iterables.py,sha256=2VU3sh5TBKMVF1cWPXhDeuELPQzrAYovmTNHzoFLeS4,2704
@@ -610,11 +611,11 @@ omlish/os/pidfiles/cli.py,sha256=dAKukx4mrarH8t7KZM4n_XSfTk3ycShGAFqRrirK5dw,207
610
611
  omlish/os/pidfiles/manager.py,sha256=oOnL90ttOG5ba_k9XPJ18reP7M5S-_30ln4OAfYV5W8,2357
611
612
  omlish/os/pidfiles/pidfile.py,sha256=KlqrW7I-lYVDNJspFHE89i_A0HTTteT5B99b7vpTfNs,4400
612
613
  omlish/os/pidfiles/pinning.py,sha256=u81LRe3-6Xd6K_dsVbbEPVdsUvY7zy3Xv7413-5NBLQ,6627
613
- omlish/reflect/__init__.py,sha256=ZUqqboWj5jLMVP1ljE5D9CnmXuSnsaWkKT3N9BKO0Mo,874
614
+ omlish/reflect/__init__.py,sha256=omD3VLFQtYTwPxrTH6gLATQIax9sTGGKc-7ps96-q0g,1202
614
615
  omlish/reflect/inspect.py,sha256=dUrVz8VfAdLVFtFpW416DxzVC17D80cvFb_g2Odzgq8,1823
615
616
  omlish/reflect/ops.py,sha256=F77OTaw0Uw020cJCWX_Q4kL3wvxlJ8jV8wz7BctGL_k,2619
616
617
  omlish/reflect/subst.py,sha256=_lfNS2m2UiJgqARQtmGLTGo7CrSm9OMvVzt6GWOEX6M,4590
617
- omlish/reflect/types.py,sha256=uMcxUHVJWYYcmF9ODeJ9WfcQ0DejsqsEVIX5K0HjJSM,12018
618
+ omlish/reflect/types.py,sha256=5N6sBAknFx6zqhxgcJy5D-0XzjQh6Y2t3KN7HhSTnZ8,15490
618
619
  omlish/secrets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
619
620
  omlish/secrets/all.py,sha256=xx1UyiokSFzdeR8c6Ro-Fi2XBUsQ2i0nR1foX12nH0c,464
620
621
  omlish/secrets/crypto.py,sha256=9D21lnvPhStwu8arD4ssT0ih0bDG-nlqIRdVgYL40xA,3708
@@ -917,9 +918,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
917
918
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
918
919
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
919
920
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
920
- omlish-0.0.0.dev415.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
921
- omlish-0.0.0.dev415.dist-info/METADATA,sha256=3uvdL3aYGoWbgHsgKXszYQlPn4OF0QZhTEQ322XQdk8,18881
922
- omlish-0.0.0.dev415.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
923
- omlish-0.0.0.dev415.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
924
- omlish-0.0.0.dev415.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
925
- omlish-0.0.0.dev415.dist-info/RECORD,,
921
+ omlish-0.0.0.dev416.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
922
+ omlish-0.0.0.dev416.dist-info/METADATA,sha256=Ly8rie3KozyugPbfE3l0z93fy3_iW_xgYJbipAWO3HI,19244
923
+ omlish-0.0.0.dev416.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
924
+ omlish-0.0.0.dev416.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
925
+ omlish-0.0.0.dev416.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
926
+ omlish-0.0.0.dev416.dist-info/RECORD,,