omdev 0.0.0.dev225__tar.gz → 0.0.0.dev226__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.
Files changed (257) hide show
  1. {omdev-0.0.0.dev225/omdev.egg-info → omdev-0.0.0.dev226}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/ci.py +280 -29
  3. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/interp.py +274 -28
  4. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/pyproject.py +280 -29
  5. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226/omdev.egg-info}/PKG-INFO +2 -2
  6. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev.egg-info/requires.txt +1 -1
  7. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/pyproject.toml +2 -2
  8. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/LICENSE +0 -0
  9. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/MANIFEST.in +0 -0
  10. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/README.rst +0 -0
  11. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/.manifests.json +0 -0
  12. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/__about__.py +0 -0
  13. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/__init__.py +0 -0
  14. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/__init__.py +0 -0
  15. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/__main__.py +0 -0
  16. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/gen.py +0 -0
  17. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/imports.py +0 -0
  18. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/main.py +0 -0
  19. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/manifests.py +0 -0
  20. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/resources.py +0 -0
  21. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/srcfiles.py +0 -0
  22. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/strip.py +0 -0
  23. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/types.py +0 -0
  24. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/amalg/typing.py +0 -0
  25. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/antlr/__init__.py +0 -0
  26. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/antlr/consts.py +0 -0
  27. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/antlr/gen.py +0 -0
  28. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/bracepy.py +0 -0
  29. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/__init__.py +0 -0
  30. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/__init__.py +0 -0
  31. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/cache.py +0 -0
  32. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/contexts.py +0 -0
  33. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/currents.py +0 -0
  34. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/fns.py +0 -0
  35. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/resolvers.py +0 -0
  36. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/storage.py +0 -0
  37. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/compute/types.py +0 -0
  38. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/__init__.py +0 -0
  39. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/actions.py +0 -0
  40. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/cache.py +0 -0
  41. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/consts.py +0 -0
  42. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/defaults.py +0 -0
  43. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/manifests.py +0 -0
  44. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cache/data/specs.py +0 -0
  45. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cc/__init__.py +0 -0
  46. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cc/__main__.py +0 -0
  47. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cc/cdeps.py +0 -0
  48. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cc/cdeps.toml +0 -0
  49. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cc/cli.py +0 -0
  50. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/__init__.py +0 -0
  51. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_boilerplate.cc +0 -0
  52. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/LICENSE +0 -0
  53. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/__init__.py +0 -0
  54. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/build_ext.py +0 -0
  55. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  56. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  57. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/compilers/options.py +0 -0
  58. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  59. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/dir_util.py +0 -0
  60. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/errors.py +0 -0
  61. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/extension.py +0 -0
  62. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/file_util.py +0 -0
  63. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/modified.py +0 -0
  64. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/spawn.py +0 -0
  65. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/sysconfig.py +0 -0
  66. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/util.py +0 -0
  67. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/_distutils/version.py +0 -0
  68. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/build.py +0 -0
  69. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/cmake.py +0 -0
  70. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/importhook.py +0 -0
  71. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/magic.py +0 -0
  72. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cexts/scan.py +0 -0
  73. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/__init__.py +0 -0
  74. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/__main__.py +0 -0
  75. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/cache.py +0 -0
  76. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/ci.py +0 -0
  77. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/cli.py +0 -0
  78. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/compose.py +0 -0
  79. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/consts.py +0 -0
  80. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/__init__.py +0 -0
  81. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/buildcaching.py +0 -0
  82. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/cache.py +0 -0
  83. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/cacheserved.py +0 -0
  84. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/cmds.py +0 -0
  85. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/dataserver.py +0 -0
  86. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/imagepulling.py +0 -0
  87. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/inject.py +0 -0
  88. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/packing.py +0 -0
  89. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/repositories.py +0 -0
  90. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/docker/utils.py +0 -0
  91. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/__init__.py +0 -0
  92. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/api.py +0 -0
  93. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/bootstrap.py +0 -0
  94. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/cache.py +0 -0
  95. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/cli.py +0 -0
  96. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/client.py +0 -0
  97. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/env.py +0 -0
  98. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/github/inject.py +0 -0
  99. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/inject.py +0 -0
  100. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/requirements.py +0 -0
  101. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/shell.py +0 -0
  102. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ci/utils.py +0 -0
  103. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/classdot.py +0 -0
  104. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/__init__.py +0 -0
  105. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/__main__.py +0 -0
  106. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/_pathhack.py +0 -0
  107. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/clicli.py +0 -0
  108. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/install.py +0 -0
  109. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/main.py +0 -0
  110. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/managers.py +0 -0
  111. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cli/types.py +0 -0
  112. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/clipboard/__init__.py +0 -0
  113. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/clipboard/clipboard.py +0 -0
  114. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/clipboard/darwin_cf.py +0 -0
  115. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/clipboard/linux_x11.py +0 -0
  116. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/cmake.py +0 -0
  117. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/__init__.py +0 -0
  118. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/handlers.py +0 -0
  119. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/http.py +0 -0
  120. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/routes.py +0 -0
  121. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/server.py +0 -0
  122. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/dataserver/targets.py +0 -0
  123. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/findimports.py +0 -0
  124. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/git/__init__.py +0 -0
  125. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/git/revisions.py +0 -0
  126. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/git/shallow.py +0 -0
  127. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/git/status.py +0 -0
  128. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/imgur.py +0 -0
  129. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/__init__.py +0 -0
  130. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/__main__.py +0 -0
  131. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/cli.py +0 -0
  132. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/default.py +0 -0
  133. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/inject.py +0 -0
  134. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/inspect.py +0 -0
  135. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/__init__.py +0 -0
  136. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/base.py +0 -0
  137. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/inject.py +0 -0
  138. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/running.py +0 -0
  139. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/standalone.py +0 -0
  140. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/providers/system.py +0 -0
  141. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/pyenv/__init__.py +0 -0
  142. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/pyenv/inject.py +0 -0
  143. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/pyenv/install.py +0 -0
  144. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/pyenv/provider.py +0 -0
  145. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/pyenv/pyenv.py +0 -0
  146. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/resolvers.py +0 -0
  147. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/types.py +0 -0
  148. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/uv/__init__.py +0 -0
  149. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/uv/inject.py +0 -0
  150. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/uv/provider.py +0 -0
  151. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/uv/uv.py +0 -0
  152. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/interp/venvs.py +0 -0
  153. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/__init__.py +0 -0
  154. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/__main__.py +0 -0
  155. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/cli.py +0 -0
  156. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/find.py +0 -0
  157. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/magic.py +0 -0
  158. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/prepare.py +0 -0
  159. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/magic/styles.py +0 -0
  160. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/manifests/__init__.py +0 -0
  161. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/manifests/__main__.py +0 -0
  162. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/manifests/build.py +0 -0
  163. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/manifests/main.py +0 -0
  164. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/mypy/__init__.py +0 -0
  165. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/mypy/debug.py +0 -0
  166. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/__init__.py +0 -0
  167. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/building.py +0 -0
  168. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/compression.py +0 -0
  169. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/data.py +0 -0
  170. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/datarefs.py +0 -0
  171. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/dataserver.py +0 -0
  172. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/loading.py +0 -0
  173. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/media.py +0 -0
  174. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/pack/__init__.py +0 -0
  175. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/pack/packing.py +0 -0
  176. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/pack/repositories.py +0 -0
  177. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/pack/unpacking.py +0 -0
  178. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/repositories.py +0 -0
  179. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/oci/tars.py +0 -0
  180. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/__init__.py +0 -0
  181. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/marshal.py +0 -0
  182. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/names.py +0 -0
  183. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/requires.py +0 -0
  184. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/specifiers.py +0 -0
  185. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/packaging/versions.py +0 -0
  186. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pip.py +0 -0
  187. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/__init__.py +0 -0
  188. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/__main__.py +0 -0
  189. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/base.py +0 -0
  190. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/git.py +0 -0
  191. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/lite.py +0 -0
  192. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/main.py +0 -0
  193. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/manifests.py +0 -0
  194. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/precheck/scripts.py +0 -0
  195. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ptk/__init__.py +0 -0
  196. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ptk/apps/__init__.py +0 -0
  197. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/ptk/apps/ncdu.py +0 -0
  198. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pycharm/__init__.py +0 -0
  199. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pycharm/__main__.py +0 -0
  200. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pycharm/cli.py +0 -0
  201. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/__init__.py +0 -0
  202. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/__main__.py +0 -0
  203. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/cexts.py +0 -0
  204. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/cli.py +0 -0
  205. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/configs.py +0 -0
  206. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/inject.py +0 -0
  207. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/pkg.py +0 -0
  208. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/reqs.py +0 -0
  209. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/resources/__init__.py +0 -0
  210. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/resources/docker-dev.sh +0 -0
  211. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/resources/python.sh +0 -0
  212. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/pyproject/venvs.py +0 -0
  213. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/revisions.py +0 -0
  214. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/__init__.py +0 -0
  215. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/bumpversion.py +0 -0
  216. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/execrss.py +0 -0
  217. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/exectime.py +0 -0
  218. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/importtrace.py +0 -0
  219. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/slowcat.py +0 -0
  220. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/scripts/tmpexec.py +0 -0
  221. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/secrets.py +0 -0
  222. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tagstrings.py +0 -0
  223. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tokens/__init__.py +0 -0
  224. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tokens/all.py +0 -0
  225. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tokens/tokenizert.py +0 -0
  226. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tokens/utils.py +0 -0
  227. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/__init__.py +0 -0
  228. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/cloc.py +0 -0
  229. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/doc.py +0 -0
  230. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/docker.py +0 -0
  231. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/git.py +0 -0
  232. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/importscan.py +0 -0
  233. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/__init__.py +0 -0
  234. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/__main__.py +0 -0
  235. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/cli.py +0 -0
  236. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/formats.py +0 -0
  237. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/io.py +0 -0
  238. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/parsing.py +0 -0
  239. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/processing.py +0 -0
  240. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/json/rendering.py +0 -0
  241. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/linehisto.py +0 -0
  242. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/mkenv.py +0 -0
  243. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/mkrelimp.py +0 -0
  244. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/notebook.py +0 -0
  245. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/pawk/__init__.py +0 -0
  246. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/pawk/__main__.py +0 -0
  247. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/pawk/pawk.py +0 -0
  248. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/pip.py +0 -0
  249. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/prof.py +0 -0
  250. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/qr.py +0 -0
  251. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/tools/sqlrepl.py +0 -0
  252. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev/wheelfile.py +0 -0
  253. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev.egg-info/SOURCES.txt +0 -0
  254. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev.egg-info/dependency_links.txt +0 -0
  255. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev.egg-info/entry_points.txt +0 -0
  256. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/omdev.egg-info/top_level.txt +0 -0
  257. {omdev-0.0.0.dev225 → omdev-0.0.0.dev226}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: omdev
3
- Version: 0.0.0.dev225
3
+ Version: 0.0.0.dev226
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.dev225
15
+ Requires-Dist: omlish==0.0.0.dev226
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -64,9 +64,6 @@ T = ta.TypeVar('T')
64
64
  # ../../omlish/asyncs/asyncio/asyncio.py
65
65
  CallableT = ta.TypeVar('CallableT', bound=ta.Callable)
66
66
 
67
- # ../../omlish/asyncs/asyncio/timeouts.py
68
- AwaitableT = ta.TypeVar('AwaitableT', bound=ta.Awaitable)
69
-
70
67
  # ../../omlish/lite/check.py
71
68
  SizedT = ta.TypeVar('SizedT', bound=ta.Sized)
72
69
  CheckMessage = ta.Union[str, ta.Callable[..., ta.Optional[str]], None] # ta.TypeAlias
@@ -75,9 +72,15 @@ CheckOnRaiseFn = ta.Callable[[Exception], None] # ta.TypeAlias
75
72
  CheckExceptionFactory = ta.Callable[..., Exception] # ta.TypeAlias
76
73
  CheckArgsRenderer = ta.Callable[..., ta.Optional[str]] # ta.TypeAlias
77
74
 
75
+ # ../../omlish/lite/timeouts.py
76
+ TimeoutLike = ta.Union['Timeout', 'Timeout.Default', ta.Iterable['TimeoutLike'], float] # ta.TypeAlias
77
+
78
78
  # ../../omlish/argparse/cli.py
79
79
  ArgparseCmdFn = ta.Callable[[], ta.Optional[int]] # ta.TypeAlias
80
80
 
81
+ # ../../omlish/asyncs/asyncio/timeouts.py
82
+ AwaitableT = ta.TypeVar('AwaitableT', bound=ta.Awaitable)
83
+
81
84
  # ../../omlish/lite/contextmanagers.py
82
85
  ExitStackedT = ta.TypeVar('ExitStackedT', bound='ExitStacked')
83
86
  AsyncExitStackedT = ta.TypeVar('AsyncExitStackedT', bound='AsyncExitStacked')
@@ -245,19 +248,6 @@ async def asyncio_wait_concurrent(
245
248
  return [task.result() for task in done]
246
249
 
247
250
 
248
- ########################################
249
- # ../../../omlish/asyncs/asyncio/timeouts.py
250
-
251
-
252
- def asyncio_maybe_timeout(
253
- fut: AwaitableT,
254
- timeout: ta.Optional[float] = None,
255
- ) -> AwaitableT:
256
- if timeout is not None:
257
- fut = asyncio.wait_for(fut, timeout) # type: ignore
258
- return fut
259
-
260
-
261
251
  ########################################
262
252
  # ../../../omlish/lite/cached.py
263
253
 
@@ -1057,6 +1047,205 @@ def format_num_bytes(num_bytes: int) -> str:
1057
1047
  return f'{num_bytes / 1024 ** (len(FORMAT_NUM_BYTES_SUFFIXES) - 1):.2f}{FORMAT_NUM_BYTES_SUFFIXES[-1]}'
1058
1048
 
1059
1049
 
1050
+ ########################################
1051
+ # ../../../omlish/lite/timeouts.py
1052
+ """
1053
+ TODO:
1054
+ - Event (/ Predicate)
1055
+ """
1056
+
1057
+
1058
+ ##
1059
+
1060
+
1061
+ class Timeout(abc.ABC):
1062
+ @property
1063
+ @abc.abstractmethod
1064
+ def can_expire(self) -> bool:
1065
+ """Indicates whether or not this timeout will ever expire."""
1066
+
1067
+ raise NotImplementedError
1068
+
1069
+ @abc.abstractmethod
1070
+ def expired(self) -> bool:
1071
+ """Return whether or not this timeout has expired."""
1072
+
1073
+ raise NotImplementedError
1074
+
1075
+ @abc.abstractmethod
1076
+ def remaining(self) -> float:
1077
+ """Returns the time (in seconds) remaining until the timeout expires. May be negative and/or infinite."""
1078
+
1079
+ raise NotImplementedError
1080
+
1081
+ @abc.abstractmethod
1082
+ def __call__(self) -> float:
1083
+ """Returns the time (in seconds) remaining until the timeout expires, or raises if the timeout has expired."""
1084
+
1085
+ raise NotImplementedError
1086
+
1087
+ @abc.abstractmethod
1088
+ def or_(self, o: ta.Any) -> ta.Any:
1089
+ """Evaluates time remaining via remaining() if this timeout can expire, otherwise returns `o`."""
1090
+
1091
+ raise NotImplementedError
1092
+
1093
+ #
1094
+
1095
+ @classmethod
1096
+ def _now(cls) -> float:
1097
+ return time.time()
1098
+
1099
+ #
1100
+
1101
+ class Default:
1102
+ def __new__(cls, *args, **kwargs): # noqa
1103
+ raise TypeError
1104
+
1105
+ class _NOT_SPECIFIED: # noqa
1106
+ def __new__(cls, *args, **kwargs): # noqa
1107
+ raise TypeError
1108
+
1109
+ @classmethod
1110
+ def of(
1111
+ cls,
1112
+ obj: ta.Optional[TimeoutLike],
1113
+ default: ta.Union[TimeoutLike, ta.Type[_NOT_SPECIFIED]] = _NOT_SPECIFIED,
1114
+ ) -> 'Timeout':
1115
+ if obj is None:
1116
+ return InfiniteTimeout()
1117
+
1118
+ elif isinstance(obj, Timeout):
1119
+ return obj
1120
+
1121
+ elif isinstance(obj, (float, int)):
1122
+ return DeadlineTimeout(cls._now() + obj)
1123
+
1124
+ elif isinstance(obj, ta.Iterable):
1125
+ return CompositeTimeout(*[Timeout.of(c) for c in obj])
1126
+
1127
+ elif obj is Timeout.Default:
1128
+ if default is Timeout._NOT_SPECIFIED or default is Timeout.Default:
1129
+ raise RuntimeError('Must specify a default timeout')
1130
+
1131
+ else:
1132
+ return Timeout.of(default) # type: ignore[arg-type]
1133
+
1134
+ else:
1135
+ raise TypeError(obj)
1136
+
1137
+ @classmethod
1138
+ def of_deadline(cls, deadline: float) -> 'DeadlineTimeout':
1139
+ return DeadlineTimeout(deadline)
1140
+
1141
+ @classmethod
1142
+ def of_predicate(cls, expired_fn: ta.Callable[[], bool]) -> 'PredicateTimeout':
1143
+ return PredicateTimeout(expired_fn)
1144
+
1145
+
1146
+ class DeadlineTimeout(Timeout):
1147
+ def __init__(
1148
+ self,
1149
+ deadline: float,
1150
+ exc: ta.Union[ta.Type[BaseException], BaseException] = TimeoutError,
1151
+ ) -> None:
1152
+ super().__init__()
1153
+
1154
+ self.deadline = deadline
1155
+ self.exc = exc
1156
+
1157
+ @property
1158
+ def can_expire(self) -> bool:
1159
+ return True
1160
+
1161
+ def expired(self) -> bool:
1162
+ return not (self.remaining() > 0)
1163
+
1164
+ def remaining(self) -> float:
1165
+ return self.deadline - self._now()
1166
+
1167
+ def __call__(self) -> float:
1168
+ if (rem := self.remaining()) > 0:
1169
+ return rem
1170
+ raise self.exc
1171
+
1172
+ def or_(self, o: ta.Any) -> ta.Any:
1173
+ return self()
1174
+
1175
+
1176
+ class InfiniteTimeout(Timeout):
1177
+ @property
1178
+ def can_expire(self) -> bool:
1179
+ return False
1180
+
1181
+ def expired(self) -> bool:
1182
+ return False
1183
+
1184
+ def remaining(self) -> float:
1185
+ return float('inf')
1186
+
1187
+ def __call__(self) -> float:
1188
+ return float('inf')
1189
+
1190
+ def or_(self, o: ta.Any) -> ta.Any:
1191
+ return o
1192
+
1193
+
1194
+ class CompositeTimeout(Timeout):
1195
+ def __init__(self, *children: Timeout) -> None:
1196
+ super().__init__()
1197
+
1198
+ self.children = children
1199
+
1200
+ @property
1201
+ def can_expire(self) -> bool:
1202
+ return any(c.can_expire for c in self.children)
1203
+
1204
+ def expired(self) -> bool:
1205
+ return any(c.expired() for c in self.children)
1206
+
1207
+ def remaining(self) -> float:
1208
+ return min(c.remaining() for c in self.children)
1209
+
1210
+ def __call__(self) -> float:
1211
+ return min(c() for c in self.children)
1212
+
1213
+ def or_(self, o: ta.Any) -> ta.Any:
1214
+ if self.can_expire:
1215
+ return self()
1216
+ return o
1217
+
1218
+
1219
+ class PredicateTimeout(Timeout):
1220
+ def __init__(
1221
+ self,
1222
+ expired_fn: ta.Callable[[], bool],
1223
+ exc: ta.Union[ta.Type[BaseException], BaseException] = TimeoutError,
1224
+ ) -> None:
1225
+ super().__init__()
1226
+
1227
+ self.expired_fn = expired_fn
1228
+ self.exc = exc
1229
+
1230
+ @property
1231
+ def can_expire(self) -> bool:
1232
+ return True
1233
+
1234
+ def expired(self) -> bool:
1235
+ return self.expired_fn()
1236
+
1237
+ def remaining(self) -> float:
1238
+ return float('inf')
1239
+
1240
+ def __call__(self) -> float:
1241
+ if not self.expired_fn():
1242
+ return float('inf')
1243
+ raise self.exc
1244
+
1245
+ def or_(self, o: ta.Any) -> ta.Any:
1246
+ return self()
1247
+
1248
+
1060
1249
  ########################################
1061
1250
  # ../../../omlish/logs/filters.py
1062
1251
 
@@ -1814,6 +2003,19 @@ class ArgparseCli:
1814
2003
  return fn()
1815
2004
 
1816
2005
 
2006
+ ########################################
2007
+ # ../../../omlish/asyncs/asyncio/timeouts.py
2008
+
2009
+
2010
+ def asyncio_maybe_timeout(
2011
+ fut: AwaitableT,
2012
+ timeout: ta.Optional[TimeoutLike] = None,
2013
+ ) -> AwaitableT:
2014
+ if timeout is not None:
2015
+ fut = asyncio.wait_for(fut, Timeout.of(timeout)()) # type: ignore
2016
+ return fut
2017
+
2018
+
1817
2019
  ########################################
1818
2020
  # ../../../omlish/lite/contextmanagers.py
1819
2021
 
@@ -3147,17 +3349,43 @@ class SubprocessRunOutput(ta.Generic[T]):
3147
3349
  class SubprocessRun:
3148
3350
  cmd: ta.Sequence[str]
3149
3351
  input: ta.Any = None
3150
- timeout: ta.Optional[float] = None
3352
+ timeout: ta.Optional[TimeoutLike] = None
3151
3353
  check: bool = False
3152
3354
  capture_output: ta.Optional[bool] = None
3153
3355
  kwargs: ta.Optional[ta.Mapping[str, ta.Any]] = None
3154
3356
 
3357
+ #
3358
+
3359
+ _FIELD_NAMES: ta.ClassVar[ta.FrozenSet[str]]
3360
+
3361
+ def replace(self, **kwargs: ta.Any) -> 'SubprocessRun':
3362
+ if not kwargs:
3363
+ return self
3364
+
3365
+ field_kws = {}
3366
+ extra_kws = {}
3367
+ for k, v in kwargs.items():
3368
+ if k in self._FIELD_NAMES:
3369
+ field_kws[k] = v
3370
+ else:
3371
+ extra_kws[k] = v
3372
+
3373
+ return dc.replace(self, **{
3374
+ **dict(kwargs={
3375
+ **(self.kwargs or {}),
3376
+ **extra_kws,
3377
+ }),
3378
+ **field_kws, # passing a kwarg named 'kwargs' intentionally clobbers
3379
+ })
3380
+
3381
+ #
3382
+
3155
3383
  @classmethod
3156
3384
  def of(
3157
3385
  cls,
3158
3386
  *cmd: str,
3159
3387
  input: ta.Any = None, # noqa
3160
- timeout: ta.Optional[float] = None,
3388
+ timeout: ta.Optional[TimeoutLike] = None,
3161
3389
  check: bool = False, # noqa
3162
3390
  capture_output: ta.Optional[bool] = None,
3163
3391
  **kwargs: ta.Any,
@@ -3178,20 +3406,25 @@ class SubprocessRun:
3178
3406
  def run(
3179
3407
  self,
3180
3408
  subprocesses: ta.Optional[ta.Any] = None, # AbstractSubprocesses
3409
+ **kwargs: ta.Any,
3181
3410
  ) -> SubprocessRunOutput:
3182
3411
  if subprocesses is None:
3183
3412
  subprocesses = self._DEFAULT_SUBPROCESSES
3184
- return check.not_none(subprocesses).run_(self) # type: ignore[attr-defined]
3413
+ return check.not_none(subprocesses).run_(self.replace(**kwargs)) # type: ignore[attr-defined]
3185
3414
 
3186
3415
  _DEFAULT_ASYNC_SUBPROCESSES: ta.ClassVar[ta.Optional[ta.Any]] = None # AbstractAsyncSubprocesses
3187
3416
 
3188
3417
  async def async_run(
3189
3418
  self,
3190
3419
  async_subprocesses: ta.Optional[ta.Any] = None, # AbstractAsyncSubprocesses
3420
+ **kwargs: ta.Any,
3191
3421
  ) -> SubprocessRunOutput:
3192
3422
  if async_subprocesses is None:
3193
3423
  async_subprocesses = self._DEFAULT_ASYNC_SUBPROCESSES
3194
- return await check.not_none(async_subprocesses).run_(self) # type: ignore[attr-defined]
3424
+ return await check.not_none(async_subprocesses).run_(self.replace(**kwargs)) # type: ignore[attr-defined]
3425
+
3426
+
3427
+ SubprocessRun._FIELD_NAMES = frozenset(fld.name for fld in dc.fields(SubprocessRun)) # noqa
3195
3428
 
3196
3429
 
3197
3430
  ##
@@ -3208,11 +3441,19 @@ class SubprocessRunnable(abc.ABC, ta.Generic[T]):
3208
3441
 
3209
3442
  #
3210
3443
 
3211
- def run(self, subprocesses: ta.Optional[ta.Any] = None) -> T: # AbstractSubprocesses
3212
- return self.handle_run_output(self.make_run().run(subprocesses))
3444
+ def run(
3445
+ self,
3446
+ subprocesses: ta.Optional[ta.Any] = None, # AbstractSubprocesses
3447
+ **kwargs: ta.Any,
3448
+ ) -> T:
3449
+ return self.handle_run_output(self.make_run().run(subprocesses, **kwargs))
3213
3450
 
3214
- async def async_run(self, async_subprocesses: ta.Optional[ta.Any] = None) -> T: # AbstractAsyncSubprocesses
3215
- return self.handle_run_output(await self.make_run().async_run(async_subprocesses))
3451
+ async def async_run(
3452
+ self,
3453
+ async_subprocesses: ta.Optional[ta.Any] = None, # AbstractAsyncSubprocesses
3454
+ **kwargs: ta.Any,
3455
+ ) -> T:
3456
+ return self.handle_run_output(await self.make_run().async_run(async_subprocesses, **kwargs))
3216
3457
 
3217
3458
 
3218
3459
  ########################################
@@ -4320,6 +4561,11 @@ class BaseSubprocesses(abc.ABC): # noqa
4320
4561
 
4321
4562
  #
4322
4563
 
4564
+ if 'timeout' in kwargs:
4565
+ kwargs['timeout'] = Timeout.of(kwargs['timeout']).or_(None)
4566
+
4567
+ #
4568
+
4323
4569
  return cmd, dict(
4324
4570
  env=env,
4325
4571
  shell=shell,
@@ -4465,7 +4711,7 @@ class AbstractAsyncSubprocesses(BaseSubprocesses):
4465
4711
  self,
4466
4712
  *cmd: str,
4467
4713
  input: ta.Any = None, # noqa
4468
- timeout: ta.Optional[float] = None,
4714
+ timeout: ta.Optional[TimeoutLike] = None,
4469
4715
  check: bool = False,
4470
4716
  capture_output: ta.Optional[bool] = None,
4471
4717
  **kwargs: ta.Any,
@@ -4542,6 +4788,11 @@ class AbstractAsyncSubprocesses(BaseSubprocesses):
4542
4788
 
4543
4789
  ########################################
4544
4790
  # ../../../omlish/subprocesses/sync.py
4791
+ """
4792
+ TODO:
4793
+ - popen
4794
+ - route check_calls through run_?
4795
+ """
4545
4796
 
4546
4797
 
4547
4798
  ##
@@ -4556,7 +4807,7 @@ class AbstractSubprocesses(BaseSubprocesses, abc.ABC):
4556
4807
  self,
4557
4808
  *cmd: str,
4558
4809
  input: ta.Any = None, # noqa
4559
- timeout: ta.Optional[float] = None,
4810
+ timeout: ta.Optional[TimeoutLike] = None,
4560
4811
  check: bool = False,
4561
4812
  capture_output: ta.Optional[bool] = None,
4562
4813
  **kwargs: ta.Any,
@@ -4867,7 +5118,7 @@ class AsyncioProcessCommunicator:
4867
5118
  async def communicate(
4868
5119
  self,
4869
5120
  input: ta.Any = None, # noqa
4870
- timeout: ta.Optional[float] = None,
5121
+ timeout: ta.Optional[TimeoutLike] = None,
4871
5122
  ) -> Communication:
4872
5123
  return await asyncio_maybe_timeout(self._communicate(input), timeout)
4873
5124
 
@@ -4880,7 +5131,7 @@ class AsyncioSubprocesses(AbstractAsyncSubprocesses):
4880
5131
  self,
4881
5132
  proc: asyncio.subprocess.Process,
4882
5133
  input: ta.Any = None, # noqa
4883
- timeout: ta.Optional[float] = None,
5134
+ timeout: ta.Optional[TimeoutLike] = None,
4884
5135
  ) -> ta.Tuple[ta.Optional[bytes], ta.Optional[bytes]]:
4885
5136
  return await AsyncioProcessCommunicator(proc).communicate(input, timeout) # noqa
4886
5137
 
@@ -4891,7 +5142,7 @@ class AsyncioSubprocesses(AbstractAsyncSubprocesses):
4891
5142
  self,
4892
5143
  *cmd: str,
4893
5144
  shell: bool = False,
4894
- timeout: ta.Optional[float] = None,
5145
+ timeout: ta.Optional[TimeoutLike] = None,
4895
5146
  **kwargs: ta.Any,
4896
5147
  ) -> ta.AsyncGenerator[asyncio.subprocess.Process, None]:
4897
5148
  with self.prepare_and_wrap( *cmd, shell=shell, **kwargs) as (cmd, kwargs): # noqa