omdev 0.0.0.dev153__tar.gz → 0.0.0.dev155__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 (168) hide show
  1. {omdev-0.0.0.dev153/omdev.egg-info → omdev-0.0.0.dev155}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/.manifests.json +1 -1
  3. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/manifests/build.py +0 -1
  4. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/manifests/main.py +1 -0
  5. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/scripts/interp.py +16 -7
  6. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/scripts/pyproject.py +26 -12
  7. omdev-0.0.0.dev155/omdev/toml/__init__.py +1 -0
  8. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/docker.py +14 -5
  9. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/git.py +3 -3
  10. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155/omdev.egg-info}/PKG-INFO +2 -2
  11. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev.egg-info/requires.txt +1 -1
  12. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/pyproject.toml +2 -2
  13. omdev-0.0.0.dev153/omdev/tools/pawk/__init__.py +0 -0
  14. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/LICENSE +0 -0
  15. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/MANIFEST.in +0 -0
  16. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/README.rst +0 -0
  17. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/__about__.py +0 -0
  18. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/__init__.py +0 -0
  19. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/amalg/__init__.py +0 -0
  20. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/amalg/__main__.py +0 -0
  21. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/amalg/amalg.py +0 -0
  22. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/antlr/__init__.py +0 -0
  23. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/antlr/consts.py +0 -0
  24. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/antlr/gen.py +0 -0
  25. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/bracepy.py +0 -0
  26. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/__init__.py +0 -0
  27. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/compute/__init__.py +0 -0
  28. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/compute/cache.py +0 -0
  29. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/compute/contexts.py +0 -0
  30. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/compute/currents.py +0 -0
  31. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/compute/fns.py +0 -0
  32. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/compute/resolvers.py +0 -0
  33. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/compute/storage.py +0 -0
  34. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/compute/types.py +0 -0
  35. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/data/__init__.py +0 -0
  36. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/data/actions.py +0 -0
  37. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/data/cache.py +0 -0
  38. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/data/consts.py +0 -0
  39. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/data/defaults.py +0 -0
  40. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/data/manifests.py +0 -0
  41. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cache/data/specs.py +0 -0
  42. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/__init__.py +0 -0
  43. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_boilerplate.cc +0 -0
  44. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/LICENSE +0 -0
  45. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/__init__.py +0 -0
  46. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/build_ext.py +0 -0
  47. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  48. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  49. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/compilers/options.py +0 -0
  50. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  51. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/dir_util.py +0 -0
  52. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/errors.py +0 -0
  53. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/extension.py +0 -0
  54. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/file_util.py +0 -0
  55. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/modified.py +0 -0
  56. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/spawn.py +0 -0
  57. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/sysconfig.py +0 -0
  58. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/util.py +0 -0
  59. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/_distutils/version.py +0 -0
  60. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/build.py +0 -0
  61. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/cmake.py +0 -0
  62. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/importhook.py +0 -0
  63. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/magic.py +0 -0
  64. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cexts/scan.py +0 -0
  65. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/classdot.py +0 -0
  66. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cli/__init__.py +0 -0
  67. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cli/__main__.py +0 -0
  68. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cli/_pathhack.py +0 -0
  69. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cli/clicli.py +0 -0
  70. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cli/install.py +0 -0
  71. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cli/main.py +0 -0
  72. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cli/managers.py +0 -0
  73. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cli/types.py +0 -0
  74. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/clipboard/__init__.py +0 -0
  75. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/clipboard/clipboard.py +0 -0
  76. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/clipboard/darwin_cf.py +0 -0
  77. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/clipboard/linux_x11.py +0 -0
  78. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/cmake.py +0 -0
  79. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/findimports.py +0 -0
  80. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/git.py +0 -0
  81. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/imgur.py +0 -0
  82. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/interp/__init__.py +0 -0
  83. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/interp/__main__.py +0 -0
  84. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/interp/cli.py +0 -0
  85. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/interp/inspect.py +0 -0
  86. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/interp/providers.py +0 -0
  87. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/interp/pyenv.py +0 -0
  88. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/interp/resolvers.py +0 -0
  89. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/interp/standalone.py +0 -0
  90. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/interp/system.py +0 -0
  91. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/interp/types.py +0 -0
  92. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/magic/__init__.py +0 -0
  93. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/magic/find.py +0 -0
  94. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/magic/magic.py +0 -0
  95. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/magic/prepare.py +0 -0
  96. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/magic/styles.py +0 -0
  97. {omdev-0.0.0.dev153/omdev/pyproject → omdev-0.0.0.dev155/omdev/manifests}/__init__.py +0 -0
  98. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/manifests/__main__.py +0 -0
  99. {omdev-0.0.0.dev153/omdev/manifests → omdev-0.0.0.dev155/omdev/mypy}/__init__.py +0 -0
  100. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/mypy/debug.py +0 -0
  101. {omdev-0.0.0.dev153/omdev/mypy → omdev-0.0.0.dev155/omdev/packaging}/__init__.py +0 -0
  102. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/packaging/marshal.py +0 -0
  103. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/packaging/names.py +0 -0
  104. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/packaging/requires.py +0 -0
  105. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/packaging/specifiers.py +0 -0
  106. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/packaging/versions.py +0 -0
  107. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/pip.py +0 -0
  108. {omdev-0.0.0.dev153/omdev/packaging → omdev-0.0.0.dev155/omdev/precheck}/__init__.py +0 -0
  109. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/precheck/__main__.py +0 -0
  110. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/precheck/base.py +0 -0
  111. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/precheck/git.py +0 -0
  112. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/precheck/lite.py +0 -0
  113. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/precheck/main.py +0 -0
  114. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/precheck/manifests.py +0 -0
  115. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/precheck/scripts.py +0 -0
  116. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/ptk/__init__.py +0 -0
  117. {omdev-0.0.0.dev153/omdev/precheck → omdev-0.0.0.dev155/omdev/ptk/apps}/__init__.py +0 -0
  118. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/ptk/apps/ncdu.py +0 -0
  119. {omdev-0.0.0.dev153/omdev/ptk/apps → omdev-0.0.0.dev155/omdev/pycharm}/__init__.py +0 -0
  120. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/pycharm/__main__.py +0 -0
  121. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/pycharm/cli.py +0 -0
  122. {omdev-0.0.0.dev153/omdev/toml → omdev-0.0.0.dev155/omdev/pyproject}/__init__.py +0 -0
  123. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/pyproject/__main__.py +0 -0
  124. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/pyproject/cexts.py +0 -0
  125. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/pyproject/cli.py +0 -0
  126. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/pyproject/configs.py +0 -0
  127. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/pyproject/pkg.py +0 -0
  128. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/pyproject/reqs.py +0 -0
  129. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/pyproject/venvs.py +0 -0
  130. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/revisions.py +0 -0
  131. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/scripts/__init__.py +0 -0
  132. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/scripts/bumpversion.py +0 -0
  133. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/scripts/execrss.py +0 -0
  134. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/scripts/exectime.py +0 -0
  135. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/scripts/importtrace.py +0 -0
  136. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/scripts/slowcat.py +0 -0
  137. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/scripts/tmpexec.py +0 -0
  138. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/secrets.py +0 -0
  139. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tokens.py +0 -0
  140. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/toml/parser.py +0 -0
  141. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/toml/writer.py +0 -0
  142. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/__init__.py +0 -0
  143. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/cloc.py +0 -0
  144. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/doc.py +0 -0
  145. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/importscan.py +0 -0
  146. {omdev-0.0.0.dev153/omdev/pycharm → omdev-0.0.0.dev155/omdev/tools/json}/__init__.py +0 -0
  147. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/json/__main__.py +0 -0
  148. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/json/cli.py +0 -0
  149. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/json/formats.py +0 -0
  150. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/json/io.py +0 -0
  151. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/json/parsing.py +0 -0
  152. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/json/processing.py +0 -0
  153. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/json/rendering.py +0 -0
  154. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/mkrelimp.py +0 -0
  155. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/notebook.py +0 -0
  156. {omdev-0.0.0.dev153/omdev/tools/json → omdev-0.0.0.dev155/omdev/tools/pawk}/__init__.py +0 -0
  157. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/pawk/__main__.py +0 -0
  158. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/pawk/pawk.py +0 -0
  159. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/pip.py +0 -0
  160. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/prof.py +0 -0
  161. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/qr.py +0 -0
  162. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/tools/sqlrepl.py +0 -0
  163. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev/wheelfile.py +0 -0
  164. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev.egg-info/SOURCES.txt +0 -0
  165. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev.egg-info/dependency_links.txt +0 -0
  166. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev.egg-info/entry_points.txt +0 -0
  167. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/omdev.egg-info/top_level.txt +0 -0
  168. {omdev-0.0.0.dev153 → omdev-0.0.0.dev155}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev153
3
+ Version: 0.0.0.dev155
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.dev153
15
+ Requires-Dist: omlish==0.0.0.dev155
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -255,7 +255,7 @@
255
255
  "module": ".tools.docker",
256
256
  "attr": "_CLI_MODULE",
257
257
  "file": "omdev/tools/docker.py",
258
- "line": 249,
258
+ "line": 258,
259
259
  "value": {
260
260
  "$.cli.types.CliModule": {
261
261
  "cmd_name": "docker",
@@ -1,5 +1,4 @@
1
1
  # ruff: noqa: UP006 UP007
2
- # @omlish-lite
3
2
  """
4
3
  TODO:
5
4
  - verify classes instantiate
@@ -1,3 +1,4 @@
1
+ # ruff: noqa: UP006 UP007
1
2
  import argparse
2
3
  import asyncio
3
4
  import dataclasses as dc
@@ -560,8 +560,6 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
560
560
  """
561
561
  TODO:
562
562
  - def maybe(v: lang.Maybe[T])
563
- - patch / override lite.check ?
564
- - checker interface?
565
563
  """
566
564
 
567
565
 
@@ -2408,6 +2406,13 @@ async def asyncio_subprocess_communicate(
2408
2406
  return await AsyncioProcessCommunicator(proc).communicate(input, timeout) # noqa
2409
2407
 
2410
2408
 
2409
+ @dc.dataclass(frozen=True)
2410
+ class AsyncioSubprocessOutput:
2411
+ proc: asyncio.subprocess.Process
2412
+ stdout: ta.Optional[bytes]
2413
+ stderr: ta.Optional[bytes]
2414
+
2415
+
2411
2416
  async def asyncio_subprocess_run(
2412
2417
  *args: str,
2413
2418
  input: ta.Any = None, # noqa
@@ -2415,7 +2420,7 @@ async def asyncio_subprocess_run(
2415
2420
  check: bool = False, # noqa
2416
2421
  capture_output: ta.Optional[bool] = None,
2417
2422
  **kwargs: ta.Any,
2418
- ) -> ta.Tuple[ta.Optional[bytes], ta.Optional[bytes]]:
2423
+ ) -> AsyncioSubprocessOutput:
2419
2424
  if capture_output:
2420
2425
  kwargs.setdefault('stdout', subprocess.PIPE)
2421
2426
  kwargs.setdefault('stderr', subprocess.PIPE)
@@ -2434,7 +2439,11 @@ async def asyncio_subprocess_run(
2434
2439
  stderr=stderr,
2435
2440
  )
2436
2441
 
2437
- return stdout, stderr
2442
+ return AsyncioSubprocessOutput(
2443
+ proc,
2444
+ stdout,
2445
+ stderr,
2446
+ )
2438
2447
 
2439
2448
 
2440
2449
  ##
@@ -2447,7 +2456,7 @@ async def asyncio_subprocess_check_call(
2447
2456
  timeout: ta.Optional[float] = None,
2448
2457
  **kwargs: ta.Any,
2449
2458
  ) -> None:
2450
- _, _ = await asyncio_subprocess_run(
2459
+ await asyncio_subprocess_run(
2451
2460
  *args,
2452
2461
  stdout=stdout,
2453
2462
  input=input,
@@ -2463,7 +2472,7 @@ async def asyncio_subprocess_check_output(
2463
2472
  timeout: ta.Optional[float] = None,
2464
2473
  **kwargs: ta.Any,
2465
2474
  ) -> bytes:
2466
- stdout, stderr = await asyncio_subprocess_run(
2475
+ out = await asyncio_subprocess_run(
2467
2476
  *args,
2468
2477
  stdout=asyncio.subprocess.PIPE,
2469
2478
  input=input,
@@ -2472,7 +2481,7 @@ async def asyncio_subprocess_check_output(
2472
2481
  **kwargs,
2473
2482
  )
2474
2483
 
2475
- return check.not_none(stdout)
2484
+ return check.not_none(out.stdout)
2476
2485
 
2477
2486
 
2478
2487
  async def asyncio_subprocess_check_output_str(*args: str, **kwargs: ta.Any) -> str:
@@ -1852,8 +1852,6 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
1852
1852
  """
1853
1853
  TODO:
1854
1854
  - def maybe(v: lang.Maybe[T])
1855
- - patch / override lite.check ?
1856
- - checker interface?
1857
1855
  """
1858
1856
 
1859
1857
 
@@ -3756,7 +3754,8 @@ def configure_standard_logging(
3756
3754
  """
3757
3755
  TODO:
3758
3756
  - pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
3759
- - nonstrict toggle
3757
+ - namedtuple
3758
+ - literals
3760
3759
  """
3761
3760
 
3762
3761
 
@@ -4046,14 +4045,18 @@ class ObjMarshalerManager:
4046
4045
  ) -> ObjMarshaler:
4047
4046
  if isinstance(ty, type):
4048
4047
  if abc.ABC in ty.__bases__:
4049
- return PolymorphicObjMarshaler.of([ # type: ignore
4048
+ impls = [ity for ity in deep_subclasses(ty) if abc.ABC not in ity.__bases__] # type: ignore
4049
+ if all(ity.__qualname__.endswith(ty.__name__) for ity in impls):
4050
+ ins = {ity: snake_case(ity.__qualname__[:-len(ty.__name__)]) for ity in impls}
4051
+ else:
4052
+ ins = {ity: ity.__qualname__ for ity in impls}
4053
+ return PolymorphicObjMarshaler.of([
4050
4054
  PolymorphicObjMarshaler.Impl(
4051
4055
  ity,
4052
- ity.__qualname__,
4056
+ itn,
4053
4057
  rec(ity),
4054
4058
  )
4055
- for ity in deep_subclasses(ty)
4056
- if abc.ABC not in ity.__bases__
4059
+ for ity, itn in ins.items()
4057
4060
  ])
4058
4061
 
4059
4062
  if issubclass(ty, enum.Enum):
@@ -5222,6 +5225,13 @@ async def asyncio_subprocess_communicate(
5222
5225
  return await AsyncioProcessCommunicator(proc).communicate(input, timeout) # noqa
5223
5226
 
5224
5227
 
5228
+ @dc.dataclass(frozen=True)
5229
+ class AsyncioSubprocessOutput:
5230
+ proc: asyncio.subprocess.Process
5231
+ stdout: ta.Optional[bytes]
5232
+ stderr: ta.Optional[bytes]
5233
+
5234
+
5225
5235
  async def asyncio_subprocess_run(
5226
5236
  *args: str,
5227
5237
  input: ta.Any = None, # noqa
@@ -5229,7 +5239,7 @@ async def asyncio_subprocess_run(
5229
5239
  check: bool = False, # noqa
5230
5240
  capture_output: ta.Optional[bool] = None,
5231
5241
  **kwargs: ta.Any,
5232
- ) -> ta.Tuple[ta.Optional[bytes], ta.Optional[bytes]]:
5242
+ ) -> AsyncioSubprocessOutput:
5233
5243
  if capture_output:
5234
5244
  kwargs.setdefault('stdout', subprocess.PIPE)
5235
5245
  kwargs.setdefault('stderr', subprocess.PIPE)
@@ -5248,7 +5258,11 @@ async def asyncio_subprocess_run(
5248
5258
  stderr=stderr,
5249
5259
  )
5250
5260
 
5251
- return stdout, stderr
5261
+ return AsyncioSubprocessOutput(
5262
+ proc,
5263
+ stdout,
5264
+ stderr,
5265
+ )
5252
5266
 
5253
5267
 
5254
5268
  ##
@@ -5261,7 +5275,7 @@ async def asyncio_subprocess_check_call(
5261
5275
  timeout: ta.Optional[float] = None,
5262
5276
  **kwargs: ta.Any,
5263
5277
  ) -> None:
5264
- _, _ = await asyncio_subprocess_run(
5278
+ await asyncio_subprocess_run(
5265
5279
  *args,
5266
5280
  stdout=stdout,
5267
5281
  input=input,
@@ -5277,7 +5291,7 @@ async def asyncio_subprocess_check_output(
5277
5291
  timeout: ta.Optional[float] = None,
5278
5292
  **kwargs: ta.Any,
5279
5293
  ) -> bytes:
5280
- stdout, stderr = await asyncio_subprocess_run(
5294
+ out = await asyncio_subprocess_run(
5281
5295
  *args,
5282
5296
  stdout=asyncio.subprocess.PIPE,
5283
5297
  input=input,
@@ -5286,7 +5300,7 @@ async def asyncio_subprocess_check_output(
5286
5300
  **kwargs,
5287
5301
  )
5288
5302
 
5289
- return check.not_none(stdout)
5303
+ return check.not_none(out.stdout)
5290
5304
 
5291
5305
 
5292
5306
  async def asyncio_subprocess_check_output_str(*args: str, **kwargs: ta.Any) -> str:
@@ -0,0 +1 @@
1
+ # @omlish-lite
@@ -232,19 +232,28 @@ class Cli(ap.Cli):
232
232
 
233
233
  print(f'{svc_name}: {lt}')
234
234
 
235
+ #
236
+
235
237
  @ap.command()
236
238
  def dockly(self) -> None:
237
239
  os.execl(
238
240
  exe := docker_exe(),
239
241
  exe,
240
- 'run',
241
- '-it',
242
- '--rm',
243
- '-v',
244
- '/var/run/docker.sock:/var/run/docker.sock',
242
+ 'run', '-it', '--rm',
243
+ '-v', '/var/run/docker.sock:/var/run/docker.sock',
245
244
  'lirantal/dockly',
246
245
  )
247
246
 
247
+ @ap.command()
248
+ def lazy(self) -> None:
249
+ os.execl(
250
+ exe := docker_exe(),
251
+ exe,
252
+ 'run', '-it', '--rm',
253
+ '-v', '/var/run/docker.sock:/var/run/docker.sock',
254
+ 'lazyteam/lazydocker',
255
+ )
256
+
248
257
 
249
258
  # @omlish-manifest
250
259
  _CLI_MODULE = CliModule('docker', __name__)
@@ -119,10 +119,10 @@ class Cli(ap.Cli):
119
119
  day_rev = check.not_none(get_first_commit_of_day(rev))
120
120
  base_rev = rev_parse(f'{day_rev}~1')
121
121
 
122
- if self.args.diff or self.args.diff_stat:
123
- os.execvp('git', ['git', 'diff', *(['--stat'] if self.args.diff_stat else []), base_rev, rev])
122
+ if self.args.diff or self.args.stat:
123
+ os.execvp('git', ['git', 'diff', *(['--stat'] if self.args.stat else []), base_rev, rev])
124
124
 
125
- elif self.args.github:
125
+ elif self.args.github or self.args.open:
126
126
  rm_url = subprocess.check_output(['git', 'remote', 'get-url', 'origin']).decode('utf-8').strip()
127
127
 
128
128
  if rm_url.startswith(git_pfx := 'git@github.com:'):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev153
3
+ Version: 0.0.0.dev155
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.dev153
15
+ Requires-Dist: omlish==0.0.0.dev155
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.dev153
1
+ omlish==0.0.0.dev155
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.dev153'
15
+ version = '0.0.0.dev155'
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.dev153',
25
+ 'omlish == 0.0.0.dev155',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes