omlish 0.0.0.dev447__py3-none-any.whl → 0.0.0.dev449__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.

Potentially problematic release.


This version of omlish might be problematic. Click here for more details.

omlish/__about__.py CHANGED
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev447'
2
- __revision__ = 'b7728880793e311f2b0080bb2b0ad2508b86e7b3'
1
+ __version__ = '0.0.0.dev449'
2
+ __revision__ = 'f126f0642775913f3de0d8cc4b62ff957b8480cf'
3
3
 
4
4
 
5
5
  #
@@ -36,7 +36,7 @@ class Project(ProjectBase):
36
36
 
37
37
  optional_dependencies = {
38
38
  'async': [
39
- 'anyio ~= 4.10',
39
+ 'anyio ~= 4.11',
40
40
  'sniffio ~= 1.3',
41
41
 
42
42
  'greenlet ~= 3.2',
File without changes
@@ -0,0 +1 @@
1
+ #pragma once
@@ -63,6 +63,9 @@ class TypeMap(ta.Generic[T]):
63
63
  def __iter__(self) -> ta.Iterator[T]:
64
64
  return iter(self._items)
65
65
 
66
+ def __contains__(self, ty: type[T]) -> bool:
67
+ return ty in self._items
68
+
66
69
  def get(self, ty: type[T]) -> T | None:
67
70
  return self._dct.get(ty)
68
71
 
omlish/lang/__init__.py CHANGED
@@ -68,10 +68,12 @@ with _auto_proxy_init(globals(), update_exports=True):
68
68
  )
69
69
 
70
70
  from .classes.abstract import ( # noqa
71
- get_abstracts,
72
- is_abstract,
73
- is_abstract_class,
74
71
  is_abstract_method,
72
+
73
+ is_abstract_class,
74
+ is_abstract,
75
+
76
+ get_abstracts,
75
77
  make_abstract,
76
78
  )
77
79
 
@@ -81,8 +83,8 @@ with _auto_proxy_init(globals(), update_exports=True):
81
83
 
82
84
  from .classes.namespaces import ( # noqa
83
85
  GenericNamespaceMeta,
84
- Namespace,
85
86
  NamespaceMeta,
87
+ Namespace,
86
88
  )
87
89
 
88
90
  from .classes.protocols import ( # noqa
@@ -91,54 +93,65 @@ with _auto_proxy_init(globals(), update_exports=True):
91
93
  )
92
94
 
93
95
  from .classes.restrict import ( # noqa
94
- AnySensitive,
95
- Final,
96
96
  FinalTypeError,
97
- NoBool,
97
+ Final,
98
+
99
+ SealedError,
100
+ Sealed,
101
+ PackageSealed,
102
+
98
103
  NotInstantiable,
99
104
  NotPicklable,
100
- PackageSealed,
105
+
106
+ NoBool,
107
+ no_bool,
108
+
101
109
  SENSITIVE_ATTR,
102
- Sealed,
103
- SealedError,
104
110
  Sensitive,
105
- no_bool,
111
+ AnySensitive,
106
112
  )
107
113
 
108
114
  from .classes.simple import ( # noqa
109
- LazySingleton,
110
- Marker,
111
115
  SimpleMetaDict,
116
+
117
+ Marker,
118
+
112
119
  Singleton,
120
+ LazySingleton,
113
121
  )
114
122
 
115
123
  from .classes.virtual import ( # noqa
116
- Callable,
117
- Descriptor,
118
- Picklable,
119
124
  Virtual,
120
125
  virtual_check,
126
+
127
+ Descriptor,
128
+ Picklable,
129
+
130
+ Callable,
121
131
  )
122
132
 
123
133
  from .clsdct import ( # noqa
134
+ is_possibly_cls_dct,
135
+ get_caller_cls_dct,
136
+
124
137
  ClassDctFn,
125
138
  cls_dct_fn,
126
- get_caller_cls_dct,
127
- is_possibly_cls_dct,
128
139
  )
129
140
 
130
141
  from .collections import ( # noqa
131
- empty_map,
132
- merge_dicts,
133
142
  yield_dict_init,
143
+ merge_dicts,
144
+
145
+ empty_map,
134
146
  )
135
147
 
136
148
  from .comparison import ( # noqa
137
- Infinity,
149
+ cmp,
150
+
138
151
  InfinityType,
139
- NegativeInfinity,
152
+ Infinity,
140
153
  NegativeInfinityType,
141
- cmp,
154
+ NegativeInfinity,
142
155
  )
143
156
 
144
157
  from .contextmanagers import ( # noqa
@@ -181,6 +194,9 @@ with _auto_proxy_init(globals(), update_exports=True):
181
194
 
182
195
  call_with_exit_stack,
183
196
  call_with_async_exit_stack,
197
+
198
+ with_exit_stack,
199
+ with_async_exit_stack,
184
200
  )
185
201
 
186
202
  from .datetimes import ( # noqa
@@ -194,19 +210,26 @@ with _auto_proxy_init(globals(), update_exports=True):
194
210
  )
195
211
 
196
212
  from .descriptors import ( # noqa
197
- AccessForbiddenError,
198
- access_forbidden,
199
213
  attr_property,
200
- classonly,
201
- decorator,
202
- is_method_descriptor,
203
214
  item_property,
204
- unwrap_callable,
205
- unwrap_callable_with_partials,
206
- unwrap_func,
207
- unwrap_func_with_partials,
215
+
216
+ is_method_descriptor,
208
217
  unwrap_method_descriptors,
218
+
219
+ unwrap_func_with_partials,
220
+ unwrap_func,
221
+
222
+ unwrap_callable_with_partials,
223
+ unwrap_callable,
224
+
209
225
  update_wrapper,
226
+
227
+ decorator,
228
+
229
+ AccessForbiddenError,
230
+ access_forbidden,
231
+
232
+ classonly,
210
233
  )
211
234
 
212
235
  from .enums import ( # noqa
@@ -218,43 +241,57 @@ with _auto_proxy_init(globals(), update_exports=True):
218
241
  )
219
242
 
220
243
  from .functions import ( # noqa
221
- VoidError,
244
+ is_lambda,
245
+
222
246
  call_with,
223
- coalesce,
224
- cond_kw,
225
- constant,
247
+ opt_call,
248
+ opt_fn,
249
+ recurse,
250
+
251
+ raise_,
252
+ raising,
253
+ try_,
226
254
  finally_,
255
+
227
256
  identity,
228
- is_lambda,
257
+ constant,
258
+ nullary_constant,
259
+
229
260
  is_none,
230
261
  is_not_none,
231
262
  isinstance_of,
232
263
  issubclass_of,
233
- maybe_call,
234
- new_function,
235
- new_function_kwargs,
236
- nullary_constant,
264
+ strict_eq,
265
+
266
+ VoidError,
267
+ Void,
268
+ void,
269
+
270
+ periodically,
271
+
272
+ opt_getattr,
273
+ coalesce,
237
274
  opt_coalesce,
238
- opt_fn,
275
+
276
+ cond_kw,
239
277
  opt_kw,
240
- periodically,
241
- raise_,
242
- raising,
243
- recurse,
244
- strict_eq,
245
278
  truthy_kw,
246
- try_,
247
- void,
279
+
280
+ new_function,
281
+ new_function_kwargs,
248
282
  )
249
283
 
250
284
  from .generators import ( # noqa
251
- GeneratorLike,
252
- GeneratorMappedIterator,
285
+ nextgen,
253
286
  autostart,
254
- capture_coroutine,
287
+
288
+ GeneratorLike,
289
+
255
290
  capture_generator,
291
+ capture_coroutine,
292
+
293
+ GeneratorMappedIterator,
256
294
  genmap,
257
- nextgen,
258
295
  )
259
296
 
260
297
  from .imports.capture import ( # noqa
@@ -294,21 +331,26 @@ with _auto_proxy_init(globals(), update_exports=True):
294
331
  )
295
332
 
296
333
  from .iterables import ( # noqa
297
- IteratorWithReturn,
298
- asrange,
299
- chunk,
300
- common_prefix_len,
301
- consume,
302
- flatmap,
303
- flatten,
304
334
  ilen,
335
+ take,
336
+ consume,
337
+ peek,
338
+ chunk,
305
339
  interleave,
340
+ renumerate,
341
+ common_prefix_len,
342
+
343
+ readiter,
344
+
306
345
  itergen,
307
- peek,
346
+
347
+ flatten,
348
+ flatmap,
349
+
350
+ asrange,
308
351
  prodrange,
309
- readiter,
310
- renumerate,
311
- take,
352
+
353
+ IteratorWithReturn,
312
354
  )
313
355
 
314
356
  from .lazyglobals import ( # noqa
@@ -330,27 +372,38 @@ with _auto_proxy_init(globals(), update_exports=True):
330
372
  )
331
373
 
332
374
  from .objects import ( # noqa
333
- Identity,
334
- SimpleProxy,
335
- anon_object,
336
375
  arg_repr,
376
+ opt_repr,
377
+
337
378
  can_weakref,
338
- deep_subclasses,
379
+
339
380
  new_type,
340
- opt_repr,
341
381
  super_meta,
382
+
383
+ deep_subclasses,
384
+
385
+ SimpleProxy,
386
+
387
+ anon_object,
388
+
389
+ Identity,
342
390
  )
343
391
 
344
392
  from .outcomes import ( # noqa
345
- Either,
346
- Error,
347
- Outcome,
348
393
  OutcomeAlreadyUnwrappedError,
349
- Value,
350
- acapture,
394
+
351
395
  capture,
352
- error,
396
+ acapture,
397
+
398
+ Outcome,
399
+
400
+ Value,
353
401
  value,
402
+
403
+ Error,
404
+ error,
405
+
406
+ Either,
354
407
  )
355
408
 
356
409
  from .overrides import ( # noqa
@@ -363,29 +416,35 @@ with _auto_proxy_init(globals(), update_exports=True):
363
416
  )
364
417
 
365
418
  from .params import ( # noqa
419
+ Param,
420
+
421
+ VarParam,
366
422
  ArgsParam,
367
- KwOnlyParam,
368
423
  KwargsParam,
369
- Param,
424
+
425
+ ValParam,
426
+ PosOnlyParam,
427
+ KwOnlyParam,
428
+
370
429
  ParamSeparator,
430
+
371
431
  ParamSpec,
372
- PosOnlyParam,
373
- ValParam,
374
- VarParam,
432
+
375
433
  param_render,
376
434
  )
377
435
 
378
436
  from .recursion import ( # noqa
379
437
  LimitedRecursionError,
380
- recursion_limiting,
381
438
  recursion_limiting_context,
439
+
440
+ recursion_limiting,
382
441
  )
383
442
 
384
443
  from .resolving import ( # noqa
385
- Resolvable,
386
444
  ResolvableClassNameError,
387
445
  get_cls_fqcn,
388
446
  get_fqcn_cls,
447
+ Resolvable,
389
448
  )
390
449
 
391
450
  from .resources import ( # noqa
@@ -395,24 +454,31 @@ with _auto_proxy_init(globals(), update_exports=True):
395
454
  )
396
455
 
397
456
  from .strings import ( # noqa
398
- BOOL_FALSE_STRINGS,
399
- BOOL_STRINGS,
400
- BOOL_TRUE_STRINGS,
401
- STRING_BOOL_VALUES,
402
- find_any,
403
- indent_lines,
404
- is_dunder,
405
- is_ident,
406
- is_ident_cont,
407
- is_ident_start,
408
- is_sunder,
409
- iter_pat,
410
457
  prefix_delimited,
411
458
  prefix_lines,
412
- replace_many,
413
- rfind_any,
459
+ indent_lines,
460
+
414
461
  strip_prefix,
415
462
  strip_suffix,
463
+
464
+ replace_many,
465
+
466
+ find_any,
467
+ rfind_any,
468
+
469
+ is_dunder,
470
+ is_sunder,
471
+
472
+ is_ident_start,
473
+ is_ident_cont,
474
+ is_ident,
475
+
476
+ BOOL_STRINGS,
477
+ BOOL_FALSE_STRINGS,
478
+ BOOL_TRUE_STRINGS,
479
+ STRING_BOOL_VALUES,
480
+
481
+ iter_pat,
416
482
  )
417
483
 
418
484
  from .sys import ( # noqa
@@ -408,3 +408,15 @@ async def call_with_async_exit_stack(
408
408
  ) -> T:
409
409
  async with contextlib.AsyncExitStack() as aes:
410
410
  return await fn(aes, *args, **kwargs)
411
+
412
+
413
+ def with_exit_stack(
414
+ fn: ta.Callable[ta.Concatenate[contextlib.ExitStack, P], T],
415
+ ) -> ta.Callable[P, T]:
416
+ return functools.partial(call_with_exit_stack, fn)
417
+
418
+
419
+ def with_async_exit_stack(
420
+ fn: ta.Callable[ta.Concatenate[contextlib.AsyncExitStack, P], ta.Awaitable[T]],
421
+ ) -> ta.Callable[P, ta.Awaitable[T]]:
422
+ return functools.partial(call_with_async_exit_stack, fn)
omlish/lang/functions.py CHANGED
@@ -29,7 +29,18 @@ def call_with(fn: ta.Any, *args: ta.Any, **kwargs: ta.Any) -> ta.Callable[[T], T
29
29
  return inner
30
30
 
31
31
 
32
- def maybe_call(obj: ta.Any, att: str, *args, default: ta.Any = None, **kwargs: ta.Any) -> ta.Any:
32
+ def opt_fn(fn: ta.Callable[[F], T]) -> ta.Callable[[F | None], T | None]:
33
+ @functools.wraps(fn)
34
+ def inner(v: F | None) -> T | None:
35
+ if v is not None:
36
+ return fn(v)
37
+ else:
38
+ return None
39
+
40
+ return inner
41
+
42
+
43
+ def opt_call(obj: ta.Any, att: str, *args, default: ta.Any = None, **kwargs: ta.Any) -> ta.Any:
33
44
  try:
34
45
  fn = getattr(obj, att)
35
46
  except AttributeError:
@@ -39,7 +50,7 @@ def maybe_call(obj: ta.Any, att: str, *args, default: ta.Any = None, **kwargs: t
39
50
 
40
51
 
41
52
  def recurse(fn: ta.Callable[..., T], *args, **kwargs) -> T:
42
- def rec(*args, **kwargs) -> T:
53
+ def rec(*args, **kwargs) -> T: # noqa
43
54
  return fn(rec, *args, **kwargs)
44
55
 
45
56
  return rec(*args, **kwargs)
@@ -91,20 +102,6 @@ def identity(obj: T) -> T:
91
102
  return obj
92
103
 
93
104
 
94
- def opt_fn(fn: ta.Callable[[F], T]) -> ta.Callable[[F | None], T | None]:
95
- @functools.wraps(fn)
96
- def inner(v: F | None) -> T | None:
97
- if v is not None:
98
- return fn(v)
99
- else:
100
- return None
101
-
102
- return inner
103
-
104
-
105
- ##
106
-
107
-
108
105
  class _constant(ta.Generic[T]): # noqa
109
106
  def __init__(self, obj: T) -> None:
110
107
  super().__init__()
@@ -198,6 +195,13 @@ def periodically(
198
195
  ##
199
196
 
200
197
 
198
+ def opt_getattr(obj: ta.Any, att: str, default: ta.Any = None) -> ta.Any:
199
+ try:
200
+ return getattr(obj, att)
201
+ except AttributeError:
202
+ return default
203
+
204
+
201
205
  def coalesce(*vs: T | None) -> T:
202
206
  for v in vs:
203
207
  if v is not None:
@@ -9,6 +9,8 @@ Insufficient alt impls:
9
9
 
10
10
  Possible alt impls:
11
11
  - aot static analysis, codegen, compare, if valid skip ctxmgr body and inject proxies, otherwise warn and run
12
+ - or just gen code inline, if ta.TYPE_CHECKING: .... else: # @omlish-generate-auto-proxy-import/init
13
+ - generate classic `foo = _lang.proxy_import('.foo', __package__)` blocks
12
14
  """
13
15
  import builtins
14
16
  import contextlib
omlish/metadata.py CHANGED
@@ -19,6 +19,8 @@ from . import lang
19
19
 
20
20
  T = ta.TypeVar('T')
21
21
 
22
+ ObjectMetadataT = ta.TypeVar('ObjectMetadataT', bound='ObjectMetadata')
23
+
22
24
 
23
25
  ##
24
26
 
@@ -94,12 +96,32 @@ def append_object_metadata(obj: T, *mds: ObjectMetadata) -> T:
94
96
  _type = type
95
97
 
96
98
 
99
+ @ta.overload
100
+ def get_object_metadata(
101
+ obj: ta.Any,
102
+ *,
103
+ strict: bool = False,
104
+ type: ta.Type[ObjectMetadataT], # noqa
105
+ ) -> ta.Sequence[ObjectMetadataT]:
106
+ ...
107
+
108
+
109
+ @ta.overload
97
110
  def get_object_metadata(
98
111
  obj: ta.Any,
99
112
  *,
100
113
  strict: bool = False,
101
114
  type: ta.Type | tuple[ta.Type, ...] | None = None, # noqa
102
- ) -> ta.Sequence[ObjectMetadata]:
115
+ ) -> ta.Sequence[ta.Any]:
116
+ ...
117
+
118
+
119
+ def get_object_metadata(
120
+ obj,
121
+ *,
122
+ strict=False,
123
+ type=None, # noqa
124
+ ):
103
125
  try:
104
126
  tgt = _unwrap_object_metadata_target(obj)
105
127
  except ObjectMetadataTargetTypeError:
@@ -7,13 +7,13 @@ import typing as ta
7
7
  import sqlalchemy as sa
8
8
  import sqlalchemy.sql.schema
9
9
 
10
- from .tabledefs import TableDef
10
+ from ..tabledefs import TableDef
11
11
 
12
12
 
13
13
  ##
14
14
 
15
15
 
16
- def build_sa_table(
16
+ def build_td_table(
17
17
  td: TableDef,
18
18
  *,
19
19
  metadata: sa.MetaData | None = None,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev447
3
+ Version: 0.0.0.dev449
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -15,7 +15,7 @@ Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
17
  Provides-Extra: all
18
- Requires-Dist: anyio~=4.10; extra == "all"
18
+ Requires-Dist: anyio~=4.11; extra == "all"
19
19
  Requires-Dist: sniffio~=1.3; extra == "all"
20
20
  Requires-Dist: greenlet~=3.2; extra == "all"
21
21
  Requires-Dist: trio~=0.31; extra == "all"
@@ -47,7 +47,7 @@ Requires-Dist: duckdb~=1.4; extra == "all"
47
47
  Requires-Dist: markupsafe~=3.0; extra == "all"
48
48
  Requires-Dist: jinja2~=3.1; extra == "all"
49
49
  Requires-Dist: pytest~=8.4; extra == "all"
50
- Requires-Dist: anyio~=4.10; extra == "all"
50
+ Requires-Dist: anyio~=4.11; extra == "all"
51
51
  Requires-Dist: sniffio~=1.3; extra == "all"
52
52
  Requires-Dist: asttokens~=3.0; extra == "all"
53
53
  Requires-Dist: executing~=2.2; extra == "all"
@@ -55,7 +55,7 @@ Requires-Dist: orjson~=3.11; extra == "all"
55
55
  Requires-Dist: pyyaml~=6.0; extra == "all"
56
56
  Requires-Dist: wrapt~=1.17; extra == "all"
57
57
  Provides-Extra: async
58
- Requires-Dist: anyio~=4.10; extra == "async"
58
+ Requires-Dist: anyio~=4.11; extra == "async"
59
59
  Requires-Dist: sniffio~=1.3; extra == "async"
60
60
  Requires-Dist: greenlet~=3.2; extra == "async"
61
61
  Requires-Dist: trio~=0.31; extra == "async"
@@ -98,7 +98,7 @@ Requires-Dist: jinja2~=3.1; extra == "templates"
98
98
  Provides-Extra: testing
99
99
  Requires-Dist: pytest~=8.4; extra == "testing"
100
100
  Provides-Extra: plus
101
- Requires-Dist: anyio~=4.10; extra == "plus"
101
+ Requires-Dist: anyio~=4.11; extra == "plus"
102
102
  Requires-Dist: sniffio~=1.3; extra == "plus"
103
103
  Requires-Dist: asttokens~=3.0; extra == "plus"
104
104
  Requires-Dist: executing~=2.2; extra == "plus"
@@ -1,12 +1,12 @@
1
1
  omlish/.omlish-manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
2
- omlish/__about__.py,sha256=LiPxemiRaxQQxXo8DT_3tjP1A9KkJeclFlc3Exl4Zrc,3613
2
+ omlish/__about__.py,sha256=imEFdhZ1oFLg4ROvAtmgSayohMctG7MAuAFYTQFvscc,3613
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
6
6
  omlish/check.py,sha256=DDNZnLxNoY2Y7N0Hz7nMR1q912ZzRLoBgOJVLcsXVws,6575
7
7
  omlish/datetimes.py,sha256=7dh4aiVRWXWECH3JLF8kkRbgJ1qyGlAlQVp1vCXdTBE,2168
8
8
  omlish/libc.py,sha256=mNY2FWZ2BjSucOx5TEW8IP_B5n84tVZWuVPL3Z3sUH8,15644
9
- omlish/metadata.py,sha256=l_GGk0g_GkxltQYNDr-P9TTtvIggkdFtnfIffYtaieQ,3797
9
+ omlish/metadata.py,sha256=lTh3NYVyjHtLTyAGiZxXJMjZrSPQ1E8zXvnJCgKSESA,4179
10
10
  omlish/runmodule.py,sha256=vQ9VZN_c3sQX9rj036dW9lXuMWTjGOfWnwDcWTSWnn0,705
11
11
  omlish/shlex.py,sha256=rlbgHWxjwpkCBRphOPqSIN_KD6qWJMLldNJUILulKT0,253
12
12
  omlish/sync.py,sha256=bmhoaapdt1WhbL8_BWP9WhCy-u6VeZKnv2k9fzRZDds,3551
@@ -54,6 +54,8 @@ omlish/bootstrap/diag.py,sha256=nTHKrZBdyEYoTpctwOpwzSMbQ2dROGkxpdzWfoe2xZg,5353
54
54
  omlish/bootstrap/harness.py,sha256=qPYW7CXUdLi-a3BK6GvbdAPb91j5IiRlBPcXCjRGzZo,1995
55
55
  omlish/bootstrap/main.py,sha256=RQAQVb_Cbk_Lnu-hSGMAo-aVQVIJ-E_TW7ZLsPO-ECk,5909
56
56
  omlish/bootstrap/sys.py,sha256=r06ZroT2Rv0CBHiEweqDV6oWaMGNhFc4u0XBMBv3nnY,8793
57
+ omlish/cexts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
+ omlish/cexts/include/omlish/omlish.hh,sha256=s63xBtlbiTT2kJQ_KSEwi5C-W3ZsTIuiUMeS3lZAAgE,13
57
59
  omlish/codecs/__init__.py,sha256=-FDwRJFGagg-fZyQ8wup4GPuR6gHpmaChzthlykn-kY,876
58
60
  omlish/codecs/base.py,sha256=nKAQKF0985xosHIP0mAkUZnr8lfHFj66ShnxL0OfdQE,2193
59
61
  omlish/codecs/bytes.py,sha256=3DxyQQCvFcP3mQ5G93f_mygXEb-7I8buM8EyzUcx2Is,2155
@@ -69,7 +71,7 @@ omlish/collections/coerce.py,sha256=tAls15v_7p5bUN33R7Zbko87KW5toWHl9fRialCqyNY,
69
71
  omlish/collections/frozen.py,sha256=drarjcMFpwKhBM01b1Gh6XDcaRaUgpyuxEiqppaKRkU,4220
70
72
  omlish/collections/hasheq.py,sha256=uHypfZlHhicQPvx9OOlpT9MSLwfc_mFil-WaxF9dTOo,3732
71
73
  omlish/collections/identity.py,sha256=00UAYIjCRhyj73Es0jVNvOloXjRxHcjRxGQeWo75OEo,4834
72
- omlish/collections/mappings.py,sha256=JJSgi2XLiPCw4bNixdxhgSly3DsL-1kTsPrruGgQMZg,3263
74
+ omlish/collections/mappings.py,sha256=FWDErWR63y3xcjBfxXH58M1yOAqCdMyFWwzBjGAE7UQ,3346
73
75
  omlish/collections/multimaps.py,sha256=azuif-PeLGvLpCE9_XX5zYx7XtVbsulWq0owvEKNy_g,3897
74
76
  omlish/collections/ordered.py,sha256=jBSj5CamdKJAezXM8GlRd7jjaRDk6BHIeOhlxcC9lJI,2468
75
77
  omlish/collections/ranked.py,sha256=McB8C2UQfUvrbmxGTpBz1-EZuyCLkBFtktzncMdt8_Y,2287
@@ -407,19 +409,19 @@ omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,4
407
409
  omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
408
410
  omlish/iterators/transforms.py,sha256=YHVdD9nBkS1k4kogi4Ba0UOTU_pKkuX9jGw1Tqj3UMw,3598
409
411
  omlish/iterators/unique.py,sha256=BSE-eanva8byFCJi09Nt2zzTsVr8LnTqY1PIInGYRs0,1396
410
- omlish/lang/__init__.py,sha256=sgUJUCPetFmMQ_qv2OuuYO0hk8AZLeSY7bTQPx3LzM8,10551
412
+ omlish/lang/__init__.py,sha256=O-W0CaUsWeFjCuIdED2wiLhfVicEpPbS_DQQB-t0DpE,10702
411
413
  omlish/lang/asyncs.py,sha256=iIHJp7nvgJVj7zS0Ji7NsVSzz54vkzrj0Snc83dxe9g,1965
412
414
  omlish/lang/attrstorage.py,sha256=UUnoENCMQF3twBfxBcIKa5mpXsAxWnNYDayhU8xgmpU,5224
413
415
  omlish/lang/casing.py,sha256=3_c7cxQOc4z_YezaU2B4NCTAsPh_kDL4wUTK5kZU6kg,4675
414
416
  omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
415
417
  omlish/lang/collections.py,sha256=kVMp1JJ6ycvKzuiOmf2ZF5Eg2mm3vJGPjkUcV_IACMk,2528
416
418
  omlish/lang/comparison.py,sha256=MOwEG0Yny-jBPHO9kQto9FSRyeNpQW24UABsghkrHxY,1356
417
- omlish/lang/contextmanagers.py,sha256=SqFfh3eO7JFIlebIZ0MVQC2w1KN8JZvqZq3A7hl2gDY,9645
419
+ omlish/lang/contextmanagers.py,sha256=JhldLt3avWXYR9WgqgeWbOgGTv4ptP-wQZUlAK28P3k,10032
418
420
  omlish/lang/datetimes.py,sha256=01tg21QOx-PWDlm-CSFTalym3vpqF0EKzeinmtcVNoU,379
419
421
  omlish/lang/descriptors.py,sha256=sVJ1Pr4ihp26Tu9UCvDSyfSf-DhBnFGnbpYIFF32c7g,6877
420
422
  omlish/lang/enums.py,sha256=F9tflHfaAoV2MpyuhZzpfX9-H55M3zNa9hCszsngEo8,111
421
423
  omlish/lang/errors.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
422
- omlish/lang/functions.py,sha256=b8Rf4X7XeahvIXosf-sN_-18VSOuyoJMkJG2dPCYvv8,5494
424
+ omlish/lang/functions.py,sha256=f7K2SC-09veno_lsUGu0DkZks2gL8VpsmyQMB4Q_i6Q,5663
423
425
  omlish/lang/generators.py,sha256=nJiSmDpsfPiypGzJ8qlOO7-BUnCsrAeDow9mhtGgBio,5196
424
426
  omlish/lang/iterables.py,sha256=o_s8ouaJrdUqEVl2_bzJk5CVdabmrywXY0gPn7xss3w,3371
425
427
  omlish/lang/lazyglobals.py,sha256=YfPtWgNEa0ULtbIiQIQ12pbafUwd6INQRw_PFcAabjo,2282
@@ -448,7 +450,7 @@ omlish/lang/classes/simple.py,sha256=3AJSs-plVg2flq4SC6I39LxP0nBaB241puv3D5YCP5I
448
450
  omlish/lang/classes/virtual.py,sha256=J4y-uiv1RaP2rfFeptXqQ1a4MRek0TMlAFFraO_lzhs,3397
449
451
  omlish/lang/imports/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
450
452
  omlish/lang/imports/_capture.cc,sha256=jAKW9pOV3ER4Vzd-aywmAeOxbv-b_jNdaxAaVdxfueg,2261
451
- omlish/lang/imports/capture.py,sha256=0uud2HvBPig3rWqjhLXtSK30vXtKggxFTYDDD9Ab0Gg,21710
453
+ omlish/lang/imports/capture.py,sha256=wjWuXDUYYHUZ78t_OxVzi27PshBOlhpSoglg7H67zXA,21890
452
454
  omlish/lang/imports/conditional.py,sha256=R-E47QD95mMonPImWlrde3rnJrFKCCkYz71c94W05sc,1006
453
455
  omlish/lang/imports/lazy.py,sha256=Eefs9hkj5surMdwgxX_Q3BOqPcox10v0sKT5rKIQknc,808
454
456
  omlish/lang/imports/proxy.py,sha256=wlXJrl1GiXQ-t5cO_aJLqp1mr_Erl4oMk4uySkkK7bg,6516
@@ -703,6 +705,7 @@ omlish/sql/alchemy/duckdb.py,sha256=BM9Z-YK7dI5UZtJbmmIKbocoV-a5X9_5GnSlAEqYEOM,
703
705
  omlish/sql/alchemy/exprs.py,sha256=-GhV9b_atIJlpn-aXmOMb2zDqRoML6NoqbU8cDvsWUs,328
704
706
  omlish/sql/alchemy/secrets.py,sha256=0_T9djpO7ScmmyjdUBrZ6QGFAvsG6NyHXA88O0Apasg,186
705
707
  omlish/sql/alchemy/sqlean.py,sha256=w6x2_mDOPWVLkgwHiOEUOJ217nakLwlI015gP670PSs,408
708
+ omlish/sql/alchemy/tabledefs.py,sha256=q5kVTPVoVArOXbpIv78eX0DcT2aY-V3uKoMvHiFSp2w,491
706
709
  omlish/sql/api/__init__.py,sha256=Lqia7OvW2CEMFXoyRyKZIYZneYv_vjnZVAvsvv08HV0,1036
707
710
  omlish/sql/api/_queries.py,sha256=FqIrtU6JdzQD4S4zv9tdDuzCLHSgJjK8WSfT7Ag4umI,530
708
711
  omlish/sql/api/asquery.py,sha256=8eBoJyyu0kHW3k3yytEcT-B6UAI_slKB0QtSK_WQS7g,1203
@@ -734,7 +737,6 @@ omlish/sql/queries/unary.py,sha256=MEYBDZn_H0bexmUrJeONOv5-gIpYowUaXOsEHeQM4ks,1
734
737
  omlish/sql/queries/unions.py,sha256=w9lKrQ38nMme_gyDPciZNqyCBhwFkLusc9fjmBDu48U,438
735
738
  omlish/sql/tabledefs/__init__.py,sha256=eFaO_QQaEv4Z9CLxFSzZgmXqxPI7xKTpDI6outo1VPk,150
736
739
  omlish/sql/tabledefs/_marshal.py,sha256=5Z7K433SzfN7-z8Yd7FJRzOV9tJv-ErRMA6inZ2iBCE,475
737
- omlish/sql/tabledefs/alchemy.py,sha256=fK00S_AdqadH2sG8SEATaFd7UnQS-vp1ECTYCnTSDuE,490
738
740
  omlish/sql/tabledefs/dtypes.py,sha256=X0N6Y1c2bQ4HC0WA-Yv_jZPvGlSqO7hMIV-towDw3MU,367
739
741
  omlish/sql/tabledefs/elements.py,sha256=lP_Ch19hKmiGYPQVeC8HpFaKdTYnXi2FfpfwKMxZOck,1674
740
742
  omlish/sql/tabledefs/lower.py,sha256=i4_QkVlVH5U99O6pqokrB661AudNVJ9Q-OwtkKOBleU,1410
@@ -820,9 +822,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
820
822
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
821
823
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
822
824
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
823
- omlish-0.0.0.dev447.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
824
- omlish-0.0.0.dev447.dist-info/METADATA,sha256=SpZ3KEXb0Nb-HqK5vPIjYFTN8_wAx6yAV19lmLLLpdk,19003
825
- omlish-0.0.0.dev447.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
826
- omlish-0.0.0.dev447.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
827
- omlish-0.0.0.dev447.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
828
- omlish-0.0.0.dev447.dist-info/RECORD,,
825
+ omlish-0.0.0.dev449.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
826
+ omlish-0.0.0.dev449.dist-info/METADATA,sha256=9xOu6exn_aBuSDxrxDGxBO8JOpogC2J7w7DULnc6dbM,19003
827
+ omlish-0.0.0.dev449.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
828
+ omlish-0.0.0.dev449.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
829
+ omlish-0.0.0.dev449.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
830
+ omlish-0.0.0.dev449.dist-info/RECORD,,