omdev 0.0.0.dev172__tar.gz → 0.0.0.dev174__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 (178) hide show
  1. {omdev-0.0.0.dev172/omdev.egg-info → omdev-0.0.0.dev174}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/scripts/interp.py +29 -0
  3. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/scripts/pyproject.py +46 -0
  4. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174/omdev.egg-info}/PKG-INFO +2 -2
  5. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev.egg-info/requires.txt +1 -1
  6. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/pyproject.toml +2 -2
  7. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/LICENSE +0 -0
  8. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/MANIFEST.in +0 -0
  9. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/README.rst +0 -0
  10. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/.manifests.json +0 -0
  11. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/__about__.py +0 -0
  12. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/__init__.py +0 -0
  13. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/amalg/__init__.py +0 -0
  14. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/amalg/__main__.py +0 -0
  15. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/amalg/gen.py +0 -0
  16. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/amalg/imports.py +0 -0
  17. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/amalg/main.py +0 -0
  18. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/amalg/manifests.py +0 -0
  19. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/amalg/resources.py +0 -0
  20. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/amalg/srcfiles.py +0 -0
  21. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/amalg/strip.py +0 -0
  22. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/amalg/types.py +0 -0
  23. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/amalg/typing.py +0 -0
  24. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/antlr/__init__.py +0 -0
  25. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/antlr/consts.py +0 -0
  26. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/antlr/gen.py +0 -0
  27. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/bracepy.py +0 -0
  28. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/__init__.py +0 -0
  29. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/compute/__init__.py +0 -0
  30. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/compute/cache.py +0 -0
  31. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/compute/contexts.py +0 -0
  32. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/compute/currents.py +0 -0
  33. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/compute/fns.py +0 -0
  34. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/compute/resolvers.py +0 -0
  35. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/compute/storage.py +0 -0
  36. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/compute/types.py +0 -0
  37. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/data/__init__.py +0 -0
  38. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/data/actions.py +0 -0
  39. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/data/cache.py +0 -0
  40. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/data/consts.py +0 -0
  41. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/data/defaults.py +0 -0
  42. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/data/manifests.py +0 -0
  43. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cache/data/specs.py +0 -0
  44. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/__init__.py +0 -0
  45. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_boilerplate.cc +0 -0
  46. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/LICENSE +0 -0
  47. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/__init__.py +0 -0
  48. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/build_ext.py +0 -0
  49. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  50. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  51. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/compilers/options.py +0 -0
  52. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  53. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/dir_util.py +0 -0
  54. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/errors.py +0 -0
  55. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/extension.py +0 -0
  56. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/file_util.py +0 -0
  57. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/modified.py +0 -0
  58. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/spawn.py +0 -0
  59. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/sysconfig.py +0 -0
  60. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/util.py +0 -0
  61. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/_distutils/version.py +0 -0
  62. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/build.py +0 -0
  63. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/cmake.py +0 -0
  64. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/importhook.py +0 -0
  65. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/magic.py +0 -0
  66. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cexts/scan.py +0 -0
  67. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/classdot.py +0 -0
  68. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cli/__init__.py +0 -0
  69. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cli/__main__.py +0 -0
  70. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cli/_pathhack.py +0 -0
  71. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cli/clicli.py +0 -0
  72. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cli/install.py +0 -0
  73. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cli/main.py +0 -0
  74. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cli/managers.py +0 -0
  75. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cli/types.py +0 -0
  76. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/clipboard/__init__.py +0 -0
  77. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/clipboard/clipboard.py +0 -0
  78. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/clipboard/darwin_cf.py +0 -0
  79. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/clipboard/linux_x11.py +0 -0
  80. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/cmake.py +0 -0
  81. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/findimports.py +0 -0
  82. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/git/__init__.py +0 -0
  83. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/git/revisions.py +0 -0
  84. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/git/status.py +0 -0
  85. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/git/subtrees.py +0 -0
  86. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/imgur.py +0 -0
  87. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/interp/__init__.py +0 -0
  88. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/interp/__main__.py +0 -0
  89. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/interp/cli.py +0 -0
  90. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/interp/inspect.py +0 -0
  91. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/interp/providers.py +0 -0
  92. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/interp/pyenv.py +0 -0
  93. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/interp/resolvers.py +0 -0
  94. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/interp/standalone.py +0 -0
  95. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/interp/system.py +0 -0
  96. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/interp/types.py +0 -0
  97. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/magic/__init__.py +0 -0
  98. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/magic/find.py +0 -0
  99. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/magic/magic.py +0 -0
  100. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/magic/prepare.py +0 -0
  101. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/magic/styles.py +0 -0
  102. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/manifests/__init__.py +0 -0
  103. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/manifests/__main__.py +0 -0
  104. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/manifests/build.py +0 -0
  105. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/manifests/main.py +0 -0
  106. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/mypy/__init__.py +0 -0
  107. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/mypy/debug.py +0 -0
  108. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/packaging/__init__.py +0 -0
  109. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/packaging/marshal.py +0 -0
  110. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/packaging/names.py +0 -0
  111. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/packaging/requires.py +0 -0
  112. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/packaging/specifiers.py +0 -0
  113. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/packaging/versions.py +0 -0
  114. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pip.py +0 -0
  115. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/precheck/__init__.py +0 -0
  116. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/precheck/__main__.py +0 -0
  117. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/precheck/base.py +0 -0
  118. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/precheck/git.py +0 -0
  119. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/precheck/lite.py +0 -0
  120. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/precheck/main.py +0 -0
  121. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/precheck/manifests.py +0 -0
  122. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/precheck/scripts.py +0 -0
  123. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/ptk/__init__.py +0 -0
  124. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/ptk/apps/__init__.py +0 -0
  125. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/ptk/apps/ncdu.py +0 -0
  126. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pycharm/__init__.py +0 -0
  127. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pycharm/__main__.py +0 -0
  128. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pycharm/cli.py +0 -0
  129. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pyproject/__init__.py +0 -0
  130. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pyproject/__main__.py +0 -0
  131. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pyproject/cexts.py +0 -0
  132. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pyproject/cli.py +0 -0
  133. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pyproject/configs.py +0 -0
  134. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pyproject/pkg.py +0 -0
  135. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pyproject/reqs.py +0 -0
  136. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/pyproject/venvs.py +0 -0
  137. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/revisions.py +0 -0
  138. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/scripts/__init__.py +0 -0
  139. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/scripts/bumpversion.py +0 -0
  140. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/scripts/execrss.py +0 -0
  141. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/scripts/exectime.py +0 -0
  142. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/scripts/importtrace.py +0 -0
  143. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/scripts/slowcat.py +0 -0
  144. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/scripts/tmpexec.py +0 -0
  145. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/secrets.py +0 -0
  146. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tokens.py +0 -0
  147. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/toml/__init__.py +0 -0
  148. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/toml/parser.py +0 -0
  149. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/toml/writer.py +0 -0
  150. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/__init__.py +0 -0
  151. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/cloc.py +0 -0
  152. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/doc.py +0 -0
  153. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/docker.py +0 -0
  154. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/git.py +0 -0
  155. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/importscan.py +0 -0
  156. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/json/__init__.py +0 -0
  157. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/json/__main__.py +0 -0
  158. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/json/cli.py +0 -0
  159. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/json/formats.py +0 -0
  160. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/json/io.py +0 -0
  161. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/json/parsing.py +0 -0
  162. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/json/processing.py +0 -0
  163. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/json/rendering.py +0 -0
  164. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/mkrelimp.py +0 -0
  165. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/notebook.py +0 -0
  166. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/pawk/__init__.py +0 -0
  167. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/pawk/__main__.py +0 -0
  168. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/pawk/pawk.py +0 -0
  169. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/pip.py +0 -0
  170. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/prof.py +0 -0
  171. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/qr.py +0 -0
  172. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/tools/sqlrepl.py +0 -0
  173. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev/wheelfile.py +0 -0
  174. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev.egg-info/SOURCES.txt +0 -0
  175. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev.egg-info/dependency_links.txt +0 -0
  176. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev.egg-info/entry_points.txt +0 -0
  177. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/omdev.egg-info/top_level.txt +0 -0
  178. {omdev-0.0.0.dev172 → omdev-0.0.0.dev174}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev172
3
+ Version: 0.0.0.dev174
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.dev172
15
+ Requires-Dist: omlish==0.0.0.dev174
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1049,6 +1049,9 @@ log = logging.getLogger(__name__)
1049
1049
  # ../../../omlish/lite/reflect.py
1050
1050
 
1051
1051
 
1052
+ ##
1053
+
1054
+
1052
1055
  _GENERIC_ALIAS_TYPES = (
1053
1056
  ta._GenericAlias, # type: ignore # noqa
1054
1057
  *([ta._SpecialGenericAlias] if hasattr(ta, '_SpecialGenericAlias') else []), # noqa
@@ -1066,6 +1069,9 @@ is_union_alias = functools.partial(is_generic_alias, origin=ta.Union)
1066
1069
  is_callable_alias = functools.partial(is_generic_alias, origin=ta.Callable)
1067
1070
 
1068
1071
 
1072
+ ##
1073
+
1074
+
1069
1075
  def is_optional_alias(spec: ta.Any) -> bool:
1070
1076
  return (
1071
1077
  isinstance(spec, _GENERIC_ALIAS_TYPES) and # noqa
@@ -1080,6 +1086,9 @@ def get_optional_alias_arg(spec: ta.Any) -> ta.Any:
1080
1086
  return it
1081
1087
 
1082
1088
 
1089
+ ##
1090
+
1091
+
1083
1092
  def is_new_type(spec: ta.Any) -> bool:
1084
1093
  if isinstance(ta.NewType, type):
1085
1094
  return isinstance(spec, ta.NewType)
@@ -1092,6 +1101,26 @@ def get_new_type_supertype(spec: ta.Any) -> ta.Any:
1092
1101
  return spec.__supertype__
1093
1102
 
1094
1103
 
1104
+ ##
1105
+
1106
+
1107
+ def is_literal_type(spec: ta.Any) -> bool:
1108
+ if hasattr(ta, '_LiteralGenericAlias'):
1109
+ return isinstance(spec, ta._LiteralGenericAlias) # noqa
1110
+ else:
1111
+ return (
1112
+ isinstance(spec, ta._GenericAlias) and # type: ignore # noqa
1113
+ spec.__origin__ is ta.Literal
1114
+ )
1115
+
1116
+
1117
+ def get_literal_type_args(spec: ta.Any) -> ta.Iterable[ta.Any]:
1118
+ return spec.__args__
1119
+
1120
+
1121
+ ##
1122
+
1123
+
1095
1124
  def deep_subclasses(cls: ta.Type[T]) -> ta.Iterator[ta.Type[T]]:
1096
1125
  seen = set()
1097
1126
  todo = list(reversed(cls.__subclasses__()))
@@ -2341,6 +2341,9 @@ log = logging.getLogger(__name__)
2341
2341
  # ../../../omlish/lite/reflect.py
2342
2342
 
2343
2343
 
2344
+ ##
2345
+
2346
+
2344
2347
  _GENERIC_ALIAS_TYPES = (
2345
2348
  ta._GenericAlias, # type: ignore # noqa
2346
2349
  *([ta._SpecialGenericAlias] if hasattr(ta, '_SpecialGenericAlias') else []), # noqa
@@ -2358,6 +2361,9 @@ is_union_alias = functools.partial(is_generic_alias, origin=ta.Union)
2358
2361
  is_callable_alias = functools.partial(is_generic_alias, origin=ta.Callable)
2359
2362
 
2360
2363
 
2364
+ ##
2365
+
2366
+
2361
2367
  def is_optional_alias(spec: ta.Any) -> bool:
2362
2368
  return (
2363
2369
  isinstance(spec, _GENERIC_ALIAS_TYPES) and # noqa
@@ -2372,6 +2378,9 @@ def get_optional_alias_arg(spec: ta.Any) -> ta.Any:
2372
2378
  return it
2373
2379
 
2374
2380
 
2381
+ ##
2382
+
2383
+
2375
2384
  def is_new_type(spec: ta.Any) -> bool:
2376
2385
  if isinstance(ta.NewType, type):
2377
2386
  return isinstance(spec, ta.NewType)
@@ -2384,6 +2393,26 @@ def get_new_type_supertype(spec: ta.Any) -> ta.Any:
2384
2393
  return spec.__supertype__
2385
2394
 
2386
2395
 
2396
+ ##
2397
+
2398
+
2399
+ def is_literal_type(spec: ta.Any) -> bool:
2400
+ if hasattr(ta, '_LiteralGenericAlias'):
2401
+ return isinstance(spec, ta._LiteralGenericAlias) # noqa
2402
+ else:
2403
+ return (
2404
+ isinstance(spec, ta._GenericAlias) and # type: ignore # noqa
2405
+ spec.__origin__ is ta.Literal
2406
+ )
2407
+
2408
+
2409
+ def get_literal_type_args(spec: ta.Any) -> ta.Iterable[ta.Any]:
2410
+ return spec.__args__
2411
+
2412
+
2413
+ ##
2414
+
2415
+
2387
2416
  def deep_subclasses(cls: ta.Type[T]) -> ta.Iterator[ta.Type[T]]:
2388
2417
  seen = set()
2389
2418
  todo = list(reversed(cls.__subclasses__()))
@@ -3830,6 +3859,18 @@ class OptionalObjMarshaler(ObjMarshaler):
3830
3859
  return self.item.unmarshal(o, ctx)
3831
3860
 
3832
3861
 
3862
+ @dc.dataclass(frozen=True)
3863
+ class LiteralObjMarshaler(ObjMarshaler):
3864
+ item: ObjMarshaler
3865
+ vs: frozenset
3866
+
3867
+ def marshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
3868
+ return self.item.marshal(check.in_(o, self.vs), ctx)
3869
+
3870
+ def unmarshal(self, o: ta.Any, ctx: 'ObjMarshalContext') -> ta.Any:
3871
+ return check.in_(self.item.unmarshal(o, ctx), self.vs)
3872
+
3873
+
3833
3874
  @dc.dataclass(frozen=True)
3834
3875
  class MappingObjMarshaler(ObjMarshaler):
3835
3876
  ty: type
@@ -4041,6 +4082,11 @@ class ObjMarshalerManager:
4041
4082
  if is_new_type(ty):
4042
4083
  return rec(get_new_type_supertype(ty))
4043
4084
 
4085
+ if is_literal_type(ty):
4086
+ lvs = frozenset(get_literal_type_args(ty))
4087
+ lty = check.single(set(map(type, lvs)))
4088
+ return LiteralObjMarshaler(rec(lty), lvs)
4089
+
4044
4090
  if is_generic_alias(ty):
4045
4091
  try:
4046
4092
  mt = self._generic_mapping_types[ta.get_origin(ty)]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev172
3
+ Version: 0.0.0.dev174
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.dev172
15
+ Requires-Dist: omlish==0.0.0.dev174
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev172
1
+ omlish==0.0.0.dev174
2
2
 
3
3
  [all]
4
4
  black~=24.10
@@ -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.dev172'
15
+ version = '0.0.0.dev174'
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.dev172',
25
+ 'omlish == 0.0.0.dev174',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
File without changes
File without changes
File without changes
File without changes
File without changes