omlish 0.0.0.dev313__py3-none-any.whl → 0.0.0.dev315__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.dev313'
2
- __revision__ = 'b40a99c0b9588df1eabcb40ae8daec374426ea55'
1
+ __version__ = '0.0.0.dev315'
2
+ __revision__ = '9f4bb119f0561532694288dd8bb808ce67ebb43d'
3
3
 
4
4
 
5
5
  #
@@ -118,6 +118,8 @@ class HashEqMap(ta.MutableMapping[K, V]):
118
118
  for i, e in enumerate(l):
119
119
  if self._hash_eq.eq(k, e.k):
120
120
  del l[i]
121
+ if not l:
122
+ del self._dct[h]
121
123
  self._len -= 1
122
124
  return
123
125
  raise KeyError(k)
@@ -57,6 +57,7 @@ class SkipList(SortedCollection[T]):
57
57
  comparator = SortedCollection.default_comparator
58
58
  self._compare = comparator
59
59
  self._max_height = max_height
60
+
60
61
  self._head = SkipList._Node(None, self._max_height)
61
62
  self._height = 1
62
63
  self._head.next = [None] * self._max_height
omlish/lang/__init__.py CHANGED
@@ -160,6 +160,7 @@ from .functions import ( # noqa
160
160
  as_async,
161
161
  call_with,
162
162
  coalesce,
163
+ cond_kw,
163
164
  constant,
164
165
  finally_,
165
166
  identity,
@@ -171,6 +172,7 @@ from .functions import ( # noqa
171
172
  maybe_call,
172
173
  new_function,
173
174
  new_function_kwargs,
175
+ nullary_constant,
174
176
  opt_coalesce,
175
177
  opt_fn,
176
178
  opt_kw,
@@ -178,7 +180,7 @@ from .functions import ( # noqa
178
180
  raise_,
179
181
  raising,
180
182
  recurse,
181
- strict_constant,
183
+ truthy_kw,
182
184
  try_,
183
185
  void,
184
186
  )
@@ -7,6 +7,7 @@ TODO:
7
7
  - also just riic
8
8
  - !! reconcile A().f() with A.f(A())
9
9
  - unbound descriptor *should* still hit instance cache
10
+ - significant_kwargs_order=False - stdlib has significant kwarg order
10
11
  - integrate / expose with collections.cache
11
12
  - weakrefs (selectable by arg)
12
13
  - more rigorous descriptor pickling
omlish/lang/functions.py CHANGED
@@ -26,6 +26,7 @@ def call_with(fn: ta.Any, *args: ta.Any, **kwargs: ta.Any) -> ta.Callable[[T], T
26
26
  def inner(obj):
27
27
  fn(obj, *args, **kwargs)
28
28
  return obj
29
+
29
30
  return inner
30
31
 
31
32
 
@@ -55,6 +56,7 @@ def raise_(o: BaseException) -> ta.NoReturn:
55
56
  def raising(o: BaseException) -> ta.Callable[..., ta.NoReturn]:
56
57
  def inner(*args, **kwargs):
57
58
  raise o
59
+
58
60
  return inner
59
61
 
60
62
 
@@ -97,6 +99,7 @@ def opt_fn(fn: ta.Callable[[F], T]) -> ta.Callable[[F | None], T | None]:
97
99
  return fn(v)
98
100
  else:
99
101
  return None
102
+
100
103
  return inner
101
104
 
102
105
 
@@ -115,7 +118,7 @@ class constant(_constant[T]): # noqa
115
118
  return self._obj
116
119
 
117
120
 
118
- class strict_constant(_constant[T]): # noqa
121
+ class nullary_constant(_constant[T]): # noqa
119
122
  def __call__(self) -> T:
120
123
  return self._obj
121
124
 
@@ -165,6 +168,7 @@ def as_async(fn: ta.Callable[P, T]) -> ta.Callable[P, ta.Awaitable[T]]:
165
168
  @functools.wraps(fn)
166
169
  async def inner(*args, **kwargs):
167
170
  return fn(*args, **kwargs)
171
+
168
172
  return inner
169
173
 
170
174
 
@@ -180,19 +184,20 @@ def periodically(
180
184
  initial: ta.Any = _MISSING,
181
185
  *,
182
186
  include_runtime: bool = False,
187
+ clock: ta.Callable[[], float] = time.monotonic,
183
188
  ) -> CallableT:
184
- nxt = time.time() + interval_s
189
+ nxt = clock() + interval_s
185
190
  ret = initial
186
191
 
187
192
  @functools.wraps(fn)
188
193
  def inner(*args, **kwargs):
189
194
  nonlocal nxt, ret
190
- if time.time() >= nxt or ret is _MISSING:
195
+ if clock() >= nxt or ret is _MISSING:
191
196
  if include_runtime:
192
- nxt = time.time() + interval_s
197
+ nxt = clock() + interval_s
193
198
  ret = fn(*args, **kwargs)
194
199
  if not include_runtime:
195
- nxt = time.time() + interval_s
200
+ nxt = clock() + interval_s
196
201
  return ret
197
202
 
198
203
  return inner # type: ignore
@@ -208,6 +213,7 @@ class Args:
208
213
 
209
214
  def __init__(self, *args: ta.Any, **kwargs: ta.Any) -> None:
210
215
  super().__init__()
216
+
211
217
  self.args = args
212
218
  self.kwargs = kwargs
213
219
 
@@ -248,10 +254,18 @@ def opt_coalesce(*vs: T | None) -> T | None:
248
254
  ##
249
255
 
250
256
 
251
- def opt_kw(**kwargs: ta.Any) -> dict[str, ta.Any]:
257
+ def cond_kw(cond: ta.Callable[[T], bool], **kwargs: T) -> dict[str, T]:
258
+ return {k: v for k, v in kwargs.items() if cond(v)}
259
+
260
+
261
+ def opt_kw(**kwargs: T | None) -> dict[str, T]:
252
262
  return {k: v for k, v in kwargs.items() if v is not None}
253
263
 
254
264
 
265
+ def truthy_kw(**kwargs: T) -> dict[str, T]:
266
+ return {k: v for k, v in kwargs.items() if v}
267
+
268
+
255
269
  ##
256
270
 
257
271
 
@@ -2,6 +2,7 @@ from .keywords.base import ( # noqa
2
2
  Keyword,
3
3
  Keywords,
4
4
  KnownKeyword,
5
+ UnknownKeyword,
5
6
  )
6
7
 
7
8
  from .keywords.core import ( # noqa
@@ -39,10 +40,6 @@ from .keywords.render import ( # noqa
39
40
  render_keywords,
40
41
  )
41
42
 
42
- from .keywords.unknown import ( # noqa
43
- UnknownKeyword,
44
- )
45
-
46
43
  from .keywords.validation import ( # noqa
47
44
  AdditionalProperties,
48
45
  AnyOf,
@@ -49,6 +49,15 @@ class KnownKeyword(Keyword, lang.Abstract):
49
49
  ##
50
50
 
51
51
 
52
+ @dc.dataclass(frozen=True)
53
+ class UnknownKeyword(Keyword, lang.Final):
54
+ tag: str # type: ignore[misc]
55
+ value: ta.Any
56
+
57
+
58
+ ##
59
+
60
+
52
61
  @dc.dataclass(frozen=True)
53
62
  class Keywords(lang.Final):
54
63
  lst: ta.Sequence[Keyword]
@@ -56,7 +65,7 @@ class Keywords(lang.Final):
56
65
  @cached.property
57
66
  @dc.init
58
67
  def by_type(self) -> ta.Mapping[type[Keyword], Keyword]:
59
- return col.make_map_by(type, self.lst, strict=True) # noqa
68
+ return col.make_map_by(type, (k for k in self.lst if not isinstance(k, UnknownKeyword)), strict=True) # noqa
60
69
 
61
70
  @cached.property
62
71
  @dc.init
@@ -16,10 +16,10 @@ from .base import NumberKeyword
16
16
  from .base import StrKeyword
17
17
  from .base import StrOrStrArrayKeyword
18
18
  from .base import StrToKeywordsKeyword
19
+ from .base import UnknownKeyword
19
20
  from .core import CoreKeyword
20
21
  from .format import FormatKeyword
21
22
  from .metadata import MetadataKeyword
22
- from .unknown import UnknownKeyword
23
23
  from .validation import ValidationKeyword
24
24
 
25
25
 
@@ -12,7 +12,7 @@ from .base import NumberKeyword
12
12
  from .base import StrKeyword
13
13
  from .base import StrOrStrArrayKeyword
14
14
  from .base import StrToKeywordsKeyword
15
- from .unknown import UnknownKeyword
15
+ from .base import UnknownKeyword
16
16
 
17
17
 
18
18
  ##
@@ -44,8 +44,10 @@ class Closer(lang.Abstract):
44
44
 
45
45
  @ta.final
46
46
  def close(self) -> None:
47
- self.__closed = True
48
- self._close()
47
+ try:
48
+ self._close()
49
+ finally:
50
+ self.__closed = True
49
51
 
50
52
  def _close(self) -> None:
51
53
  pass
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev313
3
+ Version: 0.0.0.dev315
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=orgsRvtpHu8tdhaCvlP9v3P495OJopYYiHKjK68WtWg,8587
2
- omlish/__about__.py,sha256=81wh26UgL3RY-CfQ-CEVjRjEa68mTK45CUp7tU4yYx8,3478
2
+ omlish/__about__.py,sha256=LDFOlaYknirgV_RjbBKwDWTdloPE5HH2GlmJgG9phI4,3478
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
@@ -81,7 +81,7 @@ omlish/collections/abc.py,sha256=ikTJlJ5dhXjU6tlNsI0Wm0_7GaIEpe3mftpvdGY_nc8,262
81
81
  omlish/collections/coerce.py,sha256=tAls15v_7p5bUN33R7Zbko87KW5toWHl9fRialCqyNY,7030
82
82
  omlish/collections/errors.py,sha256=shcS-NCnEUudF8qC_SmO2TQyjivKlS4TDjaz_faqQ0c,44
83
83
  omlish/collections/frozen.py,sha256=LMbAHYDENIQk1hvjCTvpnx66m1TalrHa4CSn8n_tsXQ,4142
84
- omlish/collections/hasheq.py,sha256=swOBPEnU_C0SU3VqWJX9mr0BfZLD0A-4Ke9Vahj3fE4,3669
84
+ omlish/collections/hasheq.py,sha256=uHypfZlHhicQPvx9OOlpT9MSLwfc_mFil-WaxF9dTOo,3732
85
85
  omlish/collections/identity.py,sha256=xtoczgBPYzr6r2lJS-eti2kEnN8rVDvNGDCG3TA6vRo,3405
86
86
  omlish/collections/mappings.py,sha256=iXb7oq1rCQak0KgzblgrzWCJLrkfJAYHFvl9lprOVUI,2804
87
87
  omlish/collections/ordered.py,sha256=7zTbrAt12rf6i33XHkQERKar258fJacaw_WbtGEBgWo,2338
@@ -104,7 +104,7 @@ omlish/collections/persistent/persistent.py,sha256=boBSZ9yEhVfnxxxv1LrCBzWYfHCa_
104
104
  omlish/collections/persistent/treap.py,sha256=o7vhnn8kHde_Plk0sojlJZkkKwp8hpj2IekhcvbYqHs,7739
105
105
  omlish/collections/persistent/treapmap.py,sha256=BdqZC6WvwJ0iF0rMgdoRie6PxqrApE2PKQ3j-hFLOR4,6311
106
106
  omlish/collections/sorted/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
107
- omlish/collections/sorted/skiplist.py,sha256=ezXBHGDD0C8jBbo-F83-xAMu8jhbTD2g1-kTRx7CaXc,6193
107
+ omlish/collections/sorted/skiplist.py,sha256=bcTO1hZvV5EnYxBZ3YBhdewXP_2aCTZra7tJ0pA7jjo,6194
108
108
  omlish/collections/sorted/sorted.py,sha256=Y_-7bA8hXG1KXEx5sS_EoLiH-Ru6ERJEsjHIcJ-8-IA,3968
109
109
  omlish/concurrent/__init__.py,sha256=9p-s8MvBEYDqHIoYU3OYoe-Nni22QdkW7nhZGEukJTM,197
110
110
  omlish/concurrent/executors.py,sha256=mF-rjJWzNFxwB1-_H7rHuwoImpl4FtNM6W3wcqM3NEE,1291
@@ -402,7 +402,7 @@ omlish/iterators/iterators.py,sha256=RxW35yQ5ed8vBQ22IqpDXFx-i5JiLQdp7-pkMZXhJJ8
402
402
  omlish/iterators/recipes.py,sha256=wOwOZg-zWG9Zc3wcAxJFSe2rtavVBYwZOfG09qYEx_4,472
403
403
  omlish/iterators/tools.py,sha256=c4hArZEVV8y9_dFfmRwakusv1cWJLT4MkTkGRjnGN5U,2556
404
404
  omlish/iterators/unique.py,sha256=Nw0pSaNEcHAkve0ugfLPvJcirDOn9ECyC5wIL8JlJKI,1395
405
- omlish/lang/__init__.py,sha256=2wsMTbYWBl5grBKkdiotqi8iCncfuBJDBA_nD0hz0SI,5879
405
+ omlish/lang/__init__.py,sha256=7T9vv39wNkm9jb0LOpzQ1eMxtoMbltMCU554FqTZ4eY,5908
406
406
  omlish/lang/attrs.py,sha256=i7euRF81uNF8QDmUVXSK_BtqLGshaMi4VVdUnMjiMwg,5050
407
407
  omlish/lang/casing.py,sha256=cFUlbDdXLhwnWwcYx4qnM5c4zGX7hIRUfcjiZbxUD28,4636
408
408
  omlish/lang/clsdct.py,sha256=HAGIvBSbCefzRjXriwYSBLO7QHKRv2UsE78jixOb-fA,1828
@@ -412,7 +412,7 @@ omlish/lang/contextmanagers.py,sha256=pN8X4ZCagqU9_xWumi8gZPdMIWlInA-_zQrkl7o5VP
412
412
  omlish/lang/datetimes.py,sha256=mrTtA67JYpfQwSlzdPcBtvm6dAyYM_dXNnlxFwFQH0M,228
413
413
  omlish/lang/descriptors.py,sha256=zBtgO9LjdSTGHNUgiIqswh78WOVoGH6KzS0NbgB1Wls,6572
414
414
  omlish/lang/enums.py,sha256=F9tflHfaAoV2MpyuhZzpfX9-H55M3zNa9hCszsngEo8,111
415
- omlish/lang/functions.py,sha256=51CoKtH_-CXUsKvtCexaR3OLZOtIwSdv4f4DtGBZdpA,6029
415
+ omlish/lang/functions.py,sha256=75JhKRNhe2iDeqN7yCdLTw_q5k1VFpdphypqb4yy2I0,6298
416
416
  omlish/lang/generators.py,sha256=yd3ebG2LlA3XQImP8rplt6tSToXwMxhlGRGCkdJ87ME,5230
417
417
  omlish/lang/imports.py,sha256=y9W9Y-d_cQ35QCLuSIPoa6vnEqSErFCz8b-34IH128U,10552
418
418
  omlish/lang/iterables.py,sha256=StoGp9yaP3njdLKHoWYcEevO3eE8SHEPYl5_avZob24,2149
@@ -427,7 +427,7 @@ omlish/lang/strings.py,sha256=kJmRFd1D36xXcjd9MdB12BCwF_-MVhNr-TpWj7hMi_4,4252
427
427
  omlish/lang/sys.py,sha256=b4qOPiJZQru_mbb04FNfOjYWUxlV2becZOoc-yya_rQ,411
428
428
  omlish/lang/typing.py,sha256=Zdad9Zv0sa-hIaUXPrzPidT7sDVpRcussAI7D-j-I1c,3296
429
429
  omlish/lang/cached/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
430
- omlish/lang/cached/function.py,sha256=0uTtDR1uaxwB2uTB_JTFcCr2c9NxsiWVvCLKVWUUHUw,9641
430
+ omlish/lang/cached/function.py,sha256=gXrU4DYO952lCJpNDuSTVb83f0tVjVnaG3BY2Sqab0k,9712
431
431
  omlish/lang/cached/property.py,sha256=WHYyg4-6EA86TcNMfbXTjVhjEZPc0kngt9hfY3WN5w8,2768
432
432
  omlish/lang/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
433
433
  omlish/lang/classes/abstract.py,sha256=n4rDlDraUKxPF0GtOWEFZ6mEzEDmP7Z8LSI6Jww_thw,3715
@@ -625,16 +625,15 @@ omlish/specs/jsonrpc/conns.py,sha256=zvWnBHuSoGnvbGVk72Usp4IFsLscrzPozqR2hmFjnDI
625
625
  omlish/specs/jsonrpc/errors.py,sha256=-Zgmlo6bV6J8w5f8h9axQgLquIFBHDgIwcpufEH5NsE,707
626
626
  omlish/specs/jsonrpc/marshal.py,sha256=HM736piPGnBZrg8CMLDX-L5fZpegyF6l6JUjzLoSDtk,1852
627
627
  omlish/specs/jsonrpc/types.py,sha256=Se9ecG-_k-kY_Qlt9QD2t3y26oY4sXTcskp6XZfVans,3054
628
- omlish/specs/jsonschema/__init__.py,sha256=55P7Yg2MprqDyaifac2ExNzK6blTZuDP4ejrUXZWpt8,1129
628
+ omlish/specs/jsonschema/__init__.py,sha256=rdHG_0kKn64qizk0UI5S2uXV2hzf5vxnt4SXRw9yGuU,1086
629
629
  omlish/specs/jsonschema/types.py,sha256=_H7ma99hD3_Xu42BFGHOXRI5p79tY8WBX8QE36k7lbw,472
630
630
  omlish/specs/jsonschema/keywords/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
631
- omlish/specs/jsonschema/keywords/base.py,sha256=KYxKDxZtJGykLcJPTPvDMPDbbmuUw6RLOGgpCNkFcww,2830
631
+ omlish/specs/jsonschema/keywords/base.py,sha256=QjkMrKw58j99r-Ug2I4Y-SGbyKSTVho5FUP_lWDQ4wA,3010
632
632
  omlish/specs/jsonschema/keywords/core.py,sha256=3Pbi8d-eocEAxEdemNa0ldp5lrLWNmH0Tye-5rglUoU,535
633
633
  omlish/specs/jsonschema/keywords/format.py,sha256=9trrxHe38FDx47I8UfvO4PD_IygRlkEyTUJ3XlxDM6Y,244
634
634
  omlish/specs/jsonschema/keywords/metadata.py,sha256=IVWQKWT9xi0R07pXc79ErT7RBu5b6Kzg4pWYIITIRbs,336
635
- omlish/specs/jsonschema/keywords/parse.py,sha256=8lx17ZoaMF0u0NyAIVM9EmZD6gYLANlw0-zr9DN2HTA,4414
636
- omlish/specs/jsonschema/keywords/render.py,sha256=wZ9yvfscnW8fYlQTXzmJjMYTKhSTg9hjrtlAEwMRaMQ,1947
637
- omlish/specs/jsonschema/keywords/unknown.py,sha256=iYIQlBbLUqISvTvj_Kup4wVDRxcEwmnLTyAAWjlxsck,234
635
+ omlish/specs/jsonschema/keywords/parse.py,sha256=HdG-0bivCTe3YFRsrgW15o2S--Re73JOTMMaxYKFIn0,4411
636
+ omlish/specs/jsonschema/keywords/render.py,sha256=Viy3cbDcA2pCtR4z0pi4Q2oMsQDCf01vXsbMO70PlCc,1944
638
637
  omlish/specs/jsonschema/keywords/validation.py,sha256=bKu1bDOms5zxg5Xme1ki_jb7TYDFEOv_JKOzeYbxuYQ,1970
639
638
  omlish/specs/jsonschema/schemas/LICENSE,sha256=CU2AUO-rKNc9s9vngzyGxUMgaZ0Aevr8lgN2DFFFxKw,1491
640
639
  omlish/specs/jsonschema/schemas/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -684,7 +683,7 @@ omlish/sql/api/dbapi.py,sha256=bDVqmljmLMdurMhIy3vx-dJvK1KiZ7XBhZ2Zx6W9aBs,2627
684
683
  omlish/sql/api/errors.py,sha256=YtC2gz5DqRTT3uCJniUOufVH1GEnFIc5ElkYLK3BHwM,230
685
684
  omlish/sql/api/funcs.py,sha256=Raa8kL65l1JprMsJupFw-8EPO6MxxDhm0OPSwecMLOI,2045
686
685
  omlish/sql/api/queries.py,sha256=OVsVqNyXXJQVDPfV3GFE2gwnHyGEenS65rTQRTNGx1Y,735
687
- omlish/sql/api/resources.py,sha256=DTVQmKjhaLi27jHWYkF20VhwGvIazZWxyKzF0Wn9-dc,2228
686
+ omlish/sql/api/resources.py,sha256=RcjnsNoyFWG0VR8YDijwuyZtnxlGQe8jiPQVl_inzIc,2266
688
687
  omlish/sql/api/rows.py,sha256=Jo3AA_6Wt7tlwLO6-rp0arzYFqZXSxPudGPkW2xCYgQ,1346
689
688
  omlish/sql/parsing/Minisql.g4,sha256=Jw8xT-8UI6ySHAgStyCg5QX9NTCinvTenLJReWiZIJU,4578
690
689
  omlish/sql/parsing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -854,9 +853,9 @@ omlish/typedvalues/holder.py,sha256=ZTnHiw-K38ciOBLEdwgrltr7Xp8jjEs_0Lp69DH-G-o,
854
853
  omlish/typedvalues/marshal.py,sha256=hWHRLcrGav7lvXJDtb9bNI0ickl4SKPQ6F4BbTpqw3A,4219
855
854
  omlish/typedvalues/reflect.py,sha256=Ih1YgU-srUjsvBn_P7C66f73_VCvcwqE3ffeBnZBgt4,674
856
855
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
857
- omlish-0.0.0.dev313.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
858
- omlish-0.0.0.dev313.dist-info/METADATA,sha256=eQlRCzJ8ZodiSbL3uCYUvZ6vSf4BK4OFmIZJBCpbrs0,4416
859
- omlish-0.0.0.dev313.dist-info/WHEEL,sha256=DnLRTWE75wApRYVsjgc6wsVswC54sMSJhAEd4xhDpBk,91
860
- omlish-0.0.0.dev313.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
861
- omlish-0.0.0.dev313.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
862
- omlish-0.0.0.dev313.dist-info/RECORD,,
856
+ omlish-0.0.0.dev315.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
857
+ omlish-0.0.0.dev315.dist-info/METADATA,sha256=Ork2jAan-wlGr9Z5xsOAkIrAD3jNAWqjaz6nKg7XiUs,4416
858
+ omlish-0.0.0.dev315.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
859
+ omlish-0.0.0.dev315.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
860
+ omlish-0.0.0.dev315.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
861
+ omlish-0.0.0.dev315.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.4.0)
2
+ Generator: setuptools (80.7.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -1,14 +0,0 @@
1
- import typing as ta
2
-
3
- from .... import dataclasses as dc
4
- from .... import lang
5
- from .base import Keyword
6
-
7
-
8
- ##
9
-
10
-
11
- @dc.dataclass(frozen=True)
12
- class UnknownKeyword(Keyword, lang.Final):
13
- tag: str # type: ignore[misc]
14
- value: ta.Any