omlish 0.0.0.dev52__tar.gz → 0.0.0.dev54__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 (353) hide show
  1. {omlish-0.0.0.dev52/omlish.egg-info → omlish-0.0.0.dev54}/PKG-INFO +1 -1
  2. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/.manifests.json +4 -1
  3. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/__about__.py +2 -2
  4. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/__init__.py +9 -5
  5. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/utils.py +4 -0
  6. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/__init__.py +2 -0
  7. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/dataclasses.py +30 -7
  8. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/objects.py +82 -15
  9. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jmespath/__main__.py +1 -1
  10. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54/omlish.egg-info}/PKG-INFO +1 -1
  11. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/pyproject.toml +1 -1
  12. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/LICENSE +0 -0
  13. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/MANIFEST.in +0 -0
  14. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/README.rst +0 -0
  15. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/__init__.py +0 -0
  16. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/argparse.py +0 -0
  17. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/asyncs/__init__.py +0 -0
  18. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/asyncs/anyio.py +0 -0
  19. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/asyncs/asyncio.py +0 -0
  20. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/asyncs/asyncs.py +0 -0
  21. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/asyncs/bridge.py +0 -0
  22. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/asyncs/flavors.py +0 -0
  23. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/asyncs/trio.py +0 -0
  24. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/asyncs/trio_asyncio.py +0 -0
  25. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/bootstrap/__init__.py +0 -0
  26. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/bootstrap/__main__.py +0 -0
  27. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/bootstrap/base.py +0 -0
  28. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/bootstrap/diag.py +0 -0
  29. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/bootstrap/harness.py +0 -0
  30. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/bootstrap/main.py +0 -0
  31. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/bootstrap/marshal.py +0 -0
  32. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/bootstrap/sys.py +0 -0
  33. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/c3.py +0 -0
  34. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/cached.py +0 -0
  35. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/check.py +0 -0
  36. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/__init__.py +0 -0
  37. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/_abc.py +0 -0
  38. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/_io_abc.py +0 -0
  39. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/cache/__init__.py +0 -0
  40. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/cache/descriptor.py +0 -0
  41. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/cache/impl.py +0 -0
  42. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/cache/types.py +0 -0
  43. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/coerce.py +0 -0
  44. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/exceptions.py +0 -0
  45. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/frozen.py +0 -0
  46. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/identity.py +0 -0
  47. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/indexed.py +0 -0
  48. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/mappings.py +0 -0
  49. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/ordered.py +0 -0
  50. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/persistent.py +0 -0
  51. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/skiplist.py +0 -0
  52. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/sorted.py +0 -0
  53. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/treap.py +0 -0
  54. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/treapmap.py +0 -0
  55. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/unmodifiable.py +0 -0
  56. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/collections/utils.py +0 -0
  57. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/concurrent/__init__.py +0 -0
  58. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/concurrent/executors.py +0 -0
  59. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/concurrent/futures.py +0 -0
  60. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/concurrent/threadlets.py +0 -0
  61. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/configs/__init__.py +0 -0
  62. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/configs/classes.py +0 -0
  63. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/configs/flattening.py +0 -0
  64. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/configs/strings.py +0 -0
  65. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/LICENSE +0 -0
  66. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/__init__.py +0 -0
  67. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/api.py +0 -0
  68. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/as_.py +0 -0
  69. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/copy.py +0 -0
  70. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/descriptors.py +0 -0
  71. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/exceptions.py +0 -0
  72. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/fields.py +0 -0
  73. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/frozen.py +0 -0
  74. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/hashing.py +0 -0
  75. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/init.py +0 -0
  76. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/internals.py +0 -0
  77. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/main.py +0 -0
  78. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/metaclass.py +0 -0
  79. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/metadata.py +0 -0
  80. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/order.py +0 -0
  81. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/params.py +0 -0
  82. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/processing.py +0 -0
  83. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/reflect.py +0 -0
  84. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/replace.py +0 -0
  85. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/repr.py +0 -0
  86. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/simple.py +0 -0
  87. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/slots.py +0 -0
  88. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dataclasses/impl/utils.py +0 -0
  89. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/datetimes.py +0 -0
  90. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/defs.py +0 -0
  91. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/__init__.py +0 -0
  92. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/asts.py +0 -0
  93. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/procfs.py +0 -0
  94. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/procstats.py +0 -0
  95. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/ps.py +0 -0
  96. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/pycharm.py +0 -0
  97. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/pydevd.py +0 -0
  98. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/replserver/__init__.py +0 -0
  99. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/replserver/__main__.py +0 -0
  100. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/replserver/console.py +0 -0
  101. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/replserver/server.py +0 -0
  102. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/diag/threads.py +0 -0
  103. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dispatch/__init__.py +0 -0
  104. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dispatch/_dispatch2.py +0 -0
  105. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dispatch/_dispatch3.py +0 -0
  106. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dispatch/dispatch.py +0 -0
  107. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dispatch/functions.py +0 -0
  108. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dispatch/methods.py +0 -0
  109. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/docker/__init__.py +0 -0
  110. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/docker/cli.py +0 -0
  111. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/docker/compose.py +0 -0
  112. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/docker/helpers.py +0 -0
  113. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/docker/hub.py +0 -0
  114. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/docker/manifests.py +0 -0
  115. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/dynamic.py +0 -0
  116. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/fnpairs.py +0 -0
  117. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/fnpipes.py +0 -0
  118. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/formats/__init__.py +0 -0
  119. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/formats/dotenv.py +0 -0
  120. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/formats/json.py +0 -0
  121. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/formats/props.py +0 -0
  122. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/formats/yaml.py +0 -0
  123. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/genmachine.py +0 -0
  124. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/graphs/__init__.py +0 -0
  125. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/graphs/dags.py +0 -0
  126. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/graphs/domination.py +0 -0
  127. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/graphs/dot/__init__.py +0 -0
  128. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/graphs/dot/items.py +0 -0
  129. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/graphs/dot/make.py +0 -0
  130. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/graphs/dot/rendering.py +0 -0
  131. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/graphs/dot/utils.py +0 -0
  132. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/graphs/trees.py +0 -0
  133. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/http/__init__.py +0 -0
  134. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/http/asgi.py +0 -0
  135. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/http/collections.py +0 -0
  136. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/http/consts.py +0 -0
  137. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/http/cookies.py +0 -0
  138. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/http/dates.py +0 -0
  139. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/http/encodings.py +0 -0
  140. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/http/json.py +0 -0
  141. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/http/sessions.py +0 -0
  142. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/http/wsgi.py +0 -0
  143. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/__init__.py +0 -0
  144. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/binder.py +0 -0
  145. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/bindings.py +0 -0
  146. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/eagers.py +0 -0
  147. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/elements.py +0 -0
  148. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/exceptions.py +0 -0
  149. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/impl/__init__.py +0 -0
  150. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/impl/bindings.py +0 -0
  151. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/impl/elements.py +0 -0
  152. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/impl/injector.py +0 -0
  153. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/impl/inspect.py +0 -0
  154. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/impl/multis.py +0 -0
  155. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/impl/origins.py +0 -0
  156. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/impl/privates.py +0 -0
  157. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/impl/providers.py +0 -0
  158. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/impl/proxy.py +0 -0
  159. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/impl/scopes.py +0 -0
  160. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/injector.py +0 -0
  161. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/inspect.py +0 -0
  162. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/keys.py +0 -0
  163. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/listeners.py +0 -0
  164. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/managed.py +0 -0
  165. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/multis.py +0 -0
  166. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/origins.py +0 -0
  167. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/overrides.py +0 -0
  168. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/privates.py +0 -0
  169. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/providers.py +0 -0
  170. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/scopes.py +0 -0
  171. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/types.py +0 -0
  172. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/inject/utils.py +0 -0
  173. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/iterators.py +0 -0
  174. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/__init__.py +0 -0
  175. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/cached.py +0 -0
  176. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/classes/__init__.py +0 -0
  177. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/classes/abstract.py +0 -0
  178. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/classes/restrict.py +0 -0
  179. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/classes/simple.py +0 -0
  180. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/classes/virtual.py +0 -0
  181. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/clsdct.py +0 -0
  182. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/cmp.py +0 -0
  183. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/contextmanagers.py +0 -0
  184. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/datetimes.py +0 -0
  185. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/descriptors.py +0 -0
  186. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/exceptions.py +0 -0
  187. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/functions.py +0 -0
  188. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/imports.py +0 -0
  189. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/iterables.py +0 -0
  190. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/maybes.py +0 -0
  191. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/objects.py +0 -0
  192. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/resolving.py +0 -0
  193. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/resources.py +0 -0
  194. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/strings.py +0 -0
  195. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/sys.py +0 -0
  196. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/timeouts.py +0 -0
  197. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lang/typing.py +0 -0
  198. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/libc.py +0 -0
  199. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lifecycles/__init__.py +0 -0
  200. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lifecycles/abstract.py +0 -0
  201. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lifecycles/base.py +0 -0
  202. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lifecycles/contextmanagers.py +0 -0
  203. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lifecycles/controller.py +0 -0
  204. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lifecycles/manager.py +0 -0
  205. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lifecycles/states.py +0 -0
  206. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lifecycles/transitions.py +0 -0
  207. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/__init__.py +0 -0
  208. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/cached.py +0 -0
  209. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/check.py +0 -0
  210. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/contextmanagers.py +0 -0
  211. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/json.py +0 -0
  212. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/logs.py +0 -0
  213. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/marshal.py +0 -0
  214. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/reflect.py +0 -0
  215. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/runtime.py +0 -0
  216. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/secrets.py +0 -0
  217. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/strings.py +0 -0
  218. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/lite/subprocesses.py +0 -0
  219. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/logs/__init__.py +0 -0
  220. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/logs/_abc.py +0 -0
  221. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/logs/configs.py +0 -0
  222. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/logs/formatters.py +0 -0
  223. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/logs/handlers.py +0 -0
  224. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/logs/noisy.py +0 -0
  225. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/logs/utils.py +0 -0
  226. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/any.py +0 -0
  227. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/base.py +0 -0
  228. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/base64.py +0 -0
  229. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/datetimes.py +0 -0
  230. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/enums.py +0 -0
  231. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/exceptions.py +0 -0
  232. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/factories.py +0 -0
  233. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/forbidden.py +0 -0
  234. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/global_.py +0 -0
  235. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/helpers.py +0 -0
  236. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/iterables.py +0 -0
  237. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/mappings.py +0 -0
  238. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/maybes.py +0 -0
  239. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/naming.py +0 -0
  240. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/numbers.py +0 -0
  241. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/optionals.py +0 -0
  242. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/polymorphism.py +0 -0
  243. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/primitives.py +0 -0
  244. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/registries.py +0 -0
  245. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/standard.py +0 -0
  246. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/unions.py +0 -0
  247. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/utils.py +0 -0
  248. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/uuids.py +0 -0
  249. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/marshal/values.py +0 -0
  250. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/matchfns.py +0 -0
  251. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/math/__init__.py +0 -0
  252. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/math/bits.py +0 -0
  253. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/math/floats.py +0 -0
  254. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/math/stats.py +0 -0
  255. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/multiprocessing.py +0 -0
  256. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/os.py +0 -0
  257. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/reflect/__init__.py +0 -0
  258. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/reflect/isinstance.py +0 -0
  259. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/reflect/ops.py +0 -0
  260. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/reflect/subst.py +0 -0
  261. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/reflect/types.py +0 -0
  262. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/runmodule.py +0 -0
  263. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/secrets/__init__.py +0 -0
  264. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/secrets/crypto.py +0 -0
  265. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/secrets/marshal.py +0 -0
  266. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/secrets/openssl.py +0 -0
  267. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/secrets/passwords.py +0 -0
  268. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/secrets/secrets.py +0 -0
  269. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/secrets/subprocesses.py +0 -0
  270. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/__init__.py +0 -0
  271. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jmespath/LICENSE +0 -0
  272. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jmespath/__init__.py +0 -0
  273. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jmespath/ast.py +0 -0
  274. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jmespath/cli.py +0 -0
  275. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jmespath/exceptions.py +0 -0
  276. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jmespath/functions.py +0 -0
  277. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jmespath/lexer.py +0 -0
  278. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jmespath/parser.py +0 -0
  279. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jmespath/scope.py +0 -0
  280. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jmespath/visitor.py +0 -0
  281. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonrpc/__init__.py +0 -0
  282. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonrpc/errors.py +0 -0
  283. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonrpc/marshal.py +0 -0
  284. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonrpc/types.py +0 -0
  285. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/__init__.py +0 -0
  286. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/keywords/__init__.py +0 -0
  287. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/keywords/base.py +0 -0
  288. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/keywords/core.py +0 -0
  289. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/keywords/metadata.py +0 -0
  290. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/keywords/parse.py +0 -0
  291. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/keywords/render.py +0 -0
  292. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/keywords/validation.py +0 -0
  293. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/__init__.py +0 -0
  294. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/__init__.py +0 -0
  295. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/metaschema.json +0 -0
  296. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/__init__.py +0 -0
  297. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/applicator.json +0 -0
  298. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/content.json +0 -0
  299. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/core.json +0 -0
  300. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format-annotation.json +0 -0
  301. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format-assertion.json +0 -0
  302. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format.json +0 -0
  303. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/meta-data.json +0 -0
  304. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/unevaluated.json +0 -0
  305. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/validation.json +0 -0
  306. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/jsonschema/types.py +0 -0
  307. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/openapi/__init__.py +0 -0
  308. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/openapi/marshal.py +0 -0
  309. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/specs/openapi/openapi.py +0 -0
  310. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/sql/__init__.py +0 -0
  311. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/sql/_abc.py +0 -0
  312. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/sql/alchemy/__init__.py +0 -0
  313. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/sql/alchemy/asyncs.py +0 -0
  314. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/sql/alchemy/duckdb.py +0 -0
  315. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/sql/alchemy/exprs.py +0 -0
  316. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/sql/alchemy/secrets.py +0 -0
  317. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/sql/alchemy/sqlean.py +0 -0
  318. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/sql/dbs.py +0 -0
  319. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/sql/qualifiedname.py +0 -0
  320. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/sync.py +0 -0
  321. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/term.py +0 -0
  322. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/__init__.py +0 -0
  323. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/__init__.py +0 -0
  324. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/helpers.py +0 -0
  325. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/inject/__init__.py +0 -0
  326. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/inject/harness.py +0 -0
  327. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/marks.py +0 -0
  328. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/__init__.py +0 -0
  329. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/_registry.py +0 -0
  330. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/asyncs.py +0 -0
  331. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/depskip.py +0 -0
  332. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/logging.py +0 -0
  333. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/managermarks.py +0 -0
  334. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/pydevd.py +0 -0
  335. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/repeat.py +0 -0
  336. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/skips.py +0 -0
  337. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/spacing.py +0 -0
  338. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/switches.py +0 -0
  339. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/plugins/utils.py +0 -0
  340. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/pytest/skip.py +0 -0
  341. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/testing/testing.py +0 -0
  342. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/text/__init__.py +0 -0
  343. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/text/asdl.py +0 -0
  344. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/text/delimit.py +0 -0
  345. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/text/glyphsplit.py +0 -0
  346. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/text/indent.py +0 -0
  347. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish/text/parts.py +0 -0
  348. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish.egg-info/SOURCES.txt +0 -0
  349. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish.egg-info/dependency_links.txt +0 -0
  350. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish.egg-info/entry_points.txt +0 -0
  351. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish.egg-info/requires.txt +0 -0
  352. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/omlish.egg-info/top_level.txt +0 -0
  353. {omlish-0.0.0.dev52 → omlish-0.0.0.dev54}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev52
3
+ Version: 0.0.0.dev54
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -42,7 +42,10 @@
42
42
  "line": 1,
43
43
  "value": {
44
44
  "$omdev.cli.types.CliModule": {
45
- "cmd_name": "jp",
45
+ "cmd_name": [
46
+ "jmespath",
47
+ "jp"
48
+ ],
46
49
  "mod_name": "omlish.specs.jmespath.__main__"
47
50
  }
48
51
  }
@@ -1,5 +1,5 @@
1
- __version__ = '0.0.0.dev52'
2
- __revision__ = '5ab36e956ad89c19e714eca498e51f63ada8ab92'
1
+ __version__ = '0.0.0.dev54'
2
+ __revision__ = '94a10a970e6b9aaa28240ec088676f4e3c81b274'
3
3
 
4
4
 
5
5
  #
@@ -89,15 +89,19 @@ from .impl.reflect import ( # noqa
89
89
  )
90
90
 
91
91
  from .utils import ( # noqa
92
- chain_metadata,
93
- deep_replace,
94
- field_modifier,
95
- fields_dict,
96
92
  maybe_post_init,
93
+
97
94
  opt_repr,
95
+ truthy_repr,
96
+
97
+ fields_dict,
98
+ field_modifier,
99
+ chain_metadata,
98
100
  update_class_metadata,
99
- update_field_extras,
100
101
  update_field_metadata,
102
+ update_field_extras,
101
103
  update_fields,
102
104
  update_fields_metadata,
105
+
106
+ deep_replace,
103
107
  )
@@ -33,6 +33,10 @@ def opt_repr(o: ta.Any) -> str | None:
33
33
  return repr(o) if o is not None else None
34
34
 
35
35
 
36
+ def truthy_repr(o: ta.Any) -> str | None:
37
+ return repr(o) if o else None
38
+
39
+
36
40
  #
37
41
 
38
42
 
@@ -59,10 +59,12 @@ from .helpers import ( # noqa
59
59
 
60
60
  from .objects import ( # noqa
61
61
  FieldInfo,
62
+ FieldInfos,
62
63
  FieldMetadata,
63
64
  FieldOptions,
64
65
  ObjectMarshaler,
65
66
  ObjectMetadata,
67
+ ObjectSpecials,
66
68
  ObjectUnmarshaler,
67
69
  SimpleObjectMarshalerFactory,
68
70
  SimpleObjectUnmarshalerFactory,
@@ -1,3 +1,7 @@
1
+ """
2
+ TODO:
3
+ - tangled with objects - Field/ObjectMetadata defined over there but unused
4
+ """
1
5
  import typing as ta
2
6
 
3
7
  from .. import check
@@ -17,6 +21,7 @@ from .naming import translate_name
17
21
  from .objects import DEFAULT_FIELD_OPTIONS
18
22
  from .objects import FIELD_OPTIONS_KWARGS
19
23
  from .objects import FieldInfo
24
+ from .objects import FieldInfos
20
25
  from .objects import FieldMetadata
21
26
  from .objects import FieldOptions
22
27
  from .objects import ObjectMarshaler
@@ -38,7 +43,7 @@ def get_dataclass_metadata(ty: type) -> ObjectMetadata:
38
43
  def get_field_infos(
39
44
  ty: type,
40
45
  opts: col.TypeMap[Option] = col.TypeMap(),
41
- ) -> ta.Sequence[FieldInfo]:
46
+ ) -> FieldInfos:
42
47
  dc_md = get_dataclass_metadata(ty)
43
48
  dc_naming = dc_md.field_naming or opts.get(Naming)
44
49
 
@@ -97,6 +102,15 @@ def get_field_infos(
97
102
  unmarshal_names=[n + '_' for n in fi_kw['unmarshal_names']],
98
103
  )
99
104
 
105
+ if fo_kw.get('no_marshal'):
106
+ fi_kw.update(
107
+ marshal_name=None,
108
+ )
109
+ if fo_kw.get('no_unmarshal'):
110
+ fi_kw.update(
111
+ unmarshal_names=(),
112
+ )
113
+
100
114
  ret.append(
101
115
  FieldInfo(
102
116
  options=FieldOptions(**fo_kw),
@@ -104,7 +118,7 @@ def get_field_infos(
104
118
  ),
105
119
  )
106
120
 
107
- return ret
121
+ return FieldInfos(ret)
108
122
 
109
123
 
110
124
  def _make_field_obj(ctx, ty, obj, fac):
@@ -128,15 +142,17 @@ class DataclassMarshalerFactory(MarshalerFactory):
128
142
  check.state(not lang.is_abstract_class(ty))
129
143
 
130
144
  dc_md = get_dataclass_metadata(ty)
145
+ fis = get_field_infos(ty, ctx.options)
131
146
 
132
147
  fields = [
133
148
  (fi, _make_field_obj(ctx, fi.type, fi.metadata.marshaler, fi.metadata.marshaler_factory))
134
- for fi in get_field_infos(ty, ctx.options)
149
+ for fi in fis
150
+ if fi.name not in dc_md.specials.set
135
151
  ]
136
152
 
137
153
  return ObjectMarshaler(
138
154
  fields,
139
- unknown_field=dc_md.unknown_field,
155
+ specials=dc_md.specials,
140
156
  )
141
157
 
142
158
 
@@ -151,7 +167,9 @@ class DataclassUnmarshalerFactory(UnmarshalerFactory):
151
167
  ty = check.isinstance(rty, type)
152
168
  check.state(dc.is_dataclass(ty))
153
169
  check.state(not lang.is_abstract_class(ty))
170
+
154
171
  dc_md = get_dataclass_metadata(ty)
172
+ fis = get_field_infos(ty, ctx.options)
155
173
 
156
174
  d: dict[str, tuple[FieldInfo, Unmarshaler]] = {}
157
175
  defaults: dict[str, ta.Any] = {}
@@ -164,7 +182,9 @@ class DataclassUnmarshalerFactory(UnmarshalerFactory):
164
182
  if fi.options.embed:
165
183
  e_ty = check.isinstance(fi.type, type)
166
184
  check.state(dc.is_dataclass(e_ty))
167
- # e_dc_md = get_dataclass_metadata(e_ty)
185
+ e_dc_md = get_dataclass_metadata(e_ty)
186
+ if e_dc_md.specials.set:
187
+ raise Exception(f'Embedded fields cannot have specials: {e_ty}')
168
188
 
169
189
  embeds[fi.name] = e_ty
170
190
  for e_fi in get_field_infos(e_ty, ctx.options):
@@ -188,14 +208,17 @@ class DataclassUnmarshalerFactory(UnmarshalerFactory):
188
208
 
189
209
  return ret
190
210
 
191
- for fi in get_field_infos(ty, ctx.options):
211
+ for fi in fis:
212
+ if fi.name in dc_md.specials.set:
213
+ continue
192
214
  add_field(fi)
193
215
 
194
216
  return ObjectUnmarshaler(
195
217
  ty,
196
218
  d,
197
- unknown_field=dc_md.unknown_field,
219
+ specials=dc_md.specials,
198
220
  defaults=defaults,
199
221
  embeds=embeds,
200
222
  embeds_by_unmarshal_name=embeds_by_unmarshal_name,
223
+ ignore_unknown=dc_md.ignore_unknown,
201
224
  )
@@ -8,7 +8,9 @@ TODO:
8
8
  import collections.abc
9
9
  import typing as ta
10
10
 
11
+ from .. import cached
11
12
  from .. import check
13
+ from .. import collections as col
12
14
  from .. import dataclasses as dc
13
15
  from .. import lang
14
16
  from .. import reflect as rfl
@@ -33,6 +35,9 @@ class FieldOptions:
33
35
 
34
36
  embed: bool = False
35
37
 
38
+ no_marshal: bool = False
39
+ no_unmarshal: bool = False
40
+
36
41
 
37
42
  DEFAULT_FIELD_OPTIONS = FieldOptions()
38
43
  FIELD_OPTIONS_KWARGS: frozenset[str] = frozenset(dc.fields_dict(FieldOptions).keys())
@@ -66,9 +71,29 @@ class ObjectMetadata:
66
71
  field_naming: Naming | None = None
67
72
 
68
73
  unknown_field: str | None = None
74
+ source_field: str | None = None
75
+
76
+ @cached.property
77
+ def specials(self) -> 'ObjectSpecials':
78
+ return ObjectSpecials(
79
+ unknown=self.unknown_field,
80
+ source=self.source_field,
81
+ )
69
82
 
70
83
  field_defaults: FieldMetadata = FieldMetadata()
71
84
 
85
+ ignore_unknown: bool = False
86
+
87
+
88
+ @dc.dataclass(frozen=True, kw_only=True)
89
+ class ObjectSpecials:
90
+ unknown: str | None = None
91
+ source: str | None = None
92
+
93
+ @cached.property
94
+ def set(self) -> frozenset[str]:
95
+ return frozenset(k for k, v in dc.asdict(self).items() if v is not None)
96
+
72
97
 
73
98
  ##
74
99
 
@@ -78,7 +103,7 @@ class FieldInfo:
78
103
  name: str
79
104
  type: ta.Any
80
105
 
81
- marshal_name: str
106
+ marshal_name: str | None
82
107
  unmarshal_names: ta.Sequence[str]
83
108
 
84
109
  metadata: FieldMetadata = FieldMetadata()
@@ -86,6 +111,32 @@ class FieldInfo:
86
111
  options: FieldOptions = FieldOptions()
87
112
 
88
113
 
114
+ @dc.dataclass(frozen=True)
115
+ class FieldInfos:
116
+ lst: ta.Sequence[FieldInfo]
117
+
118
+ def __iter__(self) -> ta.Iterator[FieldInfo]:
119
+ return iter(self.lst)
120
+
121
+ def __len__(self) -> int:
122
+ return len(self.lst)
123
+
124
+ @cached.property
125
+ @dc.init
126
+ def by_name(self) -> ta.Mapping[str, FieldInfo]:
127
+ return col.make_map(((fi.name, fi) for fi in self), strict=True)
128
+
129
+ @cached.property
130
+ @dc.init
131
+ def by_marshal_name(self) -> ta.Mapping[str, FieldInfo]:
132
+ return col.make_map(((fi.marshal_name, fi) for fi in self if fi.marshal_name is not None), strict=True)
133
+
134
+ @cached.property
135
+ @dc.init
136
+ def by_unmarshal_name(self) -> ta.Mapping[str, FieldInfo]:
137
+ return col.make_map(((n, fi) for fi in self for n in fi.unmarshal_names), strict=True)
138
+
139
+
89
140
  ##
90
141
 
91
142
 
@@ -95,7 +146,7 @@ class ObjectMarshaler(Marshaler):
95
146
 
96
147
  _: dc.KW_ONLY
97
148
 
98
- unknown_field: str | None = None
149
+ specials: ObjectSpecials = ObjectSpecials()
99
150
 
100
151
  def marshal(self, ctx: MarshalContext, o: ta.Any) -> Value:
101
152
  ret: dict[str, ta.Any] = {}
@@ -105,17 +156,24 @@ class ObjectMarshaler(Marshaler):
105
156
  if fi.options.omit_if is not None and fi.options.omit_if(v):
106
157
  continue
107
158
 
159
+ if fi.name in self.specials.set:
160
+ continue
161
+
162
+ mn = fi.marshal_name
163
+ if mn is None:
164
+ continue
165
+
108
166
  mv = m.marshal(ctx, v)
109
167
 
110
168
  if fi.options.embed:
111
169
  for ek, ev in check.isinstance(mv, collections.abc.Mapping).items():
112
- ret[fi.marshal_name + check.non_empty_str(ek)] = ev # type: ignore
170
+ ret[mn + check.non_empty_str(ek)] = ev # type: ignore
113
171
 
114
172
  else:
115
- ret[fi.marshal_name] = mv
173
+ ret[mn] = mv
116
174
 
117
- if self.unknown_field is not None:
118
- if (ukf := getattr(o, self.unknown_field)):
175
+ if self.specials.unknown is not None:
176
+ if (ukf := getattr(o, self.specials.unknown)):
119
177
  if (dks := set(ret) & set(ukf)):
120
178
  raise KeyError(f'Unknown field keys duplicate fields: {dks!r}')
121
179
 
@@ -130,7 +188,7 @@ class SimpleObjectMarshalerFactory(MarshalerFactory):
130
188
 
131
189
  _: dc.KW_ONLY
132
190
 
133
- unknown_field: str | None = None
191
+ specials: ObjectSpecials = ObjectSpecials()
134
192
 
135
193
  def guard(self, ctx: MarshalContext, rty: rfl.Type) -> bool:
136
194
  return isinstance(rty, type) and rty in self.dct
@@ -138,7 +196,7 @@ class SimpleObjectMarshalerFactory(MarshalerFactory):
138
196
  def fn(self, ctx: MarshalContext, rty: rfl.Type) -> Marshaler:
139
197
  ty = check.isinstance(rty, type)
140
198
 
141
- flds = self.dct[ty]
199
+ flds = FieldInfos(self.dct[ty])
142
200
 
143
201
  fields = [
144
202
  (fi, ctx.make(fi.type))
@@ -147,7 +205,7 @@ class SimpleObjectMarshalerFactory(MarshalerFactory):
147
205
 
148
206
  return ObjectMarshaler(
149
207
  fields,
150
- unknown_field=self.unknown_field,
208
+ specials=self.specials,
151
209
  )
152
210
 
153
211
 
@@ -161,13 +219,15 @@ class ObjectUnmarshaler(Unmarshaler):
161
219
 
162
220
  _: dc.KW_ONLY
163
221
 
164
- unknown_field: str | None = None
222
+ specials: ObjectSpecials = ObjectSpecials()
165
223
 
166
224
  defaults: ta.Mapping[str, ta.Any] | None = None
167
225
 
168
226
  embeds: ta.Mapping[str, type] | None = None
169
227
  embeds_by_unmarshal_name: ta.Mapping[str, tuple[str, str]] | None = None
170
228
 
229
+ ignore_unknown: bool = False
230
+
171
231
  def unmarshal(self, ctx: UnmarshalContext, v: Value) -> ta.Any:
172
232
  ma = check.isinstance(v, collections.abc.Mapping)
173
233
 
@@ -177,8 +237,11 @@ class ObjectUnmarshaler(Unmarshaler):
177
237
 
178
238
  ekws: dict[str, dict[str, ta.Any]] = {en: {} for en in self.embeds or ()}
179
239
 
180
- if self.unknown_field is not None:
181
- kw[self.unknown_field] = ukf = {}
240
+ if self.specials.source is not None:
241
+ kw[self.specials.source] = v
242
+
243
+ if self.specials.unknown is not None:
244
+ kw[self.specials.unknown] = ukf = {}
182
245
 
183
246
  for k, mv in ma.items():
184
247
  ks = check.isinstance(k, str)
@@ -190,6 +253,10 @@ class ObjectUnmarshaler(Unmarshaler):
190
253
  if ukf is not None:
191
254
  ukf[ks] = mv # FIXME: unmarshal?
192
255
  continue
256
+
257
+ if self.ignore_unknown:
258
+ continue
259
+
193
260
  raise
194
261
 
195
262
  if self.embeds_by_unmarshal_name and (en := self.embeds_by_unmarshal_name.get(ks)):
@@ -220,7 +287,7 @@ class SimpleObjectUnmarshalerFactory(UnmarshalerFactory):
220
287
 
221
288
  _: dc.KW_ONLY
222
289
 
223
- unknown_field: str | None = None
290
+ specials: ObjectSpecials = ObjectSpecials()
224
291
 
225
292
  def guard(self, ctx: UnmarshalContext, rty: rfl.Type) -> bool:
226
293
  return isinstance(rty, type) and rty in self.dct
@@ -228,7 +295,7 @@ class SimpleObjectUnmarshalerFactory(UnmarshalerFactory):
228
295
  def fn(self, ctx: UnmarshalContext, rty: rfl.Type) -> Unmarshaler:
229
296
  ty = check.isinstance(rty, type)
230
297
 
231
- flds = self.dct[ty]
298
+ flds = FieldInfos(self.dct[ty])
232
299
 
233
300
  fields_by_unmarshal_name = {
234
301
  n: (fi, ctx.make(fi.type))
@@ -245,6 +312,6 @@ class SimpleObjectUnmarshalerFactory(UnmarshalerFactory):
245
312
  return ObjectUnmarshaler(
246
313
  ty,
247
314
  fields_by_unmarshal_name,
248
- unknown_field=self.unknown_field,
315
+ specials=self.specials,
249
316
  defaults=defaults,
250
317
  )
@@ -1,6 +1,6 @@
1
1
  # @omlish-manifest
2
2
  _CLI_MODULE = {'$omdev.cli.types.CliModule': {
3
- 'cmd_name': 'jp',
3
+ 'cmd_name': ['jmespath', 'jp'],
4
4
  'mod_name': __name__,
5
5
  }}
6
6
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omlish
3
- Version: 0.0.0.dev52
3
+ Version: 0.0.0.dev54
4
4
  Summary: omlish
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -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.dev52'
15
+ version = '0.0.0.dev54'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
File without changes
File without changes
File without changes
File without changes