omdev 0.0.0.dev405__py3-none-any.whl → 0.0.0.dev407__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.
- omdev/.manifests.json +138 -138
- omdev/cache/data/cache.py +1 -0
- omdev/cexts/cmake.py +2 -0
- omdev/cexts/importhook.py +2 -0
- omdev/cli/_pathhack.py +1 -0
- omdev/cli/main.py +9 -9
- omdev/cli/types.py +5 -5
- omdev/dataclasses/codegen.py +1 -1
- omdev/interp/providers/base.py +1 -0
- omdev/manifests/_dumping.py +4 -3
- omdev/manifests/building.py +13 -7
- omdev/manifests/dumping.py +3 -3
- omdev/oci/media.py +1 -0
- omdev/packaging/requires.py +1 -0
- omdev/packaging/revisions.py +1 -0
- omdev/py/attrdocs.py +3 -3
- omdev/py/bracepy.py +3 -3
- omdev/py/classdot.py +3 -3
- omdev/py/findimports.py +3 -3
- omdev/py/scripts/execstat.py +4 -4
- omdev/py/scripts/importtrace.py +3 -3
- omdev/py/srcheaders.py +3 -3
- omdev/pyproject/pkg.py +1 -0
- omdev/pyproject/reqs.py +1 -0
- omdev/pyproject/venvs.py +1 -0
- omdev/scripts/ci.py +4 -0
- omdev/scripts/interp.py +4 -0
- omdev/scripts/pyproject.py +9 -0
- omdev/scripts/slowcat.py +3 -3
- omdev/scripts/tmpexec.py +3 -3
- omdev/tools/git/messages.py +1 -1
- omdev/tools/json/rendering.py +1 -0
- omdev/tools/mkenv.py +3 -3
- omdev/tools/prof.py +7 -3
- {omdev-0.0.0.dev405.dist-info → omdev-0.0.0.dev407.dist-info}/METADATA +2 -2
- {omdev-0.0.0.dev405.dist-info → omdev-0.0.0.dev407.dist-info}/RECORD +40 -40
- {omdev-0.0.0.dev405.dist-info → omdev-0.0.0.dev407.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev405.dist-info → omdev-0.0.0.dev407.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev405.dist-info → omdev-0.0.0.dev407.dist-info}/licenses/LICENSE +0 -0
- {omdev-0.0.0.dev405.dist-info → omdev-0.0.0.dev407.dist-info}/top_level.txt +0 -0
omdev/cli/main.py
CHANGED
@@ -61,20 +61,20 @@ class CliCmdSet:
|
|
61
61
|
def _make_entry(self, cmd: CliCmd) -> Entry:
|
62
62
|
help_path: StrTuple | None
|
63
63
|
|
64
|
-
if isinstance(cmd.
|
65
|
-
ns = [cmd.
|
64
|
+
if isinstance(cmd.name, str):
|
65
|
+
ns = [cmd.name]
|
66
66
|
else:
|
67
|
-
ns = list(cmd.
|
67
|
+
ns = list(cmd.name)
|
68
68
|
exec_paths = [tuple(n.split('/')) for n in ns]
|
69
69
|
|
70
|
-
if isinstance(cmd.
|
70
|
+
if isinstance(cmd.name, str) and cmd.name[0] == '_':
|
71
71
|
help_path = None
|
72
72
|
|
73
73
|
elif isinstance(cmd, CliFunc):
|
74
74
|
help_path = ('-', *exec_paths[0])
|
75
75
|
|
76
76
|
elif isinstance(cmd, CliModule):
|
77
|
-
help_path = (cmd.
|
77
|
+
help_path = (cmd.module.partition('.')[0], *exec_paths[0])
|
78
78
|
|
79
79
|
else:
|
80
80
|
raise TypeError(cmd)
|
@@ -128,10 +128,10 @@ class CliCmdSet:
|
|
128
128
|
if h in c:
|
129
129
|
raise NameError(e)
|
130
130
|
|
131
|
-
if isinstance(e.cmd.
|
132
|
-
l = [e.cmd.
|
131
|
+
if isinstance(e.cmd.name, str):
|
132
|
+
l = [e.cmd.name]
|
133
133
|
else:
|
134
|
-
l = list(e.cmd.
|
134
|
+
l = list(e.cmd.name)
|
135
135
|
|
136
136
|
s = (
|
137
137
|
f'{l[0].split("/")[-1]}'
|
@@ -256,7 +256,7 @@ def _main() -> ta.Any:
|
|
256
256
|
cmd = sel.cmd
|
257
257
|
if isinstance(cmd, CliModule):
|
258
258
|
sys.argv = [args.cmd, *(sel.args or ())]
|
259
|
-
runpy._run_module_as_main(cmd.
|
259
|
+
runpy._run_module_as_main(cmd.module) # type: ignore # noqa
|
260
260
|
return 0
|
261
261
|
|
262
262
|
elif isinstance(cmd, CliFunc):
|
omdev/cli/types.py
CHANGED
@@ -9,19 +9,19 @@ import typing as ta
|
|
9
9
|
|
10
10
|
@dc.dataclass(frozen=True)
|
11
11
|
class CliCmd:
|
12
|
-
|
12
|
+
name: ta.Union[str, ta.Sequence[str]]
|
13
13
|
|
14
14
|
@property
|
15
15
|
def primary_name(self) -> str:
|
16
|
-
if isinstance(self.
|
17
|
-
return self.
|
16
|
+
if isinstance(self.name, str):
|
17
|
+
return self.name
|
18
18
|
else:
|
19
|
-
return self.
|
19
|
+
return self.name[0]
|
20
20
|
|
21
21
|
|
22
22
|
@dc.dataclass(frozen=True)
|
23
23
|
class CliModule(CliCmd):
|
24
|
-
|
24
|
+
module: str
|
25
25
|
|
26
26
|
|
27
27
|
@dc.dataclass(frozen=True)
|
omdev/dataclasses/codegen.py
CHANGED
@@ -91,5 +91,5 @@ class DataclassCodeGen:
|
|
91
91
|
|
92
92
|
config_trie = self.build_config_trie(root_dirs)
|
93
93
|
|
94
|
-
for pkg_parts, pkg_config in config_trie.
|
94
|
+
for pkg_parts, pkg_config in config_trie.iteritems(sort_children=True):
|
95
95
|
self.run_package_config('.'.join(pkg_parts), pkg_config)
|
omdev/interp/providers/base.py
CHANGED
@@ -24,6 +24,7 @@ class InterpProvider(abc.ABC):
|
|
24
24
|
|
25
25
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
26
26
|
super().__init_subclass__(**kwargs)
|
27
|
+
|
27
28
|
if abc.ABC not in cls.__bases__ and 'name' not in cls.__dict__:
|
28
29
|
sfx = 'InterpProvider'
|
29
30
|
if not cls.__name__.endswith(sfx):
|
omdev/manifests/_dumping.py
CHANGED
@@ -60,6 +60,7 @@ CheckArgsRenderer = ta.Callable[..., ta.Optional[str]] # ta.TypeAlias
|
|
60
60
|
class _AbstractCachedNullary:
|
61
61
|
def __init__(self, fn):
|
62
62
|
super().__init__()
|
63
|
+
|
63
64
|
self._fn = fn
|
64
65
|
self._value = self._missing = object()
|
65
66
|
functools.update_wrapper(self, fn)
|
@@ -1515,13 +1516,13 @@ class _ModuleManifestDumper:
|
|
1515
1516
|
manifest_dct = self._build_manifest_dct(manifest)
|
1516
1517
|
|
1517
1518
|
cls = type(manifest)
|
1518
|
-
key = f'
|
1519
|
+
key = f'!{cls.__module__}.{cls.__qualname__}'
|
1519
1520
|
|
1520
1521
|
return {key: manifest_dct}
|
1521
1522
|
|
1522
1523
|
elif isinstance(manifest, collections.abc.Mapping):
|
1523
1524
|
[(key, manifest_dct)] = manifest.items()
|
1524
|
-
if not key.startswith('
|
1525
|
+
if not key.startswith('!'): # noqa
|
1525
1526
|
raise Exception(f'Bad key: {key}')
|
1526
1527
|
|
1527
1528
|
if not isinstance(manifest_dct, collections.abc.Mapping):
|
@@ -1571,7 +1572,7 @@ class _ModuleManifestDumper:
|
|
1571
1572
|
|
1572
1573
|
manifest_dct = self._build_manifest_dct(manifest)
|
1573
1574
|
|
1574
|
-
key = f'
|
1575
|
+
key = f'!{cls.__module__}.{cls.__qualname__}'
|
1575
1576
|
return {key: manifest_dct}
|
1576
1577
|
|
1577
1578
|
#
|
omdev/manifests/building.py
CHANGED
@@ -172,6 +172,9 @@ class ManifestBuilder:
|
|
172
172
|
def prepare(s: str) -> ta.Any:
|
173
173
|
if s.startswith('$.'):
|
174
174
|
s = f'{fm.mod_base}.{s[2:]}'
|
175
|
+
elif s.startswith('.'):
|
176
|
+
# s = f'{fm.mod_base}.{s[2:]}'
|
177
|
+
raise NotImplementedError
|
175
178
|
return magic.py_compile_magic_preparer(s)
|
176
179
|
|
177
180
|
magics = magic.find_magic(
|
@@ -189,6 +192,9 @@ class ManifestBuilder:
|
|
189
192
|
body = m.body
|
190
193
|
if body.startswith('$.'):
|
191
194
|
body = f'{fm.mod_base}.{body[2:]}'
|
195
|
+
elif body.startswith('.'):
|
196
|
+
# body = f'{fm.mod_base}.{body[2:]}'
|
197
|
+
raise NotImplementedError
|
192
198
|
|
193
199
|
pat_match = check.not_none(_INLINE_MANIFEST_CLS_NAME_PAT.match(body))
|
194
200
|
cls_name = check.non_empty_str(pat_match.groupdict()['cls_name'])
|
@@ -214,8 +220,8 @@ class ManifestBuilder:
|
|
214
220
|
if issubclass(cls, ModAttrManifest):
|
215
221
|
attr_name = extract_manifest_target_name(lines, m.end_line)
|
216
222
|
inl_kw.update({
|
217
|
-
'
|
218
|
-
'
|
223
|
+
'module': fm.mod_name,
|
224
|
+
'attr': attr_name,
|
219
225
|
})
|
220
226
|
|
221
227
|
origin = ManifestOrigin(
|
@@ -328,14 +334,14 @@ class ManifestBuilder:
|
|
328
334
|
if not (
|
329
335
|
isinstance(value, ta.Mapping) and
|
330
336
|
len(value) == 1 and
|
331
|
-
all(isinstance(k, str) and k.startswith('
|
337
|
+
all(isinstance(k, str) and k.startswith('!') and len(k) > 1 for k in value)
|
332
338
|
):
|
333
|
-
raise TypeError(f'Manifest values must be mappings of strings starting with
|
339
|
+
raise TypeError(f'Manifest values must be mappings of strings starting with !: {value!r}')
|
334
340
|
|
335
341
|
[(key, value_dct)] = value.items()
|
336
342
|
kb, _, kr = key[1:].partition('.') # noqa
|
337
343
|
if kb == fm.mod_base: # noqa
|
338
|
-
key = f'
|
344
|
+
key = f'!.{kr}'
|
339
345
|
value = {key: value_dct}
|
340
346
|
|
341
347
|
out.append(Manifest(**{
|
@@ -429,7 +435,7 @@ def check_package_manifests(
|
|
429
435
|
for entry in manifests_json:
|
430
436
|
manifest = Manifest(**entry)
|
431
437
|
[(key, value_dct)] = manifest.value.items()
|
432
|
-
if key.startswith('
|
433
|
-
key = f'
|
438
|
+
if key.startswith('!.'):
|
439
|
+
key = f'!{name}{key[1:]}'
|
434
440
|
cls = GlobalManifestLoader.instance()._load_class(key) # noqa
|
435
441
|
value = GlobalManifestLoader.instance()._instantiate_value(cls, **value_dct) # noqa
|
omdev/manifests/dumping.py
CHANGED
@@ -67,13 +67,13 @@ class _ModuleManifestDumper:
|
|
67
67
|
manifest_dct = self._build_manifest_dct(manifest)
|
68
68
|
|
69
69
|
cls = type(manifest)
|
70
|
-
key = f'
|
70
|
+
key = f'!{cls.__module__}.{cls.__qualname__}'
|
71
71
|
|
72
72
|
return {key: manifest_dct}
|
73
73
|
|
74
74
|
elif isinstance(manifest, collections.abc.Mapping):
|
75
75
|
[(key, manifest_dct)] = manifest.items()
|
76
|
-
if not key.startswith('
|
76
|
+
if not key.startswith('!'): # noqa
|
77
77
|
raise Exception(f'Bad key: {key}')
|
78
78
|
|
79
79
|
if not isinstance(manifest_dct, collections.abc.Mapping):
|
@@ -123,7 +123,7 @@ class _ModuleManifestDumper:
|
|
123
123
|
|
124
124
|
manifest_dct = self._build_manifest_dct(manifest)
|
125
125
|
|
126
|
-
key = f'
|
126
|
+
key = f'!{cls.__module__}.{cls.__qualname__}'
|
127
127
|
return {key: manifest_dct}
|
128
128
|
|
129
129
|
#
|
omdev/oci/media.py
CHANGED
omdev/packaging/requires.py
CHANGED
@@ -121,6 +121,7 @@ class RequiresTokenizer:
|
|
121
121
|
rules: ta.Dict[str, ta.Union[str, ta.Pattern[str]]],
|
122
122
|
) -> None:
|
123
123
|
super().__init__()
|
124
|
+
|
124
125
|
self.source = source
|
125
126
|
self.rules: ta.Dict[str, ta.Pattern[str]] = {name: re.compile(pattern) for name, pattern in rules.items()}
|
126
127
|
self.next_token: ta.Optional[RequiresToken] = None
|
omdev/packaging/revisions.py
CHANGED
omdev/py/attrdocs.py
CHANGED
@@ -158,9 +158,9 @@ def extract_attr_docs(src: str) -> ta.Mapping[str, AttrDoc]:
|
|
158
158
|
|
159
159
|
|
160
160
|
# @omlish-manifest
|
161
|
-
_CLI_MODULE = {'
|
162
|
-
'
|
163
|
-
'
|
161
|
+
_CLI_MODULE = {'!.cli.types.CliModule': {
|
162
|
+
'name': 'py/attrdocs',
|
163
|
+
'module': __name__,
|
164
164
|
}}
|
165
165
|
|
166
166
|
|
omdev/py/bracepy.py
CHANGED
@@ -92,9 +92,9 @@ def translate_brace_python(
|
|
92
92
|
|
93
93
|
|
94
94
|
# @omlish-manifest
|
95
|
-
_CLI_MODULE = {'
|
96
|
-
'
|
97
|
-
'
|
95
|
+
_CLI_MODULE = {'!.cli.types.CliModule': {
|
96
|
+
'name': 'bracepy',
|
97
|
+
'module': __name__,
|
98
98
|
}}
|
99
99
|
|
100
100
|
|
omdev/py/classdot.py
CHANGED
@@ -61,9 +61,9 @@ def _main() -> None:
|
|
61
61
|
|
62
62
|
|
63
63
|
# @omlish-manifest
|
64
|
-
_CLI_MODULE = {'
|
65
|
-
'
|
66
|
-
'
|
64
|
+
_CLI_MODULE = {'!.cli.types.CliModule': {
|
65
|
+
'name': 'py/classdot',
|
66
|
+
'module': __name__,
|
67
67
|
}}
|
68
68
|
|
69
69
|
|
omdev/py/findimports.py
CHANGED
@@ -134,9 +134,9 @@ class ImportFinder:
|
|
134
134
|
|
135
135
|
|
136
136
|
# @omlish-manifest
|
137
|
-
_CLI_MODULE = {'
|
138
|
-
'
|
139
|
-
'
|
137
|
+
_CLI_MODULE = {'!.cli.types.CliModule': {
|
138
|
+
'name': 'py/findimports',
|
139
|
+
'module': __name__,
|
140
140
|
}}
|
141
141
|
|
142
142
|
|
omdev/py/scripts/execstat.py
CHANGED
@@ -87,9 +87,9 @@ def _run(
|
|
87
87
|
|
88
88
|
|
89
89
|
# @omlish-manifest
|
90
|
-
_CLI_MODULE = {'
|
91
|
-
'
|
92
|
-
'
|
90
|
+
_CLI_MODULE = {'!.cli.types.CliModule': {
|
91
|
+
'name': 'py/execstat',
|
92
|
+
'module': __name__,
|
93
93
|
}}
|
94
94
|
|
95
95
|
|
@@ -140,7 +140,7 @@ def _main() -> None:
|
|
140
140
|
if i == 0:
|
141
141
|
run_kw.update(
|
142
142
|
rss=bool(args.rss),
|
143
|
-
modules=bool(args.modules) or bool(args.
|
143
|
+
modules=bool(args.modules) or bool(args.modules_ordered),
|
144
144
|
)
|
145
145
|
|
146
146
|
payload = '\n'.join([
|
omdev/py/scripts/importtrace.py
CHANGED
@@ -489,9 +489,9 @@ class SqliteWriter:
|
|
489
489
|
|
490
490
|
|
491
491
|
# @omlish-manifest
|
492
|
-
_CLI_MODULE = {'
|
493
|
-
'
|
494
|
-
'
|
492
|
+
_CLI_MODULE = {'!.cli.types.CliModule': {
|
493
|
+
'name': 'py/importtrace',
|
494
|
+
'module': __name__,
|
495
495
|
}}
|
496
496
|
|
497
497
|
|
omdev/py/srcheaders.py
CHANGED
@@ -63,9 +63,9 @@ def get_py_header_lines(src: str) -> list[PyHeaderLine]:
|
|
63
63
|
|
64
64
|
|
65
65
|
# @omlish-manifest
|
66
|
-
_CLI_MODULE = {'
|
67
|
-
'
|
68
|
-
'
|
66
|
+
_CLI_MODULE = {'!.cli.types.CliModule': {
|
67
|
+
'name': 'py/srcheaders',
|
68
|
+
'module': __name__,
|
69
69
|
}}
|
70
70
|
|
71
71
|
|
omdev/pyproject/pkg.py
CHANGED
omdev/pyproject/reqs.py
CHANGED
omdev/pyproject/venvs.py
CHANGED
omdev/scripts/ci.py
CHANGED
@@ -489,6 +489,7 @@ class HttpProtocolVersions:
|
|
489
489
|
class _AbstractCachedNullary:
|
490
490
|
def __init__(self, fn):
|
491
491
|
super().__init__()
|
492
|
+
|
492
493
|
self._fn = fn
|
493
494
|
self._value = self._missing = object()
|
494
495
|
functools.update_wrapper(self, fn)
|
@@ -4264,6 +4265,7 @@ class ContextvarInjectorScope(InjectorScope, abc.ABC):
|
|
4264
4265
|
|
4265
4266
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
4266
4267
|
super().__init_subclass__(**kwargs)
|
4268
|
+
|
4267
4269
|
check.not_in(abc.ABC, cls.__bases__)
|
4268
4270
|
check.state(not hasattr(cls, '_cv'))
|
4269
4271
|
cls._cv = contextvars.ContextVar(f'{cls.__name__}_cv')
|
@@ -4538,6 +4540,7 @@ class _Injector(Injector):
|
|
4538
4540
|
class _Request:
|
4539
4541
|
def __init__(self, injector: '_Injector') -> None:
|
4540
4542
|
super().__init__()
|
4543
|
+
|
4541
4544
|
self._injector = injector
|
4542
4545
|
self._provisions: ta.Dict[InjectorKey, Maybe] = {}
|
4543
4546
|
self._seen_keys: ta.Set[InjectorKey] = set()
|
@@ -8959,6 +8962,7 @@ class OciMediaDataclass(abc.ABC): # noqa
|
|
8959
8962
|
|
8960
8963
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
8961
8964
|
super().__init_subclass__(**kwargs)
|
8965
|
+
|
8962
8966
|
for a in OCI_MEDIA_FIELDS:
|
8963
8967
|
check.in_(a, cls.__dict__)
|
8964
8968
|
|
omdev/scripts/interp.py
CHANGED
@@ -516,6 +516,7 @@ def canonicalize_version(
|
|
516
516
|
class _AbstractCachedNullary:
|
517
517
|
def __init__(self, fn):
|
518
518
|
super().__init__()
|
519
|
+
|
519
520
|
self._fn = fn
|
520
521
|
self._value = self._missing = object()
|
521
522
|
functools.update_wrapper(self, fn)
|
@@ -3024,6 +3025,7 @@ class ContextvarInjectorScope(InjectorScope, abc.ABC):
|
|
3024
3025
|
|
3025
3026
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
3026
3027
|
super().__init_subclass__(**kwargs)
|
3028
|
+
|
3027
3029
|
check.not_in(abc.ABC, cls.__bases__)
|
3028
3030
|
check.state(not hasattr(cls, '_cv'))
|
3029
3031
|
cls._cv = contextvars.ContextVar(f'{cls.__name__}_cv')
|
@@ -3298,6 +3300,7 @@ class _Injector(Injector):
|
|
3298
3300
|
class _Request:
|
3299
3301
|
def __init__(self, injector: '_Injector') -> None:
|
3300
3302
|
super().__init__()
|
3303
|
+
|
3301
3304
|
self._injector = injector
|
3302
3305
|
self._provisions: ta.Dict[InjectorKey, Maybe] = {}
|
3303
3306
|
self._seen_keys: ta.Set[InjectorKey] = set()
|
@@ -4227,6 +4230,7 @@ class InterpProvider(abc.ABC):
|
|
4227
4230
|
|
4228
4231
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
4229
4232
|
super().__init_subclass__(**kwargs)
|
4233
|
+
|
4230
4234
|
if abc.ABC not in cls.__bases__ and 'name' not in cls.__dict__:
|
4231
4235
|
sfx = 'InterpProvider'
|
4232
4236
|
if not cls.__name__.endswith(sfx):
|
omdev/scripts/pyproject.py
CHANGED
@@ -1817,6 +1817,7 @@ class TomlWriter:
|
|
1817
1817
|
|
1818
1818
|
def __init__(self, out: ta.TextIO) -> None:
|
1819
1819
|
super().__init__()
|
1820
|
+
|
1820
1821
|
self._out = out
|
1821
1822
|
|
1822
1823
|
self._indent = 0
|
@@ -1939,6 +1940,7 @@ class TomlWriter:
|
|
1939
1940
|
class _AbstractCachedNullary:
|
1940
1941
|
def __init__(self, fn):
|
1941
1942
|
super().__init__()
|
1943
|
+
|
1942
1944
|
self._fn = fn
|
1943
1945
|
self._value = self._missing = object()
|
1944
1946
|
functools.update_wrapper(self, fn)
|
@@ -4070,6 +4072,7 @@ class RequirementsRewriter:
|
|
4070
4072
|
venv: ta.Optional[str] = None,
|
4071
4073
|
) -> None:
|
4072
4074
|
super().__init__()
|
4075
|
+
|
4073
4076
|
self._venv = venv
|
4074
4077
|
|
4075
4078
|
@cached_nullary
|
@@ -4826,6 +4829,7 @@ class ContextvarInjectorScope(InjectorScope, abc.ABC):
|
|
4826
4829
|
|
4827
4830
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
4828
4831
|
super().__init_subclass__(**kwargs)
|
4832
|
+
|
4829
4833
|
check.not_in(abc.ABC, cls.__bases__)
|
4830
4834
|
check.state(not hasattr(cls, '_cv'))
|
4831
4835
|
cls._cv = contextvars.ContextVar(f'{cls.__name__}_cv')
|
@@ -5100,6 +5104,7 @@ class _Injector(Injector):
|
|
5100
5104
|
class _Request:
|
5101
5105
|
def __init__(self, injector: '_Injector') -> None:
|
5102
5106
|
super().__init__()
|
5107
|
+
|
5103
5108
|
self._injector = injector
|
5104
5109
|
self._provisions: ta.Dict[InjectorKey, Maybe] = {}
|
5105
5110
|
self._seen_keys: ta.Set[InjectorKey] = set()
|
@@ -6687,6 +6692,7 @@ class InterpProvider(abc.ABC):
|
|
6687
6692
|
|
6688
6693
|
def __init_subclass__(cls, **kwargs: ta.Any) -> None:
|
6689
6694
|
super().__init_subclass__(**kwargs)
|
6695
|
+
|
6690
6696
|
if abc.ABC not in cls.__bases__ and 'name' not in cls.__dict__:
|
6691
6697
|
sfx = 'InterpProvider'
|
6692
6698
|
if not cls.__name__.endswith(sfx):
|
@@ -7771,6 +7777,7 @@ class GitRevisionAdder:
|
|
7771
7777
|
output_suffix: ta.Optional[str] = None,
|
7772
7778
|
) -> None:
|
7773
7779
|
super().__init__()
|
7780
|
+
|
7774
7781
|
self._given_revision = revision
|
7775
7782
|
self._output_suffix = output_suffix
|
7776
7783
|
|
@@ -8361,6 +8368,7 @@ class BasePyprojectPackageGenerator(abc.ABC):
|
|
8361
8368
|
pkg_suffix: str = '',
|
8362
8369
|
) -> None:
|
8363
8370
|
super().__init__()
|
8371
|
+
|
8364
8372
|
self._dir_name = dir_name
|
8365
8373
|
self._pkgs_root = pkgs_root
|
8366
8374
|
self._pkg_suffix = pkg_suffix
|
@@ -9342,6 +9350,7 @@ class Venv:
|
|
9342
9350
|
cfg: VenvConfig,
|
9343
9351
|
) -> None:
|
9344
9352
|
super().__init__()
|
9353
|
+
|
9345
9354
|
self._name = name
|
9346
9355
|
self._cfg = cfg
|
9347
9356
|
|
omdev/scripts/slowcat.py
CHANGED
@@ -115,9 +115,9 @@ def _main() -> None:
|
|
115
115
|
|
116
116
|
|
117
117
|
# @omlish-manifest
|
118
|
-
_CLI_MODULE = {'
|
119
|
-
'
|
120
|
-
'
|
118
|
+
_CLI_MODULE = {'!.cli.types.CliModule': {
|
119
|
+
'name': 'slowcat',
|
120
|
+
'module': __name__,
|
121
121
|
}}
|
122
122
|
|
123
123
|
|
omdev/scripts/tmpexec.py
CHANGED
omdev/tools/git/messages.py
CHANGED
@@ -80,6 +80,6 @@ class TimestampGitMessageGenerator(GitMessageGenerator):
|
|
80
80
|
|
81
81
|
# @omlish-manifest
|
82
82
|
class _TIMESTAMP_GIT_MESSAGE_GENERATOR_MANIFEST(StaticGitMessageGeneratorManifest): # noqa
|
83
|
-
|
83
|
+
attr = 'TimestampGitMessageGenerator'
|
84
84
|
name = 'timestamp'
|
85
85
|
aliases = ['ts'] # noqa
|
omdev/tools/json/rendering.py
CHANGED
omdev/tools/mkenv.py
CHANGED
@@ -121,9 +121,9 @@ def _main() -> None:
|
|
121
121
|
|
122
122
|
|
123
123
|
# @omlish-manifest
|
124
|
-
_CLI_MODULE = {'
|
125
|
-
'
|
126
|
-
'
|
124
|
+
_CLI_MODULE = {'!.cli.types.CliModule': {
|
125
|
+
'name': ['mkenv'],
|
126
|
+
'module': __name__,
|
127
127
|
}}
|
128
128
|
|
129
129
|
|
omdev/tools/prof.py
CHANGED
@@ -71,6 +71,7 @@ class Cli(ap.Cli):
|
|
71
71
|
ap.arg('-p', '--pdf', action='store_true'),
|
72
72
|
ap.arg('-o', '--open', action='store_true'),
|
73
73
|
ap.arg('-O', '--overwrite', action='store_true'),
|
74
|
+
ap.arg('-x', '--exe'),
|
74
75
|
)
|
75
76
|
def pstats_exec(self) -> None:
|
76
77
|
if self.args.out_file is not None:
|
@@ -85,10 +86,13 @@ class Cli(ap.Cli):
|
|
85
86
|
|
86
87
|
pstats_file = os.path.join(tmp_dir, 'prof.pstats')
|
87
88
|
|
89
|
+
if (exe := self.args.exe) is None:
|
90
|
+
exe = sys.executable
|
91
|
+
|
88
92
|
# TODO: --python - and handle env vars, unset venv and pythonpath stuff - helper for this, scrub env
|
89
93
|
# - share with execstat, -x
|
90
94
|
subprocess.check_call([
|
91
|
-
|
95
|
+
exe,
|
92
96
|
'-m', 'cProfile',
|
93
97
|
'-o', pstats_file,
|
94
98
|
os.path.abspath(src_file),
|
@@ -118,8 +122,8 @@ class Cli(ap.Cli):
|
|
118
122
|
else:
|
119
123
|
# Alt: python -i <setup.py> where setup.py is 'import pstats; stats = pstats.Stats(<out_file>)'
|
120
124
|
os.execl(
|
121
|
-
|
122
|
-
|
125
|
+
exe,
|
126
|
+
exe,
|
123
127
|
'-m', 'pstats',
|
124
128
|
out_file,
|
125
129
|
)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev407
|
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.
|
17
|
+
Requires-Dist: omlish==0.0.0.dev407
|
18
18
|
Provides-Extra: all
|
19
19
|
Requires-Dist: black~=25.1; extra == "all"
|
20
20
|
Requires-Dist: pycparser~=2.22; extra == "all"
|