omdev 0.0.0.dev179__py3-none-any.whl → 0.0.0.dev180__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
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,,