omlish 0.0.0.dev317__py3-none-any.whl → 0.0.0.dev318__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 +3 -3
- omlish/dataclasses/api/classes/conversion.py +4 -0
- omlish/dataclasses/reflection.py +4 -0
- omlish/diag/_pycharm/runhack.py +120 -1
- {omlish-0.0.0.dev317.dist-info → omlish-0.0.0.dev318.dist-info}/METADATA +3 -3
- {omlish-0.0.0.dev317.dist-info → omlish-0.0.0.dev318.dist-info}/RECORD +10 -10
- {omlish-0.0.0.dev317.dist-info → omlish-0.0.0.dev318.dist-info}/WHEEL +0 -0
- {omlish-0.0.0.dev317.dist-info → omlish-0.0.0.dev318.dist-info}/entry_points.txt +0 -0
- {omlish-0.0.0.dev317.dist-info → omlish-0.0.0.dev318.dist-info}/licenses/LICENSE +0 -0
- {omlish-0.0.0.dev317.dist-info → omlish-0.0.0.dev318.dist-info}/top_level.txt +0 -0
omlish/__about__.py
CHANGED
@@ -1,5 +1,5 @@
|
|
1
|
-
__version__ = '0.0.0.
|
2
|
-
__revision__ = '
|
1
|
+
__version__ = '0.0.0.dev318'
|
2
|
+
__revision__ = 'b80bceb394abe03974e4312775224ac1dbcb5b22'
|
3
3
|
|
4
4
|
|
5
5
|
#
|
@@ -103,7 +103,7 @@ class Project(ProjectBase):
|
|
103
103
|
|
104
104
|
'sqlean.py ~= 3.49',
|
105
105
|
|
106
|
-
'duckdb ~= 1.
|
106
|
+
'duckdb ~= 1.3',
|
107
107
|
],
|
108
108
|
|
109
109
|
'templates': [
|
@@ -12,6 +12,8 @@ from ...specs import FieldSpec
|
|
12
12
|
def std_params_to_class_spec(
|
13
13
|
p: StdParams,
|
14
14
|
fields: ta.Sequence[FieldSpec],
|
15
|
+
*,
|
16
|
+
metadata: ta.Sequence[ta.Any] | None = None,
|
15
17
|
) -> ClassSpec:
|
16
18
|
return ClassSpec(
|
17
19
|
fields=fields,
|
@@ -27,4 +29,6 @@ def std_params_to_class_spec(
|
|
27
29
|
kw_only=check.isinstance(p.kw_only, bool),
|
28
30
|
slots=check.isinstance(p.slots, bool),
|
29
31
|
weakref_slot=check.isinstance(p.weakref_slot, bool),
|
32
|
+
|
33
|
+
metadata=metadata,
|
30
34
|
)
|
omlish/dataclasses/reflection.py
CHANGED
@@ -3,6 +3,7 @@ import typing as ta
|
|
3
3
|
|
4
4
|
from .. import lang
|
5
5
|
from .api.classes.conversion import std_params_to_class_spec
|
6
|
+
from .api.classes.metadata import extract_cls_metadata
|
6
7
|
from .api.classes.params import get_class_spec
|
7
8
|
from .api.fields.conversion import std_field_to_field_spec
|
8
9
|
from .concerns.fields import InitFields
|
@@ -49,9 +50,12 @@ class ClassReflection:
|
|
49
50
|
for f in dc.fields(self._cls) # noqa
|
50
51
|
]
|
51
52
|
|
53
|
+
cmd = extract_cls_metadata(self._cls, deep=True)
|
54
|
+
|
52
55
|
cs = std_params_to_class_spec(
|
53
56
|
p,
|
54
57
|
fsl,
|
58
|
+
metadata=cmd.user_metadata or None,
|
55
59
|
)
|
56
60
|
|
57
61
|
return cs
|
omlish/diag/_pycharm/runhack.py
CHANGED
@@ -59,6 +59,9 @@ class _cached_nullary: # noqa
|
|
59
59
|
#
|
60
60
|
|
61
61
|
|
62
|
+
_repr = repr
|
63
|
+
|
64
|
+
|
62
65
|
def _attr_repr(obj, *atts):
|
63
66
|
return f'{obj.__class__.__name__}({", ".join(f"{a}={getattr(obj, a)!r}" for a in atts)})'
|
64
67
|
|
@@ -127,6 +130,109 @@ class AsJson:
|
|
127
130
|
##
|
128
131
|
|
129
132
|
|
133
|
+
class SysModule(AttrsClass, AsJson):
|
134
|
+
def __init__(
|
135
|
+
self,
|
136
|
+
name, # type: str
|
137
|
+
*,
|
138
|
+
seq=None, # type: int | None
|
139
|
+
repr=None, # type: str | None # noqa
|
140
|
+
|
141
|
+
origin=None, # type: str | None
|
142
|
+
file=None, # type: str | None
|
143
|
+
) -> None:
|
144
|
+
super().__init__()
|
145
|
+
|
146
|
+
self._name = name
|
147
|
+
|
148
|
+
self._seq = seq
|
149
|
+
self._repr = repr
|
150
|
+
|
151
|
+
self._origin = origin
|
152
|
+
self._file = file
|
153
|
+
|
154
|
+
__attrs__ = (
|
155
|
+
'name',
|
156
|
+
|
157
|
+
'seq',
|
158
|
+
'repr',
|
159
|
+
|
160
|
+
'origin',
|
161
|
+
'file',
|
162
|
+
)
|
163
|
+
|
164
|
+
@property
|
165
|
+
def name(self): # type: () -> str
|
166
|
+
return self._name
|
167
|
+
|
168
|
+
@property
|
169
|
+
def seq(self): # type: () -> int | None
|
170
|
+
return self._seq
|
171
|
+
|
172
|
+
@property
|
173
|
+
def repr(self): # type: () -> str | None
|
174
|
+
return self._repr
|
175
|
+
|
176
|
+
@property
|
177
|
+
def origin(self): # type: () -> str | None
|
178
|
+
return self._origin
|
179
|
+
|
180
|
+
@property
|
181
|
+
def file(self): # type: () -> str | None
|
182
|
+
return self._file
|
183
|
+
|
184
|
+
def as_json(self): # type: () -> dict[str, object]
|
185
|
+
return self.attrs_dict()
|
186
|
+
|
187
|
+
|
188
|
+
def build_sys_module(
|
189
|
+
name, # type: str
|
190
|
+
mod,
|
191
|
+
*,
|
192
|
+
seq=None, # type: int | None
|
193
|
+
) -> SysModule:
|
194
|
+
kwargs = dict() # type: dict
|
195
|
+
kwargs.update(
|
196
|
+
name=name,
|
197
|
+
|
198
|
+
seq=seq,
|
199
|
+
repr=_repr(mod),
|
200
|
+
)
|
201
|
+
|
202
|
+
try:
|
203
|
+
spec = mod.__spec__
|
204
|
+
except AttributeError:
|
205
|
+
pass
|
206
|
+
else:
|
207
|
+
if spec is not None:
|
208
|
+
kwargs.update(origin=spec.origin)
|
209
|
+
|
210
|
+
try:
|
211
|
+
file = mod.__file__
|
212
|
+
except AttributeError:
|
213
|
+
pass
|
214
|
+
else:
|
215
|
+
kwargs.update(file=file)
|
216
|
+
|
217
|
+
return SysModule(**kwargs)
|
218
|
+
|
219
|
+
|
220
|
+
def build_sys_modules(dct=None): # type: (dict[str, object] | None) -> list[SysModule]
|
221
|
+
if dct is None:
|
222
|
+
dct_ = sys.modules
|
223
|
+
else:
|
224
|
+
dct_ = dct # type: ignore
|
225
|
+
|
226
|
+
lst = [] # type: list[SysModule]
|
227
|
+
for i, (n, m) in enumerate(dct_.items()):
|
228
|
+
lst.append(build_sys_module(n, m, seq=i))
|
229
|
+
|
230
|
+
return lst
|
231
|
+
|
232
|
+
|
233
|
+
##
|
234
|
+
|
235
|
+
|
130
236
|
class RunEnv(AttrsClass, AsJson):
|
131
237
|
def __init__(
|
132
238
|
self,
|
@@ -143,6 +249,7 @@ class RunEnv(AttrsClass, AsJson):
|
|
143
249
|
pycharm_hosted=None, # type: bool | None
|
144
250
|
|
145
251
|
sys_path=None, # type: list[str] | None
|
252
|
+
sys_modules=None, # type: list[SysModule] | None
|
146
253
|
) -> None:
|
147
254
|
super().__init__()
|
148
255
|
|
@@ -182,6 +289,10 @@ class RunEnv(AttrsClass, AsJson):
|
|
182
289
|
sys_path = list(sys.path)
|
183
290
|
self._sys_path = sys_path
|
184
291
|
|
292
|
+
if sys_modules is None:
|
293
|
+
sys_modules = build_sys_modules()
|
294
|
+
self._sys_modules = sys_modules
|
295
|
+
|
185
296
|
__attrs__ = (
|
186
297
|
'argv',
|
187
298
|
'orig_argv',
|
@@ -195,6 +306,7 @@ class RunEnv(AttrsClass, AsJson):
|
|
195
306
|
'pycharm_hosted',
|
196
307
|
|
197
308
|
'sys_path',
|
309
|
+
'sys_modules',
|
198
310
|
)
|
199
311
|
|
200
312
|
@property
|
@@ -233,8 +345,15 @@ class RunEnv(AttrsClass, AsJson):
|
|
233
345
|
def sys_path(self): # type: () -> list[str]
|
234
346
|
return self._sys_path
|
235
347
|
|
348
|
+
@property
|
349
|
+
def sys_modules(self): # type: () -> list[SysModule]
|
350
|
+
return self._sys_modules
|
351
|
+
|
236
352
|
def as_json(self): # type: () -> dict[str, object]
|
237
|
-
return
|
353
|
+
return {
|
354
|
+
**self.attrs_dict(),
|
355
|
+
'sys_modules': [m.as_json() for m in self.sys_modules],
|
356
|
+
}
|
238
357
|
|
239
358
|
|
240
359
|
##
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omlish
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev318
|
4
4
|
Summary: omlish
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -41,7 +41,7 @@ Requires-Dist: aiosqlite~=0.21; extra == "all"
|
|
41
41
|
Requires-Dist: asyncpg~=0.30; extra == "all"
|
42
42
|
Requires-Dist: apsw~=3.49; extra == "all"
|
43
43
|
Requires-Dist: sqlean.py~=3.49; extra == "all"
|
44
|
-
Requires-Dist: duckdb~=1.
|
44
|
+
Requires-Dist: duckdb~=1.3; extra == "all"
|
45
45
|
Requires-Dist: markupsafe~=3.0; extra == "all"
|
46
46
|
Requires-Dist: jinja2~=3.1; extra == "all"
|
47
47
|
Requires-Dist: pytest~=8.3; extra == "all"
|
@@ -89,7 +89,7 @@ Requires-Dist: aiosqlite~=0.21; extra == "sqldrivers"
|
|
89
89
|
Requires-Dist: asyncpg~=0.30; extra == "sqldrivers"
|
90
90
|
Requires-Dist: apsw~=3.49; extra == "sqldrivers"
|
91
91
|
Requires-Dist: sqlean.py~=3.49; extra == "sqldrivers"
|
92
|
-
Requires-Dist: duckdb~=1.
|
92
|
+
Requires-Dist: duckdb~=1.3; extra == "sqldrivers"
|
93
93
|
Provides-Extra: templates
|
94
94
|
Requires-Dist: markupsafe~=3.0; extra == "templates"
|
95
95
|
Requires-Dist: jinja2~=3.1; extra == "templates"
|
@@ -1,5 +1,5 @@
|
|
1
1
|
omlish/.manifests.json,sha256=orgsRvtpHu8tdhaCvlP9v3P495OJopYYiHKjK68WtWg,8587
|
2
|
-
omlish/__about__.py,sha256=
|
2
|
+
omlish/__about__.py,sha256=kisuBtrw4R5wrzm5nluakJkzLD7HYXcYuB7zYWAgrQc,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
|
@@ -139,12 +139,12 @@ omlish/dataclasses/debug.py,sha256=giBiv6aXvX0IagwNCW64qBzNjfOFr3-VmgDy_KYlb-k,2
|
|
139
139
|
omlish/dataclasses/errors.py,sha256=tyv3WR6az66uGGiq9FIuCHvy1Ef-G7zeMY7mMG6hy2Y,2527
|
140
140
|
omlish/dataclasses/inspect.py,sha256=BlpPghVCU3w_YDnONEqqE99YHzJM2q3eoqe39YX25Ko,4596
|
141
141
|
omlish/dataclasses/internals.py,sha256=vIGCZnStgD3ef4drYRtVOrxhxmAPa0vJpo4pXcDcQvM,3073
|
142
|
-
omlish/dataclasses/reflection.py,sha256=
|
142
|
+
omlish/dataclasses/reflection.py,sha256=FSSTiS7pGTmDrYNkS6fZzaMSe8qtSvDv5Pgz0T55qXg,2404
|
143
143
|
omlish/dataclasses/specs.py,sha256=r9hpIWy83ODiB1n7wTf7JL5fiCeeT8fWbMvxs7c4e3g,6148
|
144
144
|
omlish/dataclasses/utils.py,sha256=gv6za6oJYBr1VaeGd7oXqq9lhBs_sxkpC27XYzJggno,1870
|
145
145
|
omlish/dataclasses/api/__init__.py,sha256=k5iS9QOwf_f4iOfGffYhnqDOcmEIwEUUTp00u11kIPM,455
|
146
146
|
omlish/dataclasses/api/classes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
147
|
-
omlish/dataclasses/api/classes/conversion.py,sha256=
|
147
|
+
omlish/dataclasses/api/classes/conversion.py,sha256=U3g5S-HefJrg4to1BF8XnlEWqMxFeGEqVt8o5OTQK-U,902
|
148
148
|
omlish/dataclasses/api/classes/decorator.py,sha256=q-m05j6VhJ9_00TmrXBvwmv0_TFPTD8OURi1KbKo9-4,3933
|
149
149
|
omlish/dataclasses/api/classes/make.py,sha256=Q_8ZVjhhFEUstIZA3Ht_vlGptYjTcJqX48qT57W7SZw,2820
|
150
150
|
omlish/dataclasses/api/classes/metadata.py,sha256=ocUu75VWOdZA8-R7K95yPhQtS0sFZB1NtqCdzXyDNeQ,2769
|
@@ -214,7 +214,7 @@ omlish/diag/pycharm.py,sha256=Z2W-Viqw5xq08ZC4z36skpozfYw_qNNhWQx_GYr2D0k,4695
|
|
214
214
|
omlish/diag/pydevd.py,sha256=UN55ZjkWLCVyHxE2CNRRYamuvSKfzWsn0D5oczRTXO4,7536
|
215
215
|
omlish/diag/threads.py,sha256=1-x02VCDZ407gfbtXm1pWK-ubqhqfePm9PMqkHCVoqk,3642
|
216
216
|
omlish/diag/_pycharm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
217
|
-
omlish/diag/_pycharm/runhack.py,sha256=
|
217
|
+
omlish/diag/_pycharm/runhack.py,sha256=f4R9SOH0nDfO2WqPh0xQ9-45qOLrtTVysS-hSwtbdOA,37864
|
218
218
|
omlish/diag/replserver/__init__.py,sha256=uLo6V2aQ29v9z3IMELlPDSlG3_2iOT4-_X8VniF-EgE,235
|
219
219
|
omlish/diag/replserver/__main__.py,sha256=LmU41lQ58bm1h4Mx7S8zhE_uEBSC6kPcp9mn5JRpulA,32
|
220
220
|
omlish/diag/replserver/console.py,sha256=XzBDVhYlr8FY6ym4OwoaIHuFOHnGK3dTYlMDIOMUUlA,7410
|
@@ -853,9 +853,9 @@ omlish/typedvalues/holder.py,sha256=ZTnHiw-K38ciOBLEdwgrltr7Xp8jjEs_0Lp69DH-G-o,
|
|
853
853
|
omlish/typedvalues/marshal.py,sha256=hWHRLcrGav7lvXJDtb9bNI0ickl4SKPQ6F4BbTpqw3A,4219
|
854
854
|
omlish/typedvalues/reflect.py,sha256=Ih1YgU-srUjsvBn_P7C66f73_VCvcwqE3ffeBnZBgt4,674
|
855
855
|
omlish/typedvalues/values.py,sha256=ym46I-q2QJ_6l4UlERqv3yj87R-kp8nCKMRph0xQ3UA,1307
|
856
|
-
omlish-0.0.0.
|
857
|
-
omlish-0.0.0.
|
858
|
-
omlish-0.0.0.
|
859
|
-
omlish-0.0.0.
|
860
|
-
omlish-0.0.0.
|
861
|
-
omlish-0.0.0.
|
856
|
+
omlish-0.0.0.dev318.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
857
|
+
omlish-0.0.0.dev318.dist-info/METADATA,sha256=-Nc1DXmiJNc5JokC60eHTE9VTgT6oMoXEf496J6i6UE,4416
|
858
|
+
omlish-0.0.0.dev318.dist-info/WHEEL,sha256=zaaOINJESkSfm_4HQVc5ssNzHCPXhJm0kEUakpsEHaU,91
|
859
|
+
omlish-0.0.0.dev318.dist-info/entry_points.txt,sha256=Lt84WvRZJskWCAS7xnQGZIeVWksprtUHj0llrvVmod8,35
|
860
|
+
omlish-0.0.0.dev318.dist-info/top_level.txt,sha256=pePsKdLu7DvtUiecdYXJ78iO80uDNmBlqe-8hOzOmfs,7
|
861
|
+
omlish-0.0.0.dev318.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|