omdev 0.0.0.dev147__py3-none-any.whl → 0.0.0.dev149__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.

Potentially problematic release.


This version of omdev might be problematic. Click here for more details.

omdev/manifests/build.py CHANGED
@@ -1,8 +1,9 @@
1
1
  # ruff: noqa: UP006 UP007
2
+ # @omlish-lite
2
3
  """
3
4
  TODO:
4
- - separate build from cli
5
5
  - verify classes instantiate
6
+ - embed in pyproject
6
7
 
7
8
  See (entry_points):
8
9
  - https://github.com/pytest-dev/pluggy/blob/main/src/pluggy/_manager.py#L405
@@ -11,14 +12,12 @@ See (entry_points):
11
12
  - https://packaging.python.org/en/latest/guides/creating-and-discovering-plugins/
12
13
  - [project.entry-points.omlish-manifests] \n omdev = omdev
13
14
  """
14
- import argparse
15
15
  import asyncio
16
16
  import collections
17
17
  import dataclasses as dc
18
18
  import inspect
19
19
  import itertools
20
20
  import json
21
- import multiprocessing as mp
22
21
  import os.path
23
22
  import re
24
23
  import shlex
@@ -29,7 +28,6 @@ import typing as ta
29
28
 
30
29
  from omlish.lite.cached import cached_nullary
31
30
  from omlish.lite.json import json_dumps_pretty
32
- from omlish.lite.logs import configure_standard_logging
33
31
  from omlish.lite.logs import log
34
32
  from omlish.manifests.load import ManifestLoader
35
33
  from omlish.manifests.types import Manifest
@@ -282,75 +280,3 @@ def check_package_manifests(
282
280
  key = f'${name}{key[1:]}'
283
281
  cls = ldr.load_cls(key)
284
282
  value = cls(**value_dct) # noqa
285
-
286
-
287
- ##
288
-
289
-
290
- if __name__ == '__main__':
291
- def _get_base(args) -> str:
292
- if args.base is not None:
293
- base = args.base
294
- else:
295
- base = os.getcwd()
296
- base = os.path.abspath(base)
297
- if not os.path.isdir(base):
298
- raise RuntimeError(base)
299
- return base
300
-
301
- def _gen_cmd(args) -> None:
302
- base = _get_base(args)
303
-
304
- jobs = args.jobs or int(max(mp.cpu_count() // 1.5, 1))
305
- builder = ManifestBuilder(
306
- base,
307
- jobs,
308
- write=args.write or False,
309
- )
310
-
311
- async def do():
312
- return await asyncio.gather(*[
313
- builder.build_package_manifests(pkg)
314
- for pkg in args.package
315
- ])
316
-
317
- mss = asyncio.run(do())
318
- if not args.quiet:
319
- for ms in mss:
320
- print(json_dumps_pretty([dc.asdict(m) for m in ms]))
321
-
322
- def _check_cmd(args) -> None:
323
- base = _get_base(args)
324
-
325
- for pkg in args.package:
326
- check_package_manifests(
327
- pkg,
328
- base,
329
- )
330
-
331
- def _main(argv=None) -> None:
332
- configure_standard_logging('INFO')
333
-
334
- parser = argparse.ArgumentParser()
335
- subparsers = parser.add_subparsers()
336
-
337
- parser_gen = subparsers.add_parser('gen')
338
- parser_gen.add_argument('-b', '--base')
339
- parser_gen.add_argument('-w', '--write', action='store_true')
340
- parser_gen.add_argument('-q', '--quiet', action='store_true')
341
- parser_gen.add_argument('-j', '--jobs', type=int)
342
- parser_gen.add_argument('package', nargs='*')
343
- parser_gen.set_defaults(func=_gen_cmd)
344
-
345
- parser_check = subparsers.add_parser('check')
346
- parser_check.add_argument('-b', '--base')
347
- parser_check.add_argument('package', nargs='*')
348
- parser_check.set_defaults(func=_check_cmd)
349
-
350
- args = parser.parse_args(argv)
351
- if not getattr(args, 'func', None):
352
- parser.print_help()
353
- else:
354
- args.func(args)
355
-
356
- _main()
@@ -0,0 +1,84 @@
1
+ import argparse
2
+ import asyncio
3
+ import dataclasses as dc
4
+ import multiprocessing as mp
5
+ import os.path
6
+
7
+ from omlish.lite.json import json_dumps_pretty
8
+ from omlish.lite.logs import configure_standard_logging
9
+
10
+ from .build import ManifestBuilder
11
+ from .build import check_package_manifests
12
+
13
+
14
+ def _get_base(args) -> str:
15
+ if args.base is not None:
16
+ base = args.base
17
+ else:
18
+ base = os.getcwd()
19
+ base = os.path.abspath(base)
20
+ if not os.path.isdir(base):
21
+ raise RuntimeError(base)
22
+ return base
23
+
24
+
25
+ def _gen_cmd(args) -> None:
26
+ base = _get_base(args)
27
+
28
+ jobs = args.jobs or int(max(mp.cpu_count() // 1.5, 1))
29
+ builder = ManifestBuilder(
30
+ base,
31
+ jobs,
32
+ write=args.write or False,
33
+ )
34
+
35
+ async def do():
36
+ return await asyncio.gather(*[
37
+ builder.build_package_manifests(pkg)
38
+ for pkg in args.package
39
+ ])
40
+
41
+ mss = asyncio.run(do())
42
+ if not args.quiet:
43
+ for ms in mss:
44
+ print(json_dumps_pretty([dc.asdict(m) for m in ms]))
45
+
46
+
47
+ def _check_cmd(args) -> None:
48
+ base = _get_base(args)
49
+
50
+ for pkg in args.package:
51
+ check_package_manifests(
52
+ pkg,
53
+ base,
54
+ )
55
+
56
+
57
+ def _main(argv=None) -> None:
58
+ configure_standard_logging('INFO')
59
+
60
+ parser = argparse.ArgumentParser()
61
+ subparsers = parser.add_subparsers()
62
+
63
+ parser_gen = subparsers.add_parser('gen')
64
+ parser_gen.add_argument('-b', '--base')
65
+ parser_gen.add_argument('-w', '--write', action='store_true')
66
+ parser_gen.add_argument('-q', '--quiet', action='store_true')
67
+ parser_gen.add_argument('-j', '--jobs', type=int)
68
+ parser_gen.add_argument('package', nargs='*')
69
+ parser_gen.set_defaults(func=_gen_cmd)
70
+
71
+ parser_check = subparsers.add_parser('check')
72
+ parser_check.add_argument('-b', '--base')
73
+ parser_check.add_argument('package', nargs='*')
74
+ parser_check.set_defaults(func=_check_cmd)
75
+
76
+ args = parser.parse_args(argv)
77
+ if not getattr(args, 'func', None):
78
+ parser.print_help()
79
+ else:
80
+ args.func(args)
81
+
82
+
83
+ if __name__ == '__main__':
84
+ _main()
omdev/pycharm/cli.py CHANGED
@@ -13,7 +13,7 @@ import subprocess
13
13
  import sys
14
14
  import tempfile
15
15
 
16
- from omlish import argparse as ap
16
+ from omlish.argparse import all as ap
17
17
  from omlish.diag.pycharm import get_pycharm_version
18
18
 
19
19
 
omdev/pyproject/cli.py CHANGED
@@ -21,6 +21,7 @@ See:
21
21
  - https://github.com/tox-dev/tox/
22
22
  """
23
23
  import argparse
24
+ import asyncio
24
25
  import concurrent.futures as cf
25
26
  import dataclasses as dc
26
27
  import functools
@@ -33,6 +34,7 @@ import shutil
33
34
  import sys
34
35
  import typing as ta
35
36
 
37
+ from omlish.lite.cached import async_cached_nullary
36
38
  from omlish.lite.cached import cached_nullary
37
39
  from omlish.lite.check import check_not
38
40
  from omlish.lite.check import check_not_none
@@ -120,10 +122,10 @@ class Venv:
120
122
  def dir_name(self) -> str:
121
123
  return os.path.join(self.DIR_NAME, self._name)
122
124
 
123
- @cached_nullary
124
- def interp_exe(self) -> str:
125
+ @async_cached_nullary
126
+ async def interp_exe(self) -> str:
125
127
  i = InterpSpecifier.parse(check_not_none(self._cfg.interp))
126
- return check_not_none(DEFAULT_INTERP_RESOLVER.resolve(i, install=True)).exe
128
+ return check_not_none(await DEFAULT_INTERP_RESOLVER.resolve(i, install=True)).exe
127
129
 
128
130
  @cached_nullary
129
131
  def exe(self) -> str:
@@ -132,14 +134,14 @@ class Venv:
132
134
  raise Exception(f'venv exe {ve} does not exist or is not a file!')
133
135
  return ve
134
136
 
135
- @cached_nullary
136
- def create(self) -> bool:
137
+ @async_cached_nullary
138
+ async def create(self) -> bool:
137
139
  if os.path.exists(dn := self.dir_name):
138
140
  if not os.path.isdir(dn):
139
141
  raise Exception(f'{dn} exists but is not a directory!')
140
142
  return False
141
143
 
142
- log.info('Using interpreter %s', (ie := self.interp_exe()))
144
+ log.info('Using interpreter %s', (ie := await self.interp_exe()))
143
145
  subprocess_check_call(ie, '-m', 'venv', dn)
144
146
 
145
147
  ve = self.exe()
@@ -239,7 +241,7 @@ class Run:
239
241
  ##
240
242
 
241
243
 
242
- def _venv_cmd(args) -> None:
244
+ async def _venv_cmd(args) -> None:
243
245
  venv = Run().venvs()[args.name]
244
246
  if (sd := venv.cfg.docker) is not None and sd != (cd := args._docker_container): # noqa
245
247
  script = ' '.join([
@@ -276,10 +278,10 @@ def _venv_cmd(args) -> None:
276
278
 
277
279
  cmd = args.cmd
278
280
  if not cmd:
279
- venv.create()
281
+ await venv.create()
280
282
 
281
283
  elif cmd == 'python':
282
- venv.create()
284
+ await venv.create()
283
285
  os.execl(
284
286
  (exe := venv.exe()),
285
287
  exe,
@@ -287,12 +289,12 @@ def _venv_cmd(args) -> None:
287
289
  )
288
290
 
289
291
  elif cmd == 'exe':
290
- venv.create()
292
+ await venv.create()
291
293
  check_not(args.args)
292
294
  print(venv.exe())
293
295
 
294
296
  elif cmd == 'run':
295
- venv.create()
297
+ await venv.create()
296
298
  sh = check_not_none(shutil.which('bash'))
297
299
  script = ' '.join(args.args)
298
300
  if not script:
@@ -309,7 +311,7 @@ def _venv_cmd(args) -> None:
309
311
  print('\n'.join(venv.srcs()))
310
312
 
311
313
  elif cmd == 'test':
312
- venv.create()
314
+ await venv.create()
313
315
  subprocess_check_call(venv.exe(), '-m', 'pytest', *(args.args or []), *venv.srcs())
314
316
 
315
317
  else:
@@ -319,7 +321,7 @@ def _venv_cmd(args) -> None:
319
321
  ##
320
322
 
321
323
 
322
- def _pkg_cmd(args) -> None:
324
+ async def _pkg_cmd(args) -> None:
323
325
  run = Run()
324
326
 
325
327
  cmd = args.cmd
@@ -406,7 +408,7 @@ def _build_parser() -> argparse.ArgumentParser:
406
408
  return parser
407
409
 
408
410
 
409
- def _main(argv: ta.Optional[ta.Sequence[str]] = None) -> None:
411
+ async def _async_main(argv: ta.Optional[ta.Sequence[str]] = None) -> None:
410
412
  check_runtime_version()
411
413
  configure_standard_logging()
412
414
 
@@ -415,7 +417,11 @@ def _main(argv: ta.Optional[ta.Sequence[str]] = None) -> None:
415
417
  if not getattr(args, 'func', None):
416
418
  parser.print_help()
417
419
  else:
418
- args.func(args)
420
+ await args.func(args)
421
+
422
+
423
+ def _main(argv: ta.Optional[ta.Sequence[str]] = None) -> None:
424
+ asyncio.run(_async_main(argv))
419
425
 
420
426
 
421
427
  if __name__ == '__main__':