omdev 0.0.0.dev309__tar.gz → 0.0.0.dev310__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 (296) hide show
  1. {omdev-0.0.0.dev309/omdev.egg-info → omdev-0.0.0.dev310}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/scripts/pyproject.py +101 -0
  3. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310/omdev.egg-info}/PKG-INFO +2 -2
  4. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev.egg-info/requires.txt +1 -1
  5. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/pyproject.toml +2 -2
  6. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/LICENSE +0 -0
  7. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/MANIFEST.in +0 -0
  8. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/README.md +0 -0
  9. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/.manifests.json +0 -0
  10. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/__about__.py +0 -0
  11. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/__init__.py +0 -0
  12. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/amalg/__init__.py +0 -0
  13. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/amalg/__main__.py +0 -0
  14. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/amalg/gen.py +0 -0
  15. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/amalg/imports.py +0 -0
  16. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/amalg/main.py +0 -0
  17. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/amalg/manifests.py +0 -0
  18. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/amalg/resources.py +0 -0
  19. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/amalg/srcfiles.py +0 -0
  20. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/amalg/strip.py +0 -0
  21. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/amalg/types.py +0 -0
  22. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/amalg/typing.py +0 -0
  23. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/antlr/__init__.py +0 -0
  24. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/antlr/consts.py +0 -0
  25. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/antlr/gen.py +0 -0
  26. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/__init__.py +0 -0
  27. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/compute/__init__.py +0 -0
  28. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/compute/cache.py +0 -0
  29. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/compute/contexts.py +0 -0
  30. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/compute/currents.py +0 -0
  31. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/compute/fns.py +0 -0
  32. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/compute/resolvers.py +0 -0
  33. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/compute/storage.py +0 -0
  34. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/compute/types.py +0 -0
  35. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/data/__init__.py +0 -0
  36. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/data/actions.py +0 -0
  37. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/data/cache.py +0 -0
  38. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/data/consts.py +0 -0
  39. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/data/defaults.py +0 -0
  40. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/data/manifests.py +0 -0
  41. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cache/data/specs.py +0 -0
  42. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cc/__init__.py +0 -0
  43. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cc/__main__.py +0 -0
  44. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cc/cdeps.py +0 -0
  45. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cc/cdeps.toml +0 -0
  46. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cc/cli.py +0 -0
  47. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/__init__.py +0 -0
  48. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_boilerplate.cc +0 -0
  49. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/LICENSE +0 -0
  50. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/__init__.py +0 -0
  51. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/build_ext.py +0 -0
  52. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  53. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  54. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/compilers/options.py +0 -0
  55. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  56. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/dir_util.py +0 -0
  57. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/errors.py +0 -0
  58. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/extension.py +0 -0
  59. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/file_util.py +0 -0
  60. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/modified.py +0 -0
  61. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/spawn.py +0 -0
  62. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/sysconfig.py +0 -0
  63. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/util.py +0 -0
  64. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/_distutils/version.py +0 -0
  65. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/build.py +0 -0
  66. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/cmake.py +0 -0
  67. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/importhook.py +0 -0
  68. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/magic.py +0 -0
  69. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cexts/scan.py +0 -0
  70. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/__init__.py +0 -0
  71. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/__main__.py +0 -0
  72. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/cache.py +0 -0
  73. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/ci.py +0 -0
  74. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/cli.py +0 -0
  75. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/compose.py +0 -0
  76. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/consts.py +0 -0
  77. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/__init__.py +0 -0
  78. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/buildcaching.py +0 -0
  79. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/cache.py +0 -0
  80. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/cacheserved/__init__.py +0 -0
  81. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/cacheserved/cache.py +0 -0
  82. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/cacheserved/manifests.py +0 -0
  83. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/cmds.py +0 -0
  84. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/dataserver.py +0 -0
  85. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/imagepulling.py +0 -0
  86. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/inject.py +0 -0
  87. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/packing.py +0 -0
  88. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/repositories.py +0 -0
  89. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/docker/utils.py +0 -0
  90. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/__init__.py +0 -0
  91. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/api/__init__.py +0 -0
  92. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/api/clients.py +0 -0
  93. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/api/v1/__init__.py +0 -0
  94. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/api/v1/api.py +0 -0
  95. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/api/v1/client.py +0 -0
  96. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/api/v2/__init__.py +0 -0
  97. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/api/v2/api.py +0 -0
  98. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/api/v2/azure.py +0 -0
  99. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/api/v2/client.py +0 -0
  100. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/bootstrap.py +0 -0
  101. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/cache.py +0 -0
  102. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/cli.py +0 -0
  103. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/env.py +0 -0
  104. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/github/inject.py +0 -0
  105. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/inject.py +0 -0
  106. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/requirements.py +0 -0
  107. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/shell.py +0 -0
  108. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ci/utils.py +0 -0
  109. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cli/__init__.py +0 -0
  110. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cli/__main__.py +0 -0
  111. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cli/_pathhack.py +0 -0
  112. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cli/clicli.py +0 -0
  113. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cli/install.py +0 -0
  114. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cli/main.py +0 -0
  115. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cli/managers.py +0 -0
  116. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cli/types.py +0 -0
  117. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/clipboard/__init__.py +0 -0
  118. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/clipboard/clipboard.py +0 -0
  119. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/clipboard/darwin_cf.py +0 -0
  120. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/clipboard/linux_x11.py +0 -0
  121. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cmake.py +0 -0
  122. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cmdlog/__init__.py +0 -0
  123. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cmdlog/__main__.py +0 -0
  124. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cmdlog/_cmdlog.py +0 -0
  125. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cmdlog/cli.py +0 -0
  126. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/cmdlog/cmdlog.py +0 -0
  127. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/dataserver/__init__.py +0 -0
  128. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/dataserver/handlers.py +0 -0
  129. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/dataserver/http.py +0 -0
  130. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/dataserver/routes.py +0 -0
  131. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/dataserver/server.py +0 -0
  132. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/dataserver/targets.py +0 -0
  133. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/git/__init__.py +0 -0
  134. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/git/magic.py +0 -0
  135. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/git/revisions.py +0 -0
  136. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/git/shallow.py +0 -0
  137. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/git/status.py +0 -0
  138. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/home/__init__.py +0 -0
  139. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/home/paths.py +0 -0
  140. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/home/secrets.py +0 -0
  141. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/home/shadow.py +0 -0
  142. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/imgur.py +0 -0
  143. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/__init__.py +0 -0
  144. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/__main__.py +0 -0
  145. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/cli.py +0 -0
  146. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/default.py +0 -0
  147. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/inject.py +0 -0
  148. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/inspect.py +0 -0
  149. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/providers/__init__.py +0 -0
  150. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/providers/base.py +0 -0
  151. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/providers/inject.py +0 -0
  152. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/providers/running.py +0 -0
  153. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/providers/standalone.py +0 -0
  154. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/providers/system.py +0 -0
  155. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/pyenv/__init__.py +0 -0
  156. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/pyenv/inject.py +0 -0
  157. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/pyenv/install.py +0 -0
  158. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/pyenv/provider.py +0 -0
  159. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/pyenv/pyenv.py +0 -0
  160. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/resolvers.py +0 -0
  161. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/types.py +0 -0
  162. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/uv/__init__.py +0 -0
  163. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/uv/inject.py +0 -0
  164. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/uv/provider.py +0 -0
  165. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/uv/uv.py +0 -0
  166. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/interp/venvs.py +0 -0
  167. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/magic/__init__.py +0 -0
  168. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/magic/__main__.py +0 -0
  169. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/magic/cli.py +0 -0
  170. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/magic/find.py +0 -0
  171. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/magic/magic.py +0 -0
  172. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/magic/prepare.py +0 -0
  173. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/magic/styles.py +0 -0
  174. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/manifests/__init__.py +0 -0
  175. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/manifests/__main__.py +0 -0
  176. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/manifests/build.py +0 -0
  177. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/manifests/dumping.py +0 -0
  178. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/manifests/main.py +0 -0
  179. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/mypy/__init__.py +0 -0
  180. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/mypy/debug.py +0 -0
  181. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/__init__.py +0 -0
  182. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/building.py +0 -0
  183. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/compression.py +0 -0
  184. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/data.py +0 -0
  185. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/datarefs.py +0 -0
  186. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/dataserver.py +0 -0
  187. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/loading.py +0 -0
  188. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/media.py +0 -0
  189. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/pack/__init__.py +0 -0
  190. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/pack/packing.py +0 -0
  191. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/pack/repositories.py +0 -0
  192. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/pack/unpacking.py +0 -0
  193. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/repositories.py +0 -0
  194. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/oci/tars.py +0 -0
  195. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/packaging/__init__.py +0 -0
  196. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/packaging/marshal.py +0 -0
  197. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/packaging/names.py +0 -0
  198. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/packaging/requires.py +0 -0
  199. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/packaging/revisions.py +0 -0
  200. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/packaging/specifiers.py +0 -0
  201. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/packaging/versions.py +0 -0
  202. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/packaging/wheelfile.py +0 -0
  203. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pip.py +0 -0
  204. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/precheck/__init__.py +0 -0
  205. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/precheck/__main__.py +0 -0
  206. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/precheck/base.py +0 -0
  207. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/precheck/caches.py +0 -0
  208. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/precheck/git.py +0 -0
  209. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/precheck/imports.py +0 -0
  210. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/precheck/lite.py +0 -0
  211. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/precheck/main.py +0 -0
  212. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/precheck/manifests.py +0 -0
  213. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/precheck/scripts.py +0 -0
  214. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/__init__.py +0 -0
  215. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/apps/__init__.py +0 -0
  216. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/apps/ncdu.py +0 -0
  217. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/markdown/LICENSE +0 -0
  218. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/markdown/__init__.py +0 -0
  219. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/markdown/__main__.py +0 -0
  220. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/markdown/border.py +0 -0
  221. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/markdown/cli.py +0 -0
  222. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/markdown/markdown.py +0 -0
  223. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/markdown/parser.py +0 -0
  224. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/markdown/styles.py +0 -0
  225. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/markdown/tags.py +0 -0
  226. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/ptk/markdown/utils.py +0 -0
  227. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/__init__.py +0 -0
  228. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/attrdocs.py +0 -0
  229. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/bracepy.py +0 -0
  230. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/classdot.py +0 -0
  231. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/findimports.py +0 -0
  232. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/scripts/__init__.py +0 -0
  233. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/scripts/bumpversion.py +0 -0
  234. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/scripts/execstat.py +0 -0
  235. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/scripts/importtrace.py +0 -0
  236. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/srcheaders.py +0 -0
  237. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/tools/__init__.py +0 -0
  238. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/tools/importscan.py +0 -0
  239. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/py/tools/mkrelimp.py +0 -0
  240. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/__init__.py +0 -0
  241. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/__main__.py +0 -0
  242. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/cexts.py +0 -0
  243. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/cli.py +0 -0
  244. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/configs.py +0 -0
  245. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/inject.py +0 -0
  246. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/pkg.py +0 -0
  247. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/reqs.py +0 -0
  248. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/resources/__init__.py +0 -0
  249. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/resources/docker-dev.sh +0 -0
  250. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/resources/python.sh +0 -0
  251. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/pyproject/venvs.py +0 -0
  252. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/scripts/__init__.py +0 -0
  253. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/scripts/ci.py +0 -0
  254. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/scripts/interp.py +0 -0
  255. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/scripts/slowcat.py +0 -0
  256. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/scripts/tmpexec.py +0 -0
  257. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tagstrings.py +0 -0
  258. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tokens/__init__.py +0 -0
  259. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tokens/all.py +0 -0
  260. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tokens/tokenizert.py +0 -0
  261. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tokens/utils.py +0 -0
  262. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/__init__.py +0 -0
  263. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/cloc.py +0 -0
  264. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/diff.py +0 -0
  265. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/doc.py +0 -0
  266. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/docker.py +0 -0
  267. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/git/__init__.py +0 -0
  268. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/git/__main__.py +0 -0
  269. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/git/cli.py +0 -0
  270. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/git/consts.py +0 -0
  271. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/git/messages.py +0 -0
  272. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/intellij.py +0 -0
  273. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/json/__init__.py +0 -0
  274. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/json/__main__.py +0 -0
  275. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/json/cli.py +0 -0
  276. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/json/formats.py +0 -0
  277. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/json/io.py +0 -0
  278. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/json/parsing.py +0 -0
  279. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/json/processing.py +0 -0
  280. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/json/rendering.py +0 -0
  281. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/linehisto.py +0 -0
  282. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/mkenv.py +0 -0
  283. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/notebook.py +0 -0
  284. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/pawk/__init__.py +0 -0
  285. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/pawk/__main__.py +0 -0
  286. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/pawk/pawk.py +0 -0
  287. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/pip.py +0 -0
  288. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/prof.py +0 -0
  289. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/qr.py +0 -0
  290. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/shadow.py +0 -0
  291. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev/tools/sqlrepl.py +0 -0
  292. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev.egg-info/SOURCES.txt +0 -0
  293. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev.egg-info/dependency_links.txt +0 -0
  294. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev.egg-info/entry_points.txt +0 -0
  295. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/omdev.egg-info/top_level.txt +0 -0
  296. {omdev-0.0.0.dev309 → omdev-0.0.0.dev310}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev309
3
+ Version: 0.0.0.dev310
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev309
15
+ Requires-Dist: omlish==0.0.0.dev310
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1010,29 +1010,37 @@ class TomlFlags:
1010
1010
  def set(self, key: TomlKey, flag: int, *, recursive: bool) -> None: # noqa: A003
1011
1011
  cont = self._flags
1012
1012
  key_parent, key_stem = key[:-1], key[-1]
1013
+
1013
1014
  for k in key_parent:
1014
1015
  if k not in cont:
1015
1016
  cont[k] = {'flags': set(), 'recursive_flags': set(), 'nested': {}}
1016
1017
  cont = cont[k]['nested']
1018
+
1017
1019
  if key_stem not in cont:
1018
1020
  cont[key_stem] = {'flags': set(), 'recursive_flags': set(), 'nested': {}}
1021
+
1019
1022
  cont[key_stem]['recursive_flags' if recursive else 'flags'].add(flag)
1020
1023
 
1021
1024
  def is_(self, key: TomlKey, flag: int) -> bool:
1022
1025
  if not key:
1023
1026
  return False # document root has no flags
1027
+
1024
1028
  cont = self._flags
1025
1029
  for k in key[:-1]:
1026
1030
  if k not in cont:
1027
1031
  return False
1032
+
1028
1033
  inner_cont = cont[k]
1029
1034
  if flag in inner_cont['recursive_flags']:
1030
1035
  return True
1036
+
1031
1037
  cont = inner_cont['nested']
1038
+
1032
1039
  key_stem = key[-1]
1033
1040
  if key_stem in cont:
1034
1041
  cont = cont[key_stem]
1035
1042
  return flag in cont['flags'] or flag in cont['recursive_flags']
1043
+
1036
1044
  return False
1037
1045
 
1038
1046
 
@@ -1050,24 +1058,31 @@ class TomlNestedDict:
1050
1058
  access_lists: bool = True,
1051
1059
  ) -> dict:
1052
1060
  cont: ta.Any = self.dict
1061
+
1053
1062
  for k in key:
1054
1063
  if k not in cont:
1055
1064
  cont[k] = {}
1065
+
1056
1066
  cont = cont[k]
1067
+
1057
1068
  if access_lists and isinstance(cont, list):
1058
1069
  cont = cont[-1]
1070
+
1059
1071
  if not isinstance(cont, dict):
1060
1072
  raise KeyError('There is no nest behind this key')
1073
+
1061
1074
  return cont
1062
1075
 
1063
1076
  def append_nest_to_list(self, key: TomlKey) -> None:
1064
1077
  cont = self.get_or_create_nest(key[:-1])
1078
+
1065
1079
  last_key = key[-1]
1066
1080
  if last_key in cont:
1067
1081
  list_ = cont[last_key]
1068
1082
  if not isinstance(list_, list):
1069
1083
  raise KeyError('An object other than list found behind this key')
1070
1084
  list_.append({})
1085
+
1071
1086
  else:
1072
1087
  cont[last_key] = [{}]
1073
1088
 
@@ -1137,23 +1152,30 @@ class TomlParser:
1137
1152
  char = self.src[self.pos]
1138
1153
  except IndexError:
1139
1154
  break
1155
+
1140
1156
  if char == '\n':
1141
1157
  self.pos += 1
1142
1158
  continue
1159
+
1143
1160
  if char in self.KEY_INITIAL_CHARS:
1144
1161
  self.key_value_rule(header)
1145
1162
  self.skip_chars(self.WS)
1163
+
1146
1164
  elif char == '[':
1147
1165
  try:
1148
1166
  second_char: ta.Optional[str] = self.src[self.pos + 1]
1149
1167
  except IndexError:
1150
1168
  second_char = None
1169
+
1151
1170
  self.flags.finalize_pending()
1171
+
1152
1172
  if second_char == '[':
1153
1173
  header = self.create_list_rule()
1154
1174
  else:
1155
1175
  header = self.create_dict_rule()
1176
+
1156
1177
  self.skip_chars(self.WS)
1178
+
1157
1179
  elif char != '#':
1158
1180
  raise self.suffixed_err('Invalid statement')
1159
1181
 
@@ -1165,8 +1187,10 @@ class TomlParser:
1165
1187
  char = self.src[self.pos]
1166
1188
  except IndexError:
1167
1189
  break
1190
+
1168
1191
  if char != '\n':
1169
1192
  raise self.suffixed_err('Expected newline or end of document after a statement')
1193
+
1170
1194
  self.pos += 1
1171
1195
 
1172
1196
  return self.data.dict
@@ -1195,7 +1219,9 @@ class TomlParser:
1195
1219
  if not error_on.isdisjoint(self.src[self.pos:new_pos]):
1196
1220
  while self.src[self.pos] not in error_on:
1197
1221
  self.pos += 1
1222
+
1198
1223
  raise self.suffixed_err(f'Found invalid character {self.src[self.pos]!r}')
1224
+
1199
1225
  self.pos = new_pos
1200
1226
 
1201
1227
  def skip_comment(self) -> None:
@@ -1203,6 +1229,7 @@ class TomlParser:
1203
1229
  char: ta.Optional[str] = self.src[self.pos]
1204
1230
  except IndexError:
1205
1231
  char = None
1232
+
1206
1233
  if char == '#':
1207
1234
  self.pos += 1
1208
1235
  self.skip_until(
@@ -1226,7 +1253,9 @@ class TomlParser:
1226
1253
 
1227
1254
  if self.flags.is_(key, TomlFlags.EXPLICIT_NEST) or self.flags.is_(key, TomlFlags.FROZEN):
1228
1255
  raise self.suffixed_err(f'Cannot declare {key} twice')
1256
+
1229
1257
  self.flags.set(key, TomlFlags.EXPLICIT_NEST, recursive=False)
1258
+
1230
1259
  try:
1231
1260
  self.data.get_or_create_nest(key)
1232
1261
  except KeyError:
@@ -1234,20 +1263,25 @@ class TomlParser:
1234
1263
 
1235
1264
  if not self.src.startswith(']', self.pos):
1236
1265
  raise self.suffixed_err("Expected ']' at the end of a table declaration")
1266
+
1237
1267
  self.pos += 1
1238
1268
  return key
1239
1269
 
1240
1270
  def create_list_rule(self) -> TomlKey:
1241
1271
  self.pos += 2 # Skip "[["
1242
1272
  self.skip_chars(self.WS)
1273
+
1243
1274
  key = self.parse_key()
1244
1275
 
1245
1276
  if self.flags.is_(key, TomlFlags.FROZEN):
1246
1277
  raise self.suffixed_err(f'Cannot mutate immutable namespace {key}')
1278
+
1247
1279
  # Free the namespace now that it points to another empty list item...
1248
1280
  self.flags.unset_all(key)
1281
+
1249
1282
  # ...but this key precisely is still prohibited from table declaration
1250
1283
  self.flags.set(key, TomlFlags.EXPLICIT_NEST, recursive=False)
1284
+
1251
1285
  try:
1252
1286
  self.data.append_nest_to_list(key)
1253
1287
  except KeyError:
@@ -1255,6 +1289,7 @@ class TomlParser:
1255
1289
 
1256
1290
  if not self.src.startswith(']]', self.pos):
1257
1291
  raise self.suffixed_err("Expected ']]' at the end of an array declaration")
1292
+
1258
1293
  self.pos += 2
1259
1294
  return key
1260
1295
 
@@ -1268,6 +1303,7 @@ class TomlParser:
1268
1303
  # Check that dotted key syntax does not redefine an existing table
1269
1304
  if self.flags.is_(cont_key, TomlFlags.EXPLICIT_NEST):
1270
1305
  raise self.suffixed_err(f'Cannot redefine namespace {cont_key}')
1306
+
1271
1307
  # Containers in the relative path can't be opened with the table syntax or dotted key/value syntax in
1272
1308
  # following table sections.
1273
1309
  self.flags.add_pending(cont_key, TomlFlags.EXPLICIT_NEST)
@@ -1279,41 +1315,54 @@ class TomlParser:
1279
1315
  nest = self.data.get_or_create_nest(abs_key_parent)
1280
1316
  except KeyError:
1281
1317
  raise self.suffixed_err('Cannot overwrite a value') from None
1318
+
1282
1319
  if key_stem in nest:
1283
1320
  raise self.suffixed_err('Cannot overwrite a value')
1321
+
1284
1322
  # Mark inline table and array namespaces recursively immutable
1285
1323
  if isinstance(value, (dict, list)):
1286
1324
  self.flags.set(header + key, TomlFlags.FROZEN, recursive=True)
1325
+
1287
1326
  nest[key_stem] = value
1288
1327
 
1289
1328
  def parse_key_value_pair(self) -> ta.Tuple[TomlKey, ta.Any]:
1290
1329
  key = self.parse_key()
1330
+
1291
1331
  try:
1292
1332
  char: ta.Optional[str] = self.src[self.pos]
1293
1333
  except IndexError:
1294
1334
  char = None
1335
+
1295
1336
  if char != '=':
1296
1337
  raise self.suffixed_err("Expected '=' after a key in a key/value pair")
1338
+
1297
1339
  self.pos += 1
1298
1340
  self.skip_chars(self.WS)
1341
+
1299
1342
  value = self.parse_value()
1300
1343
  return key, value
1301
1344
 
1302
1345
  def parse_key(self) -> TomlKey:
1303
1346
  key_part = self.parse_key_part()
1304
1347
  key: TomlKey = (key_part,)
1348
+
1305
1349
  self.skip_chars(self.WS)
1350
+
1306
1351
  while True:
1307
1352
  try:
1308
1353
  char: ta.Optional[str] = self.src[self.pos]
1309
1354
  except IndexError:
1310
1355
  char = None
1356
+
1311
1357
  if char != '.':
1312
1358
  return key
1359
+
1313
1360
  self.pos += 1
1314
1361
  self.skip_chars(self.WS)
1362
+
1315
1363
  key_part = self.parse_key_part()
1316
1364
  key += (key_part,)
1365
+
1317
1366
  self.skip_chars(self.WS)
1318
1367
 
1319
1368
  def parse_key_part(self) -> str:
@@ -1321,14 +1370,18 @@ class TomlParser:
1321
1370
  char: ta.Optional[str] = self.src[self.pos]
1322
1371
  except IndexError:
1323
1372
  char = None
1373
+
1324
1374
  if char in self.BARE_KEY_CHARS:
1325
1375
  start_pos = self.pos
1326
1376
  self.skip_chars(self.BARE_KEY_CHARS)
1327
1377
  return self.src[start_pos:self.pos]
1378
+
1328
1379
  if char == "'":
1329
1380
  return self.parse_literal_str()
1381
+
1330
1382
  if char == '"':
1331
1383
  return self.parse_one_line_basic_str()
1384
+
1332
1385
  raise self.suffixed_err('Invalid initial character for a key part')
1333
1386
 
1334
1387
  def parse_one_line_basic_str(self) -> str:
@@ -1343,6 +1396,7 @@ class TomlParser:
1343
1396
  if self.src.startswith(']', self.pos):
1344
1397
  self.pos += 1
1345
1398
  return array
1399
+
1346
1400
  while True:
1347
1401
  val = self.parse_value()
1348
1402
  array.append(val)
@@ -1352,11 +1406,14 @@ class TomlParser:
1352
1406
  if c == ']':
1353
1407
  self.pos += 1
1354
1408
  return array
1409
+
1355
1410
  if c != ',':
1356
1411
  raise self.suffixed_err('Unclosed array')
1412
+
1357
1413
  self.pos += 1
1358
1414
 
1359
1415
  self.skip_comments_and_array_ws()
1416
+
1360
1417
  if self.src.startswith(']', self.pos):
1361
1418
  self.pos += 1
1362
1419
  return array
@@ -1367,54 +1424,72 @@ class TomlParser:
1367
1424
  flags = TomlFlags()
1368
1425
 
1369
1426
  self.skip_chars(self.WS)
1427
+
1370
1428
  if self.src.startswith('}', self.pos):
1371
1429
  self.pos += 1
1372
1430
  return nested_dict.dict
1431
+
1373
1432
  while True:
1374
1433
  key, value = self.parse_key_value_pair()
1375
1434
  key_parent, key_stem = key[:-1], key[-1]
1435
+
1376
1436
  if flags.is_(key, TomlFlags.FROZEN):
1377
1437
  raise self.suffixed_err(f'Cannot mutate immutable namespace {key}')
1438
+
1378
1439
  try:
1379
1440
  nest = nested_dict.get_or_create_nest(key_parent, access_lists=False)
1380
1441
  except KeyError:
1381
1442
  raise self.suffixed_err('Cannot overwrite a value') from None
1443
+
1382
1444
  if key_stem in nest:
1383
1445
  raise self.suffixed_err(f'Duplicate inline table key {key_stem!r}')
1446
+
1384
1447
  nest[key_stem] = value
1385
1448
  self.skip_chars(self.WS)
1449
+
1386
1450
  c = self.src[self.pos:self.pos + 1]
1387
1451
  if c == '}':
1388
1452
  self.pos += 1
1389
1453
  return nested_dict.dict
1454
+
1390
1455
  if c != ',':
1391
1456
  raise self.suffixed_err('Unclosed inline table')
1457
+
1392
1458
  if isinstance(value, (dict, list)):
1393
1459
  flags.set(key, TomlFlags.FROZEN, recursive=True)
1460
+
1394
1461
  self.pos += 1
1395
1462
  self.skip_chars(self.WS)
1396
1463
 
1397
1464
  def parse_basic_str_escape(self, multiline: bool = False) -> str:
1398
1465
  escape_id = self.src[self.pos:self.pos + 2]
1399
1466
  self.pos += 2
1467
+
1400
1468
  if multiline and escape_id in {'\\ ', '\\\t', '\\\n'}:
1401
1469
  # Skip whitespace until next non-whitespace character or end of the doc. Error if non-whitespace is found
1402
1470
  # before newline.
1403
1471
  if escape_id != '\\\n':
1404
1472
  self.skip_chars(self.WS)
1473
+
1405
1474
  try:
1406
1475
  char = self.src[self.pos]
1407
1476
  except IndexError:
1408
1477
  return ''
1478
+
1409
1479
  if char != '\n':
1410
1480
  raise self.suffixed_err("Unescaped '\\' in a string")
1481
+
1411
1482
  self.pos += 1
1483
+
1412
1484
  self.skip_chars(self.WS_AND_NEWLINE)
1413
1485
  return ''
1486
+
1414
1487
  if escape_id == '\\u':
1415
1488
  return self.parse_hex_char(4)
1489
+
1416
1490
  if escape_id == '\\U':
1417
1491
  return self.parse_hex_char(8)
1492
+
1418
1493
  try:
1419
1494
  return self.BASIC_STR_ESCAPE_REPLACEMENTS[escape_id]
1420
1495
  except KeyError:
@@ -1429,12 +1504,16 @@ class TomlParser:
1429
1504
 
1430
1505
  def parse_hex_char(self, hex_len: int) -> str:
1431
1506
  hex_str = self.src[self.pos:self.pos + hex_len]
1507
+
1432
1508
  if len(hex_str) != hex_len or not self.HEXDIGIT_CHARS.issuperset(hex_str):
1433
1509
  raise self.suffixed_err('Invalid hex value')
1510
+
1434
1511
  self.pos += hex_len
1435
1512
  hex_int = int(hex_str, 16)
1513
+
1436
1514
  if not self.is_unicode_scalar_value(hex_int):
1437
1515
  raise self.suffixed_err('Escaped character is not a Unicode scalar value')
1516
+
1438
1517
  return chr(hex_int)
1439
1518
 
1440
1519
  def parse_literal_str(self) -> str:
@@ -1460,6 +1539,7 @@ class TomlParser:
1460
1539
  )
1461
1540
  result = self.src[start_pos:self.pos]
1462
1541
  self.pos += 3
1542
+
1463
1543
  else:
1464
1544
  delim = '"'
1465
1545
  result = self.parse_basic_str(multiline=True)
@@ -1467,9 +1547,11 @@ class TomlParser:
1467
1547
  # Add at maximum two extra apostrophes/quotes if the end sequence is 4 or 5 chars long instead of just 3.
1468
1548
  if not self.src.startswith(delim, self.pos):
1469
1549
  return result
1550
+
1470
1551
  self.pos += 1
1471
1552
  if not self.src.startswith(delim, self.pos):
1472
1553
  return result + delim
1554
+
1473
1555
  self.pos += 1
1474
1556
  return result + (delim * 2)
1475
1557
 
@@ -1480,6 +1562,7 @@ class TomlParser:
1480
1562
  else:
1481
1563
  error_on = self.ILLEGAL_BASIC_STR_CHARS
1482
1564
  parse_escapes = self.parse_basic_str_escape
1565
+
1483
1566
  result = ''
1484
1567
  start_pos = self.pos
1485
1568
  while True:
@@ -1487,25 +1570,31 @@ class TomlParser:
1487
1570
  char = self.src[self.pos]
1488
1571
  except IndexError:
1489
1572
  raise self.suffixed_err('Unterminated string') from None
1573
+
1490
1574
  if char == '"':
1491
1575
  if not multiline:
1492
1576
  end_pos = self.pos
1493
1577
  self.pos += 1
1494
1578
  return result + self.src[start_pos:end_pos]
1579
+
1495
1580
  if self.src.startswith('"""', self.pos):
1496
1581
  end_pos = self.pos
1497
1582
  self.pos += 3
1498
1583
  return result + self.src[start_pos:end_pos]
1584
+
1499
1585
  self.pos += 1
1500
1586
  continue
1587
+
1501
1588
  if char == '\\':
1502
1589
  result += self.src[start_pos:self.pos]
1503
1590
  parsed_escape = parse_escapes()
1504
1591
  result += parsed_escape
1505
1592
  start_pos = self.pos
1506
1593
  continue
1594
+
1507
1595
  if char in error_on:
1508
1596
  raise self.suffixed_err(f'Illegal character {char!r}')
1597
+
1509
1598
  self.pos += 1
1510
1599
 
1511
1600
  def parse_value(self) -> ta.Any: # noqa: C901
@@ -1533,6 +1622,7 @@ class TomlParser:
1533
1622
  if self.src.startswith('true', self.pos):
1534
1623
  self.pos += 4
1535
1624
  return True
1625
+
1536
1626
  if char == 'f':
1537
1627
  if self.src.startswith('false', self.pos):
1538
1628
  self.pos += 5
@@ -1553,8 +1643,10 @@ class TomlParser:
1553
1643
  datetime_obj = self.match_to_datetime(datetime_match)
1554
1644
  except ValueError as e:
1555
1645
  raise self.suffixed_err('Invalid date or datetime') from e
1646
+
1556
1647
  self.pos = datetime_match.end()
1557
1648
  return datetime_obj
1649
+
1558
1650
  localtime_match = self.RE_LOCALTIME.match(self.src, self.pos)
1559
1651
  if localtime_match:
1560
1652
  self.pos = localtime_match.end()
@@ -1572,6 +1664,7 @@ class TomlParser:
1572
1664
  if first_three in {'inf', 'nan'}:
1573
1665
  self.pos += 3
1574
1666
  return self.parse_float(first_three)
1667
+
1575
1668
  first_four = self.src[self.pos:self.pos + 4]
1576
1669
  if first_four in {'-inf', '+inf', '-nan', '+nan'}:
1577
1670
  self.pos += 4
@@ -1582,11 +1675,13 @@ class TomlParser:
1582
1675
  def coord_repr(self, pos: TomlPos) -> str:
1583
1676
  if pos >= len(self.src):
1584
1677
  return 'end of document'
1678
+
1585
1679
  line = self.src.count('\n', 0, pos) + 1
1586
1680
  if line == 1:
1587
1681
  column = pos + 1
1588
1682
  else:
1589
1683
  column = pos - self.src.rindex('\n', 0, pos)
1684
+
1590
1685
  return f'line {line}, column {column}'
1591
1686
 
1592
1687
  def suffixed_err(self, msg: str, *, pos: ta.Optional[TomlPos] = None) -> TomlDecodeError:
@@ -1653,11 +1748,16 @@ class TomlParser:
1653
1748
  offset_hour_str,
1654
1749
  offset_minute_str,
1655
1750
  ) = match.groups()
1751
+
1656
1752
  year, month, day = int(year_str), int(month_str), int(day_str)
1753
+
1657
1754
  if hour_str is None:
1658
1755
  return datetime.date(year, month, day)
1756
+
1659
1757
  hour, minute, sec = int(hour_str), int(minute_str), int(sec_str)
1758
+
1660
1759
  micros = int(micros_str.ljust(6, '0')) if micros_str else 0
1760
+
1661
1761
  if offset_sign_str:
1662
1762
  tz: ta.Optional[datetime.tzinfo] = toml_cached_tz(
1663
1763
  offset_hour_str, offset_minute_str, offset_sign_str,
@@ -1666,6 +1766,7 @@ class TomlParser:
1666
1766
  tz = datetime.UTC
1667
1767
  else: # local date-time
1668
1768
  tz = None
1769
+
1669
1770
  return datetime.datetime(year, month, day, hour, minute, sec, micros, tzinfo=tz)
1670
1771
 
1671
1772
  @classmethod
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev309
3
+ Version: 0.0.0.dev310
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev309
15
+ Requires-Dist: omlish==0.0.0.dev310
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=25.1; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev309
1
+ omlish==0.0.0.dev310
2
2
 
3
3
  [all]
4
4
  black~=25.1
@@ -12,7 +12,7 @@ authors = [
12
12
  urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = {text = 'BSD-3-Clause'}
14
14
  requires-python = '>=3.12'
15
- version = '0.0.0.dev309'
15
+ version = '0.0.0.dev310'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -22,7 +22,7 @@ classifiers = [
22
22
  ]
23
23
  description = 'omdev'
24
24
  dependencies = [
25
- 'omlish == 0.0.0.dev309',
25
+ 'omlish == 0.0.0.dev310',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
File without changes
File without changes
File without changes