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.
Files changed (40) hide show
  1. omdev/.manifests.json +138 -138
  2. omdev/cache/data/cache.py +1 -0
  3. omdev/cexts/cmake.py +2 -0
  4. omdev/cexts/importhook.py +2 -0
  5. omdev/cli/_pathhack.py +1 -0
  6. omdev/cli/main.py +9 -9
  7. omdev/cli/types.py +5 -5
  8. omdev/dataclasses/codegen.py +1 -1
  9. omdev/interp/providers/base.py +1 -0
  10. omdev/manifests/_dumping.py +4 -3
  11. omdev/manifests/building.py +13 -7
  12. omdev/manifests/dumping.py +3 -3
  13. omdev/oci/media.py +1 -0
  14. omdev/packaging/requires.py +1 -0
  15. omdev/packaging/revisions.py +1 -0
  16. omdev/py/attrdocs.py +3 -3
  17. omdev/py/bracepy.py +3 -3
  18. omdev/py/classdot.py +3 -3
  19. omdev/py/findimports.py +3 -3
  20. omdev/py/scripts/execstat.py +4 -4
  21. omdev/py/scripts/importtrace.py +3 -3
  22. omdev/py/srcheaders.py +3 -3
  23. omdev/pyproject/pkg.py +1 -0
  24. omdev/pyproject/reqs.py +1 -0
  25. omdev/pyproject/venvs.py +1 -0
  26. omdev/scripts/ci.py +4 -0
  27. omdev/scripts/interp.py +4 -0
  28. omdev/scripts/pyproject.py +9 -0
  29. omdev/scripts/slowcat.py +3 -3
  30. omdev/scripts/tmpexec.py +3 -3
  31. omdev/tools/git/messages.py +1 -1
  32. omdev/tools/json/rendering.py +1 -0
  33. omdev/tools/mkenv.py +3 -3
  34. omdev/tools/prof.py +7 -3
  35. {omdev-0.0.0.dev405.dist-info → omdev-0.0.0.dev407.dist-info}/METADATA +2 -2
  36. {omdev-0.0.0.dev405.dist-info → omdev-0.0.0.dev407.dist-info}/RECORD +40 -40
  37. {omdev-0.0.0.dev405.dist-info → omdev-0.0.0.dev407.dist-info}/WHEEL +0 -0
  38. {omdev-0.0.0.dev405.dist-info → omdev-0.0.0.dev407.dist-info}/entry_points.txt +0 -0
  39. {omdev-0.0.0.dev405.dist-info → omdev-0.0.0.dev407.dist-info}/licenses/LICENSE +0 -0
  40. {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.cmd_name, str):
65
- ns = [cmd.cmd_name]
64
+ if isinstance(cmd.name, str):
65
+ ns = [cmd.name]
66
66
  else:
67
- ns = list(cmd.cmd_name)
67
+ ns = list(cmd.name)
68
68
  exec_paths = [tuple(n.split('/')) for n in ns]
69
69
 
70
- if isinstance(cmd.cmd_name, str) and cmd.cmd_name[0] == '_':
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.mod_name.partition('.')[0], *exec_paths[0])
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.cmd_name, str):
132
- l = [e.cmd.cmd_name]
131
+ if isinstance(e.cmd.name, str):
132
+ l = [e.cmd.name]
133
133
  else:
134
- l = list(e.cmd.cmd_name)
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.mod_name) # type: ignore # noqa
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
- cmd_name: ta.Union[str, ta.Sequence[str]]
12
+ name: ta.Union[str, ta.Sequence[str]]
13
13
 
14
14
  @property
15
15
  def primary_name(self) -> str:
16
- if isinstance(self.cmd_name, str):
17
- return self.cmd_name
16
+ if isinstance(self.name, str):
17
+ return self.name
18
18
  else:
19
- return self.cmd_name[0]
19
+ return self.name[0]
20
20
 
21
21
 
22
22
  @dc.dataclass(frozen=True)
23
23
  class CliModule(CliCmd):
24
- mod_name: str
24
+ module: str
25
25
 
26
26
 
27
27
  @dc.dataclass(frozen=True)
@@ -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.iter_items(sort_children=True):
94
+ for pkg_parts, pkg_config in config_trie.iteritems(sort_children=True):
95
95
  self.run_package_config('.'.join(pkg_parts), pkg_config)
@@ -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):
@@ -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'${cls.__module__}.{cls.__qualname__}'
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('$'): # noqa
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'${cls.__module__}.{cls.__qualname__}'
1575
+ key = f'!{cls.__module__}.{cls.__qualname__}'
1575
1576
  return {key: manifest_dct}
1576
1577
 
1577
1578
  #
@@ -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
- 'mod_name': fm.mod_name,
218
- 'attr_name': attr_name,
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('$') and len(k) > 1 for k in value)
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 $: {value!r}')
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'$.{kr}'
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'${name}{key[1:]}'
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
@@ -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'${cls.__module__}.{cls.__qualname__}'
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('$'): # noqa
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'${cls.__module__}.{cls.__qualname__}'
126
+ key = f'!{cls.__module__}.{cls.__qualname__}'
127
127
  return {key: manifest_dct}
128
128
 
129
129
  #
omdev/oci/media.py CHANGED
@@ -40,6 +40,7 @@ class OciMediaDataclass(abc.ABC): # noqa
40
40
 
41
41
  def __init_subclass__(cls, **kwargs: ta.Any) -> None:
42
42
  super().__init_subclass__(**kwargs)
43
+
43
44
  for a in OCI_MEDIA_FIELDS:
44
45
  check.in_(a, cls.__dict__)
45
46
 
@@ -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
@@ -31,6 +31,7 @@ class GitRevisionAdder:
31
31
  output_suffix: ta.Optional[str] = None,
32
32
  ) -> None:
33
33
  super().__init__()
34
+
34
35
  self._given_revision = revision
35
36
  self._output_suffix = output_suffix
36
37
 
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 = {'$omdev.cli.types.CliModule': {
162
- 'cmd_name': 'py/attrdocs',
163
- 'mod_name': __name__,
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 = {'$omdev.cli.types.CliModule': {
96
- 'cmd_name': 'bracepy',
97
- 'mod_name': __name__,
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 = {'$omdev.cli.types.CliModule': {
65
- 'cmd_name': 'py/classdot',
66
- 'mod_name': __name__,
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 = {'$omdev.cli.types.CliModule': {
138
- 'cmd_name': 'py/findimports',
139
- 'mod_name': __name__,
137
+ _CLI_MODULE = {'!.cli.types.CliModule': {
138
+ 'name': 'py/findimports',
139
+ 'module': __name__,
140
140
  }}
141
141
 
142
142
 
@@ -87,9 +87,9 @@ def _run(
87
87
 
88
88
 
89
89
  # @omlish-manifest
90
- _CLI_MODULE = {'$omdev.cli.types.CliModule': {
91
- 'cmd_name': 'py/execstat',
92
- 'mod_name': __name__,
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.modules),
143
+ modules=bool(args.modules) or bool(args.modules_ordered),
144
144
  )
145
145
 
146
146
  payload = '\n'.join([
@@ -489,9 +489,9 @@ class SqliteWriter:
489
489
 
490
490
 
491
491
  # @omlish-manifest
492
- _CLI_MODULE = {'$omdev.cli.types.CliModule': {
493
- 'cmd_name': 'py/importtrace',
494
- 'mod_name': __name__,
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 = {'$omdev.cli.types.CliModule': {
67
- 'cmd_name': 'py/srcheaders',
68
- 'mod_name': __name__,
66
+ _CLI_MODULE = {'!.cli.types.CliModule': {
67
+ 'name': 'py/srcheaders',
68
+ 'module': __name__,
69
69
  }}
70
70
 
71
71
 
omdev/pyproject/pkg.py CHANGED
@@ -57,6 +57,7 @@ class BasePyprojectPackageGenerator(abc.ABC):
57
57
  pkg_suffix: str = '',
58
58
  ) -> None:
59
59
  super().__init__()
60
+
60
61
  self._dir_name = dir_name
61
62
  self._pkgs_root = pkgs_root
62
63
  self._pkg_suffix = pkg_suffix
omdev/pyproject/reqs.py CHANGED
@@ -20,6 +20,7 @@ class RequirementsRewriter:
20
20
  venv: ta.Optional[str] = None,
21
21
  ) -> None:
22
22
  super().__init__()
23
+
23
24
  self._venv = venv
24
25
 
25
26
  @cached_nullary
omdev/pyproject/venvs.py CHANGED
@@ -23,6 +23,7 @@ class Venv:
23
23
  cfg: VenvConfig,
24
24
  ) -> None:
25
25
  super().__init__()
26
+
26
27
  self._name = name
27
28
  self._cfg = cfg
28
29
 
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):
@@ -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 = {'$omdev.cli.types.CliModule': {
119
- 'cmd_name': 'slowcat',
120
- 'mod_name': __name__,
118
+ _CLI_MODULE = {'!.cli.types.CliModule': {
119
+ 'name': 'slowcat',
120
+ 'module': __name__,
121
121
  }}
122
122
 
123
123
 
omdev/scripts/tmpexec.py CHANGED
@@ -48,9 +48,9 @@ def _main() -> None:
48
48
 
49
49
 
50
50
  # @omlish-manifest
51
- _CLI_MODULE = {'$omdev.cli.types.CliModule': {
52
- 'cmd_name': 'tmpexec',
53
- 'mod_name': __name__,
51
+ _CLI_MODULE = {'!.cli.types.CliModule': {
52
+ 'name': 'tmpexec',
53
+ 'module': __name__,
54
54
  }}
55
55
 
56
56
 
@@ -80,6 +80,6 @@ class TimestampGitMessageGenerator(GitMessageGenerator):
80
80
 
81
81
  # @omlish-manifest
82
82
  class _TIMESTAMP_GIT_MESSAGE_GENERATOR_MANIFEST(StaticGitMessageGeneratorManifest): # noqa
83
- attr_name = 'TimestampGitMessageGenerator'
83
+ attr = 'TimestampGitMessageGenerator'
84
84
  name = 'timestamp'
85
85
  aliases = ['ts'] # noqa
@@ -37,6 +37,7 @@ def make_render_kwargs(opts: RenderingOptions) -> ta.Mapping[str, ta.Any]:
37
37
  class Renderer(lang.Abstract):
38
38
  def __init__(self, opts: RenderingOptions) -> None:
39
39
  super().__init__()
40
+
40
41
  self._opts = opts
41
42
  self._kw = make_render_kwargs(opts)
42
43
 
omdev/tools/mkenv.py CHANGED
@@ -121,9 +121,9 @@ def _main() -> None:
121
121
 
122
122
 
123
123
  # @omlish-manifest
124
- _CLI_MODULE = {'$omdev.cli.types.CliModule': {
125
- 'cmd_name': ['mkenv'],
126
- 'mod_name': __name__,
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
- sys.executable,
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
- sys.executable,
122
- sys.executable,
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.dev405
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.dev405
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"