omlish 0.0.0.dev455__py3-none-any.whl → 0.0.0.dev456__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.dev455'
2
- __revision__ = '83eb94a310c0880350d3f2b4440d1673f4d9402d'
1
+ __version__ = '0.0.0.dev456'
2
+ __revision__ = '490c7e083d622b5af435b695219421a568eb45b7'
3
3
 
4
4
 
5
5
  #
omlish/lang/__init__.py CHANGED
@@ -334,7 +334,6 @@ with _auto_proxy_init(globals(), update_exports=True):
334
334
  ilen,
335
335
  take,
336
336
  consume,
337
- iterfrom,
338
337
  peek,
339
338
  chunk,
340
339
  interleave,
@@ -454,6 +453,13 @@ with _auto_proxy_init(globals(), update_exports=True):
454
453
  get_relative_resources,
455
454
  )
456
455
 
456
+ from .sequences import ( # noqa
457
+ iterslice,
458
+ iterrange,
459
+
460
+ SeqView,
461
+ )
462
+
457
463
  from .strings import ( # noqa
458
464
  prefix_delimited,
459
465
  prefix_lines,
omlish/lang/iterables.py CHANGED
@@ -26,14 +26,6 @@ def consume(it: ta.Iterable[ta.Any]) -> None:
26
26
  collections.deque(it, maxlen=0)
27
27
 
28
28
 
29
- def iterfrom(seq: ta.Sequence[T], start: int = 0, stop: int | None = None) -> ta.Iterator[T]:
30
- if start < 0:
31
- start += len(seq)
32
- if stop is None:
33
- stop = len(seq)
34
- return map(seq.__getitem__, range(start, stop))
35
-
36
-
37
29
  def peek(vs: ta.Iterable[T]) -> tuple[T, ta.Iterator[T]]:
38
30
  it = iter(vs)
39
31
  v = next(it)
@@ -0,0 +1,124 @@
1
+ """
2
+ TODO:
3
+ - StrView, BytesView - in lieu of hkt lol
4
+ - cext? even necessary?
5
+ - __eq__, cmp, __hash__
6
+ - __buffer__
7
+ - optimize `slice(None)`, keep as SeqView but fast path ops
8
+ - shorter repr if __len__ > some threshold
9
+ - use materialize()?
10
+ """
11
+ import typing as ta
12
+
13
+
14
+ T = ta.TypeVar('T')
15
+
16
+
17
+ ##
18
+
19
+
20
+ def iterslice(
21
+ seq: ta.Sequence[T],
22
+ slc: slice,
23
+ ) -> ta.Iterator[T]:
24
+ return map(seq.__getitem__, range(*slc.indices(len(seq))))
25
+
26
+
27
+ def iterrange(
28
+ seq: ta.Sequence[T],
29
+ start: int | None = None,
30
+ stop: int | None = None,
31
+ step: int | None = None,
32
+ ) -> ta.Iterator[T]:
33
+ return iterslice(seq, slice(start, stop, step))
34
+
35
+
36
+ ##
37
+
38
+
39
+ @ta.final
40
+ class SeqView(ta.Sequence[T]):
41
+ def __init__(self, data: ta.Sequence[T], slice_: slice = slice(None)) -> None:
42
+ if data.__class__ is SeqView:
43
+ self._data = data._data # type: ignore[attr-defined] # noqa
44
+ self._range = data._range[slice_] # type: ignore[attr-defined] # noqa
45
+ else:
46
+ self._data = data
47
+ self._range = range(*slice_.indices(len(data)))
48
+
49
+ def __init_subclass__(cls, **kwargs):
50
+ raise TypeError
51
+
52
+ _data: ta.Sequence[T]
53
+ _range: range
54
+
55
+ @classmethod
56
+ def _from_range(cls, base: ta.Sequence[T], rng: range) -> 'SeqView[T]':
57
+ self = object.__new__(cls)
58
+ self._data = base
59
+ self._range = rng
60
+ return self
61
+
62
+ def __repr__(self) -> str:
63
+ return f'{self.__class__.__name__}({self._data!r}, {self.slice!r})'
64
+
65
+ #
66
+
67
+ def __len__(self) -> int:
68
+ return len(self._range)
69
+
70
+ def __getitem__(self, key: int | slice) -> ta.Union[T, 'SeqView[T]']: # type: ignore[override]
71
+ if isinstance(key, slice):
72
+ nr = self._range[key]
73
+ return SeqView._from_range(self._data, nr)
74
+ return self._data[self._range[key]]
75
+
76
+ def __iter__(self) -> ta.Iterator[T]:
77
+ return map(self._data.__getitem__, self._range)
78
+
79
+ def __reversed__(self) -> ta.Iterator[T]:
80
+ return map(self._data.__getitem__, reversed(self._range))
81
+
82
+ def count(self, value: ta.Any) -> int:
83
+ c = 0
84
+ for i in self._range:
85
+ if self._data[i] == value:
86
+ c += 1
87
+ return c
88
+
89
+ def index(self, value: ta.Any, start: int = 0, stop: int | None = None) -> int:
90
+ sub = self._range[slice(start, stop, 1)]
91
+ for off, i in enumerate(sub):
92
+ if self._data[i] == value:
93
+ return off
94
+ raise ValueError(f'{value!r} is not in view')
95
+
96
+ #
97
+
98
+ @property
99
+ def data(self) -> ta.Sequence[T]:
100
+ return self._data
101
+
102
+ _slice: slice
103
+
104
+ @property
105
+ def slice(self) -> slice:
106
+ try:
107
+ return self._slice
108
+ except AttributeError:
109
+ pass
110
+
111
+ step = self._range.step
112
+ start = self._range.start
113
+ if len(self._range) == 0:
114
+ stop = start
115
+ else:
116
+ last = start + (len(self._range) - 1) * step
117
+ stop = last + (1 if step > 0 else -1)
118
+ slc = slice(start, stop, step)
119
+
120
+ self._slice = slc
121
+ return slc
122
+
123
+ def materialize(self) -> ta.Sequence[T]:
124
+ return self._data[self.slice]
@@ -49,6 +49,8 @@ with _lang.auto_proxy_init(globals()):
49
49
 
50
50
  from .base.configs import ( # noqa
51
51
  Config,
52
+ Configs,
53
+
52
54
  ConfigRegistry,
53
55
  )
54
56
 
@@ -3,6 +3,10 @@ import typing as ta
3
3
  from ... import lang
4
4
  from .registries import Registry
5
5
  from .registries import RegistryItem
6
+ from .registries import RegistryView
7
+
8
+
9
+ ConfigT = ta.TypeVar('ConfigT', bound='Config')
6
10
 
7
11
 
8
12
  ##
@@ -12,7 +16,15 @@ class Config(RegistryItem, lang.Abstract):
12
16
  pass
13
17
 
14
18
 
19
+ Configs: ta.TypeAlias = RegistryView[Config]
20
+
21
+
22
+ ##
23
+
24
+
15
25
  ConfigRegistry: ta.TypeAlias = Registry[Config]
16
26
 
27
+ lang.static_check_issubclass[Configs](ConfigRegistry)
28
+
17
29
 
18
30
  EMPTY_CONFIG_REGISTRY = ConfigRegistry().seal()
@@ -6,7 +6,7 @@ from ... import collections as col
6
6
  from ... import lang
7
7
  from ... import reflect as rfl
8
8
  from .configs import EMPTY_CONFIG_REGISTRY
9
- from .configs import ConfigRegistry
9
+ from .configs import Configs
10
10
  from .errors import UnhandledTypeError
11
11
  from .options import Option
12
12
  from .overrides import ReflectOverride
@@ -28,12 +28,12 @@ T = ta.TypeVar('T')
28
28
 
29
29
  @dc.dataclass(frozen=True, kw_only=True)
30
30
  class BaseContext(lang.Abstract, lang.Sealed):
31
- config_registry: ConfigRegistry = EMPTY_CONFIG_REGISTRY
31
+ configs: Configs = EMPTY_CONFIG_REGISTRY
32
32
  options: col.TypeMap[Option] = col.TypeMap()
33
33
 
34
34
  def _reflect(self, o: ta.Any) -> rfl.Type:
35
35
  def override(o):
36
- if (ovr := self.config_registry.get_of(o, ReflectOverride)):
36
+ if (ovr := self.configs.get_of(o, ReflectOverride)):
37
37
  return ovr[-1].rty
38
38
  return None
39
39
 
@@ -3,6 +3,7 @@ TODO:
3
3
  - col.TypeMap?
4
4
  - at least get_any
5
5
  """
6
+ import abc
6
7
  import dataclasses as dc
7
8
  import threading
8
9
  import typing as ta
@@ -21,11 +22,38 @@ RegistryItemT = ta.TypeVar('RegistryItemT', bound=RegistryItem)
21
22
  RegistryItemU = ta.TypeVar('RegistryItemU', bound=RegistryItem)
22
23
 
23
24
 
25
+ ##
26
+
27
+
28
+ class RegistryView(lang.Abstract, ta.Generic[RegistryItemT]):
29
+ @abc.abstractmethod
30
+ def get(
31
+ self,
32
+ key: ta.Any,
33
+ *,
34
+ identity: bool | None = None,
35
+ ) -> ta.Sequence[RegistryItemT]:
36
+ ...
37
+
38
+ @abc.abstractmethod
39
+ def get_of(
40
+ self,
41
+ key: ta.Any,
42
+ item_ty: type[RegistryItemU],
43
+ *,
44
+ identity: bool | None = None,
45
+ ) -> ta.Sequence[RegistryItemU]:
46
+ ...
47
+
48
+
49
+ ##
50
+
51
+
24
52
  class RegistrySealedError(Exception):
25
53
  pass
26
54
 
27
55
 
28
- class Registry(ta.Generic[RegistryItemT]):
56
+ class Registry(RegistryView[RegistryItemT]):
29
57
  def __init__(
30
58
  self,
31
59
  *,
@@ -203,8 +231,8 @@ class Registry(ta.Generic[RegistryItemT]):
203
231
  key: ta.Any,
204
232
  *,
205
233
  identity: bool | None = None,
206
- ) -> ta.Sequence[RegistryItem]:
207
- return self._state.get(key, identity=identity)
234
+ ) -> ta.Sequence[RegistryItemT]:
235
+ return self._state.get(key, identity=identity) # type: ignore [return-value]
208
236
 
209
237
  def get_of(
210
238
  self,
@@ -213,4 +241,4 @@ class Registry(ta.Generic[RegistryItemT]):
213
241
  *,
214
242
  identity: bool | None = None,
215
243
  ) -> ta.Sequence[RegistryItemU]:
216
- return self._state.get_of(key, item_ty, identity=identity) # type: ignore[return-value]
244
+ return self._state.get_of(key, item_ty, identity=identity) # type: ignore [return-value]
@@ -69,13 +69,13 @@ class Marshaling(lang.Abstract):
69
69
 
70
70
  def new_marshal_factory_context(self) -> MarshalFactoryContext:
71
71
  return MarshalFactoryContext(
72
- config_registry=self.config_registry(),
72
+ configs=self.config_registry(),
73
73
  marshaler_factory=self.marshaler_factory(),
74
74
  )
75
75
 
76
76
  def new_unmarshal_factory_context(self) -> UnmarshalFactoryContext:
77
77
  return UnmarshalFactoryContext(
78
- config_registry=self.config_registry(),
78
+ configs=self.config_registry(),
79
79
  unmarshaler_factory=self.unmarshaler_factory(),
80
80
  )
81
81
 
@@ -83,13 +83,13 @@ class Marshaling(lang.Abstract):
83
83
 
84
84
  def new_marshal_context(self) -> MarshalContext:
85
85
  return MarshalContext(
86
- config_registry=self.config_registry(),
86
+ configs=self.config_registry(),
87
87
  marshal_factory_context=self.new_marshal_factory_context(),
88
88
  )
89
89
 
90
90
  def new_unmarshal_context(self) -> UnmarshalContext:
91
91
  return UnmarshalContext(
92
- config_registry=self.config_registry(),
92
+ configs=self.config_registry(),
93
93
  unmarshal_factory_context=self.new_unmarshal_factory_context(),
94
94
  )
95
95
 
@@ -52,9 +52,9 @@ class _ModuleImportingFactory(ta.Generic[FactoryT]):
52
52
  self._callback()
53
53
 
54
54
  def _import_if_necessary(self, ctx: BaseContext) -> None:
55
- if (mis := ctx.config_registry.get_of(None, ModuleImport)) and mis is not self._last_mis:
55
+ if (mis := ctx.configs.get_of(None, ModuleImport)) and mis is not self._last_mis:
56
56
  with self._lock:
57
- if (mis := ctx.config_registry.get_of(None, ModuleImport)) and mis is not self._last_mis:
57
+ if (mis := ctx.configs.get_of(None, ModuleImport)) and mis is not self._last_mis:
58
58
  self._do_import(ctx, mis)
59
59
  self._last_mis = mis
60
60
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev455
3
+ Version: 0.0.0.dev456
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.omlish-manifests.json,sha256=FLw7xkPiSXuImZgqSP8BwrEib2R1doSzUPLUkc-QUIA,8410
2
- omlish/__about__.py,sha256=wqpHLPUSVDC5K6I55LXDB8pGFgSMoTsN383tFd6mTHc,3613
2
+ omlish/__about__.py,sha256=OqcsTrPCRTuWFUL-T10Ex74zucxFS2ywce2ec9Qnj40,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
@@ -410,7 +410,7 @@ omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,4
410
410
  omlish/iterators/tools.py,sha256=M16LXrJhMdsz5ea2qH0vws30ZvhQuQSCVFSLpRf_gTg,2096
411
411
  omlish/iterators/transforms.py,sha256=YHVdD9nBkS1k4kogi4Ba0UOTU_pKkuX9jGw1Tqj3UMw,3598
412
412
  omlish/iterators/unique.py,sha256=BSE-eanva8byFCJi09Nt2zzTsVr8LnTqY1PIInGYRs0,1396
413
- omlish/lang/__init__.py,sha256=FiAlQCNPHoJABATaW-eFLEe8h0crfDgt--VFhKDTIJ0,10720
413
+ omlish/lang/__init__.py,sha256=cu35SEtPGFFKOrttPsD__wjnefZrue-upqpw01ml50c,10802
414
414
  omlish/lang/asyncs.py,sha256=iIHJp7nvgJVj7zS0Ji7NsVSzz54vkzrj0Snc83dxe9g,1965
415
415
  omlish/lang/attrstorage.py,sha256=UUnoENCMQF3twBfxBcIKa5mpXsAxWnNYDayhU8xgmpU,5224
416
416
  omlish/lang/casing.py,sha256=3_c7cxQOc4z_YezaU2B4NCTAsPh_kDL4wUTK5kZU6kg,4675
@@ -424,7 +424,7 @@ omlish/lang/enums.py,sha256=F9tflHfaAoV2MpyuhZzpfX9-H55M3zNa9hCszsngEo8,111
424
424
  omlish/lang/errors.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
425
425
  omlish/lang/functions.py,sha256=tZL7Yi5Oy34lvzP6HhWmV5q1eg5-mk3FrWEjsmhKRhY,5707
426
426
  omlish/lang/generators.py,sha256=nJiSmDpsfPiypGzJ8qlOO7-BUnCsrAeDow9mhtGgBio,5196
427
- omlish/lang/iterables.py,sha256=5CJNkLyY4Oq43UkiM7KCgV9F6jzrlr9SLiuNx3DAvm8,3608
427
+ omlish/lang/iterables.py,sha256=o_s8ouaJrdUqEVl2_bzJk5CVdabmrywXY0gPn7xss3w,3371
428
428
  omlish/lang/lazyglobals.py,sha256=YfPtWgNEa0ULtbIiQIQ12pbafUwd6INQRw_PFcAabjo,2282
429
429
  omlish/lang/maybes.py,sha256=8GUpqJvyx9y5PQBQBBx6yTSE5WKsMbXMHPt4_vojKUw,209
430
430
  omlish/lang/maysync.py,sha256=S2Q_rGC4AxRa1UsGJdSzZsYpgOcX9Y8ZmYGA9v8OWn8,1635
@@ -435,6 +435,7 @@ omlish/lang/params.py,sha256=sfbNoGrKCsAtubFufj_uh_WKshIgA8fqJ4PmLH1PH00,6639
435
435
  omlish/lang/recursion.py,sha256=1VfSqzKO-8Is3t9LKw0W4jwPfE0aBS70EUlbUxAx4eE,1900
436
436
  omlish/lang/resolving.py,sha256=nMosn-rcYjI8t6b35oICDyPw6t6-HvWj5jMdkfn1jfA,1612
437
437
  omlish/lang/resources.py,sha256=awfh33Uxkd9Ho-5Z3d9CPWQE3gjktV0XWM6XbdG0ejA,2845
438
+ omlish/lang/sequences.py,sha256=OJ5hdgjvgzOgsb0Bg8vGrwPyef4gkRPp-Bz21sc9_iE,3185
438
439
  omlish/lang/strings.py,sha256=TY-v0iGu6BxEKb99YS-VmIJqc-sTAqMv7mCDJQALMnI,4550
439
440
  omlish/lang/sys.py,sha256=KPe1UOXk1VxlOYt_aLmhN0KqsA4wnP-4nm4WEwO49pw,411
440
441
  omlish/lang/typing.py,sha256=ZN4t8oGSSknf_T1HbfqVQ7Y9OOZ1RkikYihNxdBlTFQ,3733
@@ -527,19 +528,19 @@ omlish/manifests/globals.py,sha256=kVqQ-fT4kc7xWzLHoI731GviitFPv2v2yqw-p7t7Exs,2
527
528
  omlish/manifests/loading.py,sha256=s6KnhdFQCsI2i0Rus1sMU0so2v8dUBnk59BJkSnxGt8,17514
528
529
  omlish/manifests/static.py,sha256=9BaPBLkuzxHmg5A-5k9BjjBFINCdmFOIu06dMFgCfz4,497
529
530
  omlish/manifests/types.py,sha256=NeOGuIVrcbqjCDbQ3MnCxxHAgHnw0CkWJsBzo230PWE,453
530
- omlish/marshal/__init__.py,sha256=RC4AnLMHRFF51-Be1W9Lefcv1g9L89tM7UiPM2tP1Xg,6530
531
+ omlish/marshal/__init__.py,sha256=zmNQNAla57SbwjW7iz74nmEIvrnx8Dp6k5qvqwCeAHM,6548
531
532
  omlish/marshal/globals.py,sha256=Q6G18hcUwUDDNnpyRPnR5Tn_XZpZCSIEXo09nYSOaNU,2236
532
533
  omlish/marshal/naming.py,sha256=Mk5YrbES836_KflNNRoc5Ajd96iMYLQIMERKx1KpT4g,865
533
534
  omlish/marshal/standard.py,sha256=8Qy5L3qMHO-V_fu78tM62wMcGpF0kgrFrxn06IRbFXQ,6906
534
535
  omlish/marshal/base/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
535
- omlish/marshal/base/configs.py,sha256=y_JRghQgu8mJjPspSZcJQLhjevEuJE2kyxCdu3wGKvo,271
536
- omlish/marshal/base/contexts.py,sha256=5dsfjEgKn9Nt-yuzG8ZyJUc6kIQfXHuGoWGo5efIqf4,2683
536
+ omlish/marshal/base/configs.py,sha256=BNXmjDae5FgoYrjUnveY2xmMRukqWxH5KVK-VfL5GUE,465
537
+ omlish/marshal/base/contexts.py,sha256=-mzH_f5JMyUpokCEYmqf8Er0YZtxhet5RFk4UyxoBw4,2653
537
538
  omlish/marshal/base/errors.py,sha256=jmN3vl_U_hB6L0wAvuO7ORG27vXF7KEUk-1TxxK2mYA,308
538
539
  omlish/marshal/base/funcs.py,sha256=UIlVHZ_vARJ8MNKsR6n5x5GnFQQ7Z0MaIZKYxHMsZaQ,1470
539
540
  omlish/marshal/base/options.py,sha256=Yuk4VDeKw9N26wSHda9_mMWj1hdgQTnenJ6hPYfrFts,235
540
541
  omlish/marshal/base/overrides.py,sha256=543hP4_y2JRThUOamCE0dPfgucbepVV8e_YF-_PJk6U,993
541
- omlish/marshal/base/registries.py,sha256=NRH5X4nE_aF7vcTi4_5qqQpYbYru2Ud6aD0eKfuJ_Ws,5903
542
- omlish/marshal/base/types.py,sha256=DtyY7W-kzU0oXtQytrBKDIPzfWnh2OJW7oMHSNB-TrA,3593
542
+ omlish/marshal/base/registries.py,sha256=dl4AyOXI-_HN4TKLwj48tdAgkgH9oZo-rBBb-P-F7t8,6441
543
+ omlish/marshal/base/types.py,sha256=4GU0T842oIfOYKOif25IVn5vVqWzXPtlYHRahdVgbjs,3561
543
544
  omlish/marshal/base/values.py,sha256=QF6OateG5kjRPHYza08wscThhg20oryf-aVQrxjfkC0,212
544
545
  omlish/marshal/composite/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
545
546
  omlish/marshal/composite/iterables.py,sha256=zswx4nmYPWNu1Ht7myjNwy_q5a4Sq-hH7Ky7rIYBqv4,3148
@@ -562,7 +563,7 @@ omlish/marshal/factories/typecache.py,sha256=8DwgyAKEA7scdhSxndPbC3NltkFViM_C4nP
562
563
  omlish/marshal/factories/typemap.py,sha256=-Dl3Z-MvssSP_oPj3i32_72A9nSHNM1HtpTuys7tDHg,1995
563
564
  omlish/marshal/factories/moduleimport/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
564
565
  omlish/marshal/factories/moduleimport/configs.py,sha256=8g6FSPmyo0IOYSWYp5kqfJACZxL9SvzlHzrSzucNZyg,538
565
- omlish/marshal/factories/moduleimport/factories.py,sha256=MEyTruCxPvcLvIZs0Wwa-5_8wW59Nc-Mv8U1XI8GAAc,2404
566
+ omlish/marshal/factories/moduleimport/factories.py,sha256=Y-K7l6lhU1oFXWP83qnPU1Qp4jGp3eEDRERHuK-1nOE,2388
566
567
  omlish/marshal/objects/__init__.py,sha256=F4wej8L_tedC8ETYxAnmKfdPR9TjsqIus9Z3nZofYuc,182
567
568
  omlish/marshal/objects/dataclasses.py,sha256=wQ6s7z6zuoPJfUN4TqQSeDjxj0MzUJyH4vwYORnrxUY,10431
568
569
  omlish/marshal/objects/helpers.py,sha256=hj5I1pILt3QFSVkYJNrSO3wiCaalAopEYWPL17Ip4zs,1102
@@ -825,9 +826,9 @@ omlish/typedvalues/marshal.py,sha256=2xqX6JllhtGpmeYkU7C-qzgU__0x-vd6CzYbAsocQlc
825
826
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
826
827
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
827
828
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
828
- omlish-0.0.0.dev455.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
829
- omlish-0.0.0.dev455.dist-info/METADATA,sha256=qPrVr-lvAsmMg6yb-y5H9a4wRc4ZzwGYiKUznIHqMIY,19003
830
- omlish-0.0.0.dev455.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
831
- omlish-0.0.0.dev455.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
832
- omlish-0.0.0.dev455.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
833
- omlish-0.0.0.dev455.dist-info/RECORD,,
829
+ omlish-0.0.0.dev456.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
830
+ omlish-0.0.0.dev456.dist-info/METADATA,sha256=9A5eDRKfxCtCY62s2IEBnZe_SsoG4y8e8H2-LFsO_64,19003
831
+ omlish-0.0.0.dev456.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
832
+ omlish-0.0.0.dev456.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
833
+ omlish-0.0.0.dev456.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
834
+ omlish-0.0.0.dev456.dist-info/RECORD,,