omdev 0.0.0.dev179__py3-none-any.whl → 0.0.0.dev180__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 CHANGED
@@ -96,14 +96,14 @@
96
96
  }
97
97
  },
98
98
  {
99
- "module": ".magic.find",
99
+ "module": ".magic.__main__",
100
100
  "attr": "_CLI_MODULE",
101
- "file": "omdev/magic/find.py",
102
- "line": 230,
101
+ "file": "omdev/magic/__main__.py",
102
+ "line": 4,
103
103
  "value": {
104
104
  "$.cli.types.CliModule": {
105
- "cmd_name": "py/findmagic",
106
- "mod_name": "omdev.magic.find"
105
+ "cmd_name": "magic",
106
+ "mod_name": "omdev.magic.__main__"
107
107
  }
108
108
  }
109
109
  },
omdev/cli/clicli.py CHANGED
@@ -21,15 +21,15 @@ class CliCli(ap.Cli):
21
21
 
22
22
  #
23
23
 
24
- @ap.command(name='version', aliases=['ver'])
24
+ @ap.cmd(name='version', aliases=['ver'])
25
25
  def print_version(self) -> None:
26
26
  print(__about__.__version__)
27
27
 
28
- @ap.command(name='revision', aliases=['rev'])
28
+ @ap.cmd(name='revision', aliases=['rev'])
29
29
  def print_revision(self) -> None:
30
30
  print(__about__.__revision__)
31
31
 
32
- @ap.command(name='home')
32
+ @ap.cmd(name='home')
33
33
  def print_home(self) -> None:
34
34
  print(sys.prefix)
35
35
 
@@ -52,7 +52,7 @@ class CliCli(ap.Cli):
52
52
  ],
53
53
  )
54
54
 
55
- @ap.command(
55
+ @ap.cmd(
56
56
  ap.arg('args', nargs=ap.REMAINDER),
57
57
  name='python',
58
58
  accepts_unknown=True,
@@ -60,7 +60,7 @@ class CliCli(ap.Cli):
60
60
  def python_cmd(self) -> None:
61
61
  self._passthrough_args_cmd(sys.executable)
62
62
 
63
- @ap.command(
63
+ @ap.cmd(
64
64
  ap.arg('args', nargs=ap.REMAINDER),
65
65
  name='pip',
66
66
  accepts_unknown=True,
@@ -70,7 +70,7 @@ class CliCli(ap.Cli):
70
70
 
71
71
  #
72
72
 
73
- @ap.command(
73
+ @ap.cmd(
74
74
  ap.arg('--url', default=DEFAULT_REINSTALL_URL),
75
75
  ap.arg('--local', action='store_true'),
76
76
  ap.arg('extra_deps', nargs='*'),
omdev/imgur.py CHANGED
@@ -107,7 +107,7 @@ def _main() -> None:
107
107
  from omlish.argparse import all as ap
108
108
 
109
109
  class Cli(ap.Cli):
110
- @ap.command(
110
+ @ap.cmd(
111
111
  ap.arg('file'),
112
112
  )
113
113
  def upload(self) -> None:
omdev/interp/cli.py CHANGED
@@ -12,7 +12,7 @@ import typing as ta
12
12
 
13
13
  from omlish.argparse.cli import ArgparseCli
14
14
  from omlish.argparse.cli import argparse_arg
15
- from omlish.argparse.cli import argparse_command
15
+ from omlish.argparse.cli import argparse_cmd
16
16
  from omlish.lite.cached import cached_nullary
17
17
  from omlish.lite.check import check
18
18
  from omlish.lite.inject import Injector
@@ -37,7 +37,7 @@ class InterpCli(ArgparseCli):
37
37
 
38
38
  #
39
39
 
40
- @argparse_command(
40
+ @argparse_cmd(
41
41
  argparse_arg('version'),
42
42
  argparse_arg('-d', '--debug', action='store_true'),
43
43
  )
@@ -46,7 +46,7 @@ class InterpCli(ArgparseCli):
46
46
  s = InterpSpecifier.parse(self.args.version)
47
47
  await r.list(s)
48
48
 
49
- @argparse_command(
49
+ @argparse_cmd(
50
50
  argparse_arg('version'),
51
51
  argparse_arg('-p', '--provider'),
52
52
  argparse_arg('-d', '--debug', action='store_true'),
@@ -0,0 +1,11 @@
1
+ from ..cli import CliModule
2
+
3
+
4
+ # @omlish-manifest
5
+ _CLI_MODULE = CliModule('magic', __name__)
6
+
7
+
8
+ if __name__ == '__main__':
9
+ from .cli import _main
10
+
11
+ _main()
omdev/magic/cli.py ADDED
@@ -0,0 +1,54 @@
1
+ # ruff: noqa: UP006 UP007
2
+ import typing as ta
3
+
4
+ from omlish.argparse.cli import ArgparseCli
5
+ from omlish.argparse.cli import argparse_arg
6
+ from omlish.argparse.cli import argparse_cmd
7
+
8
+ from .find import find_magic_files
9
+ from .find import find_magic_py_modules
10
+ from .styles import C_MAGIC_STYLE
11
+ from .styles import PY_MAGIC_STYLE
12
+
13
+
14
+ ##
15
+
16
+
17
+ class MagicCli(ArgparseCli):
18
+ @argparse_cmd(
19
+ argparse_arg('--style', '-s', default='py'),
20
+ argparse_arg('--key', '-k', dest='keys', action='append'),
21
+ argparse_arg('--modules', action='store_true'),
22
+ argparse_arg('roots', nargs='*'),
23
+ )
24
+ def find(self) -> None:
25
+ style = {
26
+ 'py': PY_MAGIC_STYLE,
27
+ 'c': C_MAGIC_STYLE,
28
+ }[self.args.style]
29
+
30
+ kw: dict = dict(
31
+ roots=self.args.roots,
32
+ style=style,
33
+ keys=self.args.keys,
34
+ )
35
+
36
+ fn: ta.Callable
37
+ if self.args.modules:
38
+ fn = find_magic_py_modules
39
+ else:
40
+ fn = find_magic_files
41
+
42
+ for out in fn(**kw):
43
+ print(out)
44
+
45
+
46
+ ##
47
+
48
+
49
+ def _main(argv=None) -> None:
50
+ MagicCli(argv).cli_run_and_exit()
51
+
52
+
53
+ if __name__ == '__main__':
54
+ _main()
omdev/magic/find.py CHANGED
@@ -7,7 +7,6 @@ import typing as ta
7
7
  from .magic import Magic
8
8
  from .prepare import MagicPrepareError
9
9
  from .prepare import py_compile_magic_preparer
10
- from .styles import C_MAGIC_STYLE
11
10
  from .styles import PY_MAGIC_STYLE
12
11
  from .styles import MagicStyle
13
12
 
@@ -222,47 +221,3 @@ def find_magic_py_modules(
222
221
  yield fp[:-3].replace(os.sep, '.')
223
222
  else:
224
223
  yield fp
225
-
226
-
227
- ##
228
-
229
-
230
- # @omlish-manifest
231
- _CLI_MODULE = {'$omdev.cli.types.CliModule': {
232
- 'cmd_name': 'py/findmagic',
233
- 'mod_name': __name__,
234
- }}
235
-
236
-
237
- if __name__ == '__main__':
238
- def _main(argv=None) -> None:
239
- import argparse
240
-
241
- arg_parser = argparse.ArgumentParser()
242
- arg_parser.add_argument('--style', '-s', default='py')
243
- arg_parser.add_argument('--key', '-k', dest='keys', action='append')
244
- arg_parser.add_argument('--modules', action='store_true')
245
- arg_parser.add_argument('roots', nargs='*')
246
- args = arg_parser.parse_args(argv)
247
-
248
- style = {
249
- 'py': PY_MAGIC_STYLE,
250
- 'c': C_MAGIC_STYLE,
251
- }[args.style]
252
-
253
- kw: dict = dict(
254
- roots=args.roots,
255
- style=style,
256
- keys=args.keys,
257
- )
258
-
259
- fn: ta.Callable
260
- if args.modules:
261
- fn = find_magic_py_modules
262
- else:
263
- fn = find_magic_files
264
-
265
- for out in fn(**kw):
266
- print(out)
267
-
268
- _main()
omdev/pycharm/cli.py CHANGED
@@ -77,11 +77,11 @@ def parse_wmctrl_lxp_line(l: str) -> WmctrlLine:
77
77
 
78
78
 
79
79
  class Cli(ap.Cli):
80
- @ap.command()
80
+ @ap.cmd()
81
81
  def version(self) -> None:
82
82
  print(get_pycharm_version())
83
83
 
84
- @ap.command(
84
+ @ap.cmd(
85
85
  ap.arg('python-exe'),
86
86
  ap.arg('args', nargs=ap.REMAINDER),
87
87
  )
@@ -99,7 +99,7 @@ class Cli(ap.Cli):
99
99
  proc = subprocess.run([exe, src_file, *self.args.args], check=False)
100
100
  return proc.returncode
101
101
 
102
- @ap.command(
102
+ @ap.cmd(
103
103
  ap.arg('dir', nargs='?'),
104
104
  ap.arg('--clion', action='store_true'),
105
105
  )
omdev/pyproject/cli.py CHANGED
@@ -35,7 +35,7 @@ import typing as ta
35
35
 
36
36
  from omlish.argparse.cli import ArgparseCli
37
37
  from omlish.argparse.cli import argparse_arg
38
- from omlish.argparse.cli import argparse_command
38
+ from omlish.argparse.cli import argparse_cmd
39
39
  from omlish.asyncs.asyncio.subprocesses import asyncio_subprocesses
40
40
  from omlish.lite.cached import cached_nullary
41
41
  from omlish.lite.check import check
@@ -141,7 +141,7 @@ class Run:
141
141
  class PyprojectCli(ArgparseCli):
142
142
  _docker_container = argparse_arg('--_docker_container', help=argparse.SUPPRESS)
143
143
 
144
- @argparse_command(
144
+ @argparse_cmd(
145
145
  argparse_arg('name'),
146
146
  argparse_arg('-e', '--docker-env', action='append'),
147
147
  argparse_arg('cmd', nargs='?'),
@@ -223,7 +223,7 @@ class PyprojectCli(ArgparseCli):
223
223
  else:
224
224
  raise Exception(f'unknown subcommand: {cmd}')
225
225
 
226
- @argparse_command(
226
+ @argparse_cmd(
227
227
  argparse_arg('-b', '--build', action='store_true'),
228
228
  argparse_arg('-r', '--revision', action='store_true'),
229
229
  argparse_arg('-j', '--jobs', type=int),
omdev/scripts/interp.py CHANGED
@@ -78,7 +78,7 @@ UnparsedVersionVar = ta.TypeVar('UnparsedVersionVar', bound=UnparsedVersion)
78
78
  CallableVersionOperator = ta.Callable[['Version', str], bool]
79
79
 
80
80
  # ../../omlish/argparse/cli.py
81
- ArgparseCommandFn = ta.Callable[[], ta.Optional[int]] # ta.TypeAlias
81
+ ArgparseCmdFn = ta.Callable[[], ta.Optional[int]] # ta.TypeAlias
82
82
 
83
83
  # ../../omlish/lite/inject.py
84
84
  U = ta.TypeVar('U')
@@ -1953,15 +1953,15 @@ def argparse_arg(*args, **kwargs) -> ArgparseArg:
1953
1953
 
1954
1954
 
1955
1955
  @dc.dataclass(eq=False)
1956
- class ArgparseCommand:
1956
+ class ArgparseCmd:
1957
1957
  name: str
1958
- fn: ArgparseCommandFn
1958
+ fn: ArgparseCmdFn
1959
1959
  args: ta.Sequence[ArgparseArg] = () # noqa
1960
1960
 
1961
1961
  # _: dc.KW_ONLY
1962
1962
 
1963
1963
  aliases: ta.Optional[ta.Sequence[str]] = None
1964
- parent: ta.Optional['ArgparseCommand'] = None
1964
+ parent: ta.Optional['ArgparseCmd'] = None
1965
1965
  accepts_unknown: bool = False
1966
1966
 
1967
1967
  def __post_init__(self) -> None:
@@ -1976,7 +1976,7 @@ class ArgparseCommand:
1976
1976
 
1977
1977
  check.arg(callable(self.fn))
1978
1978
  check.arg(all(isinstance(a, ArgparseArg) for a in self.args))
1979
- check.isinstance(self.parent, (ArgparseCommand, type(None)))
1979
+ check.isinstance(self.parent, (ArgparseCmd, type(None)))
1980
1980
  check.isinstance(self.accepts_unknown, bool)
1981
1981
 
1982
1982
  functools.update_wrapper(self, self.fn)
@@ -1990,21 +1990,21 @@ class ArgparseCommand:
1990
1990
  return self.fn(*args, **kwargs)
1991
1991
 
1992
1992
 
1993
- def argparse_command(
1993
+ def argparse_cmd(
1994
1994
  *args: ArgparseArg,
1995
1995
  name: ta.Optional[str] = None,
1996
1996
  aliases: ta.Optional[ta.Iterable[str]] = None,
1997
- parent: ta.Optional[ArgparseCommand] = None,
1997
+ parent: ta.Optional[ArgparseCmd] = None,
1998
1998
  accepts_unknown: bool = False,
1999
- ) -> ta.Any: # ta.Callable[[ArgparseCommandFn], ArgparseCommand]: # FIXME
1999
+ ) -> ta.Any: # ta.Callable[[ArgparseCmdFn], ArgparseCmd]: # FIXME
2000
2000
  for arg in args:
2001
2001
  check.isinstance(arg, ArgparseArg)
2002
2002
  check.isinstance(name, (str, type(None)))
2003
- check.isinstance(parent, (ArgparseCommand, type(None)))
2003
+ check.isinstance(parent, (ArgparseCmd, type(None)))
2004
2004
  check.not_isinstance(aliases, str)
2005
2005
 
2006
2006
  def inner(fn):
2007
- return ArgparseCommand(
2007
+ return ArgparseCmd(
2008
2008
  (name if name is not None else fn.__name__).replace('_', '-'),
2009
2009
  fn,
2010
2010
  args,
@@ -2059,7 +2059,7 @@ class ArgparseCli:
2059
2059
  for bns in [bcls.__dict__ for bcls in reversed(mro)] + [ns]:
2060
2060
  bseen = set() # type: ignore
2061
2061
  for k, v in bns.items():
2062
- if isinstance(v, (ArgparseCommand, ArgparseArg)):
2062
+ if isinstance(v, (ArgparseCmd, ArgparseArg)):
2063
2063
  check.not_in(v, bseen)
2064
2064
  bseen.add(v)
2065
2065
  objs[k] = v
@@ -2086,7 +2086,7 @@ class ArgparseCli:
2086
2086
  subparsers = parser.add_subparsers()
2087
2087
 
2088
2088
  for att, obj in objs.items():
2089
- if isinstance(obj, ArgparseCommand):
2089
+ if isinstance(obj, ArgparseCmd):
2090
2090
  if obj.parent is not None:
2091
2091
  raise NotImplementedError
2092
2092
 
@@ -2148,7 +2148,7 @@ class ArgparseCli:
2148
2148
 
2149
2149
  #
2150
2150
 
2151
- def _bind_cli_cmd(self, cmd: ArgparseCommand) -> ta.Callable:
2151
+ def _bind_cli_cmd(self, cmd: ArgparseCmd) -> ta.Callable:
2152
2152
  return cmd.__get__(self, type(self))
2153
2153
 
2154
2154
  def prepare_cli_run(self) -> ta.Optional[ta.Callable]:
@@ -5034,7 +5034,7 @@ class InterpCli(ArgparseCli):
5034
5034
 
5035
5035
  #
5036
5036
 
5037
- @argparse_command(
5037
+ @argparse_cmd(
5038
5038
  argparse_arg('version'),
5039
5039
  argparse_arg('-d', '--debug', action='store_true'),
5040
5040
  )
@@ -5043,7 +5043,7 @@ class InterpCli(ArgparseCli):
5043
5043
  s = InterpSpecifier.parse(self.args.version)
5044
5044
  await r.list(s)
5045
5045
 
5046
- @argparse_command(
5046
+ @argparse_cmd(
5047
5047
  argparse_arg('version'),
5048
5048
  argparse_arg('-p', '--provider'),
5049
5049
  argparse_arg('-d', '--debug', action='store_true'),
@@ -114,7 +114,7 @@ UnparsedVersionVar = ta.TypeVar('UnparsedVersionVar', bound=UnparsedVersion)
114
114
  CallableVersionOperator = ta.Callable[['Version', str], bool]
115
115
 
116
116
  # ../../omlish/argparse/cli.py
117
- ArgparseCommandFn = ta.Callable[[], ta.Optional[int]] # ta.TypeAlias
117
+ ArgparseCmdFn = ta.Callable[[], ta.Optional[int]] # ta.TypeAlias
118
118
 
119
119
  # ../../omlish/lite/inject.py
120
120
  U = ta.TypeVar('U')
@@ -2910,16 +2910,6 @@ def find_magic_py_modules(
2910
2910
  yield fp
2911
2911
 
2912
2912
 
2913
- ##
2914
-
2915
-
2916
- # # @omlish-manifest
2917
- # _CLI_MODULE = {'$omdev.cli.types.CliModule': {
2918
- # 'cmd_name': 'py/findmagic',
2919
- # 'mod_name': __name__,
2920
- # }}
2921
-
2922
-
2923
2913
  ########################################
2924
2914
  # ../../packaging/specifiers.py
2925
2915
  # Copyright (c) Donald Stufft and individual contributors.
@@ -3553,15 +3543,15 @@ def argparse_arg(*args, **kwargs) -> ArgparseArg:
3553
3543
 
3554
3544
 
3555
3545
  @dc.dataclass(eq=False)
3556
- class ArgparseCommand:
3546
+ class ArgparseCmd:
3557
3547
  name: str
3558
- fn: ArgparseCommandFn
3548
+ fn: ArgparseCmdFn
3559
3549
  args: ta.Sequence[ArgparseArg] = () # noqa
3560
3550
 
3561
3551
  # _: dc.KW_ONLY
3562
3552
 
3563
3553
  aliases: ta.Optional[ta.Sequence[str]] = None
3564
- parent: ta.Optional['ArgparseCommand'] = None
3554
+ parent: ta.Optional['ArgparseCmd'] = None
3565
3555
  accepts_unknown: bool = False
3566
3556
 
3567
3557
  def __post_init__(self) -> None:
@@ -3576,7 +3566,7 @@ class ArgparseCommand:
3576
3566
 
3577
3567
  check.arg(callable(self.fn))
3578
3568
  check.arg(all(isinstance(a, ArgparseArg) for a in self.args))
3579
- check.isinstance(self.parent, (ArgparseCommand, type(None)))
3569
+ check.isinstance(self.parent, (ArgparseCmd, type(None)))
3580
3570
  check.isinstance(self.accepts_unknown, bool)
3581
3571
 
3582
3572
  functools.update_wrapper(self, self.fn)
@@ -3590,21 +3580,21 @@ class ArgparseCommand:
3590
3580
  return self.fn(*args, **kwargs)
3591
3581
 
3592
3582
 
3593
- def argparse_command(
3583
+ def argparse_cmd(
3594
3584
  *args: ArgparseArg,
3595
3585
  name: ta.Optional[str] = None,
3596
3586
  aliases: ta.Optional[ta.Iterable[str]] = None,
3597
- parent: ta.Optional[ArgparseCommand] = None,
3587
+ parent: ta.Optional[ArgparseCmd] = None,
3598
3588
  accepts_unknown: bool = False,
3599
- ) -> ta.Any: # ta.Callable[[ArgparseCommandFn], ArgparseCommand]: # FIXME
3589
+ ) -> ta.Any: # ta.Callable[[ArgparseCmdFn], ArgparseCmd]: # FIXME
3600
3590
  for arg in args:
3601
3591
  check.isinstance(arg, ArgparseArg)
3602
3592
  check.isinstance(name, (str, type(None)))
3603
- check.isinstance(parent, (ArgparseCommand, type(None)))
3593
+ check.isinstance(parent, (ArgparseCmd, type(None)))
3604
3594
  check.not_isinstance(aliases, str)
3605
3595
 
3606
3596
  def inner(fn):
3607
- return ArgparseCommand(
3597
+ return ArgparseCmd(
3608
3598
  (name if name is not None else fn.__name__).replace('_', '-'),
3609
3599
  fn,
3610
3600
  args,
@@ -3659,7 +3649,7 @@ class ArgparseCli:
3659
3649
  for bns in [bcls.__dict__ for bcls in reversed(mro)] + [ns]:
3660
3650
  bseen = set() # type: ignore
3661
3651
  for k, v in bns.items():
3662
- if isinstance(v, (ArgparseCommand, ArgparseArg)):
3652
+ if isinstance(v, (ArgparseCmd, ArgparseArg)):
3663
3653
  check.not_in(v, bseen)
3664
3654
  bseen.add(v)
3665
3655
  objs[k] = v
@@ -3686,7 +3676,7 @@ class ArgparseCli:
3686
3676
  subparsers = parser.add_subparsers()
3687
3677
 
3688
3678
  for att, obj in objs.items():
3689
- if isinstance(obj, ArgparseCommand):
3679
+ if isinstance(obj, ArgparseCmd):
3690
3680
  if obj.parent is not None:
3691
3681
  raise NotImplementedError
3692
3682
 
@@ -3748,7 +3738,7 @@ class ArgparseCli:
3748
3738
 
3749
3739
  #
3750
3740
 
3751
- def _bind_cli_cmd(self, cmd: ArgparseCommand) -> ta.Callable:
3741
+ def _bind_cli_cmd(self, cmd: ArgparseCmd) -> ta.Callable:
3752
3742
  return cmd.__get__(self, type(self))
3753
3743
 
3754
3744
  def prepare_cli_run(self) -> ta.Optional[ta.Callable]:
@@ -8152,7 +8142,7 @@ class Run:
8152
8142
  class PyprojectCli(ArgparseCli):
8153
8143
  _docker_container = argparse_arg('--_docker_container', help=argparse.SUPPRESS)
8154
8144
 
8155
- @argparse_command(
8145
+ @argparse_cmd(
8156
8146
  argparse_arg('name'),
8157
8147
  argparse_arg('-e', '--docker-env', action='append'),
8158
8148
  argparse_arg('cmd', nargs='?'),
@@ -8234,7 +8224,7 @@ class PyprojectCli(ArgparseCli):
8234
8224
  else:
8235
8225
  raise Exception(f'unknown subcommand: {cmd}')
8236
8226
 
8237
- @argparse_command(
8227
+ @argparse_cmd(
8238
8228
  argparse_arg('-b', '--build', action='store_true'),
8239
8229
  argparse_arg('-r', '--revision', action='store_true'),
8240
8230
  argparse_arg('-j', '--jobs', type=int),
omdev/tools/doc.py CHANGED
@@ -64,7 +64,7 @@ class Cli(ap.Cli):
64
64
 
65
65
  return src, name
66
66
 
67
- @ap.command(
67
+ @ap.cmd(
68
68
  ap.arg('input-file', nargs='?'),
69
69
  ap.arg('--report-level', type=int),
70
70
  ap.arg('-O', '--open', action='store_true'),
@@ -85,7 +85,7 @@ class Cli(ap.Cli):
85
85
  else:
86
86
  print(html)
87
87
 
88
- @ap.command(
88
+ @ap.cmd(
89
89
  ap.arg('input-file', nargs='?'),
90
90
  ap.arg('-O', '--open', action='store_true'),
91
91
  )
omdev/tools/docker.py CHANGED
@@ -37,7 +37,7 @@ def get_local_platform() -> str:
37
37
 
38
38
 
39
39
  class Cli(ap.Cli):
40
- @ap.command(
40
+ @ap.cmd(
41
41
  ap.arg('args', nargs='*'),
42
42
  )
43
43
  def ns1(self) -> None:
@@ -69,7 +69,7 @@ class Cli(ap.Cli):
69
69
  *self.args.args,
70
70
  )
71
71
 
72
- @ap.command(
72
+ @ap.cmd(
73
73
  ap.arg('--amd64', action='store_true'),
74
74
  )
75
75
  def enable_ptrace(self) -> None:
@@ -87,7 +87,7 @@ class Cli(ap.Cli):
87
87
  'sh', '-c', 'echo 0 > /proc/sys/kernel/yama/ptrace_scope',
88
88
  )
89
89
 
90
- @ap.command(
90
+ @ap.cmd(
91
91
  ap.arg('-f', '--file'),
92
92
  ap.arg('-w', '--write', action='store_true'),
93
93
  ap.arg('-q', '--quiet', action='store_true'),
@@ -182,7 +182,7 @@ class Cli(ap.Cli):
182
182
  with open(yml_file, 'w') as f:
183
183
  f.write(new_src)
184
184
 
185
- @ap.command(
185
+ @ap.cmd(
186
186
  ap.arg('repo'),
187
187
  ap.arg('tags', nargs='*'),
188
188
  )
@@ -192,7 +192,7 @@ class Cli(ap.Cli):
192
192
  print(json.dumps_pretty(msh.marshal(info)))
193
193
  return 0
194
194
 
195
- @ap.command(
195
+ @ap.cmd(
196
196
  ap.arg('image'),
197
197
  )
198
198
  def repo_latest_image(self) -> int:
@@ -205,7 +205,7 @@ class Cli(ap.Cli):
205
205
  print(dck.select_latest_tag(info.tags, base=base))
206
206
  return 0
207
207
 
208
- @ap.command(
208
+ @ap.cmd(
209
209
  ap.arg('-f', '--file'),
210
210
  )
211
211
  def compose_image_updates(self) -> None:
@@ -234,7 +234,7 @@ class Cli(ap.Cli):
234
234
 
235
235
  #
236
236
 
237
- @ap.command()
237
+ @ap.cmd()
238
238
  def dockly(self) -> None:
239
239
  os.execl(
240
240
  exe := docker_exe(),
@@ -244,7 +244,7 @@ class Cli(ap.Cli):
244
244
  'lirantal/dockly',
245
245
  )
246
246
 
247
- @ap.command()
247
+ @ap.cmd()
248
248
  def lazy(self) -> None:
249
249
  os.execl(
250
250
  exe := docker_exe(),
omdev/tools/git.py CHANGED
@@ -43,7 +43,7 @@ def get_first_commit_of_day(rev: str) -> str | None:
43
43
 
44
44
 
45
45
  class Cli(ap.Cli):
46
- @ap.command()
46
+ @ap.cmd()
47
47
  def blob_sizes(self) -> None:
48
48
  # https://stackoverflow.com/a/42544963
49
49
  subprocess.check_call( # noqa
@@ -56,7 +56,7 @@ class Cli(ap.Cli):
56
56
 
57
57
  #
58
58
 
59
- @ap.command()
59
+ @ap.cmd()
60
60
  def commits_by_date(self) -> None:
61
61
  subprocess.check_call(['git log --date=short --pretty=format:%ad | sort | uniq -c'], shell=True) # noqa
62
62
 
@@ -64,7 +64,7 @@ class Cli(ap.Cli):
64
64
 
65
65
  _GITHUB_PAT = re.compile(r'((http(s)?://)?(www\./)?github(\.com)?/)?(?P<user>[^/.]+)/(?P<repo>[^/.]+)(/.*)?')
66
66
 
67
- @ap.command(
67
+ @ap.cmd(
68
68
  ap.arg('repo'),
69
69
  ap.arg('args', nargs=ap.REMAINDER),
70
70
  accepts_unknown=True,
@@ -107,7 +107,7 @@ class Cli(ap.Cli):
107
107
  finally:
108
108
  print(out_dir)
109
109
 
110
- @ap.command(
110
+ @ap.cmd(
111
111
  ap.arg('rev', nargs='?', default='HEAD'),
112
112
  ap.arg('-d', '--diff', action='store_true'),
113
113
  ap.arg('-s', '--stat', action='store_true'),
@@ -147,7 +147,7 @@ class Cli(ap.Cli):
147
147
  else:
148
148
  print(base_rev)
149
149
 
150
- @ap.command(
150
+ @ap.cmd(
151
151
  ap.arg('-v', '--verbose', action='store_true'),
152
152
  )
153
153
  def status(self) -> None:
@@ -184,7 +184,7 @@ class Cli(ap.Cli):
184
184
 
185
185
  # Lazy helpers
186
186
 
187
- @ap.command(
187
+ @ap.cmd(
188
188
  ap.arg('-m', '--message', nargs='?'),
189
189
  ap.arg('--time-fmt', default='%Y-%m-%dT%H:%M:%SZ'),
190
190
  aliases=['acp'],
@@ -204,7 +204,7 @@ class Cli(ap.Cli):
204
204
 
205
205
  subprocess.check_call(['git', 'push'])
206
206
 
207
- @ap.command(
207
+ @ap.cmd(
208
208
  aliases=['psu'],
209
209
  )
210
210
  def pull_submodule_update(self) -> None:
omdev/tools/notebook.py CHANGED
@@ -18,7 +18,7 @@ from ..cli import CliModule
18
18
 
19
19
 
20
20
  class Cli(ap.Cli):
21
- @ap.command(
21
+ @ap.cmd(
22
22
  ap.arg('file'),
23
23
  ap.arg('-w', '--write', action='store_true'),
24
24
  ap.arg('-o', '--overwrite', action='store_true'),
omdev/tools/pip.py CHANGED
@@ -20,20 +20,20 @@ from ..pip import lookup_latest_package_version
20
20
 
21
21
 
22
22
  class Cli(ap.Cli):
23
- @ap.command(
23
+ @ap.cmd(
24
24
  ap.arg('package'),
25
25
  )
26
26
  def lookup_latest_version(self) -> None:
27
27
  print(lookup_latest_package_version(self.args.package))
28
28
 
29
- @ap.command(
29
+ @ap.cmd(
30
30
  ap.arg('path', nargs='*'),
31
31
  )
32
32
  def list_root_dists(self) -> None:
33
33
  for d in get_root_dists(paths=self.args.path):
34
34
  print(d)
35
35
 
36
- @ap.command(
36
+ @ap.cmd(
37
37
  ap.arg('file'),
38
38
  ap.arg('-w', '--write', action='store_true'),
39
39
  ap.arg('-q', '--quiet', action='store_true'),
@@ -57,7 +57,7 @@ class Cli(ap.Cli):
57
57
  with open(self.args.file, 'w') as f:
58
58
  f.write(new_src)
59
59
 
60
- @ap.command(
60
+ @ap.cmd(
61
61
  ap.arg('files', nargs='*'),
62
62
  ap.arg('-r', '--follow-requirements', action='store_true'),
63
63
  ap.arg('-j', '--json', action='store_true'),
omdev/tools/prof.py CHANGED
@@ -13,7 +13,7 @@ from ..cli import CliModule
13
13
 
14
14
 
15
15
  class Cli(ap.Cli):
16
- @ap.command(
16
+ @ap.cmd(
17
17
  ap.arg('file'),
18
18
  ap.arg('out-file', nargs='?'),
19
19
  ap.arg('-w', '--write', action='store_true'),
omdev/tools/sqlrepl.py CHANGED
@@ -157,7 +157,7 @@ def exec_postgres_cli(
157
157
 
158
158
 
159
159
  class Cli(ap.Cli):
160
- @ap.command(
160
+ @ap.cmd(
161
161
  ap.arg('--no-dbcli', action='store_true'),
162
162
  ap.arg('dialect'),
163
163
  ap.arg('target'),
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev179
3
+ Version: 0.0.0.dev180
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev179
15
+ Requires-Dist: omlish==0.0.0.dev180
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,11 +1,11 @@
1
- omdev/.manifests.json,sha256=tF8O0ywJseQMbbhT2b67QAvjuAaHXLY1MyjeMrDObos,8306
1
+ omdev/.manifests.json,sha256=nfFGet5cWIICf5szYBXbQvnH2TrJD-jtyBxuwKeA7ZY,8309
2
2
  omdev/__about__.py,sha256=n5x-SO70OgbDQFzQ1d7sZDVMsnkQc4PxQZPFaIQFa0E,1281
3
3
  omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  omdev/bracepy.py,sha256=I8EdqtDvxzAi3I8TuMEW-RBfwXfqKbwp06CfOdj3L1o,2743
5
5
  omdev/classdot.py,sha256=YOvgy6x295I_8NKBbBlRVd3AN7Osirm_Lqt4Wj0j9rY,1631
6
6
  omdev/cmake.py,sha256=Diy2ry65806dQP125DAstD3w46z_wszMH7PwC2-6iik,4578
7
7
  omdev/findimports.py,sha256=2t8QP852saEEJFeXySEzhi_nxRSxghlkXz2jVdvy08M,2392
8
- omdev/imgur.py,sha256=NK-kqGqGu4rDfpPbRyLEnIMJ2GHQQft5nSuwxLgyhNQ,2996
8
+ omdev/imgur.py,sha256=PNRrA440WP10DGm2bpXhisZdA4ODYCpOj1HqEzNx0Fs,2992
9
9
  omdev/pip.py,sha256=7cZ_IOpekQvgPm_gKnX3Pr8xjqUid50PPScTlZCYVlM,2118
10
10
  omdev/revisions.py,sha256=7Bgwd7cuKtcXJE4eDXmWP4Qx1aqZqf_LNFkOCuYS9I0,5008
11
11
  omdev/secrets.py,sha256=bcquaBIDKqX4UIKOzUuKrX7nxVCenj67rRHIMIrd9bk,540
@@ -67,7 +67,7 @@ omdev/cexts/_distutils/compilers/unixccompiler.py,sha256=o1h8QuyupLntv4F21_XjzAZ
67
67
  omdev/cli/__init__.py,sha256=V_l6VP1SZMlJbO-8CJwSuO9TThOy2S_oaPepNYgIrbE,37
68
68
  omdev/cli/__main__.py,sha256=mOJpgc07o0r5luQ1DlX4tk2PqZkgmbwPbdzJ3KmtjgQ,138
69
69
  omdev/cli/_pathhack.py,sha256=kxqb2kHap68Lkh8b211rDbcgj06hidBiAKA3f9posyc,2119
70
- omdev/cli/clicli.py,sha256=PNnhSu8fHjMPd9mbhG3A7jiGFgKQmWMYYKVSY4UcEOI,3508
70
+ omdev/cli/clicli.py,sha256=RiB-0Wis3L3Y0xet9Imm6V1tN87d9FN2rQhcdeXA9bg,3484
71
71
  omdev/cli/install.py,sha256=C-W171YlIHt4Cfok-nWSMbHwWhqF_PFqq2HixFttYx8,4460
72
72
  omdev/cli/main.py,sha256=OY7ir2WWuDUM1Urmh-WdEv7uEhidRRGnE4FNYHaEN3s,7033
73
73
  omdev/cli/managers.py,sha256=BV98_n30Jj63OJrFgRoVZRfICxMLXEZKoEn4rMj9LV4,1160
@@ -82,7 +82,7 @@ omdev/git/status.py,sha256=s_5kzyaSO-ikimdi54A6DrjOQPMeM5SRXLTrb22Alp4,8106
82
82
  omdev/git/subtrees.py,sha256=XFxE74PBqu_E5arpkCRRgsus5nof0TBfd2nmgh4cczA,2398
83
83
  omdev/interp/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
84
84
  omdev/interp/__main__.py,sha256=GMCqeGYltgt5dlJzHxY9gqisa8cRkrPfmZYuZnjg4WI,162
85
- omdev/interp/cli.py,sha256=dgHVB4JTpU43t2DYSQgqo3cGi9AIVKGQF0g63liQ83I,2406
85
+ omdev/interp/cli.py,sha256=_oaG5fN-UE2sQUNeCi4b9m5UF_lPEJ2S9nO_no1cvXI,2394
86
86
  omdev/interp/default.py,sha256=FTFQVvA8Lipe8k5eFbf-mLIbrcmfuEXka4ifPyQP8CA,285
87
87
  omdev/interp/inject.py,sha256=BE3VjFxU0gJ7KwSdKaNIlgXD7EAr-nidlJqSLwhGeNk,1479
88
88
  omdev/interp/inspect.py,sha256=ufYKUsGc_C1hwWDKqsfu1Cm7Hks7lAc5l8gt1MUKNDQ,2849
@@ -101,7 +101,9 @@ omdev/interp/uv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
101
101
  omdev/interp/uv/inject.py,sha256=3nHYu8qQMbV5iXdp-ItzNtfYE0zkIxrzmt7QdV7WiXU,314
102
102
  omdev/interp/uv/uv.py,sha256=oP4V6WJ0aYLIzFwkIvKMPLD_5HxppTuhd8fvtz6UoXs,671
103
103
  omdev/magic/__init__.py,sha256=CBzRB71RLyylkrj8dph6JUEddA8KSMJvDgriHqFfJGU,478
104
- omdev/magic/find.py,sha256=tTmpWXAleaXG3_kNOsRF7s8D0CpYMXbdz6-HbCNBW90,7070
104
+ omdev/magic/__main__.py,sha256=1_BAKDtA6Rn5hswyl4S5J78BPRbynX4is_wQsD0U7jI,161
105
+ omdev/magic/cli.py,sha256=puL5Snnc-i9Dpa3AU8DtaCp5qUd_7RXwv-qWU_B2fa8,1184
106
+ omdev/magic/find.py,sha256=lnVWO4Ux0BkatBihVloZ7XrsOJ4Tsc-YRhGd4ENL3Ro,6037
105
107
  omdev/magic/magic.py,sha256=h1nxoW6CV1MRCiHjDt3sO4kmG0qTtTRbkDNiPLGo2BE,224
106
108
  omdev/magic/prepare.py,sha256=V5jYT2AeFmazzPwk9sNismSouLwFXEoik6FwKcWCNUY,589
107
109
  omdev/magic/styles.py,sha256=YQ-HgwfvFWPj-o_705E7A-yehEn1G1hRNLPWpeWCK0U,605
@@ -130,11 +132,11 @@ omdev/ptk/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
130
132
  omdev/ptk/apps/ncdu.py,sha256=dOkEJoc2Wjv1u_Uge7Vpei_LvXldoPP5833Eia355tc,4548
131
133
  omdev/pycharm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
132
134
  omdev/pycharm/__main__.py,sha256=hUPp11D024eMdT86BxXiRVtF7AGBk5W6Zn8_mEHSksY,163
133
- omdev/pycharm/cli.py,sha256=dYRDCzRSLBTmoNg6Flswu3gI62yAGUtoh1aNcpBUBYU,3797
135
+ omdev/pycharm/cli.py,sha256=a7qnTeN0g0FwMqSy2b49DLoTO0yC662tSr4qKuvclGs,3785
134
136
  omdev/pyproject/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
135
137
  omdev/pyproject/__main__.py,sha256=gn3Rl1aYPYdiTtEqa9ifi0t-e4ZwPY0vhJ4UXvYdJDY,165
136
138
  omdev/pyproject/cexts.py,sha256=x13piOOnNrYbA17qZLDVuR0p1sqhgEwpk4FtImX-klM,4281
137
- omdev/pyproject/cli.py,sha256=TXoYDfX-FotgCT9LVFfNMwqmfhfvW0-I7dYTG2ub67Y,8765
139
+ omdev/pyproject/cli.py,sha256=ViNZUqFXcm8lIDCeNI6uy4OuHuo9aEV0S_jKoyanuf4,8753
138
140
  omdev/pyproject/configs.py,sha256=K9H5cGwVLgHi8wKwtYvlXHZ9ThtmnI4jo8JAb-t1-70,2859
139
141
  omdev/pyproject/pkg.py,sha256=x71WLK3Amnt2Wjhpqz3_lBRGEdsjN5vRGlAr5eDVFqE,14552
140
142
  omdev/pyproject/reqs.py,sha256=8feZ71YnGzwKbLK4zO28CDQeNcZIIuq6cnkBhs6M-7E,2406
@@ -144,8 +146,8 @@ omdev/scripts/bumpversion.py,sha256=Kn7fo73Hs8uJh3Hi3EIyLOlzLPWAC6dwuD_lZ3cIzuY,
144
146
  omdev/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
145
147
  omdev/scripts/exectime.py,sha256=sFb376GflU6s9gNX-2-we8hgH6w5MuQNS9g6i4SqJIo,610
146
148
  omdev/scripts/importtrace.py,sha256=oa7CtcWJVMNDbyIEiRHej6ICfABfErMeo4_haIqe18Q,14041
147
- omdev/scripts/interp.py,sha256=5pOp_GbyA6He7-aM3PtsBIKF9soERAifd_8TF7OfcnU,140545
148
- omdev/scripts/pyproject.py,sha256=stHTUWOWHfa9_p_tpTLqN8Hc9RoFVP1ZR5Mb89W18Pc,239282
149
+ omdev/scripts/interp.py,sha256=rtGqd0vYT2f7dy8rWXu8KIRnt_baBgN7nynJCsniGfs,140481
150
+ omdev/scripts/pyproject.py,sha256=Q_CjZ_q-Fvhlb_guUg7GVE0cbovaQvuBgWTXGCCCmlw,239074
149
151
  omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
150
152
  omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
151
153
  omdev/toml/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
@@ -153,16 +155,16 @@ omdev/toml/parser.py,sha256=ojhCYIk23ELRx2f9xUCwLTRq13UM6wrYGWoyxZBurlo,29327
153
155
  omdev/toml/writer.py,sha256=lk3on3YXVbWuLJa-xsOzOhs1bBAT1vXqw4mBbluZl_w,3040
154
156
  omdev/tools/__init__.py,sha256=iVJAOQ0viGTQOm0DLX4uZLro-9jOioYJGLg9s0kDx1A,78
155
157
  omdev/tools/cloc.py,sha256=r5HkvaLoGw8djgvGdt_W_CjfSklW585dar9bDhDFeF8,5098
156
- omdev/tools/doc.py,sha256=iblgUq9_7JZN2i8qmvewrz4OX0paObscBaCj8u77WqI,2555
157
- omdev/tools/docker.py,sha256=mu0sWnH_L1JjScfWCXXYaux03mcotCS03SD65I93qHI,7384
158
- omdev/tools/git.py,sha256=zfdPnN-9WSeOQlLoTw5aqAX-UWvz-2p330dx_zaU0WQ,7014
158
+ omdev/tools/doc.py,sha256=wvgGhv6aFaV-Zl-Qivejx37i-lKQ207rZ-4K2fPf-Ss,2547
159
+ omdev/tools/docker.py,sha256=KVFckA8eAdiapFUr8xkfMw9Uv3Qy4oNq0e70Lqt1F7I,7352
160
+ omdev/tools/git.py,sha256=VPx61R-UC2IH4s1tEnCsBp6kSsM6r9fimQfF8amg5kE,6986
159
161
  omdev/tools/importscan.py,sha256=nhJIhtjDY6eFVlReP7fegvv6L5ZjN-Z2VeyhsBonev4,4639
160
162
  omdev/tools/mkrelimp.py,sha256=kyu_BbUakKHEEOxNEvYWk7tH1ixCfVb3NqqT8U-BozE,4066
161
- omdev/tools/notebook.py,sha256=lIQIG-ytxGistyt7twuTbquSKbd7HQzR2jgBcGApwu8,3498
162
- omdev/tools/pip.py,sha256=KcIehb04owzJjeG_vRucgXkEup2mEL5SrWBhEtHc3FA,3475
163
- omdev/tools/prof.py,sha256=0-0_uFaKycnKCEHIaBn600qEMXWBy7ADp5hv2VdTJC8,1471
163
+ omdev/tools/notebook.py,sha256=q1YMGwM1skHv-dPbtT_cM7UOGFNiMEAxjr6rr6rbobk,3494
164
+ omdev/tools/pip.py,sha256=eBD41hp-V3thGfhUBM3Erxl4CSG-5LG6Szo1sA76P2k,3459
165
+ omdev/tools/prof.py,sha256=hQakAsViJD4gLJpLLZnTkOqmTDAwM48Nx5q-O_aFlYM,1467
164
166
  omdev/tools/qr.py,sha256=tm68lPwEAkEwIL2sUKPKBYfwwPtjVWG1DBZwur8_jY8,1737
165
- omdev/tools/sqlrepl.py,sha256=y9BPG3FSJDJgDieFVOXWG75q4dhTPjlYUiLHuinUTpg,5757
167
+ omdev/tools/sqlrepl.py,sha256=wAjrfXNrRV63-NJCC2HlGQnFh7lUH0bHMnOjYotQqFs,5753
166
168
  omdev/tools/json/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
167
169
  omdev/tools/json/__main__.py,sha256=wqpkN_NsQyNwKW4qjVj8ADJ4_C98KhrFBtE-Z1UamfU,168
168
170
  omdev/tools/json/cli.py,sha256=EubIMT-n2XsjWBZjSy2fWXqijlwrIhLsfbkg3SZzi28,9586
@@ -174,9 +176,9 @@ omdev/tools/json/rendering.py,sha256=jNShMfCpFR9-Kcn6cUFuOChXHjg71diuTC4x7Ofmz-o
174
176
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
175
177
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
176
178
  omdev/tools/pawk/pawk.py,sha256=Eckymn22GfychCQcQi96BFqRo_LmiJ-EPhC8TTUJdB4,11446
177
- omdev-0.0.0.dev179.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
178
- omdev-0.0.0.dev179.dist-info/METADATA,sha256=cv44HVDfVsjgNkrMZMvXr6JspwW4xpGmu238sBd3QoE,1760
179
- omdev-0.0.0.dev179.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
180
- omdev-0.0.0.dev179.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
181
- omdev-0.0.0.dev179.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
182
- omdev-0.0.0.dev179.dist-info/RECORD,,
179
+ omdev-0.0.0.dev180.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
180
+ omdev-0.0.0.dev180.dist-info/METADATA,sha256=mqiMhNfVPplwJ5oOFoyh-rWp7N4cfr3v2AICPOSK21E,1760
181
+ omdev-0.0.0.dev180.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
182
+ omdev-0.0.0.dev180.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
183
+ omdev-0.0.0.dev180.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
184
+ omdev-0.0.0.dev180.dist-info/RECORD,,