omdev 0.0.28__tar.gz → 0.0.30__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 (522) hide show
  1. {omdev-0.0.28/omdev.egg-info → omdev-0.0.30}/PKG-INFO +32 -35
  2. omdev-0.0.30/README.md +49 -0
  3. omdev-0.0.30/omdev/README.md +49 -0
  4. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/cli.py +4 -4
  5. {omdev-0.0.28 → omdev-0.0.30}/omdev/cli/clicli.py +1 -1
  6. {omdev-0.0.28 → omdev-0.0.30}/omdev/cli/install.py +1 -1
  7. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataclasses/_dumping.py +69 -18
  8. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataclasses/codegen.py +0 -5
  9. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/cli.py +2 -2
  10. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/config.toml +10 -3
  11. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/gen.py +1 -1
  12. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/.python-versions.json +7 -7
  13. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/depsets/python.toml +5 -0
  14. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/jdk.sh +1 -1
  15. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/run.py +3 -3
  16. {omdev-0.0.28 → omdev-0.0.30}/omdev/home/paths.py +4 -4
  17. {omdev-0.0.28 → omdev-0.0.30}/omdev/home/secrets.py +1 -1
  18. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/providers/standalone.py +1 -1
  19. {omdev-0.0.28 → omdev-0.0.30}/omdev/manifests/_dumping.py +72 -19
  20. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/pkg.py +105 -1
  21. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/tools/buildrs.py +1 -1
  22. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/ci.py +841 -264
  23. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/interp.py +47 -19
  24. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/lib/formats/goyaml.py +610 -163
  25. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/lib/inject.py +29 -7
  26. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/lib/io/pipelines.py +3 -3
  27. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/lib/io/streambufs.py +3 -3
  28. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/lib/marshal.py +69 -18
  29. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/pidfiles.py +162 -71
  30. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/pyproject.py +294 -78
  31. {omdev-0.0.28 → omdev-0.0.30/omdev.egg-info}/PKG-INFO +32 -35
  32. {omdev-0.0.28 → omdev-0.0.30}/omdev.egg-info/requires.txt +5 -5
  33. {omdev-0.0.28 → omdev-0.0.30}/pyproject.toml +7 -8
  34. omdev-0.0.28/README.md +0 -51
  35. omdev-0.0.28/omdev/README.md +0 -51
  36. {omdev-0.0.28 → omdev-0.0.30}/LICENSE +0 -0
  37. {omdev-0.0.28 → omdev-0.0.30}/MANIFEST.in +0 -0
  38. {omdev-0.0.28 → omdev-0.0.30}/omdev/.om-manifests.json +0 -0
  39. {omdev-0.0.28 → omdev-0.0.30}/omdev/__about__.py +0 -0
  40. {omdev-0.0.28 → omdev-0.0.30}/omdev/__init__.py +0 -0
  41. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/__init__.py +0 -0
  42. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/__main__.py +0 -0
  43. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/cli/__init__.py +0 -0
  44. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/cli/main.py +0 -0
  45. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/gen/__init__.py +0 -0
  46. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/gen/gen.py +0 -0
  47. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/gen/imports.py +0 -0
  48. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/gen/manifests.py +0 -0
  49. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/gen/resources.py +0 -0
  50. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/gen/srcfiles.py +0 -0
  51. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/gen/strip.py +0 -0
  52. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/gen/types.py +0 -0
  53. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/gen/typing.py +0 -0
  54. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/info.py +0 -0
  55. {omdev-0.0.28 → omdev-0.0.30}/omdev/amalg/sources.py +0 -0
  56. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/__init__.py +0 -0
  57. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/compute/__init__.py +0 -0
  58. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/compute/cache.py +0 -0
  59. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/compute/contexts.py +0 -0
  60. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/compute/currents.py +0 -0
  61. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/compute/fns.py +0 -0
  62. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/compute/resolvers.py +0 -0
  63. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/compute/storage.py +0 -0
  64. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/compute/types.py +0 -0
  65. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/data/__init__.py +0 -0
  66. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/data/actions.py +0 -0
  67. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/data/cache.py +0 -0
  68. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/data/consts.py +0 -0
  69. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/data/defaults.py +0 -0
  70. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/data/manifests.py +0 -0
  71. {omdev-0.0.28 → omdev-0.0.30}/omdev/cache/data/specs.py +0 -0
  72. {omdev-0.0.28 → omdev-0.0.30}/omdev/capi/__init__.py +0 -0
  73. {omdev-0.0.28 → omdev-0.0.30}/omdev/capi/darwin/__init__.py +0 -0
  74. {omdev-0.0.28 → omdev-0.0.30}/omdev/capi/darwin/aps.py +0 -0
  75. {omdev-0.0.28 → omdev-0.0.30}/omdev/capi/darwin/ax.py +0 -0
  76. {omdev-0.0.28 → omdev-0.0.30}/omdev/capi/darwin/cf.py +0 -0
  77. {omdev-0.0.28 → omdev-0.0.30}/omdev/capi/darwin/cg.py +0 -0
  78. {omdev-0.0.28 → omdev-0.0.30}/omdev/capi/linux/__init__.py +0 -0
  79. {omdev-0.0.28 → omdev-0.0.30}/omdev/capi/linux/x11.py +0 -0
  80. {omdev-0.0.28 → omdev-0.0.30}/omdev/cc/__init__.py +0 -0
  81. {omdev-0.0.28 → omdev-0.0.30}/omdev/cc/__main__.py +0 -0
  82. {omdev-0.0.28 → omdev-0.0.30}/omdev/cc/cdeps.py +0 -0
  83. {omdev-0.0.28 → omdev-0.0.30}/omdev/cc/cdeps.toml +0 -0
  84. {omdev-0.0.28 → omdev-0.0.30}/omdev/cc/cli.py +0 -0
  85. {omdev-0.0.28 → omdev-0.0.30}/omdev/cc/srclangs.py +0 -0
  86. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/__init__.py +0 -0
  87. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_boilerplate.cc +0 -0
  88. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/LICENSE +0 -0
  89. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/__init__.py +0 -0
  90. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/build_ext.py +0 -0
  91. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  92. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  93. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/compilers/options.py +0 -0
  94. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  95. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/dir_util.py +0 -0
  96. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/errors.py +0 -0
  97. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/extension.py +0 -0
  98. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/file_util.py +0 -0
  99. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/modified.py +0 -0
  100. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/spawn.py +0 -0
  101. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/sysconfig.py +0 -0
  102. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/util.py +0 -0
  103. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/_distutils/version.py +0 -0
  104. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/build.py +0 -0
  105. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/cmake.py +0 -0
  106. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/importhook.py +0 -0
  107. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/magic.py +0 -0
  108. {omdev-0.0.28 → omdev-0.0.30}/omdev/cexts/scan.py +0 -0
  109. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/__init__.py +0 -0
  110. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/__main__.py +0 -0
  111. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/cache.py +0 -0
  112. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/ci.py +0 -0
  113. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/compose.py +0 -0
  114. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/consts.py +0 -0
  115. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/__init__.py +0 -0
  116. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/buildcaching.py +0 -0
  117. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/cache.py +0 -0
  118. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  119. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/cacheserved/cache.py +0 -0
  120. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  121. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/cmds.py +0 -0
  122. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/dataserver.py +0 -0
  123. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/imagepulling.py +0 -0
  124. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/inject.py +0 -0
  125. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/packing.py +0 -0
  126. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/repositories.py +0 -0
  127. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/docker/utils.py +0 -0
  128. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/__init__.py +0 -0
  129. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/api/__init__.py +0 -0
  130. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/api/clients.py +0 -0
  131. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/api/v1/__init__.py +0 -0
  132. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/api/v1/api.py +0 -0
  133. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/api/v1/client.py +0 -0
  134. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/api/v2/__init__.py +0 -0
  135. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/api/v2/api.py +0 -0
  136. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/api/v2/azure.py +0 -0
  137. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/api/v2/client.py +0 -0
  138. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/bootstrap.py +0 -0
  139. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/cache.py +0 -0
  140. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/cli.py +0 -0
  141. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/env.py +0 -0
  142. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/github/inject.py +0 -0
  143. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/inject.py +0 -0
  144. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/requirements.py +0 -0
  145. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/shell.py +0 -0
  146. {omdev-0.0.28 → omdev-0.0.30}/omdev/ci/utils.py +0 -0
  147. {omdev-0.0.28 → omdev-0.0.30}/omdev/cli/__init__.py +0 -0
  148. {omdev-0.0.28 → omdev-0.0.30}/omdev/cli/__main__.py +0 -0
  149. {omdev-0.0.28 → omdev-0.0.30}/omdev/cli/_pathhack.py +0 -0
  150. {omdev-0.0.28 → omdev-0.0.30}/omdev/cli/main.py +0 -0
  151. {omdev-0.0.28 → omdev-0.0.30}/omdev/cli/managers.py +0 -0
  152. {omdev-0.0.28 → omdev-0.0.30}/omdev/cli/types.py +0 -0
  153. {omdev-0.0.28 → omdev-0.0.30}/omdev/clipboard/__init__.py +0 -0
  154. {omdev-0.0.28 → omdev-0.0.30}/omdev/clipboard/capi/__init__.py +0 -0
  155. {omdev-0.0.28 → omdev-0.0.30}/omdev/clipboard/capi/darwin_cf.py +0 -0
  156. {omdev-0.0.28 → omdev-0.0.30}/omdev/clipboard/capi/linux_x11.py +0 -0
  157. {omdev-0.0.28 → omdev-0.0.30}/omdev/clipboard/commands.py +0 -0
  158. {omdev-0.0.28 → omdev-0.0.30}/omdev/clipboard/platform.py +0 -0
  159. {omdev-0.0.28 → omdev-0.0.30}/omdev/clipboard/types.py +0 -0
  160. {omdev-0.0.28 → omdev-0.0.30}/omdev/cmake.py +0 -0
  161. {omdev-0.0.28 → omdev-0.0.30}/omdev/cmdlog/__init__.py +0 -0
  162. {omdev-0.0.28 → omdev-0.0.30}/omdev/cmdlog/__main__.py +0 -0
  163. {omdev-0.0.28 → omdev-0.0.30}/omdev/cmdlog/_cmdlog.py +0 -0
  164. {omdev-0.0.28 → omdev-0.0.30}/omdev/cmdlog/cli.py +0 -0
  165. {omdev-0.0.28 → omdev-0.0.30}/omdev/cmdlog/cmdlog.py +0 -0
  166. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataclasses/__init__.py +0 -0
  167. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataclasses/__main__.py +0 -0
  168. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataclasses/_template.py +0 -0
  169. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataclasses/cli.py +0 -0
  170. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataclasses/dumping.py +0 -0
  171. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataserver/__init__.py +0 -0
  172. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataserver/handlers.py +0 -0
  173. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataserver/http.py +0 -0
  174. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataserver/routes.py +0 -0
  175. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataserver/server.py +0 -0
  176. {omdev-0.0.28 → omdev-0.0.30}/omdev/dataserver/targets.py +0 -0
  177. {omdev-0.0.28 → omdev-0.0.30}/omdev/diffs/__init__.py +0 -0
  178. {omdev-0.0.28 → omdev-0.0.30}/omdev/diffs/__main__.py +0 -0
  179. {omdev-0.0.28 → omdev-0.0.30}/omdev/diffs/cli.py +0 -0
  180. {omdev-0.0.28 → omdev-0.0.30}/omdev/diffs/parsing.py +0 -0
  181. {omdev-0.0.28 → omdev-0.0.30}/omdev/diffs/rendering.py +0 -0
  182. {omdev-0.0.28 → omdev-0.0.30}/omdev/diffs/types.py +0 -0
  183. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/__init__.py +0 -0
  184. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/__main__.py +0 -0
  185. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/build.py +0 -0
  186. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/config.py +0 -0
  187. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/content.py +0 -0
  188. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/helpers.py +0 -0
  189. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/ops.py +0 -0
  190. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/rendering.py +0 -0
  191. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  192. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/configs/.sqliterc +0 -0
  193. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  194. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  195. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/depsets/system.toml +0 -0
  196. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  197. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  198. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/chgrp.sh +0 -0
  199. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  200. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  201. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  202. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/man.sh +0 -0
  203. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  204. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  205. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/rbenv.sh +0 -0
  206. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
  207. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  208. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/user.sh +0 -0
  209. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
  210. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  211. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/workdir.sh +0 -0
  212. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  213. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/scripts/install-claude +0 -0
  214. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/scripts/install-codex +0 -0
  215. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/scripts/install-pi +0 -0
  216. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/scripts/run-dbus +0 -0
  217. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/resources/shift-uid.sh +0 -0
  218. {omdev-0.0.28 → omdev-0.0.30}/omdev/dockerdev/utils.py +0 -0
  219. {omdev-0.0.28 → omdev-0.0.30}/omdev/git/__init__.py +0 -0
  220. {omdev-0.0.28 → omdev-0.0.30}/omdev/git/magic.py +0 -0
  221. {omdev-0.0.28 → omdev-0.0.30}/omdev/git/revisions.py +0 -0
  222. {omdev-0.0.28 → omdev-0.0.30}/omdev/git/shallow.py +0 -0
  223. {omdev-0.0.28 → omdev-0.0.30}/omdev/git/status.py +0 -0
  224. {omdev-0.0.28 → omdev-0.0.30}/omdev/home/__init__.py +0 -0
  225. {omdev-0.0.28 → omdev-0.0.30}/omdev/home/__main__.py +0 -0
  226. {omdev-0.0.28 → omdev-0.0.30}/omdev/home/cli.py +0 -0
  227. {omdev-0.0.28 → omdev-0.0.30}/omdev/home/shadow.py +0 -0
  228. {omdev-0.0.28 → omdev-0.0.30}/omdev/imgur.py +0 -0
  229. {omdev-0.0.28 → omdev-0.0.30}/omdev/intellij/__init__.py +0 -0
  230. {omdev-0.0.28 → omdev-0.0.30}/omdev/intellij/cli.py +0 -0
  231. {omdev-0.0.28 → omdev-0.0.30}/omdev/intellij/ides.py +0 -0
  232. {omdev-0.0.28 → omdev-0.0.30}/omdev/intellij/open.py +0 -0
  233. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/__init__.py +0 -0
  234. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/__main__.py +0 -0
  235. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/cli.py +0 -0
  236. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/default.py +0 -0
  237. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/inject.py +0 -0
  238. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/inspect.py +0 -0
  239. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/providers/__init__.py +0 -0
  240. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/providers/base.py +0 -0
  241. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/providers/inject.py +0 -0
  242. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/providers/running.py +0 -0
  243. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/providers/system.py +0 -0
  244. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/pyenv/__init__.py +0 -0
  245. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/pyenv/inject.py +0 -0
  246. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/pyenv/install.py +0 -0
  247. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/pyenv/provider.py +0 -0
  248. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/pyenv/pyenv.py +0 -0
  249. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/resolvers.py +0 -0
  250. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/types.py +0 -0
  251. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/uv/__init__.py +0 -0
  252. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/uv/inject.py +0 -0
  253. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/uv/provider.py +0 -0
  254. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/uv/uv.py +0 -0
  255. {omdev-0.0.28 → omdev-0.0.30}/omdev/interp/venvs.py +0 -0
  256. {omdev-0.0.28 → omdev-0.0.30}/omdev/java/__init__.py +0 -0
  257. {omdev-0.0.28 → omdev-0.0.30}/omdev/java/__main__.py +0 -0
  258. {omdev-0.0.28 → omdev-0.0.30}/omdev/java/cli.py +0 -0
  259. {omdev-0.0.28 → omdev-0.0.30}/omdev/java/pomgen.py +0 -0
  260. {omdev-0.0.28 → omdev-0.0.30}/omdev/java/utils.py +0 -0
  261. {omdev-0.0.28 → omdev-0.0.30}/omdev/java/xml.py +0 -0
  262. {omdev-0.0.28 → omdev-0.0.30}/omdev/magic/__init__.py +0 -0
  263. {omdev-0.0.28 → omdev-0.0.30}/omdev/magic/__main__.py +0 -0
  264. {omdev-0.0.28 → omdev-0.0.30}/omdev/magic/cli.py +0 -0
  265. {omdev-0.0.28 → omdev-0.0.30}/omdev/magic/find.py +0 -0
  266. {omdev-0.0.28 → omdev-0.0.30}/omdev/magic/magic.py +0 -0
  267. {omdev-0.0.28 → omdev-0.0.30}/omdev/magic/prepare.py +0 -0
  268. {omdev-0.0.28 → omdev-0.0.30}/omdev/magic/styles.py +0 -0
  269. {omdev-0.0.28 → omdev-0.0.30}/omdev/manifests/__init__.py +0 -0
  270. {omdev-0.0.28 → omdev-0.0.30}/omdev/manifests/__main__.py +0 -0
  271. {omdev-0.0.28 → omdev-0.0.30}/omdev/manifests/building.py +0 -0
  272. {omdev-0.0.28 → omdev-0.0.30}/omdev/manifests/dumping.py +0 -0
  273. {omdev-0.0.28 → omdev-0.0.30}/omdev/manifests/main.py +0 -0
  274. {omdev-0.0.28 → omdev-0.0.30}/omdev/markdown/__init__.py +0 -0
  275. {omdev-0.0.28 → omdev-0.0.30}/omdev/markdown/incparse.py +0 -0
  276. {omdev-0.0.28 → omdev-0.0.30}/omdev/markdown/tokens.py +0 -0
  277. {omdev-0.0.28 → omdev-0.0.30}/omdev/mypy/__init__.py +0 -0
  278. {omdev-0.0.28 → omdev-0.0.30}/omdev/mypy/debug.py +0 -0
  279. {omdev-0.0.28 → omdev-0.0.30}/omdev/mypy/report.py +0 -0
  280. {omdev-0.0.28 → omdev-0.0.30}/omdev/packaging/__init__.py +0 -0
  281. {omdev-0.0.28 → omdev-0.0.30}/omdev/packaging/marshal.py +0 -0
  282. {omdev-0.0.28 → omdev-0.0.30}/omdev/packaging/names.py +0 -0
  283. {omdev-0.0.28 → omdev-0.0.30}/omdev/packaging/requires.py +0 -0
  284. {omdev-0.0.28 → omdev-0.0.30}/omdev/packaging/revisions.py +0 -0
  285. {omdev-0.0.28 → omdev-0.0.30}/omdev/packaging/specifiers.py +0 -0
  286. {omdev-0.0.28 → omdev-0.0.30}/omdev/packaging/versions.py +0 -0
  287. {omdev-0.0.28 → omdev-0.0.30}/omdev/packaging/wheelfile.py +0 -0
  288. {omdev-0.0.28 → omdev-0.0.30}/omdev/pip.py +0 -0
  289. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/__init__.py +0 -0
  290. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/__main__.py +0 -0
  291. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/base.py +0 -0
  292. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/blanklines.py +0 -0
  293. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/caches.py +0 -0
  294. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/git.py +0 -0
  295. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/imports.py +0 -0
  296. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/lite.py +0 -0
  297. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/main.py +0 -0
  298. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/manifests.py +0 -0
  299. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/scripts.py +0 -0
  300. {omdev-0.0.28 → omdev-0.0.30}/omdev/precheck/unicode.py +0 -0
  301. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/__init__.py +0 -0
  302. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/asts/__init__.py +0 -0
  303. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/asts/parents.py +0 -0
  304. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/asts/toplevel.py +0 -0
  305. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/asts/visitors.py +0 -0
  306. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/attrdocs.py +0 -0
  307. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/bracepy.py +0 -0
  308. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/classdot.py +0 -0
  309. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/docstrings/LICENSE +0 -0
  310. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/docstrings/__init__.py +0 -0
  311. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/docstrings/attrdoc.py +0 -0
  312. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/docstrings/common.py +0 -0
  313. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/docstrings/epydoc.py +0 -0
  314. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/docstrings/google.py +0 -0
  315. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/docstrings/numpydoc.py +0 -0
  316. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/docstrings/parser.py +0 -0
  317. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/docstrings/rest.py +0 -0
  318. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/findimports.py +0 -0
  319. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/reprs.py +0 -0
  320. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/scripts/__init__.py +0 -0
  321. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/scripts/bumpversion.py +0 -0
  322. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/scripts/importtrace.py +0 -0
  323. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/srcheaders.py +0 -0
  324. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/tokens/__init__.py +0 -0
  325. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/tokens/all.py +0 -0
  326. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/tokens/tokenizert.py +0 -0
  327. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/tokens/utils.py +0 -0
  328. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/tools/__init__.py +0 -0
  329. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/tools/fixdocstrings.py +0 -0
  330. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/tools/importscan.py +0 -0
  331. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/tools/mkrelimp.py +0 -0
  332. {omdev-0.0.28 → omdev-0.0.30}/omdev/py/tools/pipdepup.py +0 -0
  333. {omdev-0.0.28 → omdev-0.0.30}/omdev/py.typed +0 -0
  334. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/__init__.py +0 -0
  335. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/__main__.py +0 -0
  336. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/cli.py +0 -0
  337. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/configs.py +0 -0
  338. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/inject.py +0 -0
  339. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/reqs.py +0 -0
  340. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/resources/dockerdev.sh +0 -0
  341. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/resources/python.sh +0 -0
  342. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/tools/__init__.py +0 -0
  343. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/tools/aboutdeps.py +0 -0
  344. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/tools/pyversions.py +0 -0
  345. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/venvs.py +0 -0
  346. {omdev-0.0.28 → omdev-0.0.30}/omdev/pyproject/versions.py +0 -0
  347. {omdev-0.0.28 → omdev-0.0.30}/omdev/rs/__init__.py +0 -0
  348. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/__init__.py +0 -0
  349. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/lib/__init__.py +0 -0
  350. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/lib/formats/__init__.py +0 -0
  351. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/lib/io/__init__.py +0 -0
  352. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/lib/logs.py +0 -0
  353. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/slowcat.py +0 -0
  354. {omdev-0.0.28 → omdev-0.0.30}/omdev/scripts/tmpexec.py +0 -0
  355. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/__init__.py +0 -0
  356. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/__init__.py +0 -0
  357. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/messages/__init__.py +0 -0
  358. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/messages/base.py +0 -0
  359. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/messages/formats.py +0 -0
  360. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/messages/messages.py +0 -0
  361. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/messages/parsing.py +0 -0
  362. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/numerics/__init__.py +0 -0
  363. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/numerics/formats.py +0 -0
  364. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/numerics/numerics.py +0 -0
  365. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/numerics/types.py +0 -0
  366. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/protocol/LICENSE +0 -0
  367. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/protocol/__init__.py +0 -0
  368. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/protocol/consts.py +0 -0
  369. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/protocol/errors.py +0 -0
  370. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/protocol/message.py +0 -0
  371. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/protocol/nuh.py +0 -0
  372. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/protocol/parsing.py +0 -0
  373. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/protocol/rendering.py +0 -0
  374. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/protocol/tags.py +0 -0
  375. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/irc/protocol/utils.py +0 -0
  376. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/__init__.py +0 -0
  377. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/__init__.py +0 -0
  378. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/__main__.py +0 -0
  379. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/analysis.py +0 -0
  380. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/cli.py +0 -0
  381. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/config.py +0 -0
  382. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/errors.py +0 -0
  383. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/generator.py +0 -0
  384. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/ir.py +0 -0
  385. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/names.py +0 -0
  386. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/rendering.py +0 -0
  387. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/transforms.py +0 -0
  388. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/jsonschema/codegen/typing.py +0 -0
  389. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/__init__.py +0 -0
  390. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/building.py +0 -0
  391. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/compression.py +0 -0
  392. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/data.py +0 -0
  393. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/datarefs.py +0 -0
  394. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/dataserver.py +0 -0
  395. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/loading.py +0 -0
  396. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/media.py +0 -0
  397. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/pack/__init__.py +0 -0
  398. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/pack/packing.py +0 -0
  399. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/pack/repositories.py +0 -0
  400. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/pack/unpacking.py +0 -0
  401. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/repositories.py +0 -0
  402. {omdev-0.0.28 → omdev-0.0.30}/omdev/specs/oci/tars.py +0 -0
  403. {omdev-0.0.28 → omdev-0.0.30}/omdev/tagstrings.py +0 -0
  404. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/__init__.py +0 -0
  405. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/cloc.py +0 -0
  406. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/diff.py +0 -0
  407. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/doc.py +0 -0
  408. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/docker.py +0 -0
  409. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/git/__init__.py +0 -0
  410. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/git/__main__.py +0 -0
  411. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/git/cli.py +0 -0
  412. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/git/cloning.py +0 -0
  413. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/git/consts.py +0 -0
  414. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/git/messages.py +0 -0
  415. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/json/__init__.py +0 -0
  416. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/json/__main__.py +0 -0
  417. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/json/cli.py +0 -0
  418. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/json/formats.py +0 -0
  419. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/json/io.py +0 -0
  420. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/json/parsing.py +0 -0
  421. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/json/processing.py +0 -0
  422. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/json/rendering.py +0 -0
  423. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/jsonview/__init__.py +0 -0
  424. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/jsonview/__main__.py +0 -0
  425. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/jsonview/cli.py +0 -0
  426. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  427. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  428. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  429. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/linehisto.py +0 -0
  430. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/mkenv.py +0 -0
  431. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/notebook.py +0 -0
  432. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/ocr.py +0 -0
  433. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/pawk/README.md +0 -0
  434. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/pawk/__init__.py +0 -0
  435. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/pawk/__main__.py +0 -0
  436. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/pawk/pawk.py +0 -0
  437. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/pip.py +0 -0
  438. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/prof.py +0 -0
  439. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/qr.py +0 -0
  440. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/shadow.py +0 -0
  441. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/shell.py +0 -0
  442. {omdev-0.0.28 → omdev-0.0.30}/omdev/tools/sqlrepl.py +0 -0
  443. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/__init__.py +0 -0
  444. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/__init__.py +0 -0
  445. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/edit/__init__.py +0 -0
  446. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/edit/main.py +0 -0
  447. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/irc/__init__.py +0 -0
  448. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/irc/__main__.py +0 -0
  449. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/irc/app.py +0 -0
  450. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/irc/client.py +0 -0
  451. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/irc/commands.py +0 -0
  452. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/irc/main.py +0 -0
  453. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/jtree/LICENSE +0 -0
  454. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/jtree/__init__.py +0 -0
  455. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/jtree/__main__.py +0 -0
  456. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/jtree/app.py +0 -0
  457. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/jtree/cli.py +0 -0
  458. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/jtree/styles/layout.tcss +0 -0
  459. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/jtree/utils.py +0 -0
  460. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/jtree/widgets.py +0 -0
  461. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/markdown/__init__.py +0 -0
  462. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/markdown/__main__.py +0 -0
  463. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/apps/markdown/cli.py +0 -0
  464. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/__init__.py +0 -0
  465. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/console2.py +0 -0
  466. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/diff/LICENSE +0 -0
  467. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/diff/__init__.py +0 -0
  468. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/diff/__main__.py +0 -0
  469. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/diff/_compat.py +0 -0
  470. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/diff/cli.py +0 -0
  471. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/diff/renderables.py +0 -0
  472. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/diff/rendering.py +0 -0
  473. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/diff/underlinebar.py +0 -0
  474. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/markdown2.py +0 -0
  475. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/textual/__init__.py +0 -0
  476. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/textual/dark.py +0 -0
  477. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/textual/dump.py +0 -0
  478. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/textual/themes.py +0 -0
  479. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/rich/trirule.py +0 -0
  480. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/__init__.py +0 -0
  481. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/actionmenu.py +0 -0
  482. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/LICENSE +0 -0
  483. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/__init__.py +0 -0
  484. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/client.py +0 -0
  485. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/__init__.py +0 -0
  486. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/borders.py +0 -0
  487. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/colors.py +0 -0
  488. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/colors.tcss +0 -0
  489. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/easing.py +0 -0
  490. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/easing.tcss +0 -0
  491. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/previews/keys.py +0 -0
  492. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/protocol.py +0 -0
  493. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/redirect_output.py +0 -0
  494. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/renderables.py +0 -0
  495. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/server.py +0 -0
  496. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/service.py +0 -0
  497. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/tools/__init__.py +0 -0
  498. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/altdevtools/tools/diagnose.py +0 -0
  499. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/app2.py +0 -0
  500. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  501. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  502. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/autocomplete/matching.py +0 -0
  503. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/autocomplete/paths.py +0 -0
  504. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/autocomplete/widget.py +0 -0
  505. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/binding2.py +0 -0
  506. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/clipboard.py +0 -0
  507. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/debug/__init__.py +0 -0
  508. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/debug/dominfo.py +0 -0
  509. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/debug/screen.py +0 -0
  510. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/devtools.py +0 -0
  511. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/dom2.py +0 -0
  512. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/drivers2.py +0 -0
  513. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/logging2.py +0 -0
  514. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/render2.py +0 -0
  515. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/screen2.py +0 -0
  516. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/types.py +0 -0
  517. {omdev-0.0.28 → omdev-0.0.30}/omdev/tui/textual/widgets2.py +0 -0
  518. {omdev-0.0.28 → omdev-0.0.30}/omdev.egg-info/SOURCES.txt +0 -0
  519. {omdev-0.0.28 → omdev-0.0.30}/omdev.egg-info/dependency_links.txt +0 -0
  520. {omdev-0.0.28 → omdev-0.0.30}/omdev.egg-info/entry_points.txt +0 -0
  521. {omdev-0.0.28 → omdev-0.0.30}/omdev.egg-info/top_level.txt +0 -0
  522. {omdev-0.0.28 → omdev-0.0.30}/setup.cfg +0 -0
@@ -1,11 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.28
3
+ Version: 0.0.30
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
7
- Project-URL: source, https://github.com/wrmsr/omcore
8
- Classifier: Development Status :: 2 - Pre-Alpha
7
+ Project-URL: source, https://github.com/wrmsr/om
9
8
  Classifier: Intended Audience :: Developers
10
9
  Classifier: Operating System :: OS Independent
11
10
  Classifier: Operating System :: POSIX
@@ -14,10 +13,10 @@ Classifier: Programming Language :: Python :: 3.14
14
13
  Requires-Python: >=3.14
15
14
  Description-Content-Type: text/markdown
16
15
  License-File: LICENSE
17
- Requires-Dist: omcore==0.0.28
16
+ Requires-Dist: omcore==0.0.30
18
17
  Provides-Extra: all
19
- Requires-Dist: ominfra==0.0.28; extra == "all"
20
- Requires-Dist: omllm==0.0.28; extra == "all"
18
+ Requires-Dist: ominfra==0.0.30; extra == "all"
19
+ Requires-Dist: omllm==0.0.30; extra == "all"
21
20
  Requires-Dist: black~=26.5; extra == "all"
22
21
  Requires-Dist: pycparser~=3.0; extra == "all"
23
22
  Requires-Dist: pcpp~=1.30; extra == "all"
@@ -36,9 +35,9 @@ Requires-Dist: textual~=8.2; extra == "all"
36
35
  Requires-Dist: textual-dev~=1.8; extra == "all"
37
36
  Requires-Dist: textual-speedups~=0.2; extra == "all"
38
37
  Provides-Extra: ominfra
39
- Requires-Dist: ominfra==0.0.28; extra == "ominfra"
38
+ Requires-Dist: ominfra==0.0.30; extra == "ominfra"
40
39
  Provides-Extra: omllm
41
- Requires-Dist: omllm==0.0.28; extra == "omllm"
40
+ Requires-Dist: omllm==0.0.30; extra == "omllm"
42
41
  Provides-Extra: black
43
42
  Requires-Dist: black~=26.5; extra == "black"
44
43
  Provides-Extra: c
@@ -73,48 +72,46 @@ Development utilities and support code.
73
72
 
74
73
  # Notable packages
75
74
 
76
- - **[cli](https://github.com/wrmsr/omlish/blob/master/omdev/cli)** - The codebase's all-in-one CLI. This is not
77
- installed as an entrypoint / command when this package is itself installed - that is separated into the `omdev-cli`
78
- installable package so as to not pollute users' bin/ directories when depping this lib for its utility code.
75
+ - **[cli](https://github.com/wrmsr/om/blob/master/omdev/cli)** - The codebase's all-in-one CLI. This is not installed as
76
+ an entrypoint / command when this package is itself installed - that is separated into the `omdev-cli` installable
77
+ package so as to not pollute users' bin/ directories when depping this lib for its utility code.
79
78
 
80
- - **[amalg](https://github.com/wrmsr/omlish/blob/master/omdev/amalg)** - The [amalgamator](#amalgamation).
79
+ - **[amalg](https://github.com/wrmsr/om/blob/master/omdev/amalg)** - The [amalgamator](#amalgamation).
81
80
 
82
- - **[pyproject](https://github.com/wrmsr/omlish/blob/master/omdev/pyproject)**
83
- ([amalg](https://github.com/wrmsr/omlish/blob/master/omdev/scripts/pyproject.py)) - python project management tool.
81
+ - **[pyproject](https://github.com/wrmsr/om/blob/master/omdev/pyproject)**
82
+ ([amalg](https://github.com/wrmsr/om/blob/master/omdev/scripts/pyproject.py)) - python project management tool.
84
83
  wrangles but does not replace tools like venv, pip, setuptools, and uv. does things like sets up venvs, generates
85
- [`.pkg`](https://github.com/wrmsr/omlish/blob/master/.pkg) directories and their `pyproject.toml`'s (from their
84
+ [`.pkg`](https://github.com/wrmsr/om/blob/master/.pkg) directories and their `pyproject.toml`'s (from their
86
85
  `__about__.py`'s), and packages them. this should grow to eat more and more of the Makefile. as it is amalgamated it
87
86
  requires no installation and can just be dropped into other projects / repos.
88
87
 
89
- - **[ci](https://github.com/wrmsr/omlish/blob/master/omdev/ci)**
90
- ([amalg](https://github.com/wrmsr/omlish/blob/master/omdev/scripts/ci.py)) - ci runner. given a
91
- [`compose.yml`](https://github.com/wrmsr/omlish/blob/master/docker/compose.yml)
92
- and requirements.txt files, takes care of building and caching of containers and venvs and execution of required ci
93
- commands. detects and [natively uses](https://github.com/wrmsr/omlish/blob/master/omdev/ci/github/api/v2)
94
- github-action's caching system. unifies ci execution between local dev and github runners.
88
+ - **[ci](https://github.com/wrmsr/om/blob/master/omdev/ci)**
89
+ ([amalg](https://github.com/wrmsr/om/blob/master/omdev/scripts/ci.py)) - ci runner. given a
90
+ [`compose.yml`](https://github.com/wrmsr/om/blob/master/docker/compose.yml) and requirements.txt files, takes care of
91
+ building and caching of containers and venvs and execution of required ci commands. detects and [natively
92
+ uses](https://github.com/wrmsr/om/blob/master/omdev/ci/github/api/v2) github-action's caching system. unifies ci
93
+ execution between local dev and github runners.
95
94
 
96
- - **[tools.json](https://github.com/wrmsr/omlish/blob/master/omdev/tools/json)** (cli: `om j`) - a tool for json-like
97
- data, obviously in the vein of [jq](https://github.com/jqlang/jq) but using the internal
98
- [jmespath](https://github.com/wrmsr/omlish/blob/master/omcore/specs/jmespath) engine. supports
99
- [true streaming](https://github.com/wrmsr/omlish/blob/master/omcore/formats/json/stream) json input and output, as
100
- well as [various other](https://github.com/wrmsr/omlish/blob/master/omdev/tools/json/formats.py) non-streaming input
101
- formats.
95
+ - **[tools.json](https://github.com/wrmsr/om/blob/master/omdev/tools/json)** (cli: `om j`) - a tool for json-like data,
96
+ obviously in the vein of [jq](https://github.com/jqlang/jq) but using the internal
97
+ [jmespath](https://github.com/wrmsr/om/blob/master/omcore/specs/jmespath) engine. supports [true
98
+ streaming](https://github.com/wrmsr/om/blob/master/omcore/formats/json/stream) json input and output, as well as
99
+ [various other](https://github.com/wrmsr/om/blob/master/omdev/tools/json/formats.py) non-streaming input formats.
102
100
 
103
- - **[tools.git](https://github.com/wrmsr/omlish/blob/master/omdev/tools/git)** (cli: `om git`) - a tool for various lazy
104
- git operations, including the one that (poorly) writes all of these commit messages.
101
+ - **[tools.git](https://github.com/wrmsr/om/blob/master/omdev/tools/git)** (cli: `om git`) - a tool for various lazy git
102
+ operations, including the one that (poorly) writes all of these commit messages.
105
103
 
106
104
  # Amalgamation
107
105
 
108
106
  Amalgamation is the process of stitching together multiple python source files into a single self-contained python
109
- script. ['lite'](https://github.com/wrmsr/omlish/blob/master/omcore#lite-code) code is written in a style conducive to
110
- this.
107
+ script. ['lite'](https://github.com/wrmsr/om/blob/master/omcore#lite-code) code is written in a style conducive to this.
111
108
 
112
109
  # Local storage
113
110
 
114
111
  Some of this code, when asked, will store things on the local filesystem. The only directories used (outside of ones
115
112
  explicitly specified as command or function arguments) are managed in
116
- [home.paths](https://github.com/wrmsr/omlish/blob/master/omdev/home/paths.py), and are the following:
113
+ [home.paths](https://github.com/wrmsr/om/blob/master/omdev/home/paths.py), and are the following:
117
114
 
118
- - `$OMLISH_HOME`, default of `~/.omlish` - persistent things like config and state.
119
- - `$OMLISH_CACHE`, default of `~/.cache/omlish` - used for things like the local ci cache and
120
- [various other](https://github.com/search?q=repo%3Awrmsr%2Fomlish+%22dcache.%22&type=code) cached data.
115
+ - `$OM_HOME`, default of `~/.om` - persistent things like config and state.
116
+ - `$OM_CACHE`, default of `~/.cache/om` - used for things like the local ci cache and [various
117
+ other](https://github.com/search?q=repo%3Awrmsr%2Fom+%22dcache.%22&type=code) cached data.
omdev-0.0.30/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # Overview
2
+
3
+ Development utilities and support code.
4
+
5
+ # Notable packages
6
+
7
+ - **[cli](https://github.com/wrmsr/om/blob/master/omdev/cli)** - The codebase's all-in-one CLI. This is not installed as
8
+ an entrypoint / command when this package is itself installed - that is separated into the `omdev-cli` installable
9
+ package so as to not pollute users' bin/ directories when depping this lib for its utility code.
10
+
11
+ - **[amalg](https://github.com/wrmsr/om/blob/master/omdev/amalg)** - The [amalgamator](#amalgamation).
12
+
13
+ - **[pyproject](https://github.com/wrmsr/om/blob/master/omdev/pyproject)**
14
+ ([amalg](https://github.com/wrmsr/om/blob/master/omdev/scripts/pyproject.py)) - python project management tool.
15
+ wrangles but does not replace tools like venv, pip, setuptools, and uv. does things like sets up venvs, generates
16
+ [`.pkg`](https://github.com/wrmsr/om/blob/master/.pkg) directories and their `pyproject.toml`'s (from their
17
+ `__about__.py`'s), and packages them. this should grow to eat more and more of the Makefile. as it is amalgamated it
18
+ requires no installation and can just be dropped into other projects / repos.
19
+
20
+ - **[ci](https://github.com/wrmsr/om/blob/master/omdev/ci)**
21
+ ([amalg](https://github.com/wrmsr/om/blob/master/omdev/scripts/ci.py)) - ci runner. given a
22
+ [`compose.yml`](https://github.com/wrmsr/om/blob/master/docker/compose.yml) and requirements.txt files, takes care of
23
+ building and caching of containers and venvs and execution of required ci commands. detects and [natively
24
+ uses](https://github.com/wrmsr/om/blob/master/omdev/ci/github/api/v2) github-action's caching system. unifies ci
25
+ execution between local dev and github runners.
26
+
27
+ - **[tools.json](https://github.com/wrmsr/om/blob/master/omdev/tools/json)** (cli: `om j`) - a tool for json-like data,
28
+ obviously in the vein of [jq](https://github.com/jqlang/jq) but using the internal
29
+ [jmespath](https://github.com/wrmsr/om/blob/master/omcore/specs/jmespath) engine. supports [true
30
+ streaming](https://github.com/wrmsr/om/blob/master/omcore/formats/json/stream) json input and output, as well as
31
+ [various other](https://github.com/wrmsr/om/blob/master/omdev/tools/json/formats.py) non-streaming input formats.
32
+
33
+ - **[tools.git](https://github.com/wrmsr/om/blob/master/omdev/tools/git)** (cli: `om git`) - a tool for various lazy git
34
+ operations, including the one that (poorly) writes all of these commit messages.
35
+
36
+ # Amalgamation
37
+
38
+ Amalgamation is the process of stitching together multiple python source files into a single self-contained python
39
+ script. ['lite'](https://github.com/wrmsr/om/blob/master/omcore#lite-code) code is written in a style conducive to this.
40
+
41
+ # Local storage
42
+
43
+ Some of this code, when asked, will store things on the local filesystem. The only directories used (outside of ones
44
+ explicitly specified as command or function arguments) are managed in
45
+ [home.paths](https://github.com/wrmsr/om/blob/master/omdev/home/paths.py), and are the following:
46
+
47
+ - `$OM_HOME`, default of `~/.om` - persistent things like config and state.
48
+ - `$OM_CACHE`, default of `~/.cache/om` - used for things like the local ci cache and [various
49
+ other](https://github.com/search?q=repo%3Awrmsr%2Fom+%22dcache.%22&type=code) cached data.
@@ -0,0 +1,49 @@
1
+ # Overview
2
+
3
+ Development utilities and support code.
4
+
5
+ # Notable packages
6
+
7
+ - **[cli](https://github.com/wrmsr/om/blob/master/omdev/cli)** - The codebase's all-in-one CLI. This is not installed as
8
+ an entrypoint / command when this package is itself installed - that is separated into the `omdev-cli` installable
9
+ package so as to not pollute users' bin/ directories when depping this lib for its utility code.
10
+
11
+ - **[amalg](https://github.com/wrmsr/om/blob/master/omdev/amalg)** - The [amalgamator](#amalgamation).
12
+
13
+ - **[pyproject](https://github.com/wrmsr/om/blob/master/omdev/pyproject)**
14
+ ([amalg](https://github.com/wrmsr/om/blob/master/omdev/scripts/pyproject.py)) - python project management tool.
15
+ wrangles but does not replace tools like venv, pip, setuptools, and uv. does things like sets up venvs, generates
16
+ [`.pkg`](https://github.com/wrmsr/om/blob/master/.pkg) directories and their `pyproject.toml`'s (from their
17
+ `__about__.py`'s), and packages them. this should grow to eat more and more of the Makefile. as it is amalgamated it
18
+ requires no installation and can just be dropped into other projects / repos.
19
+
20
+ - **[ci](https://github.com/wrmsr/om/blob/master/omdev/ci)**
21
+ ([amalg](https://github.com/wrmsr/om/blob/master/omdev/scripts/ci.py)) - ci runner. given a
22
+ [`compose.yml`](https://github.com/wrmsr/om/blob/master/docker/compose.yml) and requirements.txt files, takes care of
23
+ building and caching of containers and venvs and execution of required ci commands. detects and [natively
24
+ uses](https://github.com/wrmsr/om/blob/master/omdev/ci/github/api/v2) github-action's caching system. unifies ci
25
+ execution between local dev and github runners.
26
+
27
+ - **[tools.json](https://github.com/wrmsr/om/blob/master/omdev/tools/json)** (cli: `om j`) - a tool for json-like data,
28
+ obviously in the vein of [jq](https://github.com/jqlang/jq) but using the internal
29
+ [jmespath](https://github.com/wrmsr/om/blob/master/omcore/specs/jmespath) engine. supports [true
30
+ streaming](https://github.com/wrmsr/om/blob/master/omcore/formats/json/stream) json input and output, as well as
31
+ [various other](https://github.com/wrmsr/om/blob/master/omdev/tools/json/formats.py) non-streaming input formats.
32
+
33
+ - **[tools.git](https://github.com/wrmsr/om/blob/master/omdev/tools/git)** (cli: `om git`) - a tool for various lazy git
34
+ operations, including the one that (poorly) writes all of these commit messages.
35
+
36
+ # Amalgamation
37
+
38
+ Amalgamation is the process of stitching together multiple python source files into a single self-contained python
39
+ script. ['lite'](https://github.com/wrmsr/om/blob/master/omcore#lite-code) code is written in a style conducive to this.
40
+
41
+ # Local storage
42
+
43
+ Some of this code, when asked, will store things on the local filesystem. The only directories used (outside of ones
44
+ explicitly specified as command or function arguments) are managed in
45
+ [home.paths](https://github.com/wrmsr/om/blob/master/omdev/home/paths.py), and are the following:
46
+
47
+ - `$OM_HOME`, default of `~/.om` - persistent things like config and state.
48
+ - `$OM_CACHE`, default of `~/.cache/om` - used for things like the local ci cache and [various
49
+ other](https://github.com/search?q=repo%3Awrmsr%2Fom+%22dcache.%22&type=code) cached data.
@@ -8,12 +8,12 @@ Inputs:
8
8
 
9
9
  ==
10
10
 
11
- run --cache-dir omdev/ci/tests/cache -e CI=1 omdev/ci/tests/project omlish-ci pytest tests
11
+ run --cache-dir omdev/ci/tests/cache -e CI=1 omdev/ci/tests/project om-ci pytest tests
12
12
 
13
- run --cache-dir omdev/ci/tests/cache --cache-served-docker --always-build -e CI=1 omdev/ci/tests/project omlish-ci pytest tests
14
- run --cache-dir omdev/ci/tests/cache --cache-served-docker --always-build --always-pull -e CI=1 omdev/ci/tests/project omlish-ci pytest tests
13
+ run --cache-dir omdev/ci/tests/cache --cache-served-docker --always-build -e CI=1 omdev/ci/tests/project om-ci pytest tests
14
+ run --cache-dir omdev/ci/tests/cache --cache-served-docker --always-build --always-pull -e CI=1 omdev/ci/tests/project om-ci pytest tests
15
15
 
16
- run --cache-dir ~/.cache/omlish/ci . omlish-ci bash
16
+ run --cache-dir ~/.cache/om/ci . om-ci bash
17
17
  """ # noqa
18
18
  import argparse
19
19
  import asyncio
@@ -31,7 +31,7 @@ from .types import CliModule
31
31
  ##
32
32
 
33
33
 
34
- DEFAULT_REINSTALL_URL = 'https://raw.githubusercontent.com/wrmsr/omlish/master/omdev/cli/install.py'
34
+ DEFAULT_REINSTALL_URL = 'https://raw.githubusercontent.com/wrmsr/om/master/omdev/cli/install.py'
35
35
 
36
36
 
37
37
  ##
@@ -2,7 +2,7 @@
2
2
  # ruff: noqa: UP045
3
3
  # @om-lite
4
4
  # @om-script
5
- """curl -LsSf 'https://raw.githubusercontent.com/wrmsr/omlish/master/omdev/cli/install.py' | python3 -"""
5
+ """curl -LsSf 'https://raw.githubusercontent.com/wrmsr/om/master/omdev/cli/install.py' | python3 -"""
6
6
  import abc
7
7
  import argparse
8
8
  import dataclasses as dc
@@ -42,10 +42,10 @@ def __om_amalg__(): # noqa
42
42
  dict(path='../../omcore/lite/check.py', sha1='62b9ccea94c4f7bcef97e7adae8674b8cb11d4af'),
43
43
  dict(path='../../omcore/lite/io.py', sha1='a60d94f0bdbb2b1541d363c301314682d1686240'),
44
44
  dict(path='../../omcore/lite/objects.py', sha1='9566bbf3530fd71fcc56321485216b592fae21e9'),
45
- dict(path='../../omcore/lite/reflect.py', sha1='c4fec44bf144e9d93293c996af06f6c65fc5e63d'),
46
- dict(path='../../omcore/lite/strings.py', sha1='89631bb5cfd6496176db71ab3abd58b89872068b'),
45
+ dict(path='../../omcore/lite/reflect.py', sha1='fab4ef6f45f278ce7bffcd811cd170b40db107a8'),
46
+ dict(path='../../omcore/lite/strings.py', sha1='b31b8e4b0e4fec4562ea3fa602e4ef2475e5fe7c'),
47
47
  dict(path='../../omcore/lite/json.py', sha1='01124e62093ebd4078602f16df0ec04cb724a612'),
48
- dict(path='../../omcore/lite/marshal.py', sha1='94561fd6c1adc06d87a62cc9750290ac263fc824'),
48
+ dict(path='../../omcore/lite/marshal.py', sha1='9b3f4ff802344313147f412f8f028922afc52b2f'),
49
49
  dict(path='dumping.py', sha1='f385a4502d279cf76e4a2bd69efac82881117e57'),
50
50
  ],
51
51
  )
@@ -911,7 +911,8 @@ def is_generic_alias(obj: ta.Any, *, origin: ta.Any = None) -> bool:
911
911
  )
912
912
 
913
913
 
914
- is_callable_alias = functools.partial(is_generic_alias, origin=ta.Callable)
914
+ # ta.get_origin returns the collections.abc class, never the typing alias.
915
+ is_callable_alias = functools.partial(is_generic_alias, origin=ta.get_origin(ta.Callable[..., ta.Any]))
915
916
 
916
917
 
917
918
  ##
@@ -1015,10 +1016,10 @@ def is_dunder(name: str) -> bool:
1015
1016
 
1016
1017
  def is_sunder(name: str) -> bool:
1017
1018
  return (
1019
+ len(name) > 2 and
1018
1020
  name[0] == name[-1] == '_' and
1019
1021
  name[1:2] != '_' and
1020
- name[-2:-1] != '_' and
1021
- len(name) > 2
1022
+ name[-2:-1] != '_'
1022
1023
  )
1023
1024
 
1024
1025
 
@@ -1032,22 +1033,25 @@ def strip_with_newline(s: str) -> str:
1032
1033
 
1033
1034
 
1034
1035
  @ta.overload
1035
- def split_keep_delimiter(s: str, d: str) -> str: ...
1036
+ def split_keep_delimiter(s: str, d: str) -> ta.List[str]: ...
1036
1037
 
1037
1038
 
1038
1039
  @ta.overload
1039
- def split_keep_delimiter(s: bytes, d: bytes) -> bytes: ...
1040
+ def split_keep_delimiter(s: bytes, d: bytes) -> ta.List[bytes]: ...
1040
1041
 
1041
1042
 
1042
1043
  def split_keep_delimiter(s, d):
1044
+ if not d:
1045
+ raise ValueError(d)
1046
+ dl = len(d)
1043
1047
  ps = []
1044
1048
  i = 0
1045
1049
  while i < len(s):
1046
1050
  if (n := s.find(d, i)) < i:
1047
1051
  ps.append(s[i:])
1048
1052
  break
1049
- ps.append(s[i:n + 1])
1050
- i = n + 1
1053
+ ps.append(s[i:n + dl])
1054
+ i = n + dl
1051
1055
  return ps
1052
1056
 
1053
1057
 
@@ -1312,12 +1316,27 @@ class PrimitiveUnionObjMarshaler(ObjMarshaler):
1312
1316
  raise TypeError(o)
1313
1317
 
1314
1318
  def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
1319
+ if self._x is not None:
1320
+ # The non-primitive member must be tried first - its marshaled form may itself be one of the union's
1321
+ # primitive types (e.g. Union[str, Decimal] wires Decimal as a str), which primitive-first dispatch would
1322
+ # shadow entirely. Such wire values are inherently ambiguous - the non-primitive parse is accepted only
1323
+ # when it faithfully round-trips back to the wire value, so lenient member unmarshalers (e.g. a Sequence
1324
+ # member iterating a str) don't capture values belonging to a primitive member.
1325
+ try:
1326
+ v = self._x.unmarshal(o, ctx)
1327
+ except Exception: # noqa
1328
+ pass
1329
+ else:
1330
+ if not isinstance(o, self._pt):
1331
+ return v
1332
+ try:
1333
+ if self._x.marshal(v, ctx) == o:
1334
+ return v
1335
+ except Exception: # noqa
1336
+ pass
1315
1337
  if isinstance(o, self._pt):
1316
1338
  return o
1317
- elif self._x is not None:
1318
- return self._x.unmarshal(o, ctx)
1319
- else:
1320
- raise TypeError(o)
1339
+ raise TypeError(o)
1321
1340
 
1322
1341
 
1323
1342
  class LiteralObjMarshaler(ObjMarshaler):
@@ -1704,7 +1723,7 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
1704
1723
  self._registered_obj_marshalers = registered_obj_marshalers
1705
1724
 
1706
1725
  self._lock = threading.RLock()
1707
- self._marshalers: ta.Dict[ta.Any, ObjMarshaler] = dict(_DEFAULT_OBJ_MARSHALERS)
1726
+ self._derived_obj_marshalers: ta.Dict[ta.Any, ObjMarshaler] = {}
1708
1727
  self._proxies: ta.Dict[ta.Any, ProxyObjMarshaler] = {}
1709
1728
 
1710
1729
  #
@@ -1713,6 +1732,20 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
1713
1732
  def _is_abstract(cls, ty: type) -> bool:
1714
1733
  return abc.ABC in ty.__bases__ or Abstract in ty.__bases__
1715
1734
 
1735
+ @classmethod
1736
+ def _get_field_type_hints(cls, ty: type) -> ta.Optional[ta.Mapping[str, ta.Any]]:
1737
+ """
1738
+ Best-effort resolution of string / forward-ref field annotations (`from __future__ import annotations` modules,
1739
+ self-referential fields) against their defining modules' namespaces, mro-aware. Returns None on failure (e.g.
1740
+ TYPE_CHECKING-only names, classes exec'd into namespaces absent from sys.modules) - callers fall back to the
1741
+ raw annotations, preserving behavior for already-evaluated ones.
1742
+ """
1743
+
1744
+ try:
1745
+ return ta.get_type_hints(ty)
1746
+ except Exception: # noqa
1747
+ return None
1748
+
1716
1749
  #
1717
1750
 
1718
1751
  def make_obj_marshaler(
@@ -1761,29 +1794,38 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
1761
1794
  return EnumObjMarshaler(ty)
1762
1795
 
1763
1796
  if dc.is_dataclass(ty):
1797
+ hints = self._get_field_type_hints(ty) or {}
1764
1798
  return FieldsObjMarshaler(
1765
1799
  ty,
1766
1800
  [
1767
1801
  FieldsObjMarshaler.Field(
1768
1802
  att=f.name,
1769
1803
  key=check.non_empty_str(fk),
1770
- m=rec(f.type),
1804
+ m=rec(hints.get(f.name, f.type)),
1771
1805
  omit_if_none=check.isinstance(f.metadata.get(OBJ_MARSHALER_OMIT_IF_NONE, False), bool),
1772
1806
  )
1773
1807
  for f in dc.fields(ty)
1808
+ # init=False fields are excluded from both directions - unmarshal passes every key as a ctor
1809
+ # kwarg, so marshaling them would produce round-trip-asymmetric output.
1810
+ if f.init
1774
1811
  if (fk := f.metadata.get(OBJ_MARSHALER_FIELD_KEY, f.name)) is not None
1775
1812
  ],
1776
1813
  non_strict=non_strict_fields,
1777
1814
  )
1778
1815
 
1779
1816
  if issubclass(ty, tuple) and hasattr(ty, '_fields'):
1817
+ hints = self._get_field_type_hints(ty) or {}
1780
1818
  return FieldsObjMarshaler(
1781
1819
  ty,
1782
1820
  [
1783
1821
  FieldsObjMarshaler.Field(
1784
1822
  att=p.name,
1785
1823
  key=p.name,
1786
- m=rec(p.annotation),
1824
+ # Untyped collections.namedtuple fields have empty annotations - marshal them dynamically.
1825
+ m=rec(hints.get(
1826
+ p.name,
1827
+ p.annotation if p.annotation is not inspect.Parameter.empty else ta.Any,
1828
+ )),
1787
1829
  )
1788
1830
  for p in inspect.signature(ty).parameters.values()
1789
1831
  ],
@@ -1874,12 +1916,21 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
1874
1916
  **kwargs: ta.Any,
1875
1917
  ) -> ObjMarshaler:
1876
1918
  with self._lock:
1919
+ ck = (ty, tuple(sorted(kwargs.items())))
1877
1920
  if not no_cache:
1921
+ # Explicitly set marshalers (and the defaults) are authoritative regardless of construction kwargs.
1878
1922
  try:
1879
1923
  return self._obj_marshalers[ty]
1880
1924
  except KeyError:
1881
1925
  pass
1882
1926
 
1927
+ # Derived marshalers are cached under their construction kwargs - a strict marshaler must not be
1928
+ # returned for a non-strict request, nor vice versa.
1929
+ try:
1930
+ return self._derived_obj_marshalers[ck]
1931
+ except KeyError:
1932
+ pass
1933
+
1883
1934
  try:
1884
1935
  return self._proxies[ty]
1885
1936
  except KeyError:
@@ -1900,7 +1951,7 @@ class ObjMarshalerManagerImpl(ObjMarshalerManager):
1900
1951
  p._m = m # noqa
1901
1952
 
1902
1953
  if not no_cache:
1903
- self._obj_marshalers[ty] = m
1954
+ self._derived_obj_marshalers[ck] = m
1904
1955
  return m
1905
1956
 
1906
1957
  def make_context(self, opts: ta.Optional[ObjMarshalOptions]) -> 'ObjMarshalContext':
@@ -245,11 +245,6 @@ class DataclassCodeGen:
245
245
  if not _is_generated_py_file(gen_file_path):
246
246
  raise RuntimeError(f'Refusing to overwrite non-generated file: {gen_file_path!r}')
247
247
 
248
- if not output.dumped:
249
- if not self._dry_run:
250
- os.unlink(gen_file_path)
251
- return
252
-
253
248
  #
254
249
 
255
250
  lines = [
@@ -8,7 +8,7 @@ TODO:
8
8
  - can fast-build new (temp) image w preamble (probably slow and garbagey)
9
9
  - launch / manage compose services
10
10
  - more cache dirs
11
- - --mount=type=bind,src="$(pwd)",dst=/omlish/pwd
11
+ - --mount=type=bind,src="$(pwd)",dst=/om/pwd
12
12
  - build --no-cache / cache bust
13
13
  - build args
14
14
  - `run --pull=never`, `build --pull=false`
@@ -22,7 +22,7 @@ if [ -t 1 ] ; then TTY_ENV_ARGS="-e LINES=$(tput lines) -e COLUMNS=$(tput cols)"
22
22
 
23
23
  ====
24
24
 
25
- tag = f'omlish-dockerdev--{time.time_ns()}--{os.getpid()}'
25
+ tag = f'om-dockerdev--{time.time_ns()}--{os.getpid()}'
26
26
  subprocess.check_call(['docker', 'tag', obi, tag])
27
27
  try:
28
28
  cfg = dc.replace(cfg, base_image=tag) # noqa
@@ -1,6 +1,6 @@
1
1
  base_image = 'ubuntu:24.04'
2
2
 
3
- user = 'omlish'
3
+ user = 'om'
4
4
 
5
5
  dep_sets = [
6
6
  'system',
@@ -27,9 +27,16 @@ rbenv_versions = [
27
27
  ]
28
28
 
29
29
  uv_python_versions = [
30
+ '3.8',
31
+ '3.9',
32
+ '3.10',
33
+ '3.11',
34
+ '3.12',
30
35
  '3.13',
31
36
  '3.14',
32
37
  '3.14+freethreaded',
38
+ '3.15',
39
+ '3.15+freethreaded',
33
40
  ]
34
41
 
35
42
  pyenv_version_keys = [
@@ -44,5 +51,5 @@ pyenv_version_keys = [
44
51
  workdir = '/work'
45
52
 
46
53
  [cache_mounts]
47
- 'pip' = '/omlish/.cache/pip'
48
- 'uv' = '/omlish/.cache/uv'
54
+ 'pip' = '/om/.cache/pip'
55
+ 'uv' = '/om/.cache/uv'
@@ -49,7 +49,7 @@ def gen_ops(cfg: Config) -> ta.Sequence[Op]:
49
49
  Env([
50
50
  ('LANG', 'en_US.UTF-8'),
51
51
  ('LANGUAGE', 'en_US:en'),
52
- ('LC_ALL', 'en_US.UTF-8'),
52
+ ('LC_COLLATE', 'C'),
53
53
  ]),
54
54
  ]))
55
55
 
@@ -1,9 +1,9 @@
1
1
  {
2
2
  "8": "3.8.20",
3
3
  "9": "3.9.25",
4
- "10": "3.10.19",
5
- "11": "3.11.14",
6
- "12": "3.12.12",
4
+ "10": "3.10.20",
5
+ "11": "3.11.15",
6
+ "12": "3.12.13",
7
7
  "13": "3.13.14",
8
8
  "13d": "3.13.14d",
9
9
  "13t": "3.13.14t",
@@ -12,8 +12,8 @@
12
12
  "14d": "3.14.6d",
13
13
  "14t": "3.14.6t",
14
14
  "14dt": "3.14.6dt",
15
- "15": "3.15.0b3",
16
- "15d": "3.15.0b3d",
17
- "15t": "3.15.0b3t",
18
- "15dt": "3.15.0b3dt"
15
+ "15": "3.15.0b4",
16
+ "15d": "3.15.0b4d",
17
+ "15t": "3.15.0b4t",
18
+ "15dt": "3.15.0b4dt"
19
19
  }
@@ -3,18 +3,23 @@ deps = [
3
3
  'gdb',
4
4
  'lcov',
5
5
  'libbz2-dev',
6
+ 'libexpat1-dev',
6
7
  'libffi-dev',
7
8
  'libgdbm-compat-dev',
8
9
  'libgdbm-dev',
9
10
  'liblzma-dev',
10
11
  'libncurses5-dev',
12
+ 'libnsl-dev',
13
+ 'libreadline-dev',
11
14
  'libreadline6-dev',
12
15
  'libsqlite3-dev',
13
16
  'libssl-dev',
17
+ 'libzstd-dev',
14
18
  'lzma',
15
19
  'lzma-dev',
16
20
  'pkg-config',
17
21
  'tk-dev',
18
22
  'uuid-dev',
23
+ 'xz-utils',
19
24
  'zlib1g-dev',
20
25
  ]
@@ -1,4 +1,4 @@
1
- sudo apt install gnupg ca-certificates curl ;
1
+ sudo apt install -y gnupg ca-certificates curl ;
2
2
  curl -s 'https://repos.azul.com/azul-repo.key' | sudo gpg --dearmor -o /usr/share/keyrings/azul.gpg ;
3
3
  echo "deb [signed-by=/usr/share/keyrings/azul.gpg] https://repos.azul.com/zulu/deb stable main" | sudo tee /etc/apt/sources.list.d/zulu.list ;
4
4
 
@@ -5,7 +5,7 @@
5
5
  --user=0:0 \
6
6
  --env=EXTERNAL_UID=1000 \
7
7
  --env=EXTERNAL_GID=1000 \
8
- --env=INTERNAL_USER=omlish \
8
+ --env=INTERNAL_USER=om \
9
9
  --rm -it bash
10
10
 
11
11
  ====
@@ -40,7 +40,7 @@ unset INTERNAL_USER
40
40
  unset INTERNAL_UID
41
41
  unset INTERNAL_HOME
42
42
 
43
- exec gosu omlish bash # "$@"
43
+ exec gosu om bash # "$@"
44
44
  """
45
45
  import os.path
46
46
  import platform
@@ -96,7 +96,7 @@ class RunArgs:
96
96
  extra_args: ta.Sequence[str] | None = None
97
97
 
98
98
 
99
- LABEL_PREFIX = 'omlish.dockerdev'
99
+ LABEL_PREFIX = 'om.dockerdev'
100
100
 
101
101
 
102
102
  @dc.dataclass(frozen=True)
@@ -14,8 +14,8 @@ from omcore.os.environ import EnvVar
14
14
  ##
15
15
 
16
16
 
17
- HOME_DIR_ENV_VAR = EnvVar('OMLISH_HOME')
18
- DEFAULT_HOME_DIR = '~/.omlish'
17
+ HOME_DIR_ENV_VAR = EnvVar('OM_HOME')
18
+ DEFAULT_HOME_DIR = '~/.om'
19
19
 
20
20
 
21
21
  def get_home_dir() -> str:
@@ -99,8 +99,8 @@ def get_home_paths() -> HomePaths:
99
99
  ##
100
100
 
101
101
 
102
- CACHE_DIR_ENV_VAR = EnvVar('OMLISH_CACHE')
103
- DEFAULT_CACHE_DIR = '~/.cache/omlish'
102
+ CACHE_DIR_ENV_VAR = EnvVar('OM_CACHE')
103
+ DEFAULT_CACHE_DIR = '~/.cache/om'
104
104
 
105
105
 
106
106
  def get_cache_dir() -> str:
@@ -17,7 +17,7 @@ else:
17
17
  ##
18
18
 
19
19
 
20
- SECRETS_FILE_ENV_VAR = EnvVar('OMLISH_SECRETS')
20
+ SECRETS_FILE_ENV_VAR = EnvVar('OM_SECRETS')
21
21
  DEFAULT_SECRETS_FILE_NAME = 'secrets.yml'
22
22
 
23
23