omdev 0.0.0.dev384__tar.gz → 0.0.0.dev386__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 (330) hide show
  1. {omdev-0.0.0.dev384/omdev.egg-info → omdev-0.0.0.dev386}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/home/paths.py +4 -2
  3. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/home/secrets.py +3 -5
  4. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/__init__.py +3 -0
  5. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/confirm.py +11 -2
  6. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tokens/all.py +2 -0
  7. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tokens/tokenizert.py +2 -2
  8. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tokens/utils.py +16 -4
  9. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/git/cli.py +63 -14
  10. omdev-0.0.0.dev386/omdev/tools/git/cloning.py +42 -0
  11. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386/omdev.egg-info}/PKG-INFO +2 -2
  12. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev.egg-info/SOURCES.txt +1 -0
  13. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev.egg-info/requires.txt +1 -1
  14. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/pyproject.toml +2 -2
  15. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/LICENSE +0 -0
  16. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/MANIFEST.in +0 -0
  17. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/README.md +0 -0
  18. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/.manifests.json +0 -0
  19. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/__about__.py +0 -0
  20. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/__init__.py +0 -0
  21. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/__init__.py +0 -0
  22. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/__main__.py +0 -0
  23. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/gen.py +0 -0
  24. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/imports.py +0 -0
  25. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/main.py +0 -0
  26. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/manifests.py +0 -0
  27. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/resources.py +0 -0
  28. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/srcfiles.py +0 -0
  29. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/strip.py +0 -0
  30. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/types.py +0 -0
  31. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/amalg/typing.py +0 -0
  32. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/__init__.py +0 -0
  33. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/__init__.py +0 -0
  34. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/cache.py +0 -0
  35. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/contexts.py +0 -0
  36. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/currents.py +0 -0
  37. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/fns.py +0 -0
  38. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/resolvers.py +0 -0
  39. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/storage.py +0 -0
  40. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/compute/types.py +0 -0
  41. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/__init__.py +0 -0
  42. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/actions.py +0 -0
  43. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/cache.py +0 -0
  44. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/consts.py +0 -0
  45. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/defaults.py +0 -0
  46. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/manifests.py +0 -0
  47. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cache/data/specs.py +0 -0
  48. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/__init__.py +0 -0
  49. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/darwin/__init__.py +0 -0
  50. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/darwin/aps.py +0 -0
  51. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/darwin/ax.py +0 -0
  52. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/darwin/cf.py +0 -0
  53. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/darwin/cg.py +0 -0
  54. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/linux/__init__.py +0 -0
  55. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/capi/linux/x11.py +0 -0
  56. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/__init__.py +0 -0
  57. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/__main__.py +0 -0
  58. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/cdeps.py +0 -0
  59. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/cdeps.toml +0 -0
  60. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/cli.py +0 -0
  61. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cc/srclangs.py +0 -0
  62. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/__init__.py +0 -0
  63. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_boilerplate.cc +0 -0
  64. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/LICENSE +0 -0
  65. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/__init__.py +0 -0
  66. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/build_ext.py +0 -0
  67. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  68. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  69. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/compilers/options.py +0 -0
  70. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  71. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/dir_util.py +0 -0
  72. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/errors.py +0 -0
  73. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/extension.py +0 -0
  74. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/file_util.py +0 -0
  75. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/modified.py +0 -0
  76. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/spawn.py +0 -0
  77. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/sysconfig.py +0 -0
  78. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/util.py +0 -0
  79. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/_distutils/version.py +0 -0
  80. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/build.py +0 -0
  81. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/cmake.py +0 -0
  82. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/importhook.py +0 -0
  83. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/magic.py +0 -0
  84. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cexts/scan.py +0 -0
  85. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/__init__.py +0 -0
  86. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/__main__.py +0 -0
  87. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/cache.py +0 -0
  88. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/ci.py +0 -0
  89. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/cli.py +0 -0
  90. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/compose.py +0 -0
  91. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/consts.py +0 -0
  92. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/__init__.py +0 -0
  93. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/buildcaching.py +0 -0
  94. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/cache.py +0 -0
  95. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  96. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/cacheserved/cache.py +0 -0
  97. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  98. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/cmds.py +0 -0
  99. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/dataserver.py +0 -0
  100. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/imagepulling.py +0 -0
  101. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/inject.py +0 -0
  102. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/packing.py +0 -0
  103. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/repositories.py +0 -0
  104. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/docker/utils.py +0 -0
  105. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/__init__.py +0 -0
  106. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/__init__.py +0 -0
  107. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/clients.py +0 -0
  108. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v1/__init__.py +0 -0
  109. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v1/api.py +0 -0
  110. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v1/client.py +0 -0
  111. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v2/__init__.py +0 -0
  112. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v2/api.py +0 -0
  113. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v2/azure.py +0 -0
  114. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/api/v2/client.py +0 -0
  115. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/bootstrap.py +0 -0
  116. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/cache.py +0 -0
  117. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/cli.py +0 -0
  118. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/env.py +0 -0
  119. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/github/inject.py +0 -0
  120. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/inject.py +0 -0
  121. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/requirements.py +0 -0
  122. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/shell.py +0 -0
  123. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ci/utils.py +0 -0
  124. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/__init__.py +0 -0
  125. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/__main__.py +0 -0
  126. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/_pathhack.py +0 -0
  127. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/clicli.py +0 -0
  128. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/install.py +0 -0
  129. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/main.py +0 -0
  130. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/managers.py +0 -0
  131. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cli/types.py +0 -0
  132. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/clipboard/__init__.py +0 -0
  133. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/clipboard/clipboard.py +0 -0
  134. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/clipboard/darwin_cf.py +0 -0
  135. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/clipboard/linux_x11.py +0 -0
  136. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmake.py +0 -0
  137. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmdlog/__init__.py +0 -0
  138. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmdlog/__main__.py +0 -0
  139. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmdlog/_cmdlog.py +0 -0
  140. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmdlog/cli.py +0 -0
  141. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/cmdlog/cmdlog.py +0 -0
  142. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/__init__.py +0 -0
  143. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/handlers.py +0 -0
  144. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/http.py +0 -0
  145. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/routes.py +0 -0
  146. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/server.py +0 -0
  147. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/dataserver/targets.py +0 -0
  148. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/git/__init__.py +0 -0
  149. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/git/magic.py +0 -0
  150. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/git/revisions.py +0 -0
  151. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/git/shallow.py +0 -0
  152. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/git/status.py +0 -0
  153. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/home/__init__.py +0 -0
  154. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/home/shadow.py +0 -0
  155. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/imgur.py +0 -0
  156. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/intellij/__init__.py +0 -0
  157. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/intellij/cli.py +0 -0
  158. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/intellij/ides.py +0 -0
  159. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/intellij/open.py +0 -0
  160. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/__init__.py +0 -0
  161. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/__main__.py +0 -0
  162. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/cli.py +0 -0
  163. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/default.py +0 -0
  164. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/inject.py +0 -0
  165. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/inspect.py +0 -0
  166. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/__init__.py +0 -0
  167. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/base.py +0 -0
  168. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/inject.py +0 -0
  169. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/running.py +0 -0
  170. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/standalone.py +0 -0
  171. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/providers/system.py +0 -0
  172. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/pyenv/__init__.py +0 -0
  173. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/pyenv/inject.py +0 -0
  174. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/pyenv/install.py +0 -0
  175. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/pyenv/provider.py +0 -0
  176. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/pyenv/pyenv.py +0 -0
  177. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/resolvers.py +0 -0
  178. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/types.py +0 -0
  179. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/uv/__init__.py +0 -0
  180. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/uv/inject.py +0 -0
  181. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/uv/provider.py +0 -0
  182. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/uv/uv.py +0 -0
  183. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/interp/venvs.py +0 -0
  184. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/__init__.py +0 -0
  185. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/__main__.py +0 -0
  186. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/cli.py +0 -0
  187. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/find.py +0 -0
  188. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/magic.py +0 -0
  189. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/prepare.py +0 -0
  190. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/magic/styles.py +0 -0
  191. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/manifests/__init__.py +0 -0
  192. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/manifests/__main__.py +0 -0
  193. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/manifests/build.py +0 -0
  194. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/manifests/dumping.py +0 -0
  195. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/manifests/main.py +0 -0
  196. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/mypy/__init__.py +0 -0
  197. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/mypy/debug.py +0 -0
  198. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/mypy/report.py +0 -0
  199. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/__init__.py +0 -0
  200. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/building.py +0 -0
  201. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/compression.py +0 -0
  202. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/data.py +0 -0
  203. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/datarefs.py +0 -0
  204. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/dataserver.py +0 -0
  205. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/loading.py +0 -0
  206. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/media.py +0 -0
  207. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/pack/__init__.py +0 -0
  208. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/pack/packing.py +0 -0
  209. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/pack/repositories.py +0 -0
  210. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/pack/unpacking.py +0 -0
  211. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/repositories.py +0 -0
  212. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/oci/tars.py +0 -0
  213. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/__init__.py +0 -0
  214. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/marshal.py +0 -0
  215. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/names.py +0 -0
  216. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/requires.py +0 -0
  217. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/revisions.py +0 -0
  218. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/specifiers.py +0 -0
  219. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/versions.py +0 -0
  220. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/packaging/wheelfile.py +0 -0
  221. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pip.py +0 -0
  222. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/__init__.py +0 -0
  223. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/__main__.py +0 -0
  224. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/base.py +0 -0
  225. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/caches.py +0 -0
  226. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/git.py +0 -0
  227. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/imports.py +0 -0
  228. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/lite.py +0 -0
  229. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/main.py +0 -0
  230. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/manifests.py +0 -0
  231. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/scripts.py +0 -0
  232. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/precheck/unicode.py +0 -0
  233. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/apps/__init__.py +0 -0
  234. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/apps/ncdu.py +0 -0
  235. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/LICENSE +0 -0
  236. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/__init__.py +0 -0
  237. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/__main__.py +0 -0
  238. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/border.py +0 -0
  239. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/cli.py +0 -0
  240. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/markdown.py +0 -0
  241. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/parser.py +0 -0
  242. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/styles.py +0 -0
  243. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/tags.py +0 -0
  244. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/ptk/markdown/utils.py +0 -0
  245. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/__init__.py +0 -0
  246. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/attrdocs.py +0 -0
  247. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/bracepy.py +0 -0
  248. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/classdot.py +0 -0
  249. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/LICENSE +0 -0
  250. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/__init__.py +0 -0
  251. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/attrdoc.py +0 -0
  252. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/common.py +0 -0
  253. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/epydoc.py +0 -0
  254. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/google.py +0 -0
  255. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/numpydoc.py +0 -0
  256. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/parser.py +0 -0
  257. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/docstrings/rest.py +0 -0
  258. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/findimports.py +0 -0
  259. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/scripts/__init__.py +0 -0
  260. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/scripts/bumpversion.py +0 -0
  261. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/scripts/execstat.py +0 -0
  262. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/scripts/importtrace.py +0 -0
  263. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/srcheaders.py +0 -0
  264. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/tools/__init__.py +0 -0
  265. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/tools/importscan.py +0 -0
  266. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/py/tools/mkrelimp.py +0 -0
  267. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/__init__.py +0 -0
  268. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/__main__.py +0 -0
  269. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/cexts.py +0 -0
  270. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/cli.py +0 -0
  271. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/configs.py +0 -0
  272. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/inject.py +0 -0
  273. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/pkg.py +0 -0
  274. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/reqs.py +0 -0
  275. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/resources/__init__.py +0 -0
  276. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/resources/docker-dev.sh +0 -0
  277. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/resources/python.sh +0 -0
  278. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/pyproject/venvs.py +0 -0
  279. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/__init__.py +0 -0
  280. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/ci.py +0 -0
  281. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/interp.py +0 -0
  282. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/pyproject.py +0 -0
  283. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/slowcat.py +0 -0
  284. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/scripts/tmpexec.py +0 -0
  285. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tagstrings.py +0 -0
  286. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tokens/__init__.py +0 -0
  287. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/__init__.py +0 -0
  288. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/antlr/__init__.py +0 -0
  289. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/antlr/__main__.py +0 -0
  290. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/antlr/cli.py +0 -0
  291. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/antlr/consts.py +0 -0
  292. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/antlr/gen.py +0 -0
  293. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/cloc.py +0 -0
  294. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/diff.py +0 -0
  295. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/doc.py +0 -0
  296. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/docker.py +0 -0
  297. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/git/__init__.py +0 -0
  298. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/git/__main__.py +0 -0
  299. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/git/consts.py +0 -0
  300. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/git/messages.py +0 -0
  301. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/__init__.py +0 -0
  302. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/__main__.py +0 -0
  303. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/cli.py +0 -0
  304. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/formats.py +0 -0
  305. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/io.py +0 -0
  306. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/parsing.py +0 -0
  307. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/processing.py +0 -0
  308. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/json/rendering.py +0 -0
  309. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/__init__.py +0 -0
  310. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/__main__.py +0 -0
  311. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/cli.py +0 -0
  312. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/resources/__init__.py +0 -0
  313. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  314. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  315. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/linehisto.py +0 -0
  316. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/mkenv.py +0 -0
  317. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/notebook.py +0 -0
  318. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/pawk/__init__.py +0 -0
  319. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/pawk/__main__.py +0 -0
  320. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/pawk/pawk.py +0 -0
  321. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/pip.py +0 -0
  322. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/prof.py +0 -0
  323. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/qr.py +0 -0
  324. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/shadow.py +0 -0
  325. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/shell.py +0 -0
  326. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev/tools/sqlrepl.py +0 -0
  327. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev.egg-info/dependency_links.txt +0 -0
  328. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev.egg-info/entry_points.txt +0 -0
  329. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/omdev.egg-info/top_level.txt +0 -0
  330. {omdev-0.0.0.dev384 → omdev-0.0.0.dev386}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev384
3
+ Version: 0.0.0.dev386
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev384
17
+ Requires-Dist: omlish==0.0.0.dev386
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.1; extra == "all"
20
20
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -7,16 +7,18 @@ TODO:
7
7
  import os.path
8
8
  import typing as ta
9
9
 
10
+ from omlish.os.environ import EnvVar
11
+
10
12
 
11
13
  ##
12
14
 
13
15
 
14
- HOME_DIR_ENV_VAR = 'OMLISH_HOME'
16
+ HOME_DIR_ENV_VAR = EnvVar('OMLISH_HOME')
15
17
  DEFAULT_HOME_DIR = '~/.omlish'
16
18
 
17
19
 
18
20
  def get_home_dir() -> str:
19
- return os.path.expanduser(os.getenv(HOME_DIR_ENV_VAR, DEFAULT_HOME_DIR))
21
+ return os.path.expanduser(HOME_DIR_ENV_VAR.get(DEFAULT_HOME_DIR))
20
22
 
21
23
 
22
24
  #
@@ -2,6 +2,7 @@ import os.path
2
2
  import typing as ta
3
3
 
4
4
  from omlish import lang
5
+ from omlish.os.environ import EnvVar
5
6
  from omlish.secrets import all as sec
6
7
 
7
8
  from .paths import get_home_paths
@@ -16,16 +17,13 @@ else:
16
17
  ##
17
18
 
18
19
 
19
- SECRETS_FILE_ENV_VAR = 'OMLISH_SECRETS'
20
+ SECRETS_FILE_ENV_VAR = EnvVar('OMLISH_SECRETS')
20
21
  DEFAULT_SECRETS_FILE_NAME = 'secrets.yml'
21
22
 
22
23
 
23
24
  def get_secrets_file() -> str:
24
25
  return os.path.expanduser(
25
- os.getenv(
26
- SECRETS_FILE_ENV_VAR,
27
- os.path.join(get_home_paths().config_dir, DEFAULT_SECRETS_FILE_NAME),
28
- ),
26
+ SECRETS_FILE_ENV_VAR.get(lambda: os.path.join(get_home_paths().config_dir, DEFAULT_SECRETS_FILE_NAME)),
29
27
  )
30
28
 
31
29
 
@@ -97,4 +97,7 @@ from prompt_toolkit.widgets.toolbars import SearchToolbar
97
97
  from prompt_toolkit.widgets.toolbars import SystemToolbar
98
98
  from prompt_toolkit.widgets.toolbars import ValidationToolbar
99
99
 
100
+ #
101
+ from .confirm import a_strict_confirm
102
+ from .confirm import create_strict_confirm_session
100
103
  from .confirm import strict_confirm
@@ -1,9 +1,11 @@
1
+
1
2
  from prompt_toolkit.formatted_text import merge_formatted_text
2
3
  from prompt_toolkit.key_binding import KeyBindings
3
4
  from prompt_toolkit.key_binding import KeyPressEvent
4
5
  from prompt_toolkit.shortcuts import PromptSession
5
6
 
6
7
  from omlish import check
8
+ from omlish import lang
7
9
 
8
10
 
9
11
  ##
@@ -37,12 +39,15 @@ def create_strict_confirm_session(
37
39
  return session
38
40
 
39
41
 
40
- def strict_confirm(message: str = 'Confirm?', suffix: str = ' (y/n) ') -> bool:
42
+ ##
43
+
44
+
45
+ def _m_strict_confirm(message: str = 'Confirm?', suffix: str = ' (y/n) ') -> lang.MaysyncGen[bool]:
41
46
  """Display a confirmation prompt that returns True/False. Requires an explicit answer."""
42
47
 
43
48
  while True:
44
49
  session = create_strict_confirm_session(message, suffix)
45
- ret = session.prompt()
50
+ ret = yield from lang.maysync_yield(session.prompt, session.prompt_async)()
46
51
 
47
52
  if isinstance(ret, str):
48
53
  check.empty(ret)
@@ -52,3 +57,7 @@ def strict_confirm(message: str = 'Confirm?', suffix: str = ' (y/n) ') -> bool:
52
57
 
53
58
  else:
54
59
  raise TypeError(ret)
60
+
61
+
62
+ strict_confirm = lang.maysync_wrap(_m_strict_confirm)
63
+ a_strict_confirm = lang.a_maysync_wrap(_m_strict_confirm)
@@ -8,10 +8,12 @@ from .tokenizert import ( # noqa
8
8
 
9
9
  from .utils import ( # noqa
10
10
  Tokens,
11
+ TokensIterable,
11
12
 
12
13
  WS_NAMES,
13
14
  is_ws,
14
15
  ignore_ws,
16
+ ignore_ws_,
15
17
 
16
18
  split_lines,
17
19
  split_lines_dense,
@@ -14,7 +14,7 @@
14
14
  # WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
15
15
  # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
16
16
  # OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17
- # https://github.com/asottile/tokenize-rt/blob/413692b7c1ad8a873caec39dd4f427d55ee538ea/tokenize_rt.py
17
+ # https://github.com/asottile/tokenize-rt/blob/d3874b787677593fc34aedf7174a2934e2caa94b/tokenize_rt.py
18
18
  import argparse
19
19
  import io
20
20
  import keyword
@@ -123,7 +123,7 @@ class Tokenization:
123
123
 
124
124
  tok_name = tokenize.tok_name[tok_type]
125
125
 
126
- if tok_name == 'FSTRING_MIDDLE': # pragma: >=3.12 cover
126
+ if tok_name in {'FSTRING_MIDDLE', 'TSTRING_MIDDLE'}: # pragma: >=3.12 cover
127
127
  if '{' in tok_text or '}' in tok_text:
128
128
  new_tok_text = cls.curly_escape(tok_text)
129
129
  ecol += len(new_tok_text) - len(tok_text)
@@ -5,6 +5,7 @@ from .tokenizert import Token
5
5
 
6
6
 
7
7
  Tokens: ta.TypeAlias = ta.Sequence[Token]
8
+ TokensIterable: ta.TypeAlias = ta.Iterable[Token]
8
9
 
9
10
 
10
11
  ##
@@ -37,14 +38,25 @@ def ignore_ws(
37
38
  )
38
39
 
39
40
 
41
+ def ignore_ws_(
42
+ toks: ta.Iterable[Token],
43
+ *,
44
+ keep: ta.Container[str] = (),
45
+ ) -> list[Token]:
46
+ return list(ignore_ws(
47
+ toks,
48
+ keep=keep,
49
+ ))
50
+
51
+
40
52
  ##
41
53
 
42
54
 
43
- def split_lines(ts: Tokens) -> list[Tokens]:
55
+ def split_lines(ts: TokensIterable) -> list[Tokens]:
44
56
  return [list(it) for g, it in itertools.groupby(ts, lambda t: t.line)]
45
57
 
46
58
 
47
- def split_lines_dense(ts: Tokens) -> list[Tokens]:
59
+ def split_lines_dense(ts: TokensIterable) -> list[Tokens]:
48
60
  lines: list[list[Token]] = []
49
61
  for t in ts:
50
62
  while len(lines) < (t.line or 0):
@@ -53,7 +65,7 @@ def split_lines_dense(ts: Tokens) -> list[Tokens]:
53
65
  return lines # type: ignore[return-value]
54
66
 
55
67
 
56
- def join_toks(ts: Tokens) -> str:
68
+ def join_toks(ts: TokensIterable) -> str:
57
69
  return ''.join(t.src for t in ts)
58
70
 
59
71
 
@@ -65,7 +77,7 @@ def join_lines(ls: ta.Iterable[Tokens]) -> str:
65
77
 
66
78
 
67
79
  def match_toks(
68
- ts: ta.Iterable[Token],
80
+ ts: TokensIterable,
69
81
  pat: ta.Sequence[tuple[str | None, str | tuple[str, ...] | None]],
70
82
  ) -> bool:
71
83
  it = iter(ts)
@@ -23,7 +23,8 @@ TODO:
23
23
  import dataclasses as dc
24
24
  import logging
25
25
  import os
26
- import re
26
+ import shutil
27
+ import tempfile
27
28
  import typing as ta
28
29
  import urllib.parse
29
30
 
@@ -42,6 +43,9 @@ from ...git.status import get_git_status
42
43
  from ...home.paths import get_home_paths
43
44
  from ...home.shadow import get_shadow_configs
44
45
  from . import consts
46
+ from .cloning import GithubCloneTarget
47
+ from .cloning import OtherCloneTarget
48
+ from .cloning import parse_clone_target
45
49
  from .messages import GitMessageGenerator
46
50
  from .messages import TimestampGitMessageGenerator
47
51
  from .messages import load_message_generator_manifests
@@ -153,8 +157,6 @@ class Cli(ap.Cli):
153
157
 
154
158
  #
155
159
 
156
- _GITHUB_PAT = re.compile(r'((http(s)?://)?(www\./)?github(\.com)?/)?(?P<user>[^/.]+)/(?P<repo>[^/.]+)(/.*)?')
157
-
158
160
  @ap.cmd(
159
161
  ap.arg('repo'),
160
162
  ap.arg('args', nargs=ap.REMAINDER),
@@ -166,25 +168,23 @@ class Cli(ap.Cli):
166
168
  # fails.
167
169
  out_dir = '.'
168
170
  try:
169
- if (m := self._GITHUB_PAT.fullmatch(self.args.repo)):
170
- user = m.group('user')
171
- repo = m.group('repo')
172
-
173
- os.makedirs(user, 0o755, exist_ok=True)
171
+ ct = parse_clone_target(self.args.repo)
172
+ if isinstance(ct, GithubCloneTarget):
173
+ os.makedirs(ct.user, 0o755, exist_ok=True)
174
174
 
175
175
  subprocesses.check_call(
176
176
  'git',
177
177
  'clone',
178
178
  *self.unknown_args,
179
179
  *self.args.args,
180
- f'git@github.com:{user}/{repo}.git',
181
- os.path.join(user, repo),
180
+ ct.render(),
181
+ os.path.join(ct.user, ct.repo),
182
182
  )
183
183
 
184
- out_dir = os.path.join(user, repo)
184
+ out_dir = os.path.join(ct.user, ct.repo)
185
185
 
186
- else:
187
- parsed = urllib.parse.urlparse(self.args.repo)
186
+ elif isinstance(ct, OtherCloneTarget):
187
+ parsed = urllib.parse.urlparse(ct.s)
188
188
  out_dir = parsed.path.split('/')[-1]
189
189
 
190
190
  subprocesses.check_call(
@@ -192,12 +192,17 @@ class Cli(ap.Cli):
192
192
  'clone',
193
193
  *self.unknown_args,
194
194
  *self.args.args,
195
- self.args.repo,
195
+ ct.render(),
196
196
  )
197
197
 
198
+ else:
199
+ raise TypeError(ct)
200
+
198
201
  finally:
199
202
  print(out_dir)
200
203
 
204
+ #
205
+
201
206
  @ap.cmd(
202
207
  ap.arg('rev', nargs='?', default='HEAD'),
203
208
  ap.arg('-d', '--diff', action='store_true'),
@@ -466,6 +471,50 @@ class Cli(ap.Cli):
466
471
  *self.unknown_args,
467
472
  )
468
473
 
474
+ #
475
+
476
+ @ap.cmd(
477
+ ap.arg('repo'),
478
+ ap.arg('args', nargs=ap.REMAINDER),
479
+ accepts_unknown=True,
480
+ )
481
+ def anon_clone(self) -> None:
482
+ cwd = os.getcwd()
483
+
484
+ # As with the clone command, we always print a cd-able path to stdout, even on failure.
485
+ out_dir = '.'
486
+ try:
487
+ tmp_dir = tempfile.mkdtemp()
488
+ try:
489
+ ct = parse_clone_target(self.args.repo)
490
+
491
+ subprocesses.check_call(
492
+ 'git',
493
+ 'clone',
494
+ *self.unknown_args,
495
+ *self.args.args,
496
+ ct.render(),
497
+ cwd=tmp_dir,
498
+ )
499
+
500
+ repo_dir_name = check.single(os.listdir(tmp_dir))
501
+ repo_dir = os.path.join(tmp_dir, repo_dir_name)
502
+ check.state(os.path.isdir(repo_dir))
503
+
504
+ git_dir = os.path.join(repo_dir, '.git')
505
+ check.state(os.path.isdir(git_dir))
506
+ shutil.rmtree(git_dir)
507
+
508
+ shutil.move(repo_dir, cwd)
509
+
510
+ out_dir = repo_dir_name
511
+
512
+ finally:
513
+ shutil.rmtree(tmp_dir)
514
+
515
+ finally:
516
+ print(out_dir)
517
+
469
518
 
470
519
  ##
471
520
 
@@ -0,0 +1,42 @@
1
+ import abc
2
+ import dataclasses as dc
3
+ import re
4
+
5
+ from omlish import lang
6
+
7
+
8
+ ##
9
+
10
+
11
+ @dc.dataclass(frozen=True)
12
+ class CloneTarget(lang.Abstract, lang.Sealed):
13
+ @abc.abstractmethod
14
+ def render(self) -> str:
15
+ raise NotImplementedError
16
+
17
+
18
+ @dc.dataclass(frozen=True)
19
+ class GithubCloneTarget(CloneTarget, lang.Final):
20
+ user: str
21
+ repo: str
22
+
23
+ def render(self) -> str:
24
+ return f'git@github.com:{self.user}/{self.repo}.git'
25
+
26
+
27
+ @dc.dataclass(frozen=True)
28
+ class OtherCloneTarget(CloneTarget, lang.Final):
29
+ s: str
30
+
31
+ def render(self) -> str:
32
+ return self.s
33
+
34
+
35
+ _GITHUB_PAT = re.compile(r'((http(s)?://)?(www\./)?github(\.com)?/)?(?P<user>[^/.]+)/(?P<repo>[^/.]+)(/.*)?')
36
+
37
+
38
+ def parse_clone_target(s: str) -> CloneTarget:
39
+ if (m := _GITHUB_PAT.fullmatch(s)):
40
+ return GithubCloneTarget(m.group('user'), m.group('repo'))
41
+ else:
42
+ return OtherCloneTarget(s)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev384
3
+ Version: 0.0.0.dev386
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev384
17
+ Requires-Dist: omlish==0.0.0.dev386
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.1; extra == "all"
20
20
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -306,6 +306,7 @@ omdev/tools/antlr/gen.py
306
306
  omdev/tools/git/__init__.py
307
307
  omdev/tools/git/__main__.py
308
308
  omdev/tools/git/cli.py
309
+ omdev/tools/git/cloning.py
309
310
  omdev/tools/git/consts.py
310
311
  omdev/tools/git/messages.py
311
312
  omdev/tools/json/__init__.py
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev384
1
+ omlish==0.0.0.dev386
2
2
 
3
3
  [all]
4
4
  black~=25.1
@@ -13,7 +13,7 @@ urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = 'BSD-3-Clause'
14
14
  readme = 'README.md'
15
15
  requires-python = '>=3.13'
16
- version = '0.0.0.dev384'
16
+ version = '0.0.0.dev386'
17
17
  classifiers = [
18
18
  'Development Status :: 2 - Pre-Alpha',
19
19
  'Intended Audience :: Developers',
@@ -24,7 +24,7 @@ classifiers = [
24
24
  ]
25
25
  description = 'omdev'
26
26
  dependencies = [
27
- 'omlish == 0.0.0.dev384',
27
+ 'omlish == 0.0.0.dev386',
28
28
  ]
29
29
 
30
30
  [project.optional-dependencies]
File without changes
File without changes
File without changes