omdev 0.0.19__tar.gz → 0.0.20__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 (521) hide show
  1. {omdev-0.0.19/omdev.egg-info → omdev-0.0.20}/PKG-INFO +8 -8
  2. {omdev-0.0.19 → omdev-0.0.20}/omdev/__about__.py +1 -1
  3. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/cacheserved/cache.py +6 -6
  4. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/dataserver.py +1 -1
  5. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/packing.py +3 -3
  6. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/repositories.py +2 -2
  7. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataclasses/_dumping.py +112 -37
  8. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataserver/handlers.py +9 -8
  9. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataserver/http.py +4 -4
  10. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataserver/server.py +2 -2
  11. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/depsets/system.toml +17 -2
  12. {omdev-0.0.19 → omdev-0.0.20}/omdev/git/status.py +21 -12
  13. {omdev-0.0.19 → omdev-0.0.20}/omdev/manifests/_dumping.py +8 -14
  14. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/ci.py +664 -416
  15. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/interp.py +286 -213
  16. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/lib/formats/goyaml.py +5 -9
  17. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/lib/inject.py +5 -9
  18. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/lib/io/pipelines.py +35 -66
  19. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/lib/io/streams.py +3 -5
  20. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/lib/logs.py +302 -246
  21. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/lib/marshal.py +8 -14
  22. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/pidfiles.py +11 -19
  23. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/pyproject.py +310 -260
  24. omdev-0.0.20/omdev/specs/jsonschema/codegen/__init__.py +3 -0
  25. omdev-0.0.20/omdev/specs/jsonschema/codegen/analysis.py +862 -0
  26. omdev-0.0.20/omdev/specs/jsonschema/codegen/cli.py +60 -0
  27. omdev-0.0.20/omdev/specs/jsonschema/codegen/config.py +33 -0
  28. omdev-0.0.20/omdev/specs/jsonschema/codegen/errors.py +40 -0
  29. omdev-0.0.20/omdev/specs/jsonschema/codegen/generator.py +32 -0
  30. omdev-0.0.20/omdev/specs/jsonschema/codegen/ir.py +160 -0
  31. omdev-0.0.20/omdev/specs/jsonschema/codegen/names.py +94 -0
  32. omdev-0.0.20/omdev/specs/jsonschema/codegen/rendering.py +336 -0
  33. omdev-0.0.20/omdev/specs/jsonschema/codegen/transforms.py +152 -0
  34. omdev-0.0.20/omdev/specs/jsonschema/codegen/typing.py +45 -0
  35. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/dataserver.py +2 -2
  36. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/git/cli.py +2 -2
  37. omdev-0.0.20/omdev/tui/apps/jtree/__init__.py +0 -0
  38. omdev-0.0.20/omdev/tui/apps/jtree/__main__.py +4 -0
  39. omdev-0.0.20/omdev/tui/apps/markdown/__init__.py +0 -0
  40. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/__init__.py +3 -0
  41. omdev-0.0.20/omdev/tui/textual/altdevtools/LICENSE +21 -0
  42. omdev-0.0.20/omdev/tui/textual/altdevtools/__init__.py +35 -0
  43. omdev-0.0.20/omdev/tui/textual/altdevtools/client.py +349 -0
  44. omdev-0.0.20/omdev/tui/textual/altdevtools/previews/__init__.py +9 -0
  45. omdev-0.0.20/omdev/tui/textual/altdevtools/previews/borders.py +91 -0
  46. omdev-0.0.20/omdev/tui/textual/altdevtools/previews/colors.py +142 -0
  47. omdev-0.0.20/omdev/tui/textual/altdevtools/previews/colors.tcss +338 -0
  48. omdev-0.0.20/omdev/tui/textual/altdevtools/previews/easing.py +138 -0
  49. omdev-0.0.20/omdev/tui/textual/altdevtools/previews/easing.tcss +59 -0
  50. omdev-0.0.20/omdev/tui/textual/altdevtools/previews/keys.py +83 -0
  51. omdev-0.0.20/omdev/tui/textual/altdevtools/protocol.py +48 -0
  52. omdev-0.0.20/omdev/tui/textual/altdevtools/redirect_output.py +114 -0
  53. omdev-0.0.20/omdev/tui/textual/altdevtools/renderables.py +162 -0
  54. omdev-0.0.20/omdev/tui/textual/altdevtools/server.py +154 -0
  55. omdev-0.0.20/omdev/tui/textual/altdevtools/service.py +367 -0
  56. omdev-0.0.20/omdev/tui/textual/altdevtools/tools/__init__.py +0 -0
  57. omdev-0.0.20/omdev/tui/textual/altdevtools/tools/diagnose.py +206 -0
  58. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/devtools.py +35 -0
  59. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/dom2.py +2 -4
  60. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/types.py +2 -4
  61. {omdev-0.0.19 → omdev-0.0.20/omdev.egg-info}/PKG-INFO +8 -8
  62. {omdev-0.0.19 → omdev-0.0.20}/omdev.egg-info/SOURCES.txt +65 -34
  63. {omdev-0.0.19 → omdev-0.0.20}/omdev.egg-info/requires.txt +7 -7
  64. {omdev-0.0.19 → omdev-0.0.20}/pyproject.toml +11 -8
  65. {omdev-0.0.19 → omdev-0.0.20}/LICENSE +0 -0
  66. {omdev-0.0.19 → omdev-0.0.20}/MANIFEST.in +0 -0
  67. {omdev-0.0.19 → omdev-0.0.20}/README.md +0 -0
  68. {omdev-0.0.19 → omdev-0.0.20}/omdev/.omlish-manifests.json +0 -0
  69. {omdev-0.0.19 → omdev-0.0.20}/omdev/README.md +0 -0
  70. {omdev-0.0.19 → omdev-0.0.20}/omdev/__init__.py +0 -0
  71. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/__init__.py +0 -0
  72. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/__main__.py +0 -0
  73. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/cli/__init__.py +0 -0
  74. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/cli/main.py +0 -0
  75. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/gen/__init__.py +0 -0
  76. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/gen/gen.py +0 -0
  77. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/gen/imports.py +0 -0
  78. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/gen/manifests.py +0 -0
  79. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/gen/resources.py +0 -0
  80. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/gen/srcfiles.py +0 -0
  81. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/gen/strip.py +0 -0
  82. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/gen/types.py +0 -0
  83. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/gen/typing.py +0 -0
  84. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/info.py +0 -0
  85. {omdev-0.0.19 → omdev-0.0.20}/omdev/amalg/sources.py +0 -0
  86. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/__init__.py +0 -0
  87. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/compute/__init__.py +0 -0
  88. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/compute/cache.py +0 -0
  89. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/compute/contexts.py +0 -0
  90. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/compute/currents.py +0 -0
  91. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/compute/fns.py +0 -0
  92. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/compute/resolvers.py +0 -0
  93. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/compute/storage.py +0 -0
  94. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/compute/types.py +0 -0
  95. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/data/__init__.py +0 -0
  96. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/data/actions.py +0 -0
  97. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/data/cache.py +0 -0
  98. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/data/consts.py +0 -0
  99. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/data/defaults.py +0 -0
  100. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/data/manifests.py +0 -0
  101. {omdev-0.0.19 → omdev-0.0.20}/omdev/cache/data/specs.py +0 -0
  102. {omdev-0.0.19 → omdev-0.0.20}/omdev/capi/__init__.py +0 -0
  103. {omdev-0.0.19 → omdev-0.0.20}/omdev/capi/darwin/__init__.py +0 -0
  104. {omdev-0.0.19 → omdev-0.0.20}/omdev/capi/darwin/aps.py +0 -0
  105. {omdev-0.0.19 → omdev-0.0.20}/omdev/capi/darwin/ax.py +0 -0
  106. {omdev-0.0.19 → omdev-0.0.20}/omdev/capi/darwin/cf.py +0 -0
  107. {omdev-0.0.19 → omdev-0.0.20}/omdev/capi/darwin/cg.py +0 -0
  108. {omdev-0.0.19 → omdev-0.0.20}/omdev/capi/linux/__init__.py +0 -0
  109. {omdev-0.0.19 → omdev-0.0.20}/omdev/capi/linux/x11.py +0 -0
  110. {omdev-0.0.19 → omdev-0.0.20}/omdev/cc/__init__.py +0 -0
  111. {omdev-0.0.19 → omdev-0.0.20}/omdev/cc/__main__.py +0 -0
  112. {omdev-0.0.19 → omdev-0.0.20}/omdev/cc/cdeps.py +0 -0
  113. {omdev-0.0.19 → omdev-0.0.20}/omdev/cc/cdeps.toml +0 -0
  114. {omdev-0.0.19 → omdev-0.0.20}/omdev/cc/cli.py +0 -0
  115. {omdev-0.0.19 → omdev-0.0.20}/omdev/cc/srclangs.py +0 -0
  116. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/__init__.py +0 -0
  117. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_boilerplate.cc +0 -0
  118. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/LICENSE +0 -0
  119. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/__init__.py +0 -0
  120. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/build_ext.py +0 -0
  121. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  122. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  123. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/compilers/options.py +0 -0
  124. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  125. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/dir_util.py +0 -0
  126. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/errors.py +0 -0
  127. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/extension.py +0 -0
  128. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/file_util.py +0 -0
  129. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/modified.py +0 -0
  130. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/spawn.py +0 -0
  131. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/sysconfig.py +0 -0
  132. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/util.py +0 -0
  133. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/_distutils/version.py +0 -0
  134. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/build.py +0 -0
  135. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/cmake.py +0 -0
  136. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/importhook.py +0 -0
  137. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/magic.py +0 -0
  138. {omdev-0.0.19 → omdev-0.0.20}/omdev/cexts/scan.py +0 -0
  139. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/__init__.py +0 -0
  140. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/__main__.py +0 -0
  141. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/cache.py +0 -0
  142. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/ci.py +0 -0
  143. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/cli.py +0 -0
  144. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/compose.py +0 -0
  145. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/consts.py +0 -0
  146. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/__init__.py +0 -0
  147. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/buildcaching.py +0 -0
  148. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/cache.py +0 -0
  149. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  150. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  151. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/cmds.py +0 -0
  152. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/imagepulling.py +0 -0
  153. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/inject.py +0 -0
  154. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/docker/utils.py +0 -0
  155. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/__init__.py +0 -0
  156. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/api/__init__.py +0 -0
  157. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/api/clients.py +0 -0
  158. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/api/v1/__init__.py +0 -0
  159. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/api/v1/api.py +0 -0
  160. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/api/v1/client.py +0 -0
  161. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/api/v2/__init__.py +0 -0
  162. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/api/v2/api.py +0 -0
  163. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/api/v2/azure.py +0 -0
  164. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/api/v2/client.py +0 -0
  165. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/bootstrap.py +0 -0
  166. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/cache.py +0 -0
  167. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/cli.py +0 -0
  168. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/env.py +0 -0
  169. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/github/inject.py +0 -0
  170. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/inject.py +0 -0
  171. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/requirements.py +0 -0
  172. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/shell.py +0 -0
  173. {omdev-0.0.19 → omdev-0.0.20}/omdev/ci/utils.py +0 -0
  174. {omdev-0.0.19 → omdev-0.0.20}/omdev/cli/__init__.py +0 -0
  175. {omdev-0.0.19 → omdev-0.0.20}/omdev/cli/__main__.py +0 -0
  176. {omdev-0.0.19 → omdev-0.0.20}/omdev/cli/_pathhack.py +0 -0
  177. {omdev-0.0.19 → omdev-0.0.20}/omdev/cli/clicli.py +0 -0
  178. {omdev-0.0.19 → omdev-0.0.20}/omdev/cli/install.py +0 -0
  179. {omdev-0.0.19 → omdev-0.0.20}/omdev/cli/main.py +0 -0
  180. {omdev-0.0.19 → omdev-0.0.20}/omdev/cli/managers.py +0 -0
  181. {omdev-0.0.19 → omdev-0.0.20}/omdev/cli/types.py +0 -0
  182. {omdev-0.0.19 → omdev-0.0.20}/omdev/clipboard/__init__.py +0 -0
  183. {omdev-0.0.19 → omdev-0.0.20}/omdev/clipboard/capi/__init__.py +0 -0
  184. {omdev-0.0.19 → omdev-0.0.20}/omdev/clipboard/capi/darwin_cf.py +0 -0
  185. {omdev-0.0.19 → omdev-0.0.20}/omdev/clipboard/capi/linux_x11.py +0 -0
  186. {omdev-0.0.19 → omdev-0.0.20}/omdev/clipboard/commands.py +0 -0
  187. {omdev-0.0.19 → omdev-0.0.20}/omdev/clipboard/platform.py +0 -0
  188. {omdev-0.0.19 → omdev-0.0.20}/omdev/clipboard/types.py +0 -0
  189. {omdev-0.0.19 → omdev-0.0.20}/omdev/cmake.py +0 -0
  190. {omdev-0.0.19 → omdev-0.0.20}/omdev/cmdlog/__init__.py +0 -0
  191. {omdev-0.0.19 → omdev-0.0.20}/omdev/cmdlog/__main__.py +0 -0
  192. {omdev-0.0.19 → omdev-0.0.20}/omdev/cmdlog/_cmdlog.py +0 -0
  193. {omdev-0.0.19 → omdev-0.0.20}/omdev/cmdlog/cli.py +0 -0
  194. {omdev-0.0.19 → omdev-0.0.20}/omdev/cmdlog/cmdlog.py +0 -0
  195. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataclasses/__init__.py +0 -0
  196. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataclasses/__main__.py +0 -0
  197. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataclasses/_template.py +0 -0
  198. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataclasses/cli.py +0 -0
  199. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataclasses/codegen.py +0 -0
  200. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataclasses/dumping.py +0 -0
  201. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataserver/__init__.py +0 -0
  202. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataserver/routes.py +0 -0
  203. {omdev-0.0.19 → omdev-0.0.20}/omdev/dataserver/targets.py +0 -0
  204. {omdev-0.0.19 → omdev-0.0.20}/omdev/diffs/__init__.py +0 -0
  205. {omdev-0.0.19 → omdev-0.0.20}/omdev/diffs/__main__.py +0 -0
  206. {omdev-0.0.19 → omdev-0.0.20}/omdev/diffs/cli.py +0 -0
  207. {omdev-0.0.19 → omdev-0.0.20}/omdev/diffs/parsing.py +0 -0
  208. {omdev-0.0.19 → omdev-0.0.20}/omdev/diffs/rendering.py +0 -0
  209. {omdev-0.0.19 → omdev-0.0.20}/omdev/diffs/types.py +0 -0
  210. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/__init__.py +0 -0
  211. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/__main__.py +0 -0
  212. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/build.py +0 -0
  213. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/cli.py +0 -0
  214. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/config.py +0 -0
  215. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/config.toml +0 -0
  216. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/content.py +0 -0
  217. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/gen.py +0 -0
  218. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/helpers.py +0 -0
  219. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/ops.py +0 -0
  220. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/rendering.py +0 -0
  221. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/.python-versions.json +0 -0
  222. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/configs/.gdbinit +0 -0
  223. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/configs/.sqliterc +0 -0
  224. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/configs/.tmux.conf +0 -0
  225. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/configs/.vimrc +0 -0
  226. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/depsets/python.toml +0 -0
  227. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/depsets/x11.toml +0 -0
  228. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/apt.sh +0 -0
  229. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/chgrp.sh +0 -0
  230. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/docker.sh +0 -0
  231. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/firefox.sh +0 -0
  232. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/go.sh +0 -0
  233. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/jdk.sh +0 -0
  234. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/man.sh +0 -0
  235. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/nvm.sh +0 -0
  236. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/pyenv.sh +0 -0
  237. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/rbenv.sh +0 -0
  238. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/rust.sh +0 -0
  239. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/sshd.sh +0 -0
  240. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/user.sh +0 -0
  241. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/uv.sh +0 -0
  242. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/vcpkg.sh +0 -0
  243. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/workdir.sh +0 -0
  244. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/fragments/zig.sh +0 -0
  245. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/scripts/install-claude +0 -0
  246. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/scripts/install-codex +0 -0
  247. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/scripts/install-pi +0 -0
  248. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/scripts/run-dbus +0 -0
  249. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/resources/shift-uid.sh +0 -0
  250. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/run.py +0 -0
  251. {omdev-0.0.19 → omdev-0.0.20}/omdev/dockerdev/utils.py +0 -0
  252. {omdev-0.0.19 → omdev-0.0.20}/omdev/git/__init__.py +0 -0
  253. {omdev-0.0.19 → omdev-0.0.20}/omdev/git/magic.py +0 -0
  254. {omdev-0.0.19 → omdev-0.0.20}/omdev/git/revisions.py +0 -0
  255. {omdev-0.0.19 → omdev-0.0.20}/omdev/git/shallow.py +0 -0
  256. {omdev-0.0.19 → omdev-0.0.20}/omdev/home/__init__.py +0 -0
  257. {omdev-0.0.19 → omdev-0.0.20}/omdev/home/__main__.py +0 -0
  258. {omdev-0.0.19 → omdev-0.0.20}/omdev/home/cli.py +0 -0
  259. {omdev-0.0.19 → omdev-0.0.20}/omdev/home/paths.py +0 -0
  260. {omdev-0.0.19 → omdev-0.0.20}/omdev/home/secrets.py +0 -0
  261. {omdev-0.0.19 → omdev-0.0.20}/omdev/home/shadow.py +0 -0
  262. {omdev-0.0.19 → omdev-0.0.20}/omdev/imgur.py +0 -0
  263. {omdev-0.0.19 → omdev-0.0.20}/omdev/intellij/__init__.py +0 -0
  264. {omdev-0.0.19 → omdev-0.0.20}/omdev/intellij/cli.py +0 -0
  265. {omdev-0.0.19 → omdev-0.0.20}/omdev/intellij/ides.py +0 -0
  266. {omdev-0.0.19 → omdev-0.0.20}/omdev/intellij/open.py +0 -0
  267. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/__init__.py +0 -0
  268. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/__main__.py +0 -0
  269. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/cli.py +0 -0
  270. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/default.py +0 -0
  271. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/inject.py +0 -0
  272. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/inspect.py +0 -0
  273. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/providers/__init__.py +0 -0
  274. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/providers/base.py +0 -0
  275. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/providers/inject.py +0 -0
  276. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/providers/running.py +0 -0
  277. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/providers/standalone.py +0 -0
  278. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/providers/system.py +0 -0
  279. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/pyenv/__init__.py +0 -0
  280. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/pyenv/inject.py +0 -0
  281. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/pyenv/install.py +0 -0
  282. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/pyenv/provider.py +0 -0
  283. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/pyenv/pyenv.py +0 -0
  284. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/resolvers.py +0 -0
  285. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/types.py +0 -0
  286. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/uv/__init__.py +0 -0
  287. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/uv/inject.py +0 -0
  288. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/uv/provider.py +0 -0
  289. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/uv/uv.py +0 -0
  290. {omdev-0.0.19 → omdev-0.0.20}/omdev/interp/venvs.py +0 -0
  291. {omdev-0.0.19/omdev/irc → omdev-0.0.20/omdev/java}/__init__.py +0 -0
  292. {omdev-0.0.19 → omdev-0.0.20}/omdev/java/__main__.py +0 -0
  293. {omdev-0.0.19 → omdev-0.0.20}/omdev/java/cli.py +0 -0
  294. {omdev-0.0.19 → omdev-0.0.20}/omdev/java/pomgen.py +0 -0
  295. {omdev-0.0.19 → omdev-0.0.20}/omdev/java/utils.py +0 -0
  296. {omdev-0.0.19 → omdev-0.0.20}/omdev/java/xml.py +0 -0
  297. {omdev-0.0.19 → omdev-0.0.20}/omdev/magic/__init__.py +0 -0
  298. {omdev-0.0.19 → omdev-0.0.20}/omdev/magic/__main__.py +0 -0
  299. {omdev-0.0.19 → omdev-0.0.20}/omdev/magic/cli.py +0 -0
  300. {omdev-0.0.19 → omdev-0.0.20}/omdev/magic/find.py +0 -0
  301. {omdev-0.0.19 → omdev-0.0.20}/omdev/magic/magic.py +0 -0
  302. {omdev-0.0.19 → omdev-0.0.20}/omdev/magic/prepare.py +0 -0
  303. {omdev-0.0.19 → omdev-0.0.20}/omdev/magic/styles.py +0 -0
  304. {omdev-0.0.19/omdev/irc/messages → omdev-0.0.20/omdev/manifests}/__init__.py +0 -0
  305. {omdev-0.0.19 → omdev-0.0.20}/omdev/manifests/__main__.py +0 -0
  306. {omdev-0.0.19 → omdev-0.0.20}/omdev/manifests/building.py +0 -0
  307. {omdev-0.0.19 → omdev-0.0.20}/omdev/manifests/dumping.py +0 -0
  308. {omdev-0.0.19 → omdev-0.0.20}/omdev/manifests/main.py +0 -0
  309. {omdev-0.0.19/omdev/irc/numerics → omdev-0.0.20/omdev/markdown}/__init__.py +0 -0
  310. {omdev-0.0.19 → omdev-0.0.20}/omdev/markdown/incparse.py +0 -0
  311. {omdev-0.0.19 → omdev-0.0.20}/omdev/markdown/tokens.py +0 -0
  312. {omdev-0.0.19/omdev/java → omdev-0.0.20/omdev/mypy}/__init__.py +0 -0
  313. {omdev-0.0.19 → omdev-0.0.20}/omdev/mypy/debug.py +0 -0
  314. {omdev-0.0.19 → omdev-0.0.20}/omdev/mypy/report.py +0 -0
  315. {omdev-0.0.19/omdev/manifests → omdev-0.0.20/omdev/packaging}/__init__.py +0 -0
  316. {omdev-0.0.19 → omdev-0.0.20}/omdev/packaging/marshal.py +0 -0
  317. {omdev-0.0.19 → omdev-0.0.20}/omdev/packaging/names.py +0 -0
  318. {omdev-0.0.19 → omdev-0.0.20}/omdev/packaging/requires.py +0 -0
  319. {omdev-0.0.19 → omdev-0.0.20}/omdev/packaging/revisions.py +0 -0
  320. {omdev-0.0.19 → omdev-0.0.20}/omdev/packaging/specifiers.py +0 -0
  321. {omdev-0.0.19 → omdev-0.0.20}/omdev/packaging/versions.py +0 -0
  322. {omdev-0.0.19 → omdev-0.0.20}/omdev/packaging/wheelfile.py +0 -0
  323. {omdev-0.0.19 → omdev-0.0.20}/omdev/pip.py +0 -0
  324. {omdev-0.0.19/omdev/markdown → omdev-0.0.20/omdev/precheck}/__init__.py +0 -0
  325. {omdev-0.0.19 → omdev-0.0.20}/omdev/precheck/__main__.py +0 -0
  326. {omdev-0.0.19 → omdev-0.0.20}/omdev/precheck/base.py +0 -0
  327. {omdev-0.0.19 → omdev-0.0.20}/omdev/precheck/blanklines.py +0 -0
  328. {omdev-0.0.19 → omdev-0.0.20}/omdev/precheck/caches.py +0 -0
  329. {omdev-0.0.19 → omdev-0.0.20}/omdev/precheck/git.py +0 -0
  330. {omdev-0.0.19 → omdev-0.0.20}/omdev/precheck/imports.py +0 -0
  331. {omdev-0.0.19 → omdev-0.0.20}/omdev/precheck/lite.py +0 -0
  332. {omdev-0.0.19 → omdev-0.0.20}/omdev/precheck/main.py +0 -0
  333. {omdev-0.0.19 → omdev-0.0.20}/omdev/precheck/manifests.py +0 -0
  334. {omdev-0.0.19 → omdev-0.0.20}/omdev/precheck/scripts.py +0 -0
  335. {omdev-0.0.19 → omdev-0.0.20}/omdev/precheck/unicode.py +0 -0
  336. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/__init__.py +0 -0
  337. {omdev-0.0.19/omdev/mypy → omdev-0.0.20/omdev/py/asts}/__init__.py +0 -0
  338. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/asts/parents.py +0 -0
  339. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/asts/toplevel.py +0 -0
  340. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/asts/visitors.py +0 -0
  341. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/attrdocs.py +0 -0
  342. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/bracepy.py +0 -0
  343. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/classdot.py +0 -0
  344. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/docstrings/LICENSE +0 -0
  345. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/docstrings/__init__.py +0 -0
  346. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/docstrings/attrdoc.py +0 -0
  347. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/docstrings/common.py +0 -0
  348. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/docstrings/epydoc.py +0 -0
  349. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/docstrings/google.py +0 -0
  350. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/docstrings/numpydoc.py +0 -0
  351. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/docstrings/parser.py +0 -0
  352. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/docstrings/rest.py +0 -0
  353. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/findimports.py +0 -0
  354. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/reprs.py +0 -0
  355. {omdev-0.0.19/omdev/oci → omdev-0.0.20/omdev/py/scripts}/__init__.py +0 -0
  356. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/scripts/bumpversion.py +0 -0
  357. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/scripts/importtrace.py +0 -0
  358. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/srcheaders.py +0 -0
  359. {omdev-0.0.19/omdev/oci/pack → omdev-0.0.20/omdev/py/tokens}/__init__.py +0 -0
  360. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/tokens/all.py +0 -0
  361. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/tokens/tokenizert.py +0 -0
  362. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/tokens/utils.py +0 -0
  363. {omdev-0.0.19/omdev/packaging → omdev-0.0.20/omdev/py/tools}/__init__.py +0 -0
  364. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/tools/fixdocstrings.py +0 -0
  365. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/tools/importscan.py +0 -0
  366. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/tools/mkrelimp.py +0 -0
  367. {omdev-0.0.19 → omdev-0.0.20}/omdev/py/tools/pipdepup.py +0 -0
  368. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/__init__.py +0 -0
  369. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/__main__.py +0 -0
  370. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/cli.py +0 -0
  371. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/configs.py +0 -0
  372. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/inject.py +0 -0
  373. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/pkg.py +0 -0
  374. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/reqs.py +0 -0
  375. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/resources/dockerdev.sh +0 -0
  376. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/resources/python.sh +0 -0
  377. {omdev-0.0.19/omdev/precheck → omdev-0.0.20/omdev/pyproject/tools}/__init__.py +0 -0
  378. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/tools/aboutdeps.py +0 -0
  379. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/tools/buildrs.py +0 -0
  380. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/tools/pyversions.py +0 -0
  381. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/venvs.py +0 -0
  382. {omdev-0.0.19 → omdev-0.0.20}/omdev/pyproject/versions.py +0 -0
  383. {omdev-0.0.19/omdev/py/asts → omdev-0.0.20/omdev/rs}/__init__.py +0 -0
  384. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/__init__.py +0 -0
  385. {omdev-0.0.19/omdev/py/scripts → omdev-0.0.20/omdev/scripts/lib}/__init__.py +0 -0
  386. {omdev-0.0.19/omdev/py/tokens → omdev-0.0.20/omdev/scripts/lib/formats}/__init__.py +0 -0
  387. {omdev-0.0.19/omdev/py/tools → omdev-0.0.20/omdev/scripts/lib/io}/__init__.py +0 -0
  388. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/slowcat.py +0 -0
  389. {omdev-0.0.19 → omdev-0.0.20}/omdev/scripts/tmpexec.py +0 -0
  390. {omdev-0.0.19/omdev/pyproject/tools → omdev-0.0.20/omdev/specs}/__init__.py +0 -0
  391. {omdev-0.0.19/omdev/rs → omdev-0.0.20/omdev/specs/irc}/__init__.py +0 -0
  392. {omdev-0.0.19/omdev/scripts/lib → omdev-0.0.20/omdev/specs/irc/messages}/__init__.py +0 -0
  393. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/messages/base.py +0 -0
  394. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/messages/formats.py +0 -0
  395. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/messages/messages.py +0 -0
  396. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/messages/parsing.py +0 -0
  397. {omdev-0.0.19/omdev/scripts/lib/formats → omdev-0.0.20/omdev/specs/irc/numerics}/__init__.py +0 -0
  398. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/numerics/formats.py +0 -0
  399. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/numerics/numerics.py +0 -0
  400. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/numerics/types.py +0 -0
  401. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/protocol/LICENSE +0 -0
  402. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/protocol/__init__.py +0 -0
  403. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/protocol/consts.py +0 -0
  404. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/protocol/errors.py +0 -0
  405. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/protocol/message.py +0 -0
  406. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/protocol/nuh.py +0 -0
  407. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/protocol/parsing.py +0 -0
  408. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/protocol/rendering.py +0 -0
  409. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/protocol/tags.py +0 -0
  410. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/irc/protocol/utils.py +0 -0
  411. {omdev-0.0.19/omdev/scripts/lib/io → omdev-0.0.20/omdev/specs/jsonschema}/__init__.py +0 -0
  412. {omdev-0.0.19/omdev/tui/apps/jtree → omdev-0.0.20/omdev/specs/jsonschema/codegen}/__main__.py +0 -0
  413. {omdev-0.0.19/omdev/supervisor → omdev-0.0.20/omdev/specs/oci}/__init__.py +0 -0
  414. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/building.py +0 -0
  415. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/compression.py +0 -0
  416. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/data.py +0 -0
  417. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/datarefs.py +0 -0
  418. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/loading.py +0 -0
  419. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/media.py +0 -0
  420. {omdev-0.0.19/omdev/tools/git → omdev-0.0.20/omdev/specs/oci/pack}/__init__.py +0 -0
  421. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/pack/packing.py +0 -0
  422. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/pack/repositories.py +0 -0
  423. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/pack/unpacking.py +0 -0
  424. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/repositories.py +0 -0
  425. {omdev-0.0.19/omdev → omdev-0.0.20/omdev/specs}/oci/tars.py +0 -0
  426. {omdev-0.0.19/omdev/tools/json → omdev-0.0.20/omdev/supervisor}/__init__.py +0 -0
  427. {omdev-0.0.19 → omdev-0.0.20}/omdev/supervisor/__main__.py +0 -0
  428. {omdev-0.0.19 → omdev-0.0.20}/omdev/supervisor/cli.py +0 -0
  429. {omdev-0.0.19 → omdev-0.0.20}/omdev/tagstrings.py +0 -0
  430. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/__init__.py +0 -0
  431. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/cloc.py +0 -0
  432. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/diff.py +0 -0
  433. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/doc.py +0 -0
  434. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/docker.py +0 -0
  435. {omdev-0.0.19/omdev/tools/jsonview → omdev-0.0.20/omdev/tools/git}/__init__.py +0 -0
  436. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/git/__main__.py +0 -0
  437. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/git/cloning.py +0 -0
  438. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/git/consts.py +0 -0
  439. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/git/messages.py +0 -0
  440. {omdev-0.0.19/omdev/tools/pawk → omdev-0.0.20/omdev/tools/json}/__init__.py +0 -0
  441. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/json/__main__.py +0 -0
  442. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/json/cli.py +0 -0
  443. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/json/formats.py +0 -0
  444. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/json/io.py +0 -0
  445. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/json/parsing.py +0 -0
  446. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/json/processing.py +0 -0
  447. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/json/rendering.py +0 -0
  448. {omdev-0.0.19/omdev/tui → omdev-0.0.20/omdev/tools/jsonview}/__init__.py +0 -0
  449. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/jsonview/__main__.py +0 -0
  450. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/jsonview/cli.py +0 -0
  451. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  452. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/jsonview/resources/jsonview.html.j2 +0 -0
  453. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  454. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/linehisto.py +0 -0
  455. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/mkenv.py +0 -0
  456. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/notebook.py +0 -0
  457. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/pawk/README.md +0 -0
  458. {omdev-0.0.19/omdev/tui/apps → omdev-0.0.20/omdev/tools/pawk}/__init__.py +0 -0
  459. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/pawk/__main__.py +0 -0
  460. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/pawk/pawk.py +0 -0
  461. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/pip.py +0 -0
  462. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/prof.py +0 -0
  463. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/qr.py +0 -0
  464. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/shadow.py +0 -0
  465. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/shell.py +0 -0
  466. {omdev-0.0.19 → omdev-0.0.20}/omdev/tools/sqlrepl.py +0 -0
  467. {omdev-0.0.19/omdev/tui/apps/edit → omdev-0.0.20/omdev/tui}/__init__.py +0 -0
  468. {omdev-0.0.19/omdev/tui/apps/irc → omdev-0.0.20/omdev/tui/apps}/__init__.py +0 -0
  469. {omdev-0.0.19/omdev/tui/apps/jtree → omdev-0.0.20/omdev/tui/apps/edit}/__init__.py +0 -0
  470. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/edit/main.py +0 -0
  471. {omdev-0.0.19/omdev/tui/apps/markdown → omdev-0.0.20/omdev/tui/apps/irc}/__init__.py +0 -0
  472. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/irc/__main__.py +0 -0
  473. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/irc/app.py +0 -0
  474. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/irc/client.py +0 -0
  475. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/irc/commands.py +0 -0
  476. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/irc/main.py +0 -0
  477. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/jtree/LICENSE +0 -0
  478. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/jtree/app.py +0 -0
  479. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/jtree/cli.py +0 -0
  480. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/jtree/styles/layout.tcss +0 -0
  481. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/jtree/utils.py +0 -0
  482. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/jtree/widgets.py +0 -0
  483. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/markdown/__main__.py +0 -0
  484. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/apps/markdown/cli.py +0 -0
  485. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/__init__.py +0 -0
  486. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/console2.py +0 -0
  487. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/diff/LICENSE +0 -0
  488. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/diff/__init__.py +0 -0
  489. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/diff/__main__.py +0 -0
  490. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/diff/_compat.py +0 -0
  491. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/diff/cli.py +0 -0
  492. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/diff/renderables.py +0 -0
  493. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/diff/rendering.py +0 -0
  494. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/diff/underlinebar.py +0 -0
  495. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/markdown2.py +0 -0
  496. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/textual/__init__.py +0 -0
  497. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/textual/dark.py +0 -0
  498. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/textual/dump.py +0 -0
  499. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/textual/themes.py +0 -0
  500. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/rich/trirule.py +0 -0
  501. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/actionmenu.py +0 -0
  502. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/app2.py +0 -0
  503. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/autocomplete/LICENSE +0 -0
  504. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/autocomplete/__init__.py +0 -0
  505. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/autocomplete/matching.py +0 -0
  506. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/autocomplete/paths.py +0 -0
  507. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/autocomplete/widget.py +0 -0
  508. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/binding2.py +0 -0
  509. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/clipboard.py +0 -0
  510. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/debug/__init__.py +0 -0
  511. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/debug/dominfo.py +0 -0
  512. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/debug/screen.py +0 -0
  513. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/drivers2.py +0 -0
  514. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/logging2.py +0 -0
  515. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/render2.py +0 -0
  516. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/screen2.py +0 -0
  517. {omdev-0.0.19 → omdev-0.0.20}/omdev/tui/textual/widgets2.py +0 -0
  518. {omdev-0.0.19 → omdev-0.0.20}/omdev.egg-info/dependency_links.txt +0 -0
  519. {omdev-0.0.19 → omdev-0.0.20}/omdev.egg-info/entry_points.txt +0 -0
  520. {omdev-0.0.19 → omdev-0.0.20}/omdev.egg-info/top_level.txt +0 -0
  521. {omdev-0.0.19 → omdev-0.0.20}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.19
3
+ Version: 0.0.20
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,11 +14,11 @@ Classifier: Programming Language :: Python :: 3.14
14
14
  Requires-Python: >=3.14
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.19
17
+ Requires-Dist: omlish==0.0.20
18
18
  Provides-Extra: all
19
- Requires-Dist: ominfra==0.0.19; extra == "all"
20
- Requires-Dist: ommlds==0.0.19; extra == "all"
21
- Requires-Dist: black~=26.3; extra == "all"
19
+ Requires-Dist: ominfra==0.0.20; extra == "all"
20
+ Requires-Dist: ommlds==0.0.20; extra == "all"
21
+ Requires-Dist: black~=26.5; extra == "all"
22
22
  Requires-Dist: pycparser~=3.0; extra == "all"
23
23
  Requires-Dist: pcpp~=1.30; extra == "all"
24
24
  Requires-Dist: docutils~=0.22; extra == "all"
@@ -33,11 +33,11 @@ Requires-Dist: textual~=8.2; extra == "all"
33
33
  Requires-Dist: textual-dev~=1.8; extra == "all"
34
34
  Requires-Dist: textual-speedups~=0.2; extra == "all"
35
35
  Provides-Extra: ominfra
36
- Requires-Dist: ominfra==0.0.19; extra == "ominfra"
36
+ Requires-Dist: ominfra==0.0.20; extra == "ominfra"
37
37
  Provides-Extra: ommlds
38
- Requires-Dist: ommlds==0.0.19; extra == "ommlds"
38
+ Requires-Dist: ommlds==0.0.20; extra == "ommlds"
39
39
  Provides-Extra: black
40
- Requires-Dist: black~=26.3; extra == "black"
40
+ Requires-Dist: black~=26.5; extra == "black"
41
41
  Provides-Extra: c
42
42
  Requires-Dist: pycparser~=3.0; extra == "c"
43
43
  Requires-Dist: pcpp~=1.30; extra == "c"
@@ -23,7 +23,7 @@ class Project(ProjectBase):
23
23
  #
24
24
 
25
25
  'black': [
26
- 'black ~= 26.3',
26
+ 'black ~= 26.5',
27
27
  ],
28
28
 
29
29
  'c': [
@@ -18,12 +18,12 @@ from omlish.logs.modules import get_module_logger
18
18
 
19
19
  from ....dataserver.server import DataServer
20
20
  from ....dataserver.targets import DataServerTarget
21
- from ....oci.building import build_oci_index_repository
22
- from ....oci.data import get_single_leaf_oci_image_index
23
- from ....oci.dataserver import build_oci_repository_data_server_routes
24
- from ....oci.loading import read_oci_repository_root_index
25
- from ....oci.pack.repositories import OciPackedRepositoryBuilder
26
- from ....oci.repositories import OciRepository
21
+ from ....specs.oci.building import build_oci_index_repository
22
+ from ....specs.oci.data import get_single_leaf_oci_image_index
23
+ from ....specs.oci.dataserver import build_oci_repository_data_server_routes
24
+ from ....specs.oci.loading import read_oci_repository_root_index
25
+ from ....specs.oci.pack.repositories import OciPackedRepositoryBuilder
26
+ from ....specs.oci.repositories import OciRepository
27
27
  from ...cache import DataCache
28
28
  from ...cache import read_data_cache_data
29
29
  from ..cache import DockerCache
@@ -8,8 +8,8 @@ import typing as ta
8
8
 
9
9
  from omlish.docker.ports import DockerPortRelay
10
10
  from omlish.http.simple.handlers import LoggingSimpleHttpHandler
11
- from omlish.http.simple.handlers import SimpleHttpHandler
12
11
  from omlish.http.simple.pipelines.sync import make_simple_http_server
12
+ from omlish.http.simple.types import SimpleHttpHandler
13
13
  from omlish.lite.cached import cached_nullary
14
14
  from omlish.lite.check import check
15
15
  from omlish.lite.contextmanagers import AsyncExitStacked
@@ -11,9 +11,9 @@ from omlish.lite.contextmanagers import ExitStacked
11
11
  from omlish.logs.utils import log_timing_context
12
12
  from omlish.os.temp import temp_dir_context
13
13
 
14
- from ...oci.building import BuiltOciImageIndexRepository
15
- from ...oci.pack.repositories import OciPackedRepositoryBuilder
16
- from ...oci.repositories import DirectoryOciRepository
14
+ from ...specs.oci.building import BuiltOciImageIndexRepository
15
+ from ...specs.oci.pack.repositories import OciPackedRepositoryBuilder
16
+ from ...specs.oci.repositories import DirectoryOciRepository
17
17
 
18
18
 
19
19
  ##
@@ -9,8 +9,8 @@ from omlish.lite.abstract import Abstract
9
9
  from omlish.lite.timing import log_timing_context
10
10
  from omlish.os.temp import temp_dir_context
11
11
 
12
- from ...oci.repositories import DirectoryOciRepository
13
- from ...oci.repositories import OciRepository
12
+ from ...specs.oci.repositories import DirectoryOciRepository
13
+ from ...specs.oci.repositories import OciRepository
14
14
 
15
15
 
16
16
  ##
@@ -38,11 +38,12 @@ def __omlish_amalg__(): # noqa
38
38
  return dict(
39
39
  src_files=[
40
40
  dict(path='../../omlish/lite/abstract.py', sha1='a2fc3f3697fa8de5247761e9d554e70176f37aac'),
41
- dict(path='../../omlish/lite/check.py', sha1='7088e41034dbdce7bdae200793aaa9d6838c79d8'),
42
- dict(path='../../omlish/lite/json.py', sha1='57eeddc4d23a17931e00284ffa5cb6e3ce089486'),
41
+ dict(path='../../omlish/lite/check.py', sha1='62b9ccea94c4f7bcef97e7adae8674b8cb11d4af'),
42
+ dict(path='../../omlish/lite/io.py', sha1='11c03421bf10d9d29796ef0db78f8b3dc994459b'),
43
43
  dict(path='../../omlish/lite/objects.py', sha1='9566bbf3530fd71fcc56321485216b592fae21e9'),
44
44
  dict(path='../../omlish/lite/reflect.py', sha1='c4fec44bf144e9d93293c996af06f6c65fc5e63d'),
45
- dict(path='../../omlish/lite/strings.py', sha1='89831ecbc34ad80e118a865eceb390ed399dc4d6'),
45
+ dict(path='../../omlish/lite/strings.py', sha1='89631bb5cfd6496176db71ab3abd58b89872068b'),
46
+ dict(path='../../omlish/lite/json.py', sha1='01124e62093ebd4078602f16df0ec04cb724a612'),
46
47
  dict(path='../../omlish/lite/marshal.py', sha1='66bc88d705df274e9fa1168d2aab20c7e3935cf6'),
47
48
  dict(path='dumping.py', sha1='ae4148f671d2cb1e7bf1a819b78ca388b4680bbc'),
48
49
  ],
@@ -63,6 +64,9 @@ CheckOnRaiseFn = ta.Callable[[Exception], None] # ta.TypeAlias
63
64
  CheckExceptionFactory = ta.Callable[..., Exception] # ta.TypeAlias
64
65
  CheckArgsRenderer = ta.Callable[..., ta.Optional[str]] # ta.TypeAlias
65
66
 
67
+ # ../../omlish/lite/json.py
68
+ JsonStyle = ta.Literal['pretty', 'compact', None] # ta.TypeAlias
69
+
66
70
 
67
71
  ########################################
68
72
  # ../../../omlish/lite/abstract.py
@@ -353,12 +357,10 @@ class Checks:
353
357
  return spec
354
358
 
355
359
  @ta.overload
356
- def isinstance(self, v: ta.Any, spec: ta.Type[T], msg: CheckMessage = None, /) -> T:
357
- ...
360
+ def isinstance(self, v: ta.Any, spec: ta.Type[T], msg: CheckMessage = None, /) -> T: ...
358
361
 
359
362
  @ta.overload
360
- def isinstance(self, v: ta.Any, spec: ta.Any, msg: CheckMessage = None, /) -> ta.Any:
361
- ...
363
+ def isinstance(self, v: ta.Any, spec: ta.Any, msg: CheckMessage = None, /) -> ta.Any: ...
362
364
 
363
365
  def isinstance(self, v, spec, msg=None):
364
366
  if not isinstance(v, spec if (st := type(spec)) is type or (st is tuple and all(type(x) is type for x in spec)) else self._unpack_isinstance_spec(spec)): # noqa
@@ -373,12 +375,10 @@ class Checks:
373
375
  return v
374
376
 
375
377
  @ta.overload
376
- def of_isinstance(self, spec: ta.Type[T], msg: CheckMessage = None, /) -> ta.Callable[[ta.Any], T]:
377
- ...
378
+ def of_isinstance(self, spec: ta.Type[T], msg: CheckMessage = None, /) -> ta.Callable[[ta.Any], T]: ...
378
379
 
379
380
  @ta.overload
380
- def of_isinstance(self, spec: ta.Any, msg: CheckMessage = None, /) -> ta.Callable[[ta.Any], ta.Any]:
381
- ...
381
+ def of_isinstance(self, spec: ta.Any, msg: CheckMessage = None, /) -> ta.Callable[[ta.Any], ta.Any]: ...
382
382
 
383
383
  def of_isinstance(self, spec, msg=None, /):
384
384
  spec = spec if (st := type(spec)) is type or (st is tuple and all(type(x) is type for x in spec)) else self._unpack_isinstance_spec(spec) # noqa
@@ -796,34 +796,18 @@ check = Checks()
796
796
 
797
797
 
798
798
  ########################################
799
- # ../../../omlish/lite/json.py
799
+ # ../../../omlish/lite/io.py
800
800
 
801
801
 
802
802
  ##
803
803
 
804
804
 
805
- JSON_PRETTY_INDENT = 2
806
-
807
- JSON_PRETTY_KWARGS: ta.Mapping[str, ta.Any] = dict(
808
- indent=JSON_PRETTY_INDENT,
809
- )
810
-
811
- json_dump_pretty: ta.Callable[..., None] = functools.partial(json.dump, **JSON_PRETTY_KWARGS)
812
- json_dumps_pretty: ta.Callable[..., str] = functools.partial(json.dumps, **JSON_PRETTY_KWARGS)
813
-
814
-
815
- ##
816
-
817
-
818
- JSON_COMPACT_SEPARATORS = (',', ':')
819
-
820
- JSON_COMPACT_KWARGS: ta.Mapping[str, ta.Any] = dict(
821
- indent=None,
822
- separators=JSON_COMPACT_SEPARATORS,
823
- )
805
+ class FnWriter:
806
+ def __init__(self, fn):
807
+ self._fn = fn
824
808
 
825
- json_dump_compact: ta.Callable[..., None] = functools.partial(json.dump, **JSON_COMPACT_KWARGS)
826
- json_dumps_compact: ta.Callable[..., str] = functools.partial(json.dumps, **JSON_COMPACT_KWARGS)
809
+ def write(self, *args, **kwargs):
810
+ return self._fn(*args, **kwargs)
827
811
 
828
812
 
829
813
  ########################################
@@ -1047,13 +1031,11 @@ def strip_with_newline(s: str) -> str:
1047
1031
 
1048
1032
 
1049
1033
  @ta.overload
1050
- def split_keep_delimiter(s: str, d: str) -> str:
1051
- ...
1034
+ def split_keep_delimiter(s: str, d: str) -> str: ...
1052
1035
 
1053
1036
 
1054
1037
  @ta.overload
1055
- def split_keep_delimiter(s: bytes, d: bytes) -> bytes:
1056
- ...
1038
+ def split_keep_delimiter(s: bytes, d: bytes) -> bytes: ...
1057
1039
 
1058
1040
 
1059
1041
  def split_keep_delimiter(s, d):
@@ -1086,6 +1068,99 @@ def format_num_bytes(num_bytes: int) -> str:
1086
1068
  return f'{num_bytes / 1024 ** (len(FORMAT_NUM_BYTES_SUFFIXES) - 1):.2f}{FORMAT_NUM_BYTES_SUFFIXES[-1]}'
1087
1069
 
1088
1070
 
1071
+ ########################################
1072
+ # ../../../omlish/lite/json.py
1073
+
1074
+
1075
+ ##
1076
+
1077
+
1078
+ JSON_PRETTY_INDENT = 2
1079
+
1080
+ JSON_PRETTY_KWARGS: ta.Mapping[str, ta.Any] = dict(
1081
+ indent=JSON_PRETTY_INDENT,
1082
+ )
1083
+
1084
+ json_dump_pretty: ta.Callable[..., None] = functools.partial(json.dump, **JSON_PRETTY_KWARGS)
1085
+ json_dumps_pretty: ta.Callable[..., str] = functools.partial(json.dumps, **JSON_PRETTY_KWARGS)
1086
+
1087
+
1088
+ ##
1089
+
1090
+
1091
+ JSON_COMPACT_SEPARATORS = (',', ':')
1092
+
1093
+ JSON_COMPACT_KWARGS: ta.Mapping[str, ta.Any] = dict(
1094
+ indent=None,
1095
+ separators=JSON_COMPACT_SEPARATORS,
1096
+ )
1097
+
1098
+ json_dump_compact: ta.Callable[..., None] = functools.partial(json.dump, **JSON_COMPACT_KWARGS)
1099
+ json_dumps_compact: ta.Callable[..., str] = functools.partial(json.dumps, **JSON_COMPACT_KWARGS)
1100
+
1101
+
1102
+ ##
1103
+
1104
+
1105
+ JSON_KWARGS_BY_STYLE: ta.Mapping[JsonStyle, ta.Mapping[str, ta.Any]] = {
1106
+ 'pretty': JSON_PRETTY_KWARGS,
1107
+ 'compact': JSON_COMPACT_KWARGS,
1108
+ None: {},
1109
+ }
1110
+
1111
+
1112
+ ##
1113
+
1114
+
1115
+ def json_dump(
1116
+ obj: ta.Any,
1117
+ fp: ta.Any,
1118
+ *,
1119
+ style: JsonStyle = None,
1120
+ **kwargs: ta.Any,
1121
+ ) -> None:
1122
+ json.dump(
1123
+ obj,
1124
+ fp,
1125
+ **JSON_KWARGS_BY_STYLE[style],
1126
+ **kwargs,
1127
+ )
1128
+
1129
+
1130
+ def json_dump_encode(
1131
+ obj: ta.Any,
1132
+ fp: ta.Any,
1133
+ encoding: str = 'utf-8',
1134
+ *,
1135
+ errors: str = 'strict',
1136
+ style: JsonStyle = None,
1137
+ **kwargs: ta.Any,
1138
+ ) -> None:
1139
+ def write(s: str) -> int:
1140
+ fp.write(s.encode(encoding, errors))
1141
+ return len(s)
1142
+
1143
+ json.dump(
1144
+ obj,
1145
+ FnWriter(write),
1146
+ **JSON_KWARGS_BY_STYLE[style],
1147
+ **kwargs,
1148
+ )
1149
+
1150
+
1151
+ def json_dumps(
1152
+ obj: ta.Any,
1153
+ *,
1154
+ style: JsonStyle = None,
1155
+ **kwargs: ta.Any,
1156
+ ) -> str:
1157
+ return json.dumps(
1158
+ obj,
1159
+ **JSON_KWARGS_BY_STYLE[style],
1160
+ **kwargs,
1161
+ )
1162
+
1163
+
1089
1164
  ########################################
1090
1165
  # ../../../omlish/lite/marshal.py
1091
1166
  """
@@ -7,6 +7,7 @@ import os
7
7
  import typing as ta
8
8
  import urllib.request
9
9
 
10
+ from omlish.http.statuses import HttpStatus
10
11
  from omlish.lite.abstract import Abstract
11
12
  from omlish.lite.check import check
12
13
 
@@ -118,10 +119,10 @@ class BytesDataServerTargetHandler(DataServerTargetHandler[BytesDataServerTarget
118
119
 
119
120
  def handle(self, req: DataServerRequest) -> DataServerResponse:
120
121
  if req.method not in ('GET', 'HEAD'):
121
- return DataServerResponse(http.HTTPStatus.METHOD_NOT_ALLOWED)
122
+ return DataServerResponse(HttpStatus.METHOD_NOT_ALLOWED)
122
123
 
123
124
  return DataServerResponse(
124
- http.HTTPStatus.OK,
125
+ HttpStatus.OK,
125
126
  headers=self._make_headers(),
126
127
  body=io.BytesIO(self._target.data) if self._target.data is not None and req.method == 'GET' else None,
127
128
  )
@@ -137,10 +138,10 @@ class FileDataServerTargetHandler(DataServerTargetHandler[FileDataServerTarget])
137
138
  try:
138
139
  st = os.stat(check.not_none(self._target.file_path))
139
140
  except FileNotFoundError:
140
- return DataServerResponse(http.HTTPStatus.NOT_FOUND)
141
+ return DataServerResponse(HttpStatus.NOT_FOUND)
141
142
 
142
143
  return DataServerResponse(
143
- http.HTTPStatus.OK,
144
+ HttpStatus.OK,
144
145
  headers={
145
146
  'Content-Length': str(st.st_size),
146
147
  **self._make_headers(),
@@ -151,13 +152,13 @@ class FileDataServerTargetHandler(DataServerTargetHandler[FileDataServerTarget])
151
152
  try:
152
153
  f = open(check.not_none(self._target.file_path), 'rb') # noqa
153
154
  except FileNotFoundError:
154
- return DataServerResponse(http.HTTPStatus.NOT_FOUND)
155
+ return DataServerResponse(HttpStatus.NOT_FOUND)
155
156
 
156
157
  try:
157
158
  sz = os.fstat(f.fileno())
158
159
 
159
160
  return DataServerResponse(
160
- http.HTTPStatus.OK,
161
+ HttpStatus.OK,
161
162
  headers={
162
163
  'Content-Length': str(sz.st_size),
163
164
  **self._make_headers(),
@@ -170,7 +171,7 @@ class FileDataServerTargetHandler(DataServerTargetHandler[FileDataServerTarget])
170
171
  raise
171
172
 
172
173
  else:
173
- return DataServerResponse(http.HTTPStatus.METHOD_NOT_ALLOWED)
174
+ return DataServerResponse(HttpStatus.METHOD_NOT_ALLOWED)
174
175
 
175
176
 
176
177
  #
@@ -180,7 +181,7 @@ class FileDataServerTargetHandler(DataServerTargetHandler[FileDataServerTarget])
180
181
  class UrlDataServerTargetHandler(DataServerTargetHandler[UrlDataServerTarget]):
181
182
  def handle(self, req: DataServerRequest) -> DataServerResponse:
182
183
  if req.method not in check.not_none(self._target.methods):
183
- return DataServerResponse(http.HTTPStatus.METHOD_NOT_ALLOWED)
184
+ return DataServerResponse(HttpStatus.METHOD_NOT_ALLOWED)
184
185
 
185
186
  resp: http.client.HTTPResponse = urllib.request.urlopen(urllib.request.Request( # noqa
186
187
  method=req.method,
@@ -7,10 +7,10 @@ TODO:
7
7
  """
8
8
  import typing as ta
9
9
 
10
- from omlish.http.simple.handlers import SimpleHttpHandler_
11
- from omlish.http.simple.handlers import SimpleHttpHandlerRequest
12
- from omlish.http.simple.handlers import SimpleHttpHandlerResponse
13
- from omlish.http.simple.handlers import SimpleHttpHandlerResponseStreamedData
10
+ from omlish.http.simple.types import SimpleHttpHandler_
11
+ from omlish.http.simple.types import SimpleHttpHandlerRequest
12
+ from omlish.http.simple.types import SimpleHttpHandlerResponse
13
+ from omlish.http.simple.types import SimpleHttpHandlerResponseStreamedData
14
14
 
15
15
  from .handlers import DataServerRequest
16
16
  from .server import DataServer
@@ -1,8 +1,8 @@
1
1
  # ruff: noqa: UP006 UP007 UP037 UP045
2
2
  import dataclasses as dc
3
- import http.client
4
3
  import typing as ta
5
4
 
5
+ from omlish.http.statuses import HttpStatus
6
6
  from omlish.lite.check import check
7
7
 
8
8
  from .handlers import DataServerHandler
@@ -85,6 +85,6 @@ class DataServer:
85
85
  try:
86
86
  rt = self._routes_by_path[req.path]
87
87
  except KeyError:
88
- return DataServerResponse(http.HTTPStatus.NOT_FOUND)
88
+ return DataServerResponse(HttpStatus.NOT_FOUND)
89
89
 
90
90
  return rt.handler.handle(req)
@@ -42,6 +42,11 @@ deps = [
42
42
  'make',
43
43
  'pkg-config',
44
44
 
45
+ # libs
46
+ 'libncurses5-dev',
47
+ 'libreadline6-dev',
48
+ 'libssl-dev',
49
+
45
50
  # language toolchains & runtimes
46
51
  'maven',
47
52
  'perl',
@@ -64,6 +69,9 @@ deps = [
64
69
  'lsof',
65
70
  'strace',
66
71
 
72
+ # sandboxing
73
+ 'bubblewrap',
74
+
67
75
  # data formats
68
76
  'jq',
69
77
  'libyaml-dev',
@@ -72,6 +80,7 @@ deps = [
72
80
  'libdb-dev',
73
81
  'libgdbm6',
74
82
  'libpq-dev',
83
+ 'libsqlite3-dev',
75
84
  'postgresql-client',
76
85
  'sqlite3',
77
86
 
@@ -86,6 +95,7 @@ deps = [
86
95
  'tmux',
87
96
 
88
97
  # shells
98
+ 'tcsh',
89
99
  'zsh',
90
100
 
91
101
  # editors & shells
@@ -99,13 +109,18 @@ deps = [
99
109
 
100
110
  # documentation & introspection
101
111
  'file',
102
- 'man-db',
103
112
  'graphviz',
113
+ 'man-db',
104
114
 
105
115
  # chat & communication
106
116
  'irssi',
107
117
 
108
118
  # archiving & compression
109
- 'zip',
119
+ 'libbz2-dev',
120
+ 'liblz4-dev',
121
+ 'lz4',
122
+ 'lzma',
123
+ 'lzma-dev',
110
124
  'unzip',
125
+ 'zip',
111
126
  ]
@@ -31,7 +31,7 @@ def yield_git_status_line_fields(l_: str) -> ta.Iterator[str]:
31
31
  while True:
32
32
  if l[p] == ord('"'):
33
33
  p += 1
34
- s: list[bytes] = []
34
+ s: ta.List[bytes] = []
35
35
  while (n := find_any(b'\\"', p)) > 0:
36
36
  if (c := l[n]) == ord('\\'):
37
37
  s.append(l[p:n])
@@ -146,6 +146,17 @@ _UNMERGED_GIT_STATUS_STATE_PAIRS: ta.FrozenSet[ta.Tuple[GitStatusState, GitStatu
146
146
  (GitStatusState.DELETED, GitStatusState.DELETED),
147
147
  ])
148
148
 
149
+ _UNSTAGED_GIT_STATUS_STATES: ta.FrozenSet[GitStatusState] = frozenset([
150
+ GitStatusState.UNMODIFIED,
151
+ GitStatusState.UNTRACKED,
152
+ GitStatusState.IGNORED,
153
+ ])
154
+
155
+ _CLEAN_WORKTREE_GIT_STATUS_STATES: ta.FrozenSet[GitStatusState] = frozenset([
156
+ GitStatusState.UNMODIFIED,
157
+ GitStatusState.IGNORED,
158
+ ])
159
+
149
160
 
150
161
  @dc.dataclass(frozen=True)
151
162
  class GitStatusItem:
@@ -158,8 +169,8 @@ class GitStatusItem:
158
169
  @property
159
170
  def is_unmerged(self) -> bool:
160
171
  return (
161
- self.x in _UNMERGED_GIT_STATUS_STATE_PAIRS or
162
- self.y in _UNMERGED_GIT_STATUS_STATE_PAIRS or
172
+ self.x in _UNMERGED_GIT_STATUS_STATES or
173
+ self.y in _UNMERGED_GIT_STATUS_STATES or
163
174
  (self.x, self.y) in _UNMERGED_GIT_STATUS_STATE_PAIRS
164
175
  )
165
176
 
@@ -202,19 +213,17 @@ class GitStatus(ta.Sequence[GitStatusItem]):
202
213
 
203
214
  self._lst = list(lines)
204
215
 
205
- by_x: ta.Dict[GitStatusState, list[GitStatusItem]] = {}
206
- by_y: ta.Dict[GitStatusState, list[GitStatusItem]] = {}
216
+ by_x: ta.Dict[GitStatusState, ta.List[GitStatusItem]] = {}
217
+ by_y: ta.Dict[GitStatusState, ta.List[GitStatusItem]] = {}
207
218
 
208
- by_a: ta.Dict[str, GitStatusItem] = {}
219
+ by_a: ta.Dict[str, ta.List[GitStatusItem]] = {}
209
220
  by_b: ta.Dict[str, GitStatusItem] = {}
210
221
 
211
222
  for l in self._lst:
212
223
  by_x.setdefault(l.x, []).append(l)
213
224
  by_y.setdefault(l.y, []).append(l)
214
225
 
215
- if l.a in by_a:
216
- raise KeyError(l.a)
217
- by_a[l.a] = l
226
+ by_a.setdefault(l.a, []).append(l)
218
227
 
219
228
  if l.b is not None:
220
229
  if l.b in by_b:
@@ -251,7 +260,7 @@ class GitStatus(ta.Sequence[GitStatusItem]):
251
260
  return self._by_y
252
261
 
253
262
  @property
254
- def by_a(self) -> ta.Mapping[str, GitStatusItem]:
263
+ def by_a(self) -> ta.Mapping[str, ta.Sequence[GitStatusItem]]:
255
264
  return self._by_a
256
265
 
257
266
  @property
@@ -266,11 +275,11 @@ class GitStatus(ta.Sequence[GitStatusItem]):
266
275
 
267
276
  @property
268
277
  def has_staged(self) -> bool:
269
- return any(l.x != GitStatusState.UNMODIFIED for l in self._lst)
278
+ return any(l.x not in _UNSTAGED_GIT_STATUS_STATES for l in self._lst)
270
279
 
271
280
  @property
272
281
  def has_dirty(self) -> bool:
273
- return any(l.y != GitStatusState.UNMODIFIED for l in self._lst)
282
+ return any(l.y not in _CLEAN_WORKTREE_GIT_STATUS_STATES for l in self._lst)
274
283
 
275
284
 
276
285
  def parse_git_status(s: str) -> GitStatus:
@@ -39,10 +39,10 @@ def __omlish_amalg__(): # noqa
39
39
  src_files=[
40
40
  dict(path='../../omlish/lite/abstract.py', sha1='a2fc3f3697fa8de5247761e9d554e70176f37aac'),
41
41
  dict(path='../../omlish/lite/cached.py', sha1='0c33cf961ac8f0727284303c7a30c5ea98f714f2'),
42
- dict(path='../../omlish/lite/check.py', sha1='7088e41034dbdce7bdae200793aaa9d6838c79d8'),
42
+ dict(path='../../omlish/lite/check.py', sha1='62b9ccea94c4f7bcef97e7adae8674b8cb11d4af'),
43
43
  dict(path='../../omlish/lite/objects.py', sha1='9566bbf3530fd71fcc56321485216b592fae21e9'),
44
44
  dict(path='../../omlish/lite/reflect.py', sha1='c4fec44bf144e9d93293c996af06f6c65fc5e63d'),
45
- dict(path='../../omlish/lite/strings.py', sha1='89831ecbc34ad80e118a865eceb390ed399dc4d6'),
45
+ dict(path='../../omlish/lite/strings.py', sha1='89631bb5cfd6496176db71ab3abd58b89872068b'),
46
46
  dict(path='../../omlish/lite/marshal.py', sha1='66bc88d705df274e9fa1168d2aab20c7e3935cf6'),
47
47
  dict(path='dumping.py', sha1='49acd06fdcc3427f4a255fea295d7042bb655a13'),
48
48
  ],
@@ -469,12 +469,10 @@ class Checks:
469
469
  return spec
470
470
 
471
471
  @ta.overload
472
- def isinstance(self, v: ta.Any, spec: ta.Type[T], msg: CheckMessage = None, /) -> T:
473
- ...
472
+ def isinstance(self, v: ta.Any, spec: ta.Type[T], msg: CheckMessage = None, /) -> T: ...
474
473
 
475
474
  @ta.overload
476
- def isinstance(self, v: ta.Any, spec: ta.Any, msg: CheckMessage = None, /) -> ta.Any:
477
- ...
475
+ def isinstance(self, v: ta.Any, spec: ta.Any, msg: CheckMessage = None, /) -> ta.Any: ...
478
476
 
479
477
  def isinstance(self, v, spec, msg=None):
480
478
  if not isinstance(v, spec if (st := type(spec)) is type or (st is tuple and all(type(x) is type for x in spec)) else self._unpack_isinstance_spec(spec)): # noqa
@@ -489,12 +487,10 @@ class Checks:
489
487
  return v
490
488
 
491
489
  @ta.overload
492
- def of_isinstance(self, spec: ta.Type[T], msg: CheckMessage = None, /) -> ta.Callable[[ta.Any], T]:
493
- ...
490
+ def of_isinstance(self, spec: ta.Type[T], msg: CheckMessage = None, /) -> ta.Callable[[ta.Any], T]: ...
494
491
 
495
492
  @ta.overload
496
- def of_isinstance(self, spec: ta.Any, msg: CheckMessage = None, /) -> ta.Callable[[ta.Any], ta.Any]:
497
- ...
493
+ def of_isinstance(self, spec: ta.Any, msg: CheckMessage = None, /) -> ta.Callable[[ta.Any], ta.Any]: ...
498
494
 
499
495
  def of_isinstance(self, spec, msg=None, /):
500
496
  spec = spec if (st := type(spec)) is type or (st is tuple and all(type(x) is type for x in spec)) else self._unpack_isinstance_spec(spec) # noqa
@@ -1132,13 +1128,11 @@ def strip_with_newline(s: str) -> str:
1132
1128
 
1133
1129
 
1134
1130
  @ta.overload
1135
- def split_keep_delimiter(s: str, d: str) -> str:
1136
- ...
1131
+ def split_keep_delimiter(s: str, d: str) -> str: ...
1137
1132
 
1138
1133
 
1139
1134
  @ta.overload
1140
- def split_keep_delimiter(s: bytes, d: bytes) -> bytes:
1141
- ...
1135
+ def split_keep_delimiter(s: bytes, d: bytes) -> bytes: ...
1142
1136
 
1143
1137
 
1144
1138
  def split_keep_delimiter(s, d):