omlish 0.0.0.dev369__py3-none-any.whl → 0.0.0.dev370__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.dev369'
2
- __revision__ = '7507ff616b21edcdf295e7a80fab53dc2f5cbb96'
1
+ __version__ = '0.0.0.dev370'
2
+ __revision__ = '4f5d5deabcef292ee9186fec6530569e82d0c387'
3
3
 
4
4
 
5
5
  #
@@ -1,5 +1,6 @@
1
1
  # ruff: noqa: UP006 UP007 UP045
2
2
  import dataclasses as dc
3
+ import functools
3
4
  import typing as ta
4
5
 
5
6
 
@@ -83,3 +84,69 @@ def dataclass_repr_omit_none(obj: ta.Any) -> str:
83
84
 
84
85
  def dataclass_repr_omit_falsey(obj: ta.Any) -> str:
85
86
  return dataclass_repr_filtered(obj, lambda o, f, v: bool(v))
87
+
88
+
89
+ ##
90
+
91
+
92
+ def dataclass_kw_only_init():
93
+ def inner(cls):
94
+ if not isinstance(cls, type) and dc.is_dataclass(cls):
95
+ raise TypeError(cls)
96
+
97
+ real_init = cls.__init__ # type: ignore[misc]
98
+
99
+ flds = dc.fields(cls) # noqa
100
+
101
+ if any(f.name == 'self' for f in flds):
102
+ self_name = '__dataclass_self__'
103
+ else:
104
+ self_name = 'self'
105
+
106
+ src = '\n'.join([
107
+ 'def __init__(',
108
+ f' {self_name},',
109
+ ' *,',
110
+ *[
111
+ ''.join([
112
+ f' {f.name}: __dataclass_type_{f.name}__',
113
+ f' = __dataclass_default_{f.name}__' if f.default is not dc.MISSING else '',
114
+ ',',
115
+ ])
116
+ for f in flds
117
+ ],
118
+ ') -> __dataclass_None__:',
119
+ ' __dataclass_real_init__(',
120
+ f' {self_name},',
121
+ *[
122
+ f' {f.name}={f.name},'
123
+ for f in flds
124
+ ],
125
+ ' )',
126
+ ])
127
+
128
+ ns: dict = {
129
+ '__dataclass_None__': None,
130
+ '__dataclass_real_init__': real_init,
131
+ **{
132
+ f'__dataclass_type_{f.name}__': f.type
133
+ for f in flds
134
+ },
135
+ **{
136
+ f'__dataclass_default_{f.name}__': f.default
137
+ for f in flds
138
+ if f.default is not dc.MISSING
139
+ },
140
+ }
141
+
142
+ exec(src, ns)
143
+
144
+ kw_only_init = ns['__init__']
145
+
146
+ functools.update_wrapper(kw_only_init, real_init)
147
+
148
+ cls.__init__ = kw_only_init # type: ignore[misc]
149
+
150
+ return cls
151
+
152
+ return inner
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omlish
3
- Version: 0.0.0.dev369
3
+ Version: 0.0.0.dev370
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -1,5 +1,5 @@
1
1
  omlish/.manifests.json,sha256=aT8yZ-Zh-9wfHl5Ym5ouiWC1i0cy7Q7RlhzavB6VLPI,8587
2
- omlish/__about__.py,sha256=z2SR3MJ-rRBdt9JGCcv-dKC9J_Pxa9JxjIfu-Cp9uWM,3478
2
+ omlish/__about__.py,sha256=ppW6ebyCL8_ZT4j16N88-VXSlgE7mfjsGTbuhlNYrDw,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
@@ -467,7 +467,7 @@ omlish/lite/cached.py,sha256=O7ozcoDNFm1Hg2wtpHEqYSp_i_nCLNOP6Ueq_Uk-7mU,1300
467
467
  omlish/lite/check.py,sha256=ytCkwZoKfOlJqylL-AGm8C2WfsWJd2q3kFbnZCzX3_M,13844
468
468
  omlish/lite/configs.py,sha256=4-1uVxo-aNV7vMKa7PVNhM610eejG1WepB42-Dw2xQI,914
469
469
  omlish/lite/contextmanagers.py,sha256=jpMxp5xwooRQJxsQ6J2ll4AJP9O7a5_YrLCGgwUFfD0,5703
470
- omlish/lite/dataclasses.py,sha256=vAxWRkEZfeFwU6Hy9UTCynD-pz2fkCcLY27odDqs1n8,1918
470
+ omlish/lite/dataclasses.py,sha256=aRSCZz1jN_UI-CWJhN0SJeKxa-79vXNUZ6YOMgG31SE,3610
471
471
  omlish/lite/imports.py,sha256=JDYRFxu-ofHEBfd5VV3b27oKOLhtTpuzte1_Nt7yLgw,1352
472
472
  omlish/lite/inject.py,sha256=xvmLmtD3_2INnkurJQv76_Rkh9usbApEQrXJ4cvuVAk,29019
473
473
  omlish/lite/json.py,sha256=7-02Ny4fq-6YAu5ynvqoijhuYXWpLmfCI19GUeZnb1c,740
@@ -882,9 +882,9 @@ omlish/typedvalues/marshal.py,sha256=AtBz7Jq-BfW8vwM7HSxSpR85JAXmxK2T0xDblmm1HI0
882
882
  omlish/typedvalues/of_.py,sha256=UXkxSj504WI2UrFlqdZJbu2hyDwBhL7XVrc2qdR02GQ,1309
883
883
  omlish/typedvalues/reflect.py,sha256=PAvKW6T4cW7u--iX80w3HWwZUS3SmIZ2_lQjT65uAyk,1026
884
884
  omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
885
- omlish-0.0.0.dev369.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
886
- omlish-0.0.0.dev369.dist-info/METADATA,sha256=bUWJ-6YrZYvPAMHccs62WvjREQptgR2l-rx_ApYK824,4416
887
- omlish-0.0.0.dev369.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
888
- omlish-0.0.0.dev369.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
889
- omlish-0.0.0.dev369.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
890
- omlish-0.0.0.dev369.dist-info/RECORD,,
885
+ omlish-0.0.0.dev370.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
886
+ omlish-0.0.0.dev370.dist-info/METADATA,sha256=WQMJ4AZLxaxumd_FFL5iHiJ-yJ_PafoYdFF3vSKd15Y,4416
887
+ omlish-0.0.0.dev370.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
888
+ omlish-0.0.0.dev370.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
889
+ omlish-0.0.0.dev370.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
890
+ omlish-0.0.0.dev370.dist-info/RECORD,,