omdev 0.0.0.dev453__py3-none-any.whl → 0.0.0.dev455__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.
@@ -8,7 +8,6 @@ import typing as ta
8
8
  from omlish import lang
9
9
  from omlish import marshal as msh
10
10
  from omlish import reflect as rfl
11
- from omlish.funcs import match as mfs
12
11
 
13
12
  from .requires import RequiresMarkerItem
14
13
  from .requires import RequiresMarkerList
@@ -43,12 +42,13 @@ class RequiresMarkerListMarshaler(msh.Marshaler):
43
42
  return [inner(e) for e in o]
44
43
 
45
44
 
46
- class RequiresMarkerListMarshalerFactory(msh.MarshalerFactoryMatchClass):
47
- @mfs.simple(lambda _, ctx, rty: rty is MarshalRequiresMarkerList)
48
- def _build(self, ctx: msh.MarshalContext, rty: rfl.Type) -> msh.Marshaler:
49
- return RequiresMarkerListMarshaler(
50
- ctx.make(RequiresMarkerItem),
51
- ctx.make(RequiresNode),
45
+ class RequiresMarkerListMarshalerFactory(msh.MarshalerFactory):
46
+ def make_marshaler(self, ctx: msh.MarshalFactoryContext, rty: rfl.Type) -> ta.Callable[[], msh.Marshaler] | None:
47
+ if rty is not MarshalRequiresMarkerList:
48
+ return None
49
+ return lambda: RequiresMarkerListMarshaler(
50
+ ctx.make_marshaler(RequiresMarkerItem),
51
+ ctx.make_marshaler(RequiresNode),
52
52
  )
53
53
 
54
54
 
omdev/scripts/ci.py CHANGED
@@ -1516,6 +1516,36 @@ def dataclass_repr_omit_falsey(obj: ta.Any) -> str:
1516
1516
  ##
1517
1517
 
1518
1518
 
1519
+ def dataclass_descriptor_method(*bind_attrs: str, bind_owner: bool = False) -> ta.Callable:
1520
+ if not bind_attrs:
1521
+ def __get__(self, instance, owner=None): # noqa
1522
+ return self
1523
+
1524
+ elif bind_owner:
1525
+ def __get__(self, instance, owner=None): # noqa
1526
+ # Guaranteed to return a new instance even with no attrs
1527
+ return dc.replace(self, **{
1528
+ a: v.__get__(instance, owner) if (v := getattr(self, a)) is not None else None
1529
+ for a in bind_attrs
1530
+ })
1531
+
1532
+ else:
1533
+ def __get__(self, instance, owner=None): # noqa
1534
+ if instance is None:
1535
+ return self
1536
+
1537
+ # Guaranteed to return a new instance even with no attrs
1538
+ return dc.replace(self, **{
1539
+ a: v.__get__(instance, owner) if (v := getattr(self, a)) is not None else None
1540
+ for a in bind_attrs
1541
+ })
1542
+
1543
+ return __get__
1544
+
1545
+
1546
+ ##
1547
+
1548
+
1519
1549
  def dataclass_kw_only_init():
1520
1550
  def inner(cls):
1521
1551
  if not isinstance(cls, type) and dc.is_dataclass(cls):
@@ -54,7 +54,7 @@ class Processor:
54
54
  def _marshal(self, v: ta.Any) -> ta.Any:
55
55
  return msh.MarshalContext(
56
56
  config_registry=msh.global_config_registry(),
57
- factory=self._marshaler_factory(),
57
+ marshaler_factory=self._marshaler_factory(),
58
58
  ).marshal(v)
59
59
 
60
60
  def process(self, v: ta.Any) -> ta.Iterator[ta.Any]:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev453
3
+ Version: 0.0.0.dev455
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev453
17
+ Requires-Dist: omlish==0.0.0.dev455
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.1; extra == "all"
20
20
  Requires-Dist: pycparser~=2.23; extra == "all"
@@ -206,7 +206,7 @@ omdev/oci/pack/packing.py,sha256=zsvQN-VD-7MaMjiylUpg_jXicp1YDbtyUktrR7ek6Ug,541
206
206
  omdev/oci/pack/repositories.py,sha256=Ogh4Wj2ySvIMnuDFb2OeBc67hHtc0WWkAfBxOkNE5aA,4954
207
207
  omdev/oci/pack/unpacking.py,sha256=tVYw8REKuYd4ciGXwMmXxlp4CRLHdET_gB9ShYh1d_M,6003
208
208
  omdev/packaging/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
209
- omdev/packaging/marshal.py,sha256=Cmn9TJ3-XToKU3zh8mk2dSUZekjww5Zprw_ayXVkrTw,2354
209
+ omdev/packaging/marshal.py,sha256=OPNqH6Ghjw5EQQsp0z2QAwThjIOE6vJ5VAoQca4aqHI,2376
210
210
  omdev/packaging/names.py,sha256=-orp16m20gSFeKRiGkRNyqFVV4S1y_Djvjdq_5hNwpY,2533
211
211
  omdev/packaging/requires.py,sha256=nn4ff8mlgfsdZooKzQjhASFS7mMVUCCmcb-150F0Lcg,15739
212
212
  omdev/packaging/revisions.py,sha256=tLNDVtPiygB8mSxwp-kDxeEHhpBzD0jayndjsgUOfkM,5055
@@ -274,7 +274,7 @@ omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJW
274
274
  omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
275
275
  omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
276
276
  omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
277
- omdev/scripts/ci.py,sha256=nP3eVIBl910rzI9GIu84adnFddO_Lr1eMuqgMidyTGk,426524
277
+ omdev/scripts/ci.py,sha256=dmpJXF0mS37K6psivRDukXEBF8Z6CAuK_PQERDBzFgE,427466
278
278
  omdev/scripts/interp.py,sha256=GELa1TPg0tStMbofHpEYetMrAl3YnInehwler2gdE2I,168564
279
279
  omdev/scripts/pyproject.py,sha256=wf3hKkkAjQn7qwnY6cHTRJg3_duUi2R8a3foFaNuehQ,349235
280
280
  omdev/scripts/slowcat.py,sha256=PwdT-pg62imEEb6kcOozl9_YUi-4KopvjvzWT1OmGb0,2717
@@ -313,7 +313,7 @@ omdev/tools/json/cli.py,sha256=d7i5aPsFGIfHirY1U845t7gARpy3mu1YtvYa-qBkQF4,10142
313
313
  omdev/tools/json/formats.py,sha256=1qGYb8Kq_yFpLMaecBg-XE3yWSvqRiRbBX8SAElpS9s,2643
314
314
  omdev/tools/json/io.py,sha256=sfj2hJS9Hy3aUR8a_lLzOrYcmL9fSKyvOHiofdUASsI,1427
315
315
  omdev/tools/json/parsing.py,sha256=R7h-UkwFm3Q0L8oHTk-aLtQN6x32-vkDXwLUxExL0tI,2000
316
- omdev/tools/json/processing.py,sha256=jMSkTmIccdVkT_Q6Jf8Q4AG4BQecQfrp8G2bEtsklg8,2387
316
+ omdev/tools/json/processing.py,sha256=Lie2Hix9dLwo1J_jwFAiLJrz6NwMqQhwyhEESARN23A,2397
317
317
  omdev/tools/json/rendering.py,sha256=dsZki-47lPuYP_-x7gFFl57IZnCJUXHS-NBGpQZjvk0,2628
318
318
  omdev/tools/jsonview/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
319
319
  omdev/tools/jsonview/__main__.py,sha256=BF-MVWpPJJeQYUqJA48G395kxw0lEJnV-hRLV_F9G2A,173
@@ -324,9 +324,9 @@ omdev/tools/jsonview/resources/jsonview.js,sha256=faDvXDOXKvEvjOuIlz4D3F2ReQXb_b
324
324
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
325
325
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
326
326
  omdev/tools/pawk/pawk.py,sha256=ao5mdrpiSU4AZ8mBozoEaV3UVlmVTnRG9wD9XP70MZE,11429
327
- omdev-0.0.0.dev453.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
328
- omdev-0.0.0.dev453.dist-info/METADATA,sha256=gL3g4gmLQVmG73SiP6g3W5UfEiWJHN6r-CcxLflHcyU,5100
329
- omdev-0.0.0.dev453.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
330
- omdev-0.0.0.dev453.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
331
- omdev-0.0.0.dev453.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
332
- omdev-0.0.0.dev453.dist-info/RECORD,,
327
+ omdev-0.0.0.dev455.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
328
+ omdev-0.0.0.dev455.dist-info/METADATA,sha256=Pjd8RF4d4U4BVfufG8RdrzvGsnAhxMHLndwU3nf5F3E,5100
329
+ omdev-0.0.0.dev455.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
330
+ omdev-0.0.0.dev455.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
331
+ omdev-0.0.0.dev455.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
332
+ omdev-0.0.0.dev455.dist-info/RECORD,,