omdev 0.0.0.dev440__tar.gz → 0.0.0.dev442__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 (337) hide show
  1. {omdev-0.0.0.dev440/omdev.egg-info → omdev-0.0.0.dev442}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/venvs.py +1 -0
  3. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/manifests/_dumping.py +56 -0
  4. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/packaging/requires.py +6 -6
  5. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/reqs.py +31 -9
  6. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/venvs.py +8 -1
  7. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/scripts/ci.py +149 -47
  8. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/scripts/interp.py +56 -2
  9. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/scripts/lib/inject.py +0 -2
  10. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/scripts/pyproject.py +579 -12
  11. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442/omdev.egg-info}/PKG-INFO +2 -2
  12. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev.egg-info/requires.txt +1 -1
  13. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/pyproject.toml +2 -2
  14. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/LICENSE +0 -0
  15. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/MANIFEST.in +0 -0
  16. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/README.md +0 -0
  17. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/.omlish-manifests.json +0 -0
  18. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/__about__.py +0 -0
  19. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/__init__.py +0 -0
  20. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/__init__.py +0 -0
  21. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/__main__.py +0 -0
  22. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/cli/__init__.py +0 -0
  23. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/cli/main.py +0 -0
  24. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/gen/__init__.py +0 -0
  25. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/gen/gen.py +0 -0
  26. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/gen/imports.py +0 -0
  27. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/gen/manifests.py +0 -0
  28. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/gen/resources.py +0 -0
  29. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/gen/srcfiles.py +0 -0
  30. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/gen/strip.py +0 -0
  31. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/gen/types.py +0 -0
  32. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/gen/typing.py +0 -0
  33. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/amalg/sources.py +0 -0
  34. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/__init__.py +0 -0
  35. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/compute/__init__.py +0 -0
  36. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/compute/cache.py +0 -0
  37. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/compute/contexts.py +0 -0
  38. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/compute/currents.py +0 -0
  39. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/compute/fns.py +0 -0
  40. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/compute/resolvers.py +0 -0
  41. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/compute/storage.py +0 -0
  42. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/compute/types.py +0 -0
  43. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/data/__init__.py +0 -0
  44. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/data/actions.py +0 -0
  45. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/data/cache.py +0 -0
  46. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/data/consts.py +0 -0
  47. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/data/defaults.py +0 -0
  48. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/data/manifests.py +0 -0
  49. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cache/data/specs.py +0 -0
  50. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/capi/__init__.py +0 -0
  51. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/capi/darwin/__init__.py +0 -0
  52. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/capi/darwin/aps.py +0 -0
  53. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/capi/darwin/ax.py +0 -0
  54. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/capi/darwin/cf.py +0 -0
  55. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/capi/darwin/cg.py +0 -0
  56. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/capi/linux/__init__.py +0 -0
  57. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/capi/linux/x11.py +0 -0
  58. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cc/__init__.py +0 -0
  59. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cc/__main__.py +0 -0
  60. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cc/cdeps.py +0 -0
  61. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cc/cdeps.toml +0 -0
  62. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cc/cli.py +0 -0
  63. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cc/srclangs.py +0 -0
  64. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/__init__.py +0 -0
  65. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_boilerplate.cc +0 -0
  66. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/LICENSE +0 -0
  67. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/__init__.py +0 -0
  68. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/build_ext.py +0 -0
  69. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  70. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  71. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/compilers/options.py +0 -0
  72. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  73. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/dir_util.py +0 -0
  74. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/errors.py +0 -0
  75. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/extension.py +0 -0
  76. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/file_util.py +0 -0
  77. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/modified.py +0 -0
  78. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/spawn.py +0 -0
  79. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/sysconfig.py +0 -0
  80. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/util.py +0 -0
  81. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/_distutils/version.py +0 -0
  82. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/build.py +0 -0
  83. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/cmake.py +0 -0
  84. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/importhook.py +0 -0
  85. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/magic.py +0 -0
  86. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cexts/scan.py +0 -0
  87. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/__init__.py +0 -0
  88. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/__main__.py +0 -0
  89. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/cache.py +0 -0
  90. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/ci.py +0 -0
  91. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/cli.py +0 -0
  92. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/compose.py +0 -0
  93. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/consts.py +0 -0
  94. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/__init__.py +0 -0
  95. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/buildcaching.py +0 -0
  96. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/cache.py +0 -0
  97. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  98. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/cacheserved/cache.py +0 -0
  99. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  100. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/cmds.py +0 -0
  101. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/dataserver.py +0 -0
  102. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/imagepulling.py +0 -0
  103. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/inject.py +0 -0
  104. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/packing.py +0 -0
  105. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/repositories.py +0 -0
  106. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/docker/utils.py +0 -0
  107. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/__init__.py +0 -0
  108. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/api/__init__.py +0 -0
  109. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/api/clients.py +0 -0
  110. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/api/v1/__init__.py +0 -0
  111. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/api/v1/api.py +0 -0
  112. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/api/v1/client.py +0 -0
  113. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/api/v2/__init__.py +0 -0
  114. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/api/v2/api.py +0 -0
  115. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/api/v2/azure.py +0 -0
  116. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/api/v2/client.py +0 -0
  117. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/bootstrap.py +0 -0
  118. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/cache.py +0 -0
  119. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/cli.py +0 -0
  120. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/env.py +0 -0
  121. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/github/inject.py +0 -0
  122. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/inject.py +0 -0
  123. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/requirements.py +0 -0
  124. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/shell.py +0 -0
  125. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ci/utils.py +0 -0
  126. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cli/__init__.py +0 -0
  127. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cli/__main__.py +0 -0
  128. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cli/_pathhack.py +0 -0
  129. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cli/clicli.py +0 -0
  130. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cli/install.py +0 -0
  131. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cli/main.py +0 -0
  132. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cli/managers.py +0 -0
  133. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cli/types.py +0 -0
  134. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/clipboard/__init__.py +0 -0
  135. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/clipboard/clipboard.py +0 -0
  136. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/clipboard/darwin_cf.py +0 -0
  137. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/clipboard/linux_x11.py +0 -0
  138. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cmake.py +0 -0
  139. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cmdlog/__init__.py +0 -0
  140. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cmdlog/__main__.py +0 -0
  141. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cmdlog/_cmdlog.py +0 -0
  142. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cmdlog/cli.py +0 -0
  143. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/cmdlog/cmdlog.py +0 -0
  144. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/dataclasses/__init__.py +0 -0
  145. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/dataclasses/__main__.py +0 -0
  146. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/dataclasses/cli.py +0 -0
  147. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/dataclasses/codegen.py +0 -0
  148. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/dataserver/__init__.py +0 -0
  149. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/dataserver/handlers.py +0 -0
  150. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/dataserver/http.py +0 -0
  151. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/dataserver/routes.py +0 -0
  152. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/dataserver/server.py +0 -0
  153. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/dataserver/targets.py +0 -0
  154. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/git/__init__.py +0 -0
  155. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/git/magic.py +0 -0
  156. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/git/revisions.py +0 -0
  157. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/git/shallow.py +0 -0
  158. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/git/status.py +0 -0
  159. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/home/__init__.py +0 -0
  160. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/home/paths.py +0 -0
  161. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/home/secrets.py +0 -0
  162. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/home/shadow.py +0 -0
  163. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/imgur.py +0 -0
  164. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/intellij/__init__.py +0 -0
  165. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/intellij/cli.py +0 -0
  166. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/intellij/ides.py +0 -0
  167. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/intellij/open.py +0 -0
  168. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/__init__.py +0 -0
  169. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/__main__.py +0 -0
  170. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/cli.py +0 -0
  171. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/default.py +0 -0
  172. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/inject.py +0 -0
  173. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/inspect.py +0 -0
  174. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/providers/__init__.py +0 -0
  175. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/providers/base.py +0 -0
  176. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/providers/inject.py +0 -0
  177. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/providers/running.py +0 -0
  178. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/providers/standalone.py +0 -0
  179. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/providers/system.py +0 -0
  180. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/pyenv/__init__.py +0 -0
  181. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/pyenv/inject.py +0 -0
  182. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/pyenv/install.py +0 -0
  183. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/pyenv/provider.py +0 -0
  184. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/pyenv/pyenv.py +0 -0
  185. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/resolvers.py +0 -0
  186. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/types.py +0 -0
  187. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/uv/__init__.py +0 -0
  188. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/uv/inject.py +0 -0
  189. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/uv/provider.py +0 -0
  190. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/interp/uv/uv.py +0 -0
  191. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/magic/__init__.py +0 -0
  192. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/magic/__main__.py +0 -0
  193. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/magic/cli.py +0 -0
  194. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/magic/find.py +0 -0
  195. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/magic/magic.py +0 -0
  196. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/magic/prepare.py +0 -0
  197. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/magic/styles.py +0 -0
  198. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/manifests/__init__.py +0 -0
  199. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/manifests/__main__.py +0 -0
  200. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/manifests/building.py +0 -0
  201. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/manifests/dumping.py +0 -0
  202. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/manifests/main.py +0 -0
  203. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/mypy/__init__.py +0 -0
  204. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/mypy/debug.py +0 -0
  205. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/mypy/report.py +0 -0
  206. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/__init__.py +0 -0
  207. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/building.py +0 -0
  208. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/compression.py +0 -0
  209. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/data.py +0 -0
  210. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/datarefs.py +0 -0
  211. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/dataserver.py +0 -0
  212. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/loading.py +0 -0
  213. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/media.py +0 -0
  214. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/pack/__init__.py +0 -0
  215. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/pack/packing.py +0 -0
  216. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/pack/repositories.py +0 -0
  217. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/pack/unpacking.py +0 -0
  218. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/repositories.py +0 -0
  219. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/oci/tars.py +0 -0
  220. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/packaging/__init__.py +0 -0
  221. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/packaging/marshal.py +0 -0
  222. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/packaging/names.py +0 -0
  223. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/packaging/revisions.py +0 -0
  224. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/packaging/specifiers.py +0 -0
  225. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/packaging/versions.py +0 -0
  226. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/packaging/wheelfile.py +0 -0
  227. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pip.py +0 -0
  228. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/precheck/__init__.py +0 -0
  229. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/precheck/__main__.py +0 -0
  230. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/precheck/base.py +0 -0
  231. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/precheck/caches.py +0 -0
  232. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/precheck/git.py +0 -0
  233. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/precheck/imports.py +0 -0
  234. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/precheck/lite.py +0 -0
  235. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/precheck/main.py +0 -0
  236. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/precheck/manifests.py +0 -0
  237. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/precheck/scripts.py +0 -0
  238. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/precheck/unicode.py +0 -0
  239. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/__init__.py +0 -0
  240. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/apps/__init__.py +0 -0
  241. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/apps/ncdu.py +0 -0
  242. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/confirm.py +0 -0
  243. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/markdown/LICENSE +0 -0
  244. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/markdown/__init__.py +0 -0
  245. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/markdown/__main__.py +0 -0
  246. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/markdown/border.py +0 -0
  247. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/markdown/cli.py +0 -0
  248. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/markdown/markdown.py +0 -0
  249. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/markdown/parser.py +0 -0
  250. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/markdown/styles.py +0 -0
  251. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/markdown/tags.py +0 -0
  252. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/ptk/markdown/utils.py +0 -0
  253. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/__init__.py +0 -0
  254. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/attrdocs.py +0 -0
  255. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/bracepy.py +0 -0
  256. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/classdot.py +0 -0
  257. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/docstrings/LICENSE +0 -0
  258. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/docstrings/__init__.py +0 -0
  259. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/docstrings/attrdoc.py +0 -0
  260. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/docstrings/common.py +0 -0
  261. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/docstrings/epydoc.py +0 -0
  262. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/docstrings/google.py +0 -0
  263. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/docstrings/numpydoc.py +0 -0
  264. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/docstrings/parser.py +0 -0
  265. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/docstrings/rest.py +0 -0
  266. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/findimports.py +0 -0
  267. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/scripts/__init__.py +0 -0
  268. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/scripts/bumpversion.py +0 -0
  269. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/scripts/execstat.py +0 -0
  270. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/scripts/importtrace.py +0 -0
  271. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/srcheaders.py +0 -0
  272. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/tools/__init__.py +0 -0
  273. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/tools/importscan.py +0 -0
  274. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/py/tools/mkrelimp.py +0 -0
  275. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/__init__.py +0 -0
  276. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/__main__.py +0 -0
  277. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/cexts.py +0 -0
  278. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/cli.py +0 -0
  279. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/configs.py +0 -0
  280. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/inject.py +0 -0
  281. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/pkg.py +0 -0
  282. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/resources/__init__.py +0 -0
  283. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/resources/docker-dev.sh +0 -0
  284. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/pyproject/resources/python.sh +0 -0
  285. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/scripts/__init__.py +0 -0
  286. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/scripts/lib/__init__.py +0 -0
  287. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/scripts/lib/logs.py +0 -0
  288. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/scripts/lib/marshal.py +0 -0
  289. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/scripts/slowcat.py +0 -0
  290. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/scripts/tmpexec.py +0 -0
  291. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tagstrings.py +0 -0
  292. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tokens/__init__.py +0 -0
  293. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tokens/all.py +0 -0
  294. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tokens/tokenizert.py +0 -0
  295. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tokens/utils.py +0 -0
  296. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/__init__.py +0 -0
  297. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/cloc.py +0 -0
  298. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/diff.py +0 -0
  299. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/doc.py +0 -0
  300. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/docker.py +0 -0
  301. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/git/__init__.py +0 -0
  302. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/git/__main__.py +0 -0
  303. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/git/cli.py +0 -0
  304. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/git/cloning.py +0 -0
  305. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/git/consts.py +0 -0
  306. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/git/messages.py +0 -0
  307. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/json/__init__.py +0 -0
  308. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/json/__main__.py +0 -0
  309. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/json/cli.py +0 -0
  310. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/json/formats.py +0 -0
  311. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/json/io.py +0 -0
  312. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/json/parsing.py +0 -0
  313. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/json/processing.py +0 -0
  314. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/json/rendering.py +0 -0
  315. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/jsonview/__init__.py +0 -0
  316. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/jsonview/__main__.py +0 -0
  317. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/jsonview/cli.py +0 -0
  318. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/jsonview/resources/__init__.py +0 -0
  319. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/jsonview/resources/jsonview.css +0 -0
  320. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/jsonview/resources/jsonview.js +0 -0
  321. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/linehisto.py +0 -0
  322. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/mkenv.py +0 -0
  323. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/notebook.py +0 -0
  324. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/pawk/__init__.py +0 -0
  325. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/pawk/__main__.py +0 -0
  326. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/pawk/pawk.py +0 -0
  327. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/pip.py +0 -0
  328. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/prof.py +0 -0
  329. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/qr.py +0 -0
  330. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/shadow.py +0 -0
  331. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/shell.py +0 -0
  332. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev/tools/sqlrepl.py +0 -0
  333. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev.egg-info/SOURCES.txt +0 -0
  334. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev.egg-info/dependency_links.txt +0 -0
  335. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev.egg-info/entry_points.txt +0 -0
  336. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/omdev.egg-info/top_level.txt +0 -0
  337. {omdev-0.0.0.dev440 → omdev-0.0.0.dev442}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev440
3
+ Version: 0.0.0.dev442
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev440
17
+ Requires-Dist: omlish==0.0.0.dev442
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=25.1; extra == "all"
20
20
  Requires-Dist: pycparser~=2.23; extra == "all"
@@ -21,6 +21,7 @@ from .types import InterpSpecifier
21
21
  class InterpVenvConfig:
22
22
  interp: ta.Optional[str] = None
23
23
  requires: ta.Optional[ta.Sequence[str]] = None
24
+ requires_pats: ta.Optional[ta.Sequence[str]] = None
24
25
  use_uv: ta.Optional[bool] = None
25
26
 
26
27
 
@@ -227,6 +227,62 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
227
227
  return _AsyncCachedNullary(fn)
228
228
 
229
229
 
230
+ ##
231
+
232
+
233
+ cached_property = functools.cached_property
234
+
235
+
236
+ class _cached_property: # noqa
237
+ """Backported to pick up https://github.com/python/cpython/commit/056dfc71dce15f81887f0bd6da09d6099d71f979 ."""
238
+
239
+ def __init__(self, func):
240
+ self.func = func
241
+ self.attrname = None # noqa
242
+ self.__doc__ = func.__doc__
243
+ self.__module__ = func.__module__
244
+
245
+ _NOT_FOUND = object()
246
+
247
+ def __set_name__(self, owner, name):
248
+ if self.attrname is None:
249
+ self.attrname = name # noqa
250
+ elif name != self.attrname:
251
+ raise TypeError(
252
+ f'Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r}).',
253
+ )
254
+
255
+ def __get__(self, instance, owner=None):
256
+ if instance is None:
257
+ return self
258
+ if self.attrname is None:
259
+ raise TypeError('Cannot use cached_property instance without calling __set_name__ on it.')
260
+
261
+ try:
262
+ cache = instance.__dict__
263
+ except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
264
+ raise TypeError(
265
+ f"No '__dict__' attribute on {type(instance).__name__!r} instance to cache {self.attrname!r} property.",
266
+ ) from None
267
+
268
+ val = cache.get(self.attrname, self._NOT_FOUND)
269
+
270
+ if val is self._NOT_FOUND:
271
+ val = self.func(instance)
272
+ try:
273
+ cache[self.attrname] = val
274
+ except TypeError:
275
+ raise TypeError(
276
+ f"The '__dict__' attribute on {type(instance).__name__!r} instance does not support item "
277
+ f"assignment for caching {self.attrname!r} property.",
278
+ ) from None
279
+
280
+ return val
281
+
282
+
283
+ globals()['cached_property'] = _cached_property
284
+
285
+
230
286
  ########################################
231
287
  # ../../../omlish/lite/check.py
232
288
  """
@@ -33,6 +33,12 @@ from omlish.lite.check import check
33
33
  from .specifiers import Specifier
34
34
 
35
35
 
36
+ RequiresMarkerVar = ta.Union['RequiresVariable', 'RequiresValue'] # ta.TypeAlias
37
+
38
+ RequiresMarkerAtom = ta.Union['RequiresMarkerItem', ta.Sequence['RequiresMarkerAtom']] # ta.TypeAlias
39
+ RequiresMarkerList = ta.Sequence[ta.Union['RequiresMarkerList', 'RequiresMarkerAtom', str]] # ta.TypeAlias
40
+
41
+
36
42
  ##
37
43
 
38
44
 
@@ -229,12 +235,6 @@ class RequiresOp(RequiresNode):
229
235
  return str(self)
230
236
 
231
237
 
232
- RequiresMarkerVar = ta.Union['RequiresVariable', 'RequiresValue']
233
-
234
- RequiresMarkerAtom = ta.Union['RequiresMarkerItem', ta.Sequence['RequiresMarkerAtom']]
235
- RequiresMarkerList = ta.Sequence[ta.Union['RequiresMarkerList', 'RequiresMarkerAtom', str]]
236
-
237
-
238
238
  class RequiresMarkerItem(ta.NamedTuple):
239
239
  l: ta.Union[RequiresVariable, RequiresValue]
240
240
  op: RequiresOp
@@ -4,12 +4,16 @@ TODO:
4
4
  """
5
5
  # ruff: noqa: UP007 UP045
6
6
  import os.path
7
+ import re
7
8
  import tempfile
8
9
  import typing as ta
9
10
 
10
11
  from omlish.lite.cached import cached_nullary
11
12
  from omlish.logs.modules import get_module_logger
12
13
 
14
+ from ..packaging.requires import RequiresParserSyntaxError
15
+ from ..packaging.requires import parse_requirement
16
+
13
17
 
14
18
  log = get_module_logger(globals()) # noqa
15
19
 
@@ -20,11 +24,14 @@ log = get_module_logger(globals()) # noqa
20
24
  class RequirementsRewriter:
21
25
  def __init__(
22
26
  self,
27
+ *,
23
28
  venv: ta.Optional[str] = None,
29
+ only_pats: ta.Optional[ta.Sequence[re.Pattern]] = None,
24
30
  ) -> None:
25
31
  super().__init__()
26
32
 
27
33
  self._venv = venv
34
+ self._only_pats = only_pats
28
35
 
29
36
  @cached_nullary
30
37
  def _tmp_dir(self) -> str:
@@ -40,17 +47,32 @@ class RequirementsRewriter:
40
47
  out_lines = []
41
48
 
42
49
  for l in in_lines:
43
- if self.VENV_MAGIC in l:
44
- lp, _, rp = l.partition(self.VENV_MAGIC)
45
- rp = rp.partition('#')[0]
50
+ if l.split('#')[0].strip():
46
51
  omit = False
47
- for v in rp.split():
48
- if v[0] == '!':
49
- if self._venv is not None and self._venv == v[1:]:
50
- omit = True
51
- break
52
+
53
+ if self.VENV_MAGIC in l:
54
+ lp, _, rp = l.partition(self.VENV_MAGIC)
55
+ rp = rp.partition('#')[0]
56
+ for v in rp.split():
57
+ if v[0] == '!':
58
+ if self._venv is not None and self._venv == v[1:]:
59
+ omit = True
60
+ break
61
+ else:
62
+ raise NotImplementedError
63
+
64
+ if (
65
+ not omit and
66
+ (ops := self._only_pats) is not None and
67
+ not l.strip().startswith('-')
68
+ ):
69
+ try:
70
+ pr = parse_requirement(l.split('#')[0].strip())
71
+ except RequiresParserSyntaxError:
72
+ pass
52
73
  else:
53
- raise NotImplementedError
74
+ if not any(op.fullmatch(pr.name) for op in ops):
75
+ omit = True
54
76
 
55
77
  if omit:
56
78
  out_lines.append('# OMITTED: ' + l)
@@ -1,6 +1,7 @@
1
1
  # ruff: noqa: UP006 UP007 UP045
2
2
  import glob
3
3
  import os.path
4
+ import re
4
5
  import typing as ta
5
6
 
6
7
  from omlish.lite.cached import async_cached_nullary
@@ -42,7 +43,13 @@ class Venv:
42
43
 
43
44
  @cached_nullary
44
45
  def _iv(self) -> InterpVenv:
45
- rr = RequirementsRewriter(self._name)
46
+ rr = RequirementsRewriter(
47
+ venv=self._name,
48
+ only_pats=(
49
+ [re.compile(p) for p in self._cfg.requires_pats]
50
+ if self._cfg.requires_pats is not None else None
51
+ ),
52
+ )
46
53
 
47
54
  return InterpVenv(
48
55
  self.dir_name,
@@ -670,6 +670,62 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
670
670
  return _AsyncCachedNullary(fn)
671
671
 
672
672
 
673
+ ##
674
+
675
+
676
+ cached_property = functools.cached_property
677
+
678
+
679
+ class _cached_property: # noqa
680
+ """Backported to pick up https://github.com/python/cpython/commit/056dfc71dce15f81887f0bd6da09d6099d71f979 ."""
681
+
682
+ def __init__(self, func):
683
+ self.func = func
684
+ self.attrname = None # noqa
685
+ self.__doc__ = func.__doc__
686
+ self.__module__ = func.__module__
687
+
688
+ _NOT_FOUND = object()
689
+
690
+ def __set_name__(self, owner, name):
691
+ if self.attrname is None:
692
+ self.attrname = name # noqa
693
+ elif name != self.attrname:
694
+ raise TypeError(
695
+ f'Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r}).',
696
+ )
697
+
698
+ def __get__(self, instance, owner=None):
699
+ if instance is None:
700
+ return self
701
+ if self.attrname is None:
702
+ raise TypeError('Cannot use cached_property instance without calling __set_name__ on it.')
703
+
704
+ try:
705
+ cache = instance.__dict__
706
+ except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
707
+ raise TypeError(
708
+ f"No '__dict__' attribute on {type(instance).__name__!r} instance to cache {self.attrname!r} property.",
709
+ ) from None
710
+
711
+ val = cache.get(self.attrname, self._NOT_FOUND)
712
+
713
+ if val is self._NOT_FOUND:
714
+ val = self.func(instance)
715
+ try:
716
+ cache[self.attrname] = val
717
+ except TypeError:
718
+ raise TypeError(
719
+ f"The '__dict__' attribute on {type(instance).__name__!r} instance does not support item "
720
+ f"assignment for caching {self.attrname!r} property.",
721
+ ) from None
722
+
723
+ return val
724
+
725
+
726
+ globals()['cached_property'] = _cached_property
727
+
728
+
673
729
  ########################################
674
730
  # ../../../omlish/lite/check.py
675
731
  """
@@ -1366,6 +1422,17 @@ aclosing = AsyncClosingManager
1366
1422
  ##
1367
1423
 
1368
1424
 
1425
+ def dataclass_shallow_astuple(o: ta.Any) -> ta.Tuple[ta.Any, ...]:
1426
+ return tuple(getattr(o, f.name) for f in dc.fields(o))
1427
+
1428
+
1429
+ def dataclass_shallow_asdict(o: ta.Any) -> ta.Dict[str, ta.Any]:
1430
+ return {f.name: getattr(o, f.name) for f in dc.fields(o)}
1431
+
1432
+
1433
+ ##
1434
+
1435
+
1369
1436
  def is_immediate_dataclass(cls: type) -> bool:
1370
1437
  if not isinstance(cls, type):
1371
1438
  raise TypeError(cls)
@@ -3254,6 +3321,70 @@ class ArgparseCli:
3254
3321
  return fn()
3255
3322
 
3256
3323
 
3324
+ ########################################
3325
+ # ../../../omlish/http/coro/io.py
3326
+
3327
+
3328
+ ##
3329
+
3330
+
3331
+ class CoroHttpIo:
3332
+ def __new__(cls, *args, **kwargs): # noqa
3333
+ raise TypeError
3334
+
3335
+ def __init_subclass__(cls, **kwargs): # noqa
3336
+ raise TypeError
3337
+
3338
+ #
3339
+
3340
+ MAX_LINE: ta.ClassVar[int] = 65536
3341
+
3342
+ #
3343
+
3344
+ class Io(Abstract):
3345
+ pass
3346
+
3347
+ #
3348
+
3349
+ class AnyLogIo(Io, Abstract):
3350
+ pass
3351
+
3352
+ #
3353
+
3354
+ @dc.dataclass(frozen=True)
3355
+ class ConnectIo(Io):
3356
+ args: ta.Tuple[ta.Any, ...]
3357
+ kwargs: ta.Optional[ta.Dict[str, ta.Any]] = None
3358
+
3359
+ #
3360
+
3361
+ class CloseIo(Io):
3362
+ pass
3363
+
3364
+ #
3365
+
3366
+ class AnyReadIo(Io): # noqa
3367
+ pass
3368
+
3369
+ @dc.dataclass(frozen=True)
3370
+ class ReadIo(AnyReadIo):
3371
+ sz: ta.Optional[int]
3372
+
3373
+ @dc.dataclass(frozen=True)
3374
+ class ReadLineIo(AnyReadIo):
3375
+ sz: int
3376
+
3377
+ @dc.dataclass(frozen=True)
3378
+ class PeekIo(AnyReadIo):
3379
+ sz: int
3380
+
3381
+ #
3382
+
3383
+ @dc.dataclass(frozen=True)
3384
+ class WriteIo(Io):
3385
+ data: bytes
3386
+
3387
+
3257
3388
  ########################################
3258
3389
  # ../../../omlish/http/parsing.py
3259
3390
  # PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
@@ -4587,8 +4718,6 @@ class _JustMaybe(_Maybe[T]):
4587
4718
  __slots__ = ('_v', '_hash')
4588
4719
 
4589
4720
  def __init__(self, v: T) -> None:
4590
- super().__init__()
4591
-
4592
4721
  self._v = v
4593
4722
 
4594
4723
  @property
@@ -9247,48 +9376,21 @@ class CoroHttpServer:
9247
9376
 
9248
9377
  #
9249
9378
 
9250
- class Io(Abstract):
9251
- pass
9252
-
9253
- #
9254
-
9255
- class AnyLogIo(Io):
9256
- pass
9257
-
9258
9379
  @dc.dataclass(frozen=True)
9259
- class ParsedRequestLogIo(AnyLogIo):
9380
+ class ParsedRequestLogIo(CoroHttpIo.AnyLogIo):
9260
9381
  request: ParsedHttpRequest
9261
9382
 
9262
9383
  @dc.dataclass(frozen=True)
9263
- class ErrorLogIo(AnyLogIo):
9384
+ class ErrorLogIo(CoroHttpIo.AnyLogIo):
9264
9385
  error: 'CoroHttpServer.Error'
9265
9386
 
9266
9387
  #
9267
9388
 
9268
- class AnyReadIo(Io): # noqa
9269
- pass
9270
-
9271
- @dc.dataclass(frozen=True)
9272
- class ReadIo(AnyReadIo):
9273
- sz: int
9274
-
9275
- @dc.dataclass(frozen=True)
9276
- class ReadLineIo(AnyReadIo):
9277
- sz: int
9278
-
9279
- #
9280
-
9281
- @dc.dataclass(frozen=True)
9282
- class WriteIo(Io):
9283
- data: bytes
9284
-
9285
- #
9286
-
9287
9389
  @dc.dataclass(frozen=True)
9288
9390
  class CoroHandleResult:
9289
9391
  close_reason: ta.Literal['response', 'internal', None] = None
9290
9392
 
9291
- def coro_handle(self) -> ta.Generator[Io, ta.Optional[bytes], CoroHandleResult]:
9393
+ def coro_handle(self) -> ta.Generator[CoroHttpIo.Io, ta.Optional[bytes], CoroHandleResult]:
9292
9394
  return self._coro_run_handler(self._coro_handle_one())
9293
9395
 
9294
9396
  class Close(Exception): # noqa
@@ -9297,20 +9399,20 @@ class CoroHttpServer:
9297
9399
  def _coro_run_handler(
9298
9400
  self,
9299
9401
  gen: ta.Generator[
9300
- ta.Union[AnyLogIo, AnyReadIo, _Response],
9402
+ ta.Union[CoroHttpIo.AnyLogIo, CoroHttpIo.AnyReadIo, _Response],
9301
9403
  ta.Optional[bytes],
9302
9404
  None,
9303
9405
  ],
9304
- ) -> ta.Generator[Io, ta.Optional[bytes], CoroHandleResult]:
9406
+ ) -> ta.Generator[CoroHttpIo.Io, ta.Optional[bytes], CoroHandleResult]:
9305
9407
  i: ta.Optional[bytes]
9306
9408
  o: ta.Any = next(gen)
9307
9409
  while True:
9308
9410
  try:
9309
- if isinstance(o, self.AnyLogIo):
9411
+ if isinstance(o, CoroHttpIo.AnyLogIo):
9310
9412
  i = None
9311
9413
  yield o
9312
9414
 
9313
- elif isinstance(o, self.AnyReadIo):
9415
+ elif isinstance(o, CoroHttpIo.AnyReadIo):
9314
9416
  i = check.isinstance((yield o), bytes)
9315
9417
 
9316
9418
  elif isinstance(o, self._Response):
@@ -9318,10 +9420,10 @@ class CoroHttpServer:
9318
9420
 
9319
9421
  r = self._preprocess_response(o)
9320
9422
  hb = self._build_response_head_bytes(r)
9321
- check.none((yield self.WriteIo(hb)))
9423
+ check.none((yield CoroHttpIo.WriteIo(hb)))
9322
9424
 
9323
9425
  for b in self._yield_response_data(r):
9324
- yield self.WriteIo(b)
9426
+ yield CoroHttpIo.WriteIo(b)
9325
9427
 
9326
9428
  o.close()
9327
9429
  if o.close_connection:
@@ -9349,7 +9451,7 @@ class CoroHttpServer:
9349
9451
  raise
9350
9452
 
9351
9453
  def _coro_handle_one(self) -> ta.Generator[
9352
- ta.Union[AnyLogIo, AnyReadIo, _Response],
9454
+ ta.Union[CoroHttpIo.AnyLogIo, CoroHttpIo.AnyReadIo, _Response],
9353
9455
  ta.Optional[bytes],
9354
9456
  None,
9355
9457
  ]:
@@ -9359,7 +9461,7 @@ class CoroHttpServer:
9359
9461
  sz = next(gen)
9360
9462
  while True:
9361
9463
  try:
9362
- line = check.isinstance((yield self.ReadLineIo(sz)), bytes)
9464
+ line = check.isinstance((yield CoroHttpIo.ReadLineIo(sz)), bytes)
9363
9465
  sz = gen.send(line)
9364
9466
  except StopIteration as e:
9365
9467
  parsed = e.value
@@ -9398,7 +9500,7 @@ class CoroHttpServer:
9398
9500
 
9399
9501
  request_data: ta.Optional[bytes]
9400
9502
  if (cl := parsed.headers.get('Content-Length')) is not None:
9401
- request_data = check.isinstance((yield self.ReadIo(int(cl))), bytes)
9503
+ request_data = check.isinstance((yield CoroHttpIo.ReadIo(int(cl))), bytes)
9402
9504
  else:
9403
9505
  request_data = None
9404
9506
 
@@ -11443,7 +11545,7 @@ class CoroHttpServerSocketHandler(SocketHandler_):
11443
11545
  server_factory: CoroHttpServerFactory,
11444
11546
  *,
11445
11547
  keep_alive: bool = False,
11446
- log_handler: ta.Optional[ta.Callable[[CoroHttpServer, CoroHttpServer.AnyLogIo], None]] = None,
11548
+ log_handler: ta.Optional[ta.Callable[[CoroHttpServer, CoroHttpIo.AnyLogIo], None]] = None,
11447
11549
  ) -> None:
11448
11550
  super().__init__()
11449
11551
 
@@ -11472,18 +11574,18 @@ class CoroHttpServerSocketHandler(SocketHandler_):
11472
11574
 
11473
11575
  o = next(gen)
11474
11576
  while True:
11475
- if isinstance(o, CoroHttpServer.AnyLogIo):
11577
+ if isinstance(o, CoroHttpIo.AnyLogIo):
11476
11578
  i = None
11477
11579
  if self._log_handler is not None:
11478
11580
  self._log_handler(server, o)
11479
11581
 
11480
- elif isinstance(o, CoroHttpServer.ReadIo):
11481
- i = fp.r.read(o.sz)
11582
+ elif isinstance(o, CoroHttpIo.ReadIo):
11583
+ i = fp.r.read(check.not_none(o.sz))
11482
11584
 
11483
- elif isinstance(o, CoroHttpServer.ReadLineIo):
11585
+ elif isinstance(o, CoroHttpIo.ReadLineIo):
11484
11586
  i = fp.r.readline(o.sz)
11485
11587
 
11486
- elif isinstance(o, CoroHttpServer.WriteIo):
11588
+ elif isinstance(o, CoroHttpIo.WriteIo):
11487
11589
  i = None
11488
11590
  fp.w.write(o.data)
11489
11591
  fp.w.flush()
@@ -686,6 +686,62 @@ def async_cached_nullary(fn): # ta.Callable[..., T]) -> ta.Callable[..., T]:
686
686
  return _AsyncCachedNullary(fn)
687
687
 
688
688
 
689
+ ##
690
+
691
+
692
+ cached_property = functools.cached_property
693
+
694
+
695
+ class _cached_property: # noqa
696
+ """Backported to pick up https://github.com/python/cpython/commit/056dfc71dce15f81887f0bd6da09d6099d71f979 ."""
697
+
698
+ def __init__(self, func):
699
+ self.func = func
700
+ self.attrname = None # noqa
701
+ self.__doc__ = func.__doc__
702
+ self.__module__ = func.__module__
703
+
704
+ _NOT_FOUND = object()
705
+
706
+ def __set_name__(self, owner, name):
707
+ if self.attrname is None:
708
+ self.attrname = name # noqa
709
+ elif name != self.attrname:
710
+ raise TypeError(
711
+ f'Cannot assign the same cached_property to two different names ({self.attrname!r} and {name!r}).',
712
+ )
713
+
714
+ def __get__(self, instance, owner=None):
715
+ if instance is None:
716
+ return self
717
+ if self.attrname is None:
718
+ raise TypeError('Cannot use cached_property instance without calling __set_name__ on it.')
719
+
720
+ try:
721
+ cache = instance.__dict__
722
+ except AttributeError: # not all objects have __dict__ (e.g. class defines slots)
723
+ raise TypeError(
724
+ f"No '__dict__' attribute on {type(instance).__name__!r} instance to cache {self.attrname!r} property.",
725
+ ) from None
726
+
727
+ val = cache.get(self.attrname, self._NOT_FOUND)
728
+
729
+ if val is self._NOT_FOUND:
730
+ val = self.func(instance)
731
+ try:
732
+ cache[self.attrname] = val
733
+ except TypeError:
734
+ raise TypeError(
735
+ f"The '__dict__' attribute on {type(instance).__name__!r} instance does not support item "
736
+ f"assignment for caching {self.attrname!r} property.",
737
+ ) from None
738
+
739
+ return val
740
+
741
+
742
+ globals()['cached_property'] = _cached_property
743
+
744
+
689
745
  ########################################
690
746
  # ../../../omlish/lite/check.py
691
747
  """
@@ -2574,8 +2630,6 @@ class _JustMaybe(_Maybe[T]):
2574
2630
  __slots__ = ('_v', '_hash')
2575
2631
 
2576
2632
  def __init__(self, v: T) -> None:
2577
- super().__init__()
2578
-
2579
2633
  self._v = v
2580
2634
 
2581
2635
  @property
@@ -896,8 +896,6 @@ class _JustMaybe(_Maybe[T]):
896
896
  __slots__ = ('_v', '_hash')
897
897
 
898
898
  def __init__(self, v: T) -> None:
899
- super().__init__()
900
-
901
899
  self._v = v
902
900
 
903
901
  @property