omlish 0.0.0.dev423__py3-none-any.whl → 0.0.0.dev484__py3-none-any.whl

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.

Potentially problematic release.


This version of omlish might be problematic. Click here for more details.

Files changed (464) hide show
  1. omlish/{.manifests.json → .omlish-manifests.json} +12 -0
  2. omlish/__about__.py +21 -18
  3. omlish/argparse/all.py +17 -9
  4. omlish/argparse/cli.py +16 -3
  5. omlish/argparse/utils.py +21 -0
  6. omlish/asyncs/all.py +0 -13
  7. omlish/asyncs/asyncio/rlock.py +110 -0
  8. omlish/asyncs/asyncio/subprocesses.py +2 -2
  9. omlish/asyncs/asyncio/sync.py +43 -0
  10. omlish/asyncs/asyncio/utils.py +2 -0
  11. omlish/asyncs/ioproxy/proxy.py +1 -1
  12. omlish/asyncs/sync.py +25 -0
  13. omlish/bootstrap/_marshal.py +1 -1
  14. omlish/bootstrap/diag.py +12 -21
  15. omlish/bootstrap/main.py +2 -5
  16. omlish/bootstrap/sys.py +27 -28
  17. omlish/c3.py +4 -1
  18. omlish/cexts/include/omlish/omlish.hh +1 -0
  19. omlish/collections/__init__.py +13 -1
  20. omlish/collections/attrregistry.py +210 -0
  21. omlish/collections/cache/impl.py +3 -2
  22. omlish/collections/identity.py +1 -0
  23. omlish/collections/mappings.py +28 -0
  24. omlish/collections/trie.py +5 -1
  25. omlish/collections/utils.py +77 -0
  26. omlish/concurrent/__init__.py +0 -11
  27. omlish/concurrent/all.py +18 -0
  28. omlish/concurrent/futures.py +25 -0
  29. omlish/concurrent/threadlets.py +1 -1
  30. omlish/configs/processing/flattening.py +1 -1
  31. omlish/configs/processing/merging.py +8 -6
  32. omlish/configs/types.py +1 -1
  33. omlish/daemons/__init__.py +70 -0
  34. omlish/daemons/daemon.py +2 -2
  35. omlish/daemons/launching.py +2 -2
  36. omlish/daemons/reparent.py +2 -3
  37. omlish/daemons/spawning.py +2 -3
  38. omlish/dataclasses/__init__.py +5 -5
  39. omlish/dataclasses/errors.py +1 -1
  40. omlish/dataclasses/impl/api/classes/decorator.py +3 -0
  41. omlish/dataclasses/impl/api/classes/make.py +4 -1
  42. omlish/dataclasses/impl/concerns/doc.py +1 -1
  43. omlish/dataclasses/impl/concerns/repr.py +15 -2
  44. omlish/dataclasses/impl/configs.py +97 -36
  45. omlish/dataclasses/impl/generation/compilation.py +21 -19
  46. omlish/dataclasses/impl/generation/globals.py +1 -0
  47. omlish/dataclasses/impl/generation/ops.py +1 -0
  48. omlish/dataclasses/impl/generation/processor.py +105 -24
  49. omlish/dataclasses/impl/processing/base.py +8 -0
  50. omlish/dataclasses/impl/processing/driving.py +8 -8
  51. omlish/dataclasses/specs.py +34 -2
  52. omlish/dataclasses/tools/as_.py +0 -12
  53. omlish/dataclasses/tools/modifiers.py +5 -0
  54. omlish/dataclasses/tools/static.py +1 -1
  55. omlish/diag/_pycharm/runhack.py +1 -1
  56. omlish/diag/{lslocks.py → cmds/lslocks.py} +6 -6
  57. omlish/diag/{lsof.py → cmds/lsof.py} +6 -6
  58. omlish/diag/{ps.py → cmds/ps.py} +6 -6
  59. omlish/diag/procfs.py +4 -4
  60. omlish/diag/pycharm.py +16 -2
  61. omlish/diag/pydevd.py +58 -40
  62. omlish/diag/replserver/console.py +3 -3
  63. omlish/diag/replserver/server.py +2 -2
  64. omlish/dispatch/__init__.py +18 -12
  65. omlish/dispatch/methods.py +50 -140
  66. omlish/dom/rendering.py +1 -1
  67. omlish/formats/dotenv.py +8 -8
  68. omlish/formats/json/stream/__init__.py +18 -3
  69. omlish/formats/json/stream/building.py +2 -2
  70. omlish/formats/json/stream/lexing.py +401 -67
  71. omlish/formats/json/stream/parsing.py +32 -10
  72. omlish/formats/json/stream/rendering.py +6 -6
  73. omlish/formats/json/stream/utils.py +132 -30
  74. omlish/formats/json5/literals.py +7 -4
  75. omlish/formats/json5/parsing.py +33 -79
  76. omlish/formats/json5/stream.py +77 -0
  77. omlish/formats/logfmt.py +8 -2
  78. omlish/funcs/genmachine.py +2 -2
  79. omlish/funcs/guard.py +225 -0
  80. omlish/graphs/dot/rendering.py +1 -1
  81. omlish/http/all.py +122 -53
  82. omlish/http/asgi.py +2 -2
  83. omlish/http/clients/__init__.py +0 -34
  84. omlish/http/clients/asyncs.py +153 -0
  85. omlish/http/clients/base.py +63 -122
  86. omlish/http/clients/coro/sync.py +171 -0
  87. omlish/http/clients/default.py +209 -30
  88. omlish/http/clients/executor.py +56 -0
  89. omlish/http/clients/httpx.py +78 -13
  90. omlish/http/clients/middleware.py +181 -0
  91. omlish/http/clients/sync.py +151 -0
  92. omlish/http/clients/syncasync.py +49 -0
  93. omlish/http/clients/urllib.py +8 -5
  94. omlish/http/coro/client/{client.py → connection.py} +43 -37
  95. omlish/http/coro/client/headers.py +5 -5
  96. omlish/http/coro/client/response.py +37 -38
  97. omlish/http/coro/client/status.py +4 -4
  98. omlish/http/coro/{client/io.py → io.py} +19 -2
  99. omlish/http/coro/server/fdio.py +10 -9
  100. omlish/http/coro/server/server.py +14 -41
  101. omlish/http/coro/server/sockets.py +7 -6
  102. omlish/http/flasky/__init__.py +40 -0
  103. omlish/http/flasky/_compat.py +2 -0
  104. omlish/http/flasky/api.py +82 -0
  105. omlish/http/flasky/app.py +203 -0
  106. omlish/http/flasky/cvs.py +59 -0
  107. omlish/http/flasky/requests.py +20 -0
  108. omlish/http/flasky/responses.py +23 -0
  109. omlish/http/flasky/routes.py +23 -0
  110. omlish/http/flasky/types.py +15 -0
  111. omlish/http/handlers.py +3 -2
  112. omlish/http/headers.py +69 -35
  113. omlish/http/sse.py +1 -1
  114. omlish/http/urls.py +67 -0
  115. omlish/inject/__init__.py +173 -126
  116. omlish/inject/_dataclasses.py +4986 -0
  117. omlish/inject/binder.py +10 -49
  118. omlish/inject/elements.py +27 -0
  119. omlish/inject/{utils.py → helpers/constfn.py} +3 -3
  120. omlish/inject/{tags.py → helpers/id.py} +2 -2
  121. omlish/inject/helpers/multis.py +143 -0
  122. omlish/inject/helpers/wrappers.py +54 -0
  123. omlish/inject/impl/elements.py +52 -22
  124. omlish/inject/impl/injector.py +76 -49
  125. omlish/inject/impl/inspect.py +11 -1
  126. omlish/inject/impl/maysync.py +43 -0
  127. omlish/inject/impl/multis.py +10 -7
  128. omlish/inject/impl/privates.py +8 -8
  129. omlish/inject/impl/providers.py +23 -34
  130. omlish/inject/impl/providersmap.py +43 -0
  131. omlish/inject/impl/proxy.py +0 -2
  132. omlish/inject/impl/scopes.py +19 -23
  133. omlish/inject/impl/sync.py +41 -0
  134. omlish/inject/injector.py +37 -8
  135. omlish/inject/inspect.py +35 -0
  136. omlish/inject/listeners.py +4 -4
  137. omlish/inject/managed.py +54 -18
  138. omlish/inject/maysync.py +27 -0
  139. omlish/inject/multis.py +8 -0
  140. omlish/inject/overrides.py +3 -3
  141. omlish/inject/privates.py +6 -0
  142. omlish/inject/providers.py +8 -1
  143. omlish/inject/scopes.py +40 -12
  144. omlish/inject/sync.py +49 -0
  145. omlish/io/buffers.py +119 -1
  146. omlish/io/readers.py +29 -0
  147. omlish/iterators/__init__.py +28 -20
  148. omlish/iterators/transforms.py +204 -0
  149. omlish/lang/__init__.py +240 -129
  150. omlish/lang/_asyncs.cc +186 -0
  151. omlish/lang/asyncs.py +67 -43
  152. omlish/lang/{attrs.py → attrstorage.py} +15 -15
  153. omlish/lang/cached/property.py +2 -2
  154. omlish/lang/casing.py +11 -0
  155. omlish/lang/classes/bindable.py +2 -3
  156. omlish/lang/classes/restrict.py +8 -0
  157. omlish/lang/classes/simple.py +26 -4
  158. omlish/lang/collections.py +1 -1
  159. omlish/lang/contextmanagers.py +59 -9
  160. omlish/lang/functions.py +31 -33
  161. omlish/lang/imports/_capture.cc +103 -0
  162. omlish/lang/imports/capture.py +902 -0
  163. omlish/lang/imports/lazy.py +0 -25
  164. omlish/lang/imports/proxy.py +559 -0
  165. omlish/lang/iterables.py +2 -2
  166. omlish/lang/lazyglobals.py +49 -14
  167. omlish/lang/maybes.py +2 -1
  168. omlish/lang/maysync.py +2 -2
  169. omlish/lang/params.py +17 -0
  170. omlish/lang/recursion.py +0 -1
  171. omlish/lang/resources.py +1 -1
  172. omlish/lang/sequences.py +124 -0
  173. omlish/lifecycles/contextmanagers.py +1 -2
  174. omlish/lifecycles/controller.py +1 -2
  175. omlish/lite/abstract.py +54 -24
  176. omlish/lite/asyncs.py +146 -0
  177. omlish/lite/attrops.py +415 -0
  178. omlish/lite/cached.py +57 -1
  179. omlish/lite/contextmanagers.py +4 -4
  180. omlish/lite/dataclasses.py +55 -0
  181. omlish/lite/inject.py +5 -4
  182. omlish/lite/marshal.py +1 -0
  183. omlish/lite/maybes.py +10 -2
  184. omlish/lite/maysync.py +22 -5
  185. omlish/lite/pycharm.py +1 -1
  186. omlish/lite/strings.py +0 -7
  187. omlish/lite/timing.py +6 -3
  188. omlish/lite/typing.py +6 -0
  189. omlish/logs/_amalg.py +8 -0
  190. omlish/logs/all.py +59 -31
  191. omlish/logs/base.py +204 -0
  192. omlish/logs/contexts.py +171 -0
  193. omlish/logs/formatters.py +13 -0
  194. omlish/logs/infos.py +377 -0
  195. omlish/logs/levels.py +97 -0
  196. omlish/logs/modules.py +13 -0
  197. omlish/logs/protocols.py +32 -0
  198. omlish/logs/standard.py +20 -15
  199. omlish/logs/std/configs.py +29 -0
  200. omlish/logs/{filters.py → std/filters.py} +1 -1
  201. omlish/logs/std/formatters.py +25 -0
  202. omlish/logs/std/handlers.py +19 -0
  203. omlish/logs/{json.py → std/json.py} +2 -2
  204. omlish/logs/std/loggers.py +48 -0
  205. omlish/logs/{proxy.py → std/proxy.py} +3 -3
  206. omlish/logs/std/records.py +671 -0
  207. omlish/logs/typed/bindings.py +108 -37
  208. omlish/logs/typed/types.py +17 -1
  209. omlish/logs/typed/values.py +2 -2
  210. omlish/logs/utils.py +60 -4
  211. omlish/logs/warnings.py +8 -0
  212. omlish/manifests/loading.py +8 -1
  213. omlish/marshal/__init__.py +54 -22
  214. omlish/marshal/_dataclasses.py +2774 -0
  215. omlish/marshal/base/configs.py +12 -0
  216. omlish/marshal/base/contexts.py +36 -21
  217. omlish/marshal/base/funcs.py +8 -11
  218. omlish/marshal/base/options.py +8 -0
  219. omlish/marshal/base/registries.py +146 -44
  220. omlish/marshal/base/types.py +40 -16
  221. omlish/marshal/composite/iterables.py +33 -20
  222. omlish/marshal/composite/literals.py +20 -18
  223. omlish/marshal/composite/mappings.py +36 -23
  224. omlish/marshal/composite/maybes.py +29 -19
  225. omlish/marshal/composite/newtypes.py +16 -16
  226. omlish/marshal/composite/optionals.py +14 -14
  227. omlish/marshal/composite/special.py +15 -15
  228. omlish/marshal/composite/unions/literals.py +93 -0
  229. omlish/marshal/composite/unions/primitives.py +103 -0
  230. omlish/marshal/factories/invalidate.py +18 -68
  231. omlish/marshal/factories/method.py +26 -0
  232. omlish/marshal/factories/moduleimport/factories.py +22 -65
  233. omlish/marshal/factories/multi.py +13 -25
  234. omlish/marshal/factories/recursive.py +42 -56
  235. omlish/marshal/factories/typecache.py +29 -74
  236. omlish/marshal/factories/typemap.py +42 -43
  237. omlish/marshal/objects/dataclasses.py +129 -106
  238. omlish/marshal/objects/marshal.py +18 -14
  239. omlish/marshal/objects/namedtuples.py +48 -42
  240. omlish/marshal/objects/unmarshal.py +19 -15
  241. omlish/marshal/polymorphism/marshal.py +9 -11
  242. omlish/marshal/polymorphism/metadata.py +16 -5
  243. omlish/marshal/polymorphism/standard.py +13 -1
  244. omlish/marshal/polymorphism/unions.py +15 -105
  245. omlish/marshal/polymorphism/unmarshal.py +9 -10
  246. omlish/marshal/singular/enums.py +14 -18
  247. omlish/marshal/standard.py +10 -6
  248. omlish/marshal/trivial/any.py +1 -1
  249. omlish/marshal/trivial/forbidden.py +21 -26
  250. omlish/math/fixed.py +2 -2
  251. omlish/metadata.py +23 -1
  252. omlish/os/atomics.py +2 -2
  253. omlish/os/forkhooks.py +4 -0
  254. omlish/os/journald.py +3 -3
  255. omlish/os/pidfiles/pinning.py +2 -2
  256. omlish/reflect/ops.py +9 -0
  257. omlish/reflect/types.py +44 -8
  258. omlish/secrets/marshal.py +1 -1
  259. omlish/secrets/secrets.py +6 -3
  260. omlish/sockets/addresses.py +1 -1
  261. omlish/sockets/server/handlers.py +2 -2
  262. omlish/sockets/server/server.py +4 -3
  263. omlish/sockets/server/ssl.py +2 -2
  264. omlish/specs/jmespath/__init__.py +12 -3
  265. omlish/specs/jmespath/_dataclasses.py +2893 -0
  266. omlish/specs/jmespath/ast.py +1 -1
  267. omlish/specs/jsonrpc/__init__.py +13 -0
  268. omlish/specs/jsonrpc/_marshal.py +32 -23
  269. omlish/specs/jsonrpc/conns.py +10 -7
  270. omlish/specs/jsonschema/_marshal.py +1 -1
  271. omlish/specs/jsonschema/keywords/__init__.py +7 -0
  272. omlish/specs/jsonschema/keywords/_dataclasses.py +1644 -0
  273. omlish/specs/openapi/_marshal.py +31 -22
  274. omlish/sql/__init__.py +15 -20
  275. omlish/sql/{tabledefs/alchemy.py → alchemy/tabledefs.py} +2 -2
  276. omlish/sql/queries/_marshal.py +3 -3
  277. omlish/sql/queries/params.py +1 -1
  278. omlish/sql/queries/rendering.py +1 -1
  279. omlish/sql/tabledefs/_marshal.py +1 -1
  280. omlish/subprocesses/all.py +135 -0
  281. omlish/subprocesses/base.py +8 -3
  282. omlish/subprocesses/editor.py +1 -1
  283. omlish/sync.py +181 -20
  284. omlish/term/alt.py +60 -0
  285. omlish/term/confirm.py +8 -8
  286. omlish/term/pager.py +235 -0
  287. omlish/term/terminfo.py +935 -0
  288. omlish/term/termstate.py +67 -0
  289. omlish/term/vt100/terminal.py +0 -3
  290. omlish/testing/pytest/plugins/asyncs/fixtures.py +4 -1
  291. omlish/testing/pytest/plugins/skips.py +2 -5
  292. omlish/testing/unittest/main.py +3 -3
  293. omlish/text/docwrap/__init__.py +3 -0
  294. omlish/text/docwrap/__main__.py +11 -0
  295. omlish/text/docwrap/api.py +83 -0
  296. omlish/text/docwrap/cli.py +86 -0
  297. omlish/text/docwrap/groups.py +84 -0
  298. omlish/text/docwrap/lists.py +167 -0
  299. omlish/text/docwrap/parts.py +146 -0
  300. omlish/text/docwrap/reflowing.py +106 -0
  301. omlish/text/docwrap/rendering.py +151 -0
  302. omlish/text/docwrap/utils.py +11 -0
  303. omlish/text/docwrap/wrapping.py +59 -0
  304. omlish/text/filecache.py +2 -2
  305. omlish/text/lorem.py +6 -0
  306. omlish/text/parts.py +2 -2
  307. omlish/text/textwrap.py +51 -0
  308. omlish/typedvalues/__init__.py +1 -1
  309. omlish/typedvalues/marshal.py +85 -59
  310. omlish/typedvalues/values.py +2 -1
  311. {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/METADATA +36 -38
  312. {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/RECORD +323 -385
  313. omlish/asyncs/bluelet/LICENSE +0 -6
  314. omlish/asyncs/bluelet/all.py +0 -67
  315. omlish/asyncs/bluelet/api.py +0 -23
  316. omlish/asyncs/bluelet/core.py +0 -178
  317. omlish/asyncs/bluelet/events.py +0 -79
  318. omlish/asyncs/bluelet/files.py +0 -80
  319. omlish/asyncs/bluelet/runner.py +0 -417
  320. omlish/asyncs/bluelet/sockets.py +0 -216
  321. omlish/asyncs/bridge.py +0 -359
  322. omlish/asyncs/utils.py +0 -18
  323. omlish/dataclasses/impl/generation/mangling.py +0 -18
  324. omlish/defs.py +0 -216
  325. omlish/dispatch/_dispatch2.py +0 -69
  326. omlish/dispatch/_dispatch3.py +0 -108
  327. omlish/dynamic.py +0 -219
  328. omlish/formats/json/Json.g4 +0 -77
  329. omlish/formats/json/_antlr/JsonLexer.py +0 -109
  330. omlish/formats/json/_antlr/JsonListener.py +0 -61
  331. omlish/formats/json/_antlr/JsonParser.py +0 -457
  332. omlish/formats/json/_antlr/JsonVisitor.py +0 -42
  333. omlish/formats/json5/Json5.g4 +0 -168
  334. omlish/formats/json5/_antlr/Json5Lexer.py +0 -354
  335. omlish/formats/json5/_antlr/Json5Listener.py +0 -79
  336. omlish/formats/json5/_antlr/Json5Parser.py +0 -617
  337. omlish/formats/json5/_antlr/Json5Visitor.py +0 -52
  338. omlish/funcs/match.py +0 -227
  339. omlish/io/trampoline.py +0 -289
  340. omlish/lang/imports/proxyinit.py +0 -665
  341. omlish/lite/logs.py +0 -4
  342. omlish/lite/reprs.py +0 -85
  343. omlish/logs/abc.py +0 -319
  344. omlish/logs/callers.py +0 -67
  345. omlish/logs/color.py +0 -27
  346. omlish/logs/configs.py +0 -29
  347. omlish/logs/handlers.py +0 -17
  348. omlish/logs/protocol.py +0 -218
  349. omlish/logs/timing.py +0 -58
  350. omlish/marshal/factories/match.py +0 -34
  351. omlish/marshal/factories/simple.py +0 -28
  352. omlish/specs/irc/messages/base.py +0 -49
  353. omlish/specs/irc/messages/formats.py +0 -92
  354. omlish/specs/irc/messages/messages.py +0 -774
  355. omlish/specs/irc/messages/parsing.py +0 -98
  356. omlish/specs/irc/numerics/formats.py +0 -97
  357. omlish/specs/irc/numerics/numerics.py +0 -865
  358. omlish/specs/irc/numerics/types.py +0 -59
  359. omlish/specs/irc/protocol/LICENSE +0 -11
  360. omlish/specs/irc/protocol/__init__.py +0 -61
  361. omlish/specs/irc/protocol/consts.py +0 -6
  362. omlish/specs/irc/protocol/errors.py +0 -30
  363. omlish/specs/irc/protocol/message.py +0 -21
  364. omlish/specs/irc/protocol/nuh.py +0 -55
  365. omlish/specs/irc/protocol/parsing.py +0 -158
  366. omlish/specs/irc/protocol/rendering.py +0 -153
  367. omlish/specs/irc/protocol/tags.py +0 -102
  368. omlish/specs/irc/protocol/utils.py +0 -30
  369. omlish/specs/proto/Protobuf3.g4 +0 -396
  370. omlish/specs/proto/__init__.py +0 -0
  371. omlish/specs/proto/_antlr/Protobuf3Lexer.py +0 -340
  372. omlish/specs/proto/_antlr/Protobuf3Listener.py +0 -448
  373. omlish/specs/proto/_antlr/Protobuf3Parser.py +0 -3909
  374. omlish/specs/proto/_antlr/Protobuf3Visitor.py +0 -257
  375. omlish/specs/proto/_antlr/__init__.py +0 -0
  376. omlish/specs/proto/nodes.py +0 -54
  377. omlish/specs/proto/parsing.py +0 -97
  378. omlish/sql/parsing/Minisql.g4 +0 -292
  379. omlish/sql/parsing/__init__.py +0 -0
  380. omlish/sql/parsing/_antlr/MinisqlLexer.py +0 -322
  381. omlish/sql/parsing/_antlr/MinisqlListener.py +0 -511
  382. omlish/sql/parsing/_antlr/MinisqlParser.py +0 -3763
  383. omlish/sql/parsing/_antlr/MinisqlVisitor.py +0 -292
  384. omlish/sql/parsing/_antlr/__init__.py +0 -0
  385. omlish/sql/parsing/parsing.py +0 -119
  386. omlish/text/antlr/__init__.py +0 -3
  387. omlish/text/antlr/_runtime/BufferedTokenStream.py +0 -305
  388. omlish/text/antlr/_runtime/CommonTokenFactory.py +0 -64
  389. omlish/text/antlr/_runtime/CommonTokenStream.py +0 -90
  390. omlish/text/antlr/_runtime/FileStream.py +0 -30
  391. omlish/text/antlr/_runtime/InputStream.py +0 -90
  392. omlish/text/antlr/_runtime/IntervalSet.py +0 -183
  393. omlish/text/antlr/_runtime/LICENSE.txt +0 -28
  394. omlish/text/antlr/_runtime/LL1Analyzer.py +0 -176
  395. omlish/text/antlr/_runtime/Lexer.py +0 -332
  396. omlish/text/antlr/_runtime/ListTokenSource.py +0 -147
  397. omlish/text/antlr/_runtime/Parser.py +0 -583
  398. omlish/text/antlr/_runtime/ParserInterpreter.py +0 -173
  399. omlish/text/antlr/_runtime/ParserRuleContext.py +0 -189
  400. omlish/text/antlr/_runtime/PredictionContext.py +0 -632
  401. omlish/text/antlr/_runtime/Recognizer.py +0 -150
  402. omlish/text/antlr/_runtime/RuleContext.py +0 -230
  403. omlish/text/antlr/_runtime/StdinStream.py +0 -14
  404. omlish/text/antlr/_runtime/Token.py +0 -158
  405. omlish/text/antlr/_runtime/TokenStreamRewriter.py +0 -258
  406. omlish/text/antlr/_runtime/Utils.py +0 -36
  407. omlish/text/antlr/_runtime/__init__.py +0 -2
  408. omlish/text/antlr/_runtime/_all.py +0 -24
  409. omlish/text/antlr/_runtime/_pygrun.py +0 -174
  410. omlish/text/antlr/_runtime/atn/ATN.py +0 -135
  411. omlish/text/antlr/_runtime/atn/ATNConfig.py +0 -162
  412. omlish/text/antlr/_runtime/atn/ATNConfigSet.py +0 -215
  413. omlish/text/antlr/_runtime/atn/ATNDeserializationOptions.py +0 -27
  414. omlish/text/antlr/_runtime/atn/ATNDeserializer.py +0 -449
  415. omlish/text/antlr/_runtime/atn/ATNSimulator.py +0 -50
  416. omlish/text/antlr/_runtime/atn/ATNState.py +0 -267
  417. omlish/text/antlr/_runtime/atn/ATNType.py +0 -20
  418. omlish/text/antlr/_runtime/atn/LexerATNSimulator.py +0 -573
  419. omlish/text/antlr/_runtime/atn/LexerAction.py +0 -301
  420. omlish/text/antlr/_runtime/atn/LexerActionExecutor.py +0 -146
  421. omlish/text/antlr/_runtime/atn/ParserATNSimulator.py +0 -1664
  422. omlish/text/antlr/_runtime/atn/PredictionMode.py +0 -502
  423. omlish/text/antlr/_runtime/atn/SemanticContext.py +0 -333
  424. omlish/text/antlr/_runtime/atn/Transition.py +0 -271
  425. omlish/text/antlr/_runtime/atn/__init__.py +0 -4
  426. omlish/text/antlr/_runtime/dfa/DFA.py +0 -136
  427. omlish/text/antlr/_runtime/dfa/DFASerializer.py +0 -76
  428. omlish/text/antlr/_runtime/dfa/DFAState.py +0 -129
  429. omlish/text/antlr/_runtime/dfa/__init__.py +0 -4
  430. omlish/text/antlr/_runtime/error/DiagnosticErrorListener.py +0 -111
  431. omlish/text/antlr/_runtime/error/ErrorListener.py +0 -75
  432. omlish/text/antlr/_runtime/error/ErrorStrategy.py +0 -712
  433. omlish/text/antlr/_runtime/error/Errors.py +0 -176
  434. omlish/text/antlr/_runtime/error/__init__.py +0 -4
  435. omlish/text/antlr/_runtime/tree/Chunk.py +0 -33
  436. omlish/text/antlr/_runtime/tree/ParseTreeMatch.py +0 -121
  437. omlish/text/antlr/_runtime/tree/ParseTreePattern.py +0 -75
  438. omlish/text/antlr/_runtime/tree/ParseTreePatternMatcher.py +0 -377
  439. omlish/text/antlr/_runtime/tree/RuleTagToken.py +0 -53
  440. omlish/text/antlr/_runtime/tree/TokenTagToken.py +0 -50
  441. omlish/text/antlr/_runtime/tree/Tree.py +0 -194
  442. omlish/text/antlr/_runtime/tree/Trees.py +0 -114
  443. omlish/text/antlr/_runtime/tree/__init__.py +0 -2
  444. omlish/text/antlr/_runtime/xpath/XPath.py +0 -278
  445. omlish/text/antlr/_runtime/xpath/XPathLexer.py +0 -98
  446. omlish/text/antlr/_runtime/xpath/__init__.py +0 -4
  447. omlish/text/antlr/delimit.py +0 -109
  448. omlish/text/antlr/dot.py +0 -41
  449. omlish/text/antlr/errors.py +0 -14
  450. omlish/text/antlr/input.py +0 -96
  451. omlish/text/antlr/parsing.py +0 -54
  452. omlish/text/antlr/runtime.py +0 -102
  453. omlish/text/antlr/utils.py +0 -38
  454. /omlish/{asyncs/bluelet → cexts}/__init__.py +0 -0
  455. /omlish/{formats/json/_antlr → diag/cmds}/__init__.py +0 -0
  456. /omlish/{formats/json5/_antlr → http/clients/coro}/__init__.py +0 -0
  457. /omlish/{specs/irc → inject/helpers}/__init__.py +0 -0
  458. /omlish/{specs/irc/messages → logs/std}/__init__.py +0 -0
  459. /omlish/logs/{noisy.py → std/noisy.py} +0 -0
  460. /omlish/{specs/irc/numerics → marshal/composite/unions}/__init__.py +0 -0
  461. {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/WHEEL +0 -0
  462. {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/entry_points.txt +0 -0
  463. {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/licenses/LICENSE +0 -0
  464. {omlish-0.0.0.dev423.dist-info → omlish-0.0.0.dev484.dist-info}/top_level.txt +0 -0
@@ -16,6 +16,7 @@ from ...lite.abstract import Abstract
16
16
  from .types import TYPED_LOGGER_VALUE_OR_PROVIDER_OR_ABSENT_TYPES
17
17
  from .types import TYPED_LOGGER_VALUE_OR_PROVIDER_TYPES
18
18
  from .types import DefaultTypedLoggerValue
19
+ from .types import MultiTypedLoggerValue
19
20
  from .types import TypedLoggerConstFieldValue
20
21
  from .types import TypedLoggerField
21
22
  from .types import TypedLoggerFieldValue
@@ -92,6 +93,9 @@ class TypedLoggerBindings(Abstract):
92
93
  accept_value: ta.Callable[[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent], None]
93
94
  accept_values: ta.Callable[[ta.Iterable[ta.Tuple[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent]]], None] # noqa
94
95
 
96
+ accept_multi_value: ta.Callable[[ta.Type[MultiTypedLoggerValue], MultiTypedLoggerValue], None] # noqa
97
+ accept_multi_values: ta.Callable[[ta.Iterable[ta.Tuple[ta.Type[MultiTypedLoggerValue], MultiTypedLoggerValue]]], None] # noqa
98
+
95
99
  accept_const_values: ta.Callable[[ta.Iterable[ta.Tuple[ta.Type[TypedLoggerValue], TypedLoggerValueOrAbsent]]], None] # noqa
96
100
 
97
101
  accept_value_wrapping: ta.Callable[[ta.Union['TypedLoggerValueWrapper', 'FullTypedLoggerBindings._ValueWrappingState']], None] # noqa
@@ -110,19 +114,11 @@ class FullTypedLoggerBindings(TypedLoggerBindings):
110
114
  self,
111
115
  *items: TypedLoggerBindingItem,
112
116
  override: bool = False,
117
+ override_multis: bool = False,
113
118
  ) -> None:
114
119
  kd: ta.Dict[str, TypedLoggerFieldValue] = {}
115
120
  dup_kd: ta.Dict[str, ta.List[TypedLoggerFieldValue]] = {}
116
121
 
117
- vd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent] = {}
118
- dup_vd: ta.Dict[ta.Type[TypedLoggerValue], ta.List[TypedLoggerValueOrProviderOrAbsent]] = {}
119
-
120
- cvd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrAbsent] = {}
121
-
122
- vwl: ta.List[ta.Union[TypedLoggerValueWrapper, FullTypedLoggerBindings._ValueWrappingState]] = []
123
-
124
- vst: TypedLoggerBindings._Visitor
125
-
126
122
  if not override:
127
123
  def add_kd(kd_k: str, kd_v: TypedLoggerFieldValue) -> None: # noqa
128
124
  if kd_k in kd:
@@ -130,42 +126,71 @@ class FullTypedLoggerBindings(TypedLoggerBindings):
130
126
  else:
131
127
  kd[kd_k] = kd_v
132
128
 
129
+ def add_kds(it: 'ta.Iterable[ta.Tuple[str, TypedLoggerFieldValue]]') -> None: # noqa
130
+ collections.deque(itertools.starmap(add_kd, it), maxlen=0)
131
+
132
+ else:
133
+ add_kd = kd.__setitem__ # type: ignore[assignment]
134
+ add_kds = kd.update # type: ignore[assignment]
135
+
136
+ #
137
+
138
+ vd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent] = {}
139
+ dup_vd: ta.Dict[ta.Type[TypedLoggerValue], ta.List[TypedLoggerValueOrProviderOrAbsent]] = {}
140
+
141
+ if not override:
133
142
  def add_vd(vd_k: 'ta.Type[TypedLoggerValue]', vd_v: TypedLoggerValueOrProviderOrAbsent) -> None: # noqa
134
143
  if vd_k in vd:
135
144
  dup_vd.setdefault(vd_k, []).append(vd_v)
136
145
  else:
137
146
  vd[vd_k] = vd_v
138
147
 
139
- def add_kds(it: 'ta.Iterable[ta.Tuple[str, TypedLoggerFieldValue]]') -> None: # noqa
140
- collections.deque(itertools.starmap(add_kd, it), maxlen=0)
141
-
142
148
  def add_vds(it: 'ta.Iterable[ta.Tuple[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent]]') -> None: # noqa
143
149
  collections.deque(itertools.starmap(add_vd, it), maxlen=0)
144
150
 
145
- vst = TypedLoggerBindings._Visitor( # noqa
146
- add_kd,
147
- add_kds,
151
+ else:
152
+ add_vd = vd.__setitem__ # type: ignore[assignment]
153
+ add_vds = vd.update # type: ignore[assignment]
154
+
155
+ #
148
156
 
149
- add_vd,
150
- add_vds,
157
+ mvd: ta.Dict[ta.Type[MultiTypedLoggerValue], ta.List[MultiTypedLoggerValue]] = {}
151
158
 
152
- cvd.update,
159
+ if override_multis:
160
+ def add_mvd(mvd_k: 'ta.Type[MultiTypedLoggerValue]', mvd_v: MultiTypedLoggerValue) -> None: # noqa
161
+ try:
162
+ mvd_l = mvd[mvd_k]
163
+ except KeyError:
164
+ mvd_l = mvd[mvd_k] = []
165
+ mvd_l.append(mvd_v)
153
166
 
154
- vwl.append,
155
- )
167
+ def add_mvds(it: 'ta.Iterable[ta.Tuple[ta.Type[MultiTypedLoggerValue], MultiTypedLoggerValue]]') -> None:
168
+ collections.deque(itertools.starmap(add_mvd, it), maxlen=0)
156
169
 
157
170
  else:
158
- vst = TypedLoggerBindings._Visitor( # noqa
159
- kd.__setitem__,
160
- kd.update,
171
+ add_mvd = mvd.__setitem__ # type: ignore[assignment]
172
+ add_mvds = mvd.update # type: ignore[assignment]
161
173
 
162
- vd.__setitem__,
163
- vd.update,
174
+ #
164
175
 
165
- cvd.update,
176
+ cvd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrAbsent] = {}
166
177
 
167
- vwl.append,
168
- )
178
+ vwl: ta.List[ta.Union[TypedLoggerValueWrapper, FullTypedLoggerBindings._ValueWrappingState]] = []
179
+
180
+ vst = TypedLoggerBindings._Visitor( # noqa
181
+ add_kd,
182
+ add_kds,
183
+
184
+ add_vd,
185
+ add_vds,
186
+
187
+ add_mvd,
188
+ add_mvds,
189
+
190
+ cvd.update,
191
+
192
+ vwl.append,
193
+ )
169
194
 
170
195
  for o in items:
171
196
  o._typed_logger_visit_bindings(vst) # noqa
@@ -288,18 +313,22 @@ class ChainTypedLoggerBindings(TypedLoggerBindings):
288
313
  kd: ta.Dict[str, TypedLoggerFieldValue] = {}
289
314
  dup_kd: ta.Dict[str, ta.List[TypedLoggerFieldValue]] = {}
290
315
 
291
- vd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent] = {}
292
- dup_vd: ta.Dict[ta.Type[TypedLoggerValue], ta.List[TypedLoggerValueOrProviderOrAbsent]] = {}
293
-
294
- pcv = dict(parent.const_value_map)
295
- cvd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrAbsent] = {}
296
-
297
316
  def add_kd(kd_k: str, kd_v: TypedLoggerFieldValue) -> None: # noqa
298
317
  if kd_k in kd:
299
318
  dup_kd.setdefault(kd_k, []).append(kd_v)
300
319
  else:
301
320
  kd[kd_k] = kd_v
302
321
 
322
+ def add_kds(it: 'ta.Iterable[ta.Tuple[str, TypedLoggerFieldValue]]') -> None: # noqa
323
+ collections.deque(itertools.starmap(add_kd, it), maxlen=0)
324
+
325
+ #
326
+
327
+ vd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent] = {}
328
+ dup_vd: ta.Dict[ta.Type[TypedLoggerValue], ta.List[TypedLoggerValueOrProviderOrAbsent]] = {}
329
+
330
+ pcv = dict(parent.const_value_map)
331
+
303
332
  def add_vd(vd_k: 'ta.Type[TypedLoggerValue]', vd_v: TypedLoggerValueOrProviderOrAbsent) -> None: # noqa
304
333
  if vd_k in vd:
305
334
  dup_vd.setdefault(vd_k, []).append(vd_v)
@@ -307,12 +336,27 @@ class ChainTypedLoggerBindings(TypedLoggerBindings):
307
336
  vd[vd_k] = vd_v
308
337
  pcv.pop(vd_k, None)
309
338
 
310
- def add_kds(it: 'ta.Iterable[ta.Tuple[str, TypedLoggerFieldValue]]') -> None: # noqa
311
- collections.deque(itertools.starmap(add_kd, it), maxlen=0)
312
-
313
339
  def add_vds(it: 'ta.Iterable[ta.Tuple[ta.Type[TypedLoggerValue], TypedLoggerValueOrProviderOrAbsent]]') -> None: # noqa
314
340
  collections.deque(itertools.starmap(add_vd, it), maxlen=0)
315
341
 
342
+ #
343
+
344
+ mvd: ta.Dict[ta.Type[MultiTypedLoggerValue], ta.List[MultiTypedLoggerValue]] = {}
345
+
346
+ def add_mvd(mvd_k: 'ta.Type[MultiTypedLoggerValue]', mvd_v: MultiTypedLoggerValue) -> None: # noqa
347
+ try:
348
+ mvd_l = mvd[mvd_k]
349
+ except KeyError:
350
+ mvd_l = mvd[mvd_k] = []
351
+ mvd_l.append(mvd_v)
352
+
353
+ def add_mvds(it: 'ta.Iterable[ta.Tuple[ta.Type[MultiTypedLoggerValue], MultiTypedLoggerValue]]') -> None:
354
+ collections.deque(itertools.starmap(add_mvd, it), maxlen=0)
355
+
356
+ #
357
+
358
+ cvd: ta.Dict[ta.Type[TypedLoggerValue], TypedLoggerValueOrAbsent] = {}
359
+
316
360
  def bad_type(*args, **kwargs): # noqa
317
361
  raise ChainTypedLoggerBindingsUnhandledItemError
318
362
 
@@ -323,6 +367,9 @@ class ChainTypedLoggerBindings(TypedLoggerBindings):
323
367
  add_vd,
324
368
  add_vds,
325
369
 
370
+ add_mvd,
371
+ add_mvds,
372
+
326
373
  cvd.update,
327
374
 
328
375
  bad_type,
@@ -448,6 +495,30 @@ _AS_TYPED_LOGGER_BINDINGS_FIELD_VALUE_DIRECT_TYPES: ta.Tuple[type, ...] = (
448
495
  )
449
496
 
450
497
 
498
+ # @ta.final
499
+ # class TypedLoggerBindingsBuilder:
500
+ # def __init__(
501
+ # self,
502
+ # *,
503
+ # add_default_keys: bool = False,
504
+ # default_key_filter: ta.Optional[ta.Callable[[str], bool]] = None,
505
+ #
506
+ # add_default_values: bool = False,
507
+ # default_value_filter: ta.Optional[ta.Callable[[ta.Type[DefaultTypedLoggerValue]], bool]] = None,
508
+ #
509
+ # value_wrapper: ta.Optional[TypedLoggerValueWrapperFn] = None,
510
+ # ) -> None:
511
+ # self._add_default_keys = add_default_keys
512
+ # self._default_key_filter = default_key_filter
513
+ #
514
+ # self._add_default_values = add_default_values
515
+ # self._default_value_filter = default_value_filter
516
+ #
517
+ # self._value_wrapper = value_wrapper
518
+ #
519
+ # self._lst: ta.List[TypedLoggerBindingItem] = []
520
+
521
+
451
522
  def as_typed_logger_bindings(
452
523
  *objs: CanTypedLoggerBinding,
453
524
 
@@ -86,6 +86,7 @@ class TypedLoggerValue(Abstract, ta.Generic[T]):
86
86
  def of(cls: ta.Type[TypedLoggerValueT], v: ta.Any) -> ta.Union[TypedLoggerValueT, AbsentTypedLoggerValue]:
87
87
  return cls(v) if v is not ABSENT_TYPED_LOGGER_VALUE else ABSENT_TYPED_LOGGER_VALUE
88
88
 
89
+ @ta.final
89
90
  @property
90
91
  def v(self) -> T:
91
92
  return self._v
@@ -180,7 +181,6 @@ class TypedLoggerValue(Abstract, ta.Generic[T]):
180
181
  def _typed_logger_unwrap_field_value(self, ctx: 'TypedLoggerContext') -> UnwrappedTypedLoggerFieldValue: # noqa
181
182
  return self._v
182
183
 
183
- @ta.final
184
184
  def _typed_logger_visit_bindings(self, vst: 'TypedLoggerBindings._Visitor') -> None: # noqa
185
185
  vst.accept_values(((type(self), self),))
186
186
  vst.accept_const_values(((type(self), self),))
@@ -232,6 +232,22 @@ class DefaultTypedLoggerValue(TypedLoggerValue[T], Abstract):
232
232
  return (cls.default_provider().provide_value(ctx),)
233
233
 
234
234
 
235
+ class MultiTypedLoggerValue(TypedLoggerValue[T], Abstract):
236
+ """
237
+ Note: There is no DefaultMultiTypedLoggerValue.
238
+ """
239
+
240
+ @classmethod
241
+ @abc.abstractmethod
242
+ def merge_values(cls, *values: T) -> T:
243
+ raise NotImplementedError
244
+
245
+ #
246
+
247
+ def _typed_logger_visit_bindings(self, vst: 'TypedLoggerBindings._Visitor') -> None: # noqa
248
+ vst.accept_multi_values(((type(self), self),))
249
+
250
+
235
251
  ##
236
252
 
237
253
 
@@ -7,7 +7,7 @@ import threading
7
7
  import time
8
8
  import typing as ta
9
9
 
10
- from ...logs.callers import LoggingCaller
10
+ from ...logs.infos import LoggingContextInfos
11
11
  from ...logs.levels import LogLevel
12
12
  from .types import ABSENT_TYPED_LOGGER_VALUE
13
13
  from .types import AbsentTypedLoggerValue
@@ -57,7 +57,7 @@ class StandardTypedLoggerValues:
57
57
 
58
58
  #
59
59
 
60
- class Caller(TypedLoggerValue[LoggingCaller]):
60
+ class Caller(TypedLoggerValue[LoggingContextInfos.Caller]):
61
61
  pass
62
62
 
63
63
  #
omlish/logs/utils.py CHANGED
@@ -1,14 +1,17 @@
1
+ # ruff: noqa: UP006 UP007 UP045
2
+ # @omlish-lite
1
3
  import functools
2
4
  import logging
5
+ import time
6
+ import typing as ta
3
7
 
4
-
5
- ##
8
+ from .protocols import LoggerLike
6
9
 
7
10
 
8
- _log = logging.getLogger(__name__)
11
+ ##
9
12
 
10
13
 
11
- def error_logging(log=_log): # noqa
14
+ def exception_logging(log): # noqa
12
15
  def outer(fn):
13
16
  @functools.wraps(fn)
14
17
  def inner(*args, **kwargs):
@@ -21,3 +24,56 @@ def error_logging(log=_log): # noqa
21
24
  return inner
22
25
 
23
26
  return outer
27
+
28
+
29
+ ##
30
+
31
+
32
+ class LogTimingContext:
33
+ DEFAULT_LOG: ta.ClassVar[ta.Optional[LoggerLike]] = None
34
+
35
+ class _NOT_SPECIFIED: # noqa
36
+ def __new__(cls, *args, **kwargs): # noqa
37
+ raise TypeError
38
+
39
+ def __init__(
40
+ self,
41
+ description: str,
42
+ *,
43
+ log: ta.Union[LoggerLike, ta.Type[_NOT_SPECIFIED], None] = _NOT_SPECIFIED, # noqa
44
+ level: int = logging.DEBUG,
45
+ ) -> None:
46
+ super().__init__()
47
+
48
+ self._description = description
49
+ if log is self._NOT_SPECIFIED:
50
+ log = self.DEFAULT_LOG # noqa
51
+ self._log: ta.Optional[LoggerLike] = log # type: ignore
52
+ self._level = level
53
+
54
+ def set_description(self, description: str) -> 'LogTimingContext':
55
+ self._description = description
56
+ return self
57
+
58
+ _begin_time: float
59
+ _end_time: float
60
+
61
+ def __enter__(self) -> 'LogTimingContext':
62
+ self._begin_time = time.time()
63
+
64
+ if self._log is not None:
65
+ self._log.log(self._level, f'Begin : {self._description}') # noqa
66
+
67
+ return self
68
+
69
+ def __exit__(self, exc_type, exc_val, exc_tb):
70
+ self._end_time = time.time()
71
+
72
+ if self._log is not None:
73
+ self._log.log(
74
+ self._level,
75
+ f'End : {self._description} - {self._end_time - self._begin_time:0.2f} s elapsed',
76
+ )
77
+
78
+
79
+ log_timing_context = LogTimingContext
@@ -0,0 +1,8 @@
1
+ # @omlish-lite
2
+
3
+
4
+ ##
5
+
6
+
7
+ class LoggingSetupWarning(Warning):
8
+ pass
@@ -8,6 +8,12 @@ TODO:
8
8
  - TypeMap style weak cache of issubclass queries
9
9
  - wait.. lazily load the class for virtual subclass queries? xor support virtual bases?
10
10
  - weakref class dict keys?
11
+ - cheap_discover_package_root_dirs: Seq[str] | None = None or smth
12
+ - maaaybe.. add an EnvVar? OMLISH_MANIFEST_ROOT_DIRS? if set to : delimited, turns off package disco and overrides
13
+ scan_root_dirs
14
+ - currently the cli cant subprocess itself and keep manifests working
15
+ - EnvVar cls is already lite
16
+ - can discover_packages deadlock with concurrent / multithreaded imports?
11
17
  """
12
18
  import dataclasses as dc
13
19
  import importlib.machinery
@@ -411,6 +417,7 @@ class ManifestLoader:
411
417
  def _read_package_file_text(cls, package_name: str, file_name: str) -> ta.Optional[str]:
412
418
  # importlib.resources.files actually imports the package - to avoid this, if possible, the file is read straight
413
419
  # off the filesystem.
420
+ # FIXME: find_spec *still* imports the parent package to get __path__ to feed to _find_spec...
414
421
  spec = importlib.util.find_spec(package_name)
415
422
  if (
416
423
  spec is not None and
@@ -432,7 +439,7 @@ class ManifestLoader:
432
439
  return None
433
440
  return t.read_text('utf-8')
434
441
 
435
- MANIFESTS_FILE_NAME: ta.ClassVar[str] = '.manifests.json'
442
+ MANIFESTS_FILE_NAME: ta.ClassVar[str] = '.omlish-manifests.json'
436
443
 
437
444
  @classmethod
438
445
  def _read_package_raw_manifests(cls, package_name: str) -> ta.Optional[ta.Sequence[Manifest]]:
@@ -1,14 +1,24 @@
1
1
  # ruff: noqa: I001
2
2
  """
3
3
  TODO:
4
- - redacted
5
- - strongly typed MarshalerFactory base class?
6
- - strongly typed Composite/Cached Marshaler/Unmarshaler factories - footgun
7
- - streaming? Start/EndObject, etc..
8
- - lang.Marker - class name, handle type[Foo]
9
- - can't disambiguate from str - can't coexist in bare union
10
- - factories being free MatchFns does more harm than good - in practice these are such big guns you want to write a
11
- class body if only ceremonially
4
+ - streaming?
5
+ - datatypes
6
+ - redacted
7
+ - lang.Marker - class name, handle type[Foo]
8
+ - pathlib.Path
9
+ - decimal.Decimal
10
+ - datetime.date, datetime.time
11
+ - ipaddress
12
+ - numpy types
13
+ - jackson switches
14
+ - accept_case_insensitive_enums
15
+ - accept_case_insensitive_properties
16
+ - accept_case_insensitive_values
17
+ - allow_coercion_of_scalars
18
+ - use_base_type_as_default_impl
19
+ - codegen
20
+ - context-local switches
21
+ - mutable_collections
12
22
  - simple lite interop like inj - alt ObjMarshalerManager impl for Context
13
23
 
14
24
  See:
@@ -16,6 +26,8 @@ See:
16
26
  - https://github.com/jcrist/msgspec
17
27
  - https://github.com/Fatal1ty/mashumaro
18
28
  - https://github.com/Kotlin/kotlinx.serialization/blob/master/docs/serializers.md#custom-serializers
29
+ - https://github.com/yukinarit/pyserde
30
+ - https://github.com/FasterXML/jackson
19
31
  """
20
32
  from .. import dataclasses as _dc # noqa
21
33
 
@@ -32,16 +44,22 @@ _dc.init_package(
32
44
  from .. import lang as _lang # noqa
33
45
 
34
46
 
35
- with _lang.auto_proxy_init(globals()) as _api_cap:
47
+ with _lang.auto_proxy_init(globals()):
36
48
  ##
37
49
 
38
50
  from .base.configs import ( # noqa
39
51
  Config,
52
+ Configs,
53
+
40
54
  ConfigRegistry,
41
55
  )
42
56
 
43
57
  from .base.contexts import ( # noqa
44
58
  BaseContext,
59
+
60
+ MarshalFactoryContext,
61
+ UnmarshalFactoryContext,
62
+
45
63
  MarshalContext,
46
64
  UnmarshalContext,
47
65
  )
@@ -96,19 +114,35 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
96
114
  IterableUnmarshaler,
97
115
  )
98
116
 
117
+ from .composite.optionals import ( # noqa
118
+ OptionalMarshaler,
119
+ OptionalUnmarshaler,
120
+ )
121
+
122
+ from .composite.unions.literals import ( # noqa
123
+ LITERAL_UNION_TYPES,
124
+ LiteralUnionMarshaler,
125
+ LiteralUnionMarshalerFactory,
126
+ LiteralUnionUnmarshaler,
127
+ LiteralUnionUnmarshalerFactory,
128
+ )
129
+
130
+ from .composite.unions.primitives import ( # noqa
131
+ PRIMITIVE_UNION_TYPES,
132
+ PrimitiveUnionMarshaler,
133
+ PrimitiveUnionMarshalerFactory,
134
+ PrimitiveUnionUnmarshaler,
135
+ PrimitiveUnionUnmarshalerFactory,
136
+ )
137
+
99
138
  from .composite.wrapped import ( # noqa
100
139
  WrappedMarshaler,
101
140
  WrappedUnmarshaler,
102
141
  )
103
142
 
104
- from .factories.simple import ( # noqa
105
- SimpleMarshalerFactory,
106
- SimpleUnmarshalerFactory,
107
- )
108
-
109
- from .factories.match import ( # noqa
110
- MarshalerFactoryMatchClass,
111
- UnmarshalerFactoryMatchClass,
143
+ from .factories.method import ( # noqa
144
+ MarshalerFactoryMethodClass,
145
+ UnmarshalerFactoryMethodClass,
112
146
  )
113
147
 
114
148
  from .factories.moduleimport.configs import ( # noqa
@@ -180,6 +214,7 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
180
214
  )
181
215
 
182
216
  from .polymorphism.metadata import ( # noqa
217
+ AutoStripSuffix,
183
218
  FieldTypeTagging,
184
219
  Impl,
185
220
  Impls,
@@ -195,13 +230,8 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
195
230
  )
196
231
 
197
232
  from .polymorphism.unions import ( # noqa
198
- PRIMITIVE_UNION_TYPES,
199
233
  PolymorphismUnionMarshalerFactory,
200
234
  PolymorphismUnionUnmarshalerFactory,
201
- PrimitiveUnionMarshaler,
202
- PrimitiveUnionMarshalerFactory,
203
- PrimitiveUnionUnmarshaler,
204
- PrimitiveUnionUnmarshalerFactory,
205
235
  )
206
236
 
207
237
  from .polymorphism.unmarshal import ( # noqa
@@ -213,6 +243,7 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
213
243
  from .singular.base64 import ( # noqa
214
244
  BASE64_MARSHALER_FACTORY,
215
245
  BASE64_UNMARSHALER_FACTORY,
246
+ Base64MarshalerUnmarshaler,
216
247
  )
217
248
 
218
249
  from .singular.primitives import ( # noqa
@@ -221,6 +252,7 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
221
252
 
222
253
  from .trivial.forbidden import ( # noqa
223
254
  ForbiddenTypeMarshalerFactory,
255
+ ForbiddenTypeMarshalerFactoryUnmarshalerFactory,
224
256
  ForbiddenTypeUnmarshalerFactory,
225
257
  )
226
258