omdev 0.0.0.dev122__tar.gz → 0.0.0.dev124__tar.gz

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.

Files changed (157) hide show
  1. {omdev-0.0.0.dev122/omdev.egg-info → omdev-0.0.0.dev124}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/.manifests.json +5 -5
  3. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/amalg/amalg.py +5 -2
  4. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cli/clicli.py +32 -7
  5. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/git.py +8 -4
  6. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/magic/styles.py +1 -1
  7. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/precheck/main.py +6 -1
  8. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/scripts/importtrace.py +1 -2
  9. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/scripts/interp.py +8 -5
  10. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/scripts/pyproject.py +17 -10
  11. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/git.py +9 -0
  12. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/importscan.py +31 -17
  13. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/prof.py +4 -0
  14. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124/omdev.egg-info}/PKG-INFO +2 -2
  15. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev.egg-info/requires.txt +1 -1
  16. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/pyproject.toml +3 -2
  17. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/LICENSE +0 -0
  18. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/MANIFEST.in +0 -0
  19. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/README.rst +0 -0
  20. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/__about__.py +0 -0
  21. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/__init__.py +0 -0
  22. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/amalg/__init__.py +0 -0
  23. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/amalg/__main__.py +0 -0
  24. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/antlr/__init__.py +0 -0
  25. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/antlr/consts.py +0 -0
  26. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/antlr/gen.py +0 -0
  27. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/bracepy.py +0 -0
  28. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/__init__.py +0 -0
  29. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/compute/__init__.py +0 -0
  30. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/compute/cache.py +0 -0
  31. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/compute/contexts.py +0 -0
  32. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/compute/currents.py +0 -0
  33. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/compute/fns.py +0 -0
  34. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/compute/resolvers.py +0 -0
  35. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/compute/storage.py +0 -0
  36. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/compute/types.py +0 -0
  37. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/data/__init__.py +0 -0
  38. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/data/actions.py +0 -0
  39. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/data/cache.py +0 -0
  40. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/data/consts.py +0 -0
  41. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/data/defaults.py +0 -0
  42. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/data/manifests.py +0 -0
  43. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cache/data/specs.py +0 -0
  44. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/__init__.py +0 -0
  45. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_boilerplate.cc +0 -0
  46. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/LICENSE +0 -0
  47. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/__init__.py +0 -0
  48. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/build_ext.py +0 -0
  49. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  50. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  51. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/compilers/options.py +0 -0
  52. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  53. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/dir_util.py +0 -0
  54. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/errors.py +0 -0
  55. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/extension.py +0 -0
  56. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/file_util.py +0 -0
  57. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/modified.py +0 -0
  58. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/spawn.py +0 -0
  59. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/sysconfig.py +0 -0
  60. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/util.py +0 -0
  61. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/_distutils/version.py +0 -0
  62. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/build.py +0 -0
  63. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/cmake.py +0 -0
  64. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/importhook.py +0 -0
  65. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/magic.py +0 -0
  66. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cexts/scan.py +0 -0
  67. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/classdot.py +0 -0
  68. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cli/__init__.py +0 -0
  69. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cli/__main__.py +0 -0
  70. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cli/_pathhack.py +0 -0
  71. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cli/install.py +0 -0
  72. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cli/main.py +0 -0
  73. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cli/managers.py +0 -0
  74. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cli/types.py +0 -0
  75. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/clipboard/__init__.py +0 -0
  76. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/clipboard/clipboard.py +0 -0
  77. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/clipboard/darwin_cf.py +0 -0
  78. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/clipboard/linux_x.py +0 -0
  79. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/cmake.py +0 -0
  80. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/findimports.py +0 -0
  81. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/imgur.py +0 -0
  82. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/interp/__init__.py +0 -0
  83. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/interp/__main__.py +0 -0
  84. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/interp/cli.py +0 -0
  85. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/interp/inspect.py +0 -0
  86. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/interp/providers.py +0 -0
  87. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/interp/pyenv.py +0 -0
  88. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/interp/resolvers.py +0 -0
  89. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/interp/standalone.py +0 -0
  90. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/interp/system.py +0 -0
  91. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/interp/types.py +0 -0
  92. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/magic/__init__.py +0 -0
  93. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/magic/find.py +0 -0
  94. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/magic/magic.py +0 -0
  95. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/magic/prepare.py +0 -0
  96. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/manifests/__init__.py +0 -0
  97. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/manifests/build.py +0 -0
  98. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/manifests/load.py +0 -0
  99. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/manifests/types.py +0 -0
  100. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/mypy/__init__.py +0 -0
  101. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/mypy/debug.py +0 -0
  102. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/packaging/__init__.py +0 -0
  103. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/packaging/marshal.py +0 -0
  104. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/packaging/names.py +0 -0
  105. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/packaging/requires.py +0 -0
  106. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/packaging/specifiers.py +0 -0
  107. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/packaging/versions.py +0 -0
  108. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/pip.py +0 -0
  109. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/precheck/__init__.py +0 -0
  110. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/precheck/__main__.py +0 -0
  111. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/precheck/base.py +0 -0
  112. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/precheck/git.py +0 -0
  113. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/precheck/lite.py +0 -0
  114. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/precheck/manifests.py +0 -0
  115. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/precheck/scripts.py +0 -0
  116. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/ptk/__init__.py +0 -0
  117. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/ptk/apps/__init__.py +0 -0
  118. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/ptk/apps/ncdu.py +0 -0
  119. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/pycharm/__init__.py +0 -0
  120. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/pycharm/__main__.py +0 -0
  121. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/pycharm/cli.py +0 -0
  122. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/pyproject/__init__.py +0 -0
  123. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/pyproject/__main__.py +0 -0
  124. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/pyproject/cexts.py +0 -0
  125. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/pyproject/cli.py +0 -0
  126. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/pyproject/configs.py +0 -0
  127. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/pyproject/pkg.py +0 -0
  128. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/pyproject/reqs.py +0 -0
  129. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/revisions.py +0 -0
  130. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/scripts/__init__.py +0 -0
  131. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/scripts/bumpversion.py +0 -0
  132. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/scripts/execrss.py +0 -0
  133. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/scripts/exectime.py +0 -0
  134. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/scripts/slowcat.py +0 -0
  135. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/scripts/tmpexec.py +0 -0
  136. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/secrets.py +0 -0
  137. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tokens.py +0 -0
  138. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/toml/__init__.py +0 -0
  139. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/toml/parser.py +0 -0
  140. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/toml/writer.py +0 -0
  141. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/__init__.py +0 -0
  142. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/doc.py +0 -0
  143. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/docker.py +0 -0
  144. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/mkrelimp.py +0 -0
  145. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/notebook.py +0 -0
  146. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/pawk/__init__.py +0 -0
  147. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/pawk/__main__.py +0 -0
  148. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/pawk/pawk.py +0 -0
  149. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/pip.py +0 -0
  150. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/qr.py +0 -0
  151. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/tools/sqlrepl.py +0 -0
  152. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev/wheelfile.py +0 -0
  153. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev.egg-info/SOURCES.txt +0 -0
  154. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev.egg-info/dependency_links.txt +0 -0
  155. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev.egg-info/entry_points.txt +0 -0
  156. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/omdev.egg-info/top_level.txt +0 -0
  157. {omdev-0.0.0.dev122 → omdev-0.0.0.dev124}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev122
3
+ Version: 0.0.0.dev124
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.dev122
15
+ Requires-Dist: omlish==0.0.0.dev124
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -51,7 +51,7 @@
51
51
  "module": ".cli.clicli",
52
52
  "attr": "_CLI_MODULE",
53
53
  "file": "omdev/cli/clicli.py",
54
- "line": 113,
54
+ "line": 138,
55
55
  "value": {
56
56
  "$.cli.types.CliModule": {
57
57
  "cmd_name": "cli",
@@ -183,7 +183,7 @@
183
183
  "module": ".scripts.importtrace",
184
184
  "attr": "_CLI_MODULE",
185
185
  "file": "omdev/scripts/importtrace.py",
186
- "line": 481,
186
+ "line": 480,
187
187
  "value": {
188
188
  "$.cli.types.CliModule": {
189
189
  "cmd_name": "py/importtrace",
@@ -243,7 +243,7 @@
243
243
  "module": ".tools.git",
244
244
  "attr": "_CLI_MODULE",
245
245
  "file": "omdev/tools/git.py",
246
- "line": 196,
246
+ "line": 205,
247
247
  "value": {
248
248
  "$.cli.types.CliModule": {
249
249
  "cmd_name": "git",
@@ -255,7 +255,7 @@
255
255
  "module": ".tools.importscan",
256
256
  "attr": "_CLI_MODULE",
257
257
  "file": "omdev/tools/importscan.py",
258
- "line": 166,
258
+ "line": 178,
259
259
  "value": {
260
260
  "$.cli.types.CliModule": {
261
261
  "cmd_name": "py/importscan",
@@ -318,7 +318,7 @@
318
318
  "module": ".tools.prof",
319
319
  "attr": "_CLI_MODULE",
320
320
  "file": "omdev/tools/prof.py",
321
- "line": 50,
321
+ "line": 54,
322
322
  "value": {
323
323
  "$.cli.types.CliModule": {
324
324
  "cmd_name": "prof",
@@ -462,10 +462,13 @@ def gen_amalg(
462
462
  out.write(SECTION_SEP)
463
463
  out.write('\n\n')
464
464
 
465
+ version_check_fail_msg = (
466
+ f'Requires python {REQUIRED_PYTHON_VERSION!r}, '
467
+ f'got {{sys.version_info}} from {{sys.executable}}'
468
+ )
465
469
  out.write(textwrap.dedent(f"""
466
470
  if sys.version_info < {REQUIRED_PYTHON_VERSION!r}:
467
- raise OSError(
468
- f'Requires python {REQUIRED_PYTHON_VERSION!r}, got {{sys.version_info}} from {{sys.executable}}') # noqa
471
+ raise OSError(f{version_check_fail_msg!r}) # noqa
469
472
  """).lstrip())
470
473
  out.write('\n\n')
471
474
 
@@ -1,6 +1,7 @@
1
1
  import inspect
2
2
  import os
3
3
  import sys
4
+ import typing as ta
4
5
  import urllib.parse
5
6
  import urllib.request
6
7
 
@@ -18,6 +19,8 @@ DEFAULT_REINSTALL_URL = 'https://raw.githubusercontent.com/wrmsr/omlish/master/o
18
19
 
19
20
  class CliCli(ap.Cli):
20
21
 
22
+ #
23
+
21
24
  @ap.command(name='version')
22
25
  def print_version(self) -> None:
23
26
  print(__about__.__version__)
@@ -30,21 +33,43 @@ class CliCli(ap.Cli):
30
33
  def print_home(self) -> None:
31
34
  print(sys.prefix)
32
35
 
33
- @ap.command(
34
- ap.arg('args', nargs=ap.REMAINDER),
35
- name='python',
36
- accepts_unknown=True,
37
- )
38
- def python_cmd(self) -> None:
36
+ #
37
+
38
+ def _passthrough_args_cmd(
39
+ self,
40
+ exe: str,
41
+ pre_args: ta.Sequence[str] = (),
42
+ post_args: ta.Sequence[str] = (),
43
+ ) -> ta.NoReturn:
39
44
  os.execvp(
40
- sys.executable,
45
+ exe,
41
46
  [
42
47
  sys.executable,
48
+ *pre_args,
43
49
  *self.unknown_args,
44
50
  *self.args.args,
51
+ *post_args,
45
52
  ],
46
53
  )
47
54
 
55
+ @ap.command(
56
+ ap.arg('args', nargs=ap.REMAINDER),
57
+ name='python',
58
+ accepts_unknown=True,
59
+ )
60
+ def python_cmd(self) -> None:
61
+ self._passthrough_args_cmd(sys.executable)
62
+
63
+ @ap.command(
64
+ ap.arg('args', nargs=ap.REMAINDER),
65
+ name='pip',
66
+ accepts_unknown=True,
67
+ )
68
+ def pip_cmd(self) -> None:
69
+ self._passthrough_args_cmd(sys.executable, ['-m', 'pip'])
70
+
71
+ #
72
+
48
73
  @ap.command(
49
74
  ap.arg('--url', default=DEFAULT_REINSTALL_URL),
50
75
  ap.arg('--local', action='store_true'),
@@ -242,7 +242,11 @@ class GitStatusState(enum.Enum):
242
242
  SUBMODULE_MODIFIED_CONTENT = 'm'
243
243
 
244
244
 
245
- _EXTRA_UNMERGED_GIT_STATUS_STATES: ta.FrozenSet[ta.Tuple[GitStatusState, GitStatusState]] = frozenset([
245
+ _UNMERGED_GIT_STATUS_STATES: ta.FrozenSet[GitStatusState] = frozenset([
246
+ GitStatusState.UPDATED_BUT_UNMERGED,
247
+ ])
248
+
249
+ _UNMERGED_GIT_STATUS_STATE_PAIRS: ta.FrozenSet[ta.Tuple[GitStatusState, GitStatusState]] = frozenset([
246
250
  (GitStatusState.ADDED, GitStatusState.ADDED),
247
251
  (GitStatusState.DELETED, GitStatusState.DELETED),
248
252
  ])
@@ -259,9 +263,9 @@ class GitStatusItem:
259
263
  @property
260
264
  def is_unmerged(self) -> bool:
261
265
  return (
262
- self.x is GitStatusState.UPDATED_BUT_UNMERGED or
263
- self.y is GitStatusState.UPDATED_BUT_UNMERGED or
264
- (self.x, self.y) in _EXTRA_UNMERGED_GIT_STATUS_STATES
266
+ self.x in _UNMERGED_GIT_STATUS_STATE_PAIRS or
267
+ self.y in _UNMERGED_GIT_STATUS_STATE_PAIRS or
268
+ (self.x, self.y) in _UNMERGED_GIT_STATUS_STATE_PAIRS
265
269
  )
266
270
 
267
271
  def __repr__(self) -> str:
@@ -27,7 +27,7 @@ PY_MAGIC_STYLE = MagicStyle(
27
27
 
28
28
  C_MAGIC_STYLE = MagicStyle(
29
29
  name='c',
30
- exts=frozenset(['c', 'cc', 'cpp']),
30
+ exts=frozenset(['c', 'cc', 'cpp', 'cu']),
31
31
  line_prefix='// ',
32
32
  block_prefix_suffix=('/* ', '*/'),
33
33
  )
@@ -62,7 +62,12 @@ def _check_cmd(args) -> None:
62
62
  for pc in pcs:
63
63
  async for v in pc.run():
64
64
  vs.append(v)
65
- print(v)
65
+ print('*** VIOLATION ***')
66
+ print(f'Seq: {len(vs)}')
67
+ print(f'Precheck: {v.pc}')
68
+ print(f'Message:')
69
+ print(v.msg.strip())
70
+ print()
66
71
 
67
72
  return vs
68
73
 
@@ -8,8 +8,7 @@ TODO:
8
8
  - create table paths(path varchar(1024); - norm, dedupe, index, etc (bonus points for 32bit key)
9
9
  - gviz
10
10
 
11
- http://www.logilab.org/856
12
- http://www.python.org/dev/peps/pep-0302/
11
+ https://www.python.org/dev/peps/pep-0302/
13
12
 
14
13
  start / end / cumulative / exclusive time / vm_rss / vm_vms
15
14
 
@@ -37,8 +37,7 @@ import typing as ta
37
37
 
38
38
 
39
39
  if sys.version_info < (3, 8):
40
- raise OSError(
41
- f'Requires python (3, 8), got {sys.version_info} from {sys.executable}') # noqa
40
+ raise OSError(f'Requires python (3, 8), got {sys.version_info} from {sys.executable}') # noqa
42
41
 
43
42
 
44
43
  ########################################
@@ -497,7 +496,7 @@ def cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
497
496
  # ../../../omlish/lite/check.py
498
497
 
499
498
 
500
- def check_isinstance(v: T, spec: ta.Union[ta.Type[T], tuple]) -> T:
499
+ def check_isinstance(v: ta.Any, spec: ta.Union[ta.Type[T], tuple]) -> T:
501
500
  if not isinstance(v, spec):
502
501
  raise TypeError(v)
503
502
  return v
@@ -509,6 +508,11 @@ def check_not_isinstance(v: T, spec: ta.Union[type, tuple]) -> T:
509
508
  return v
510
509
 
511
510
 
511
+ def check_none(v: T) -> None:
512
+ if v is not None:
513
+ raise ValueError(v)
514
+
515
+
512
516
  def check_not_none(v: ta.Optional[T]) -> T:
513
517
  if v is None:
514
518
  raise ValueError
@@ -1508,8 +1512,7 @@ REQUIRED_PYTHON_VERSION = (3, 8)
1508
1512
 
1509
1513
  def check_runtime_version() -> None:
1510
1514
  if sys.version_info < REQUIRED_PYTHON_VERSION:
1511
- raise OSError(
1512
- f'Requires python {REQUIRED_PYTHON_VERSION}, got {sys.version_info} from {sys.executable}') # noqa
1515
+ raise OSError(f'Requires python {REQUIRED_PYTHON_VERSION}, got {sys.version_info} from {sys.executable}') # noqa
1513
1516
 
1514
1517
 
1515
1518
  ########################################
@@ -70,8 +70,7 @@ import zipfile
70
70
 
71
71
 
72
72
  if sys.version_info < (3, 8):
73
- raise OSError(
74
- f'Requires python (3, 8), got {sys.version_info} from {sys.executable}') # noqa
73
+ raise OSError(f'Requires python (3, 8), got {sys.version_info} from {sys.executable}') # noqa
75
74
 
76
75
 
77
76
  ########################################
@@ -174,7 +173,7 @@ PY_MAGIC_STYLE = MagicStyle(
174
173
 
175
174
  C_MAGIC_STYLE = MagicStyle(
176
175
  name='c',
177
- exts=frozenset(['c', 'cc', 'cpp']),
176
+ exts=frozenset(['c', 'cc', 'cpp', 'cu']),
178
177
  line_prefix='// ',
179
178
  block_prefix_suffix=('/* ', '*/'),
180
179
  )
@@ -1787,7 +1786,7 @@ def cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
1787
1786
  # ../../../omlish/lite/check.py
1788
1787
 
1789
1788
 
1790
- def check_isinstance(v: T, spec: ta.Union[ta.Type[T], tuple]) -> T:
1789
+ def check_isinstance(v: ta.Any, spec: ta.Union[ta.Type[T], tuple]) -> T:
1791
1790
  if not isinstance(v, spec):
1792
1791
  raise TypeError(v)
1793
1792
  return v
@@ -1799,6 +1798,11 @@ def check_not_isinstance(v: T, spec: ta.Union[type, tuple]) -> T:
1799
1798
  return v
1800
1799
 
1801
1800
 
1801
+ def check_none(v: T) -> None:
1802
+ if v is not None:
1803
+ raise ValueError(v)
1804
+
1805
+
1802
1806
  def check_not_none(v: ta.Optional[T]) -> T:
1803
1807
  if v is None:
1804
1808
  raise ValueError
@@ -3377,8 +3381,7 @@ REQUIRED_PYTHON_VERSION = (3, 8)
3377
3381
 
3378
3382
  def check_runtime_version() -> None:
3379
3383
  if sys.version_info < REQUIRED_PYTHON_VERSION:
3380
- raise OSError(
3381
- f'Requires python {REQUIRED_PYTHON_VERSION}, got {sys.version_info} from {sys.executable}') # noqa
3384
+ raise OSError(f'Requires python {REQUIRED_PYTHON_VERSION}, got {sys.version_info} from {sys.executable}') # noqa
3382
3385
 
3383
3386
 
3384
3387
  ########################################
@@ -4007,7 +4010,11 @@ class GitStatusState(enum.Enum):
4007
4010
  SUBMODULE_MODIFIED_CONTENT = 'm'
4008
4011
 
4009
4012
 
4010
- _EXTRA_UNMERGED_GIT_STATUS_STATES: ta.FrozenSet[ta.Tuple[GitStatusState, GitStatusState]] = frozenset([
4013
+ _UNMERGED_GIT_STATUS_STATES: ta.FrozenSet[GitStatusState] = frozenset([
4014
+ GitStatusState.UPDATED_BUT_UNMERGED,
4015
+ ])
4016
+
4017
+ _UNMERGED_GIT_STATUS_STATE_PAIRS: ta.FrozenSet[ta.Tuple[GitStatusState, GitStatusState]] = frozenset([
4011
4018
  (GitStatusState.ADDED, GitStatusState.ADDED),
4012
4019
  (GitStatusState.DELETED, GitStatusState.DELETED),
4013
4020
  ])
@@ -4024,9 +4031,9 @@ class GitStatusItem:
4024
4031
  @property
4025
4032
  def is_unmerged(self) -> bool:
4026
4033
  return (
4027
- self.x is GitStatusState.UPDATED_BUT_UNMERGED or
4028
- self.y is GitStatusState.UPDATED_BUT_UNMERGED or
4029
- (self.x, self.y) in _EXTRA_UNMERGED_GIT_STATUS_STATES
4034
+ self.x in _UNMERGED_GIT_STATUS_STATE_PAIRS or
4035
+ self.y in _UNMERGED_GIT_STATUS_STATE_PAIRS or
4036
+ (self.x, self.y) in _UNMERGED_GIT_STATUS_STATE_PAIRS
4030
4037
  )
4031
4038
 
4032
4039
  def __repr__(self) -> str:
@@ -177,6 +177,8 @@ class Cli(ap.Cli):
177
177
  else:
178
178
  print(json.dumps_pretty([gsi_dct(gsi) for gsi in st]))
179
179
 
180
+ # Lazy helpers
181
+
180
182
  @ap.command(
181
183
  ap.arg('-m', '--message', default='--'),
182
184
  aliases=['acp'],
@@ -192,6 +194,13 @@ class Cli(ap.Cli):
192
194
 
193
195
  subprocess.check_call(['git', 'push'])
194
196
 
197
+ @ap.command(
198
+ aliases=['psu'],
199
+ )
200
+ def pull_submodule_update(self) -> None:
201
+ subprocess.check_call(['git', 'pull'])
202
+ subprocess.check_call(['git', 'submodule', 'update'])
203
+
195
204
 
196
205
  # @omlish-manifest
197
206
  _CLI_MODULE = CliModule('git', __name__)
@@ -1,4 +1,11 @@
1
1
  """
2
+ Imports given python modules, each in isolation, outputting for each:
3
+ - "time" - time taken
4
+ - "rss" - final RSS
5
+ - "imported" - imported modules in import order
6
+
7
+ Can be run on external python interpreters.
8
+
2
9
  TODO:
3
10
  - dump agg stats
4
11
  - graphviz
@@ -6,6 +13,7 @@ TODO:
6
13
  import argparse
7
14
  import dataclasses as dc
8
15
  import inspect
16
+ import itertools
9
17
  import json
10
18
  import os
11
19
  import re
@@ -14,6 +22,7 @@ import subprocess
14
22
  import sys
15
23
  import typing as ta
16
24
 
25
+ from omlish import check
17
26
  from omlish import concurrent as cu
18
27
  from omlish import lang
19
28
 
@@ -108,13 +117,7 @@ def run_one(
108
117
  ##
109
118
 
110
119
 
111
- def _find_specs(
112
- *roots: str,
113
- filters: ta.Iterable[str] | None = None,
114
- ) -> ta.Sequence[str]:
115
- filter_pats = [re.compile(f) for f in filters or []]
116
-
117
- out: list[str] = []
120
+ def _find_root_specs(*roots: str) -> ta.Iterator[str]:
118
121
  stk: list[str] = list(reversed(roots))
119
122
  while stk:
120
123
  cur = stk.pop()
@@ -134,21 +137,30 @@ def _find_specs(
134
137
  else:
135
138
  spec = cur
136
139
 
137
- if any(p.fullmatch(spec) for p in filter_pats):
138
- continue
139
-
140
- out.append(spec)
141
-
142
- return out
140
+ yield spec
143
141
 
144
142
 
145
143
  def run(
146
- *roots: str,
144
+ *,
145
+ roots: lang.SequenceNotStr[str] | None = None,
146
+ modules: lang.SequenceNotStr[str] | None = None,
147
+
147
148
  filters: ta.Iterable[str] | None = None,
148
149
  num_threads: int | None = 0,
150
+
149
151
  **kwargs: ta.Any,
150
152
  ) -> ta.Mapping[str, Item]:
151
- specs = _find_specs(*roots, filters=filters)
153
+ filter_pats = [re.compile(f) for f in filters or []]
154
+
155
+ specs: list[str] = []
156
+ for spec in itertools.chain(
157
+ *([_find_root_specs(*check.not_isinstance(roots, str))] if roots is not None else []),
158
+ *([check.not_isinstance(modules, str)] if modules is not None else []),
159
+ ):
160
+ if any(p.fullmatch(spec) for p in filter_pats):
161
+ continue
162
+
163
+ specs.append(spec)
152
164
 
153
165
  out: dict[str, Item] = {}
154
166
  with cu.new_executor(num_threads) as ex:
@@ -173,7 +185,8 @@ def _main() -> None:
173
185
  parser.add_argument('-f', '--filter', action='append')
174
186
  parser.add_argument('-t', '--filter-tests', action='store_true')
175
187
  parser.add_argument('--python', default=sys.executable)
176
- parser.add_argument('root', nargs='+')
188
+ parser.add_argument('-m', '--module', action='append')
189
+ parser.add_argument('root', nargs='*')
177
190
  args = parser.parse_args()
178
191
 
179
192
  filters = [*(args.filter or [])]
@@ -184,7 +197,8 @@ def _main() -> None:
184
197
  ])
185
198
 
186
199
  for item in run(
187
- *args.root,
200
+ roots=args.root,
201
+ modules=args.module,
188
202
  filters=filters,
189
203
  num_threads=args.jobs,
190
204
  python=args.python,
@@ -1,3 +1,7 @@
1
+ """
2
+ TODO:
3
+ - a general purpose profile tool lol - or is this for / in bootstrap?
4
+ """
1
5
  import os.path
2
6
  import subprocess
3
7
  import sys
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev122
3
+ Version: 0.0.0.dev124
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.dev122
15
+ Requires-Dist: omlish==0.0.0.dev124
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev122
1
+ omlish==0.0.0.dev124
2
2
 
3
3
  [all]
4
4
  black~=24.10
@@ -12,7 +12,7 @@ authors = [
12
12
  urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = {text = 'BSD-3-Clause'}
14
14
  requires-python = '>=3.12'
15
- version = '0.0.0.dev122'
15
+ version = '0.0.0.dev124'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -22,7 +22,7 @@ classifiers = [
22
22
  ]
23
23
  description = 'omdev'
24
24
  dependencies = [
25
- 'omlish == 0.0.0.dev122',
25
+ 'omlish == 0.0.0.dev124',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
@@ -95,4 +95,5 @@ exclude = [
95
95
  '*.h',
96
96
  '.manifests.json',
97
97
  'LICENSE',
98
+ 'LICENSE.txt',
98
99
  ]
File without changes
File without changes
File without changes
File without changes
File without changes