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
omlish/inject/binder.py CHANGED
@@ -11,14 +11,10 @@ from .bindings import Binding
11
11
  from .eagers import Eager
12
12
  from .elements import Element
13
13
  from .elements import Elements
14
- from .elements import as_elements
15
14
  from .keys import Key
16
15
  from .keys import as_key
17
- from .multis import MapBinding
18
- from .multis import SetBinding
19
- from .multis import is_map_multi_key
20
- from .multis import is_set_multi_key
21
16
  from .privates import Expose
17
+ from .providers import AsyncFnProvider
22
18
  from .providers import ConstProvider
23
19
  from .providers import CtorProvider
24
20
  from .providers import FnProvider
@@ -26,13 +22,12 @@ from .providers import LinkProvider
26
22
  from .providers import Provider
27
23
  from .scopes import SCOPE_ALIASES
28
24
  from .scopes import Singleton
29
- from .tags import Id
30
25
  from .types import Scope
31
26
  from .types import Unscoped
32
27
 
33
28
 
34
29
  if ta.TYPE_CHECKING:
35
- from .impl.inspect import inspect as _inspect
30
+ from .impl import inspect as _inspect
36
31
  else:
37
32
  _inspect = lang.proxy_import('.impl.inspect', __package__)
38
33
 
@@ -83,6 +78,8 @@ def bind(
83
78
  *,
84
79
  tag: ta.Any = None,
85
80
 
81
+ to_provider: Provider | None = None,
82
+ to_async_fn: ta.Any = None,
86
83
  to_fn: ta.Any = None,
87
84
  to_ctor: ta.Any = None,
88
85
  to_const: ta.Any = None,
@@ -102,6 +99,8 @@ def bind(
102
99
  ##
103
100
 
104
101
  has_to = (
102
+ to_provider is not None or
103
+ to_async_fn is not None or
105
104
  to_fn is not None or
106
105
  to_ctor is not None or
107
106
  to_const is not None or
@@ -137,6 +136,10 @@ def bind(
137
136
  ##
138
137
 
139
138
  providers: list[Provider] = []
139
+ if to_provider is not None:
140
+ providers.append(to_provider)
141
+ if to_async_fn is not None:
142
+ providers.append(AsyncFnProvider(to_async_fn))
140
143
  if to_fn is not None:
141
144
  providers.append(FnProvider(to_fn))
142
145
  if to_ctor is not None:
@@ -186,45 +189,3 @@ def bind(
186
189
  return elements[0]
187
190
  else:
188
191
  return Elements(frozenset(elements))
189
-
190
-
191
- ##
192
-
193
-
194
- def bind_set_entry_const(
195
- multi_key: ta.Any,
196
- obj: ta.Any,
197
- *,
198
- tag: ta.Any | None = None,
199
- ) -> Elements:
200
- multi_key = as_key(multi_key)
201
- check.arg(is_set_multi_key(multi_key))
202
-
203
- if tag is None:
204
- tag = Id(id(obj), tag=multi_key.tag)
205
- obj_key: Key = Key(type(obj), tag=tag)
206
-
207
- return as_elements(
208
- bind(obj_key, to_const=obj),
209
- SetBinding(multi_key, obj_key),
210
- )
211
-
212
-
213
- def bind_map_entry_const(
214
- multi_key: ta.Any,
215
- map_key: ta.Any,
216
- obj: ta.Any,
217
- *,
218
- tag: ta.Any | None = None,
219
- ) -> Elements:
220
- multi_key = as_key(multi_key)
221
- check.arg(is_map_multi_key(multi_key))
222
-
223
- if tag is None:
224
- tag = Id(id(obj), tag=multi_key.tag)
225
- obj_key: Key = Key(type(obj), tag=tag)
226
-
227
- return as_elements(
228
- bind(obj_key, to_const=obj),
229
- MapBinding(multi_key, map_key, obj_key),
230
- )
omlish/inject/elements.py CHANGED
@@ -6,6 +6,12 @@ from .. import lang
6
6
  from .impl.origins import HasOriginsImpl
7
7
 
8
8
 
9
+ if ta.TYPE_CHECKING:
10
+ from .impl import elements as _elements
11
+ else:
12
+ _elements = lang.proxy_import('.impl.elements', __package__)
13
+
14
+
9
15
  ##
10
16
 
11
17
 
@@ -64,3 +70,24 @@ def as_elements(*args: Elemental) -> Elements:
64
70
  es if es else None,
65
71
  cs if cs else None,
66
72
  )
73
+
74
+
75
+ def iter_elements(*args: Elemental) -> ta.Iterator[Element]:
76
+ for a in args:
77
+ if isinstance(a, Element):
78
+ yield a
79
+ elif isinstance(a, (Elements, ElementGenerator)):
80
+ yield from a
81
+ else:
82
+ raise TypeError(a)
83
+
84
+
85
+ ##
86
+
87
+
88
+ class CollectedElements(lang.PackageSealed, lang.Abstract):
89
+ pass
90
+
91
+
92
+ def collect_elements(es: Elements | CollectedElements) -> CollectedElements:
93
+ return _elements.collect_elements(es)
@@ -1,8 +1,8 @@
1
1
  import typing as ta
2
2
 
3
- from .. import dataclasses as dc
4
- from .. import lang
5
- from .impl.origins import HasOriginsImpl
3
+ from ... import dataclasses as dc
4
+ from ... import lang
5
+ from ..impl.origins import HasOriginsImpl
6
6
 
7
7
 
8
8
  T = ta.TypeVar('T')
@@ -1,7 +1,7 @@
1
1
  import typing as ta
2
2
 
3
- from .. import dataclasses as dc
4
- from .types import Tag
3
+ from ... import dataclasses as dc
4
+ from ..types import Tag
5
5
 
6
6
 
7
7
  ##
@@ -0,0 +1,143 @@
1
+ import typing as ta
2
+
3
+ from ... import cached
4
+ from ... import check
5
+ from ... import dataclasses as dc
6
+ from ... import lang
7
+ from ... import reflect as rfl
8
+ from ..binder import bind
9
+ from ..elements import Elements
10
+ from ..elements import as_elements
11
+ from ..inspect import KwargsTarget
12
+ from ..keys import Key
13
+ from ..keys import as_key
14
+ from ..multis import MapBinding
15
+ from ..multis import SetBinder
16
+ from ..multis import SetBinding
17
+ from ..multis import is_map_multi_key
18
+ from ..multis import is_set_multi_key
19
+ from ..providers import FnProvider
20
+ from .id import Id
21
+
22
+
23
+ ItemT = ta.TypeVar('ItemT')
24
+
25
+
26
+ ##
27
+
28
+
29
+ def bind_set_entry_const(
30
+ multi_key: ta.Any,
31
+ obj: ta.Any,
32
+ *,
33
+ tag: ta.Any | None = None,
34
+ ) -> Elements:
35
+ multi_key = as_key(multi_key)
36
+ check.arg(is_set_multi_key(multi_key))
37
+
38
+ if tag is None:
39
+ tag = Id(id(obj), tag=multi_key.tag)
40
+ obj_key: Key = Key(type(obj), tag=tag)
41
+
42
+ return as_elements(
43
+ bind(obj_key, to_const=obj),
44
+ SetBinding(multi_key, obj_key),
45
+ )
46
+
47
+
48
+ def bind_map_entry_const(
49
+ multi_key: ta.Any,
50
+ map_key: ta.Any,
51
+ obj: ta.Any,
52
+ *,
53
+ tag: ta.Any | None = None,
54
+ ) -> Elements:
55
+ multi_key = as_key(multi_key)
56
+ check.arg(is_map_multi_key(multi_key))
57
+
58
+ if tag is None:
59
+ tag = Id(id(obj), tag=multi_key.tag)
60
+ obj_key: Key = Key(type(obj), tag=tag)
61
+
62
+ return as_elements(
63
+ bind(obj_key, to_const=obj),
64
+ MapBinding(multi_key, map_key, obj_key),
65
+ )
66
+
67
+
68
+ ##
69
+
70
+
71
+ @ta.final
72
+ class ItemsBinderHelper(ta.Generic[ItemT]):
73
+ def __init__(self, items_cls: ta.Any) -> None:
74
+ self._items_cls = items_cls
75
+
76
+ @cached.property
77
+ def _item_rty(self) -> rfl.Type:
78
+ rty = check.isinstance(rfl.type_(rfl.get_orig_class(self)), rfl.Generic)
79
+ check.is_(rty.cls, self.__class__)
80
+ return check.single(rty.args)
81
+
82
+ @dc.dataclass(frozen=True, eq=False)
83
+ class _ItemsBox:
84
+ vs: ta.Sequence
85
+
86
+ @cached.property
87
+ def _items_box(self) -> type[_ItemsBox]:
88
+ if isinstance(item_rty := self._item_rty, type):
89
+ sfx = item_rty.__qualname__
90
+ else:
91
+ sfx = str(item_rty).replace("'", '')
92
+
93
+ return lang.new_type( # noqa
94
+ f'{ItemsBinderHelper._ItemsBox.__qualname__}${sfx}@{id(self):x}',
95
+ (ItemsBinderHelper._ItemsBox,),
96
+ {},
97
+ )
98
+
99
+ @cached.property
100
+ def _set_key(self) -> Key:
101
+ return as_key(ta.AbstractSet[self._item_rty]) # type: ignore
102
+
103
+ def bind_item_consts(self, *items: ItemT) -> Elements:
104
+ return as_elements(
105
+ bind_set_entry_const(self._set_key, self._items_box(items)),
106
+ )
107
+
108
+ @dc.dataclass(frozen=True, eq=False)
109
+ @dc.extra_class_params(repr_id=True)
110
+ class _ItemTag:
111
+ pass
112
+
113
+ def bind_item(self, **kwargs: ta.Any) -> Elements:
114
+ tag = ItemsBinderHelper._ItemTag()
115
+ item_key: Key = Key(ta.Any, tag=tag)
116
+ items_box_key: Key = Key(self._items_box, tag=tag)
117
+ return as_elements(
118
+ bind(item_key, **kwargs),
119
+ bind(
120
+ items_box_key,
121
+ to_provider=FnProvider(KwargsTarget.of(
122
+ lambda v: self._items_box([v]),
123
+ v=item_key,
124
+ )),
125
+ ),
126
+ SetBinding(self._set_key, items_box_key),
127
+ )
128
+
129
+ def bind_items_provider(self, **kwargs: ta.Any) -> Elements:
130
+ return as_elements(
131
+ SetBinder[self._item_rty](), # type: ignore
132
+ bind(
133
+ self._items_cls,
134
+ to_provider=FnProvider(KwargsTarget.of(
135
+ lambda s: self._items_cls([v for i in s for v in i.vs]),
136
+ s=self._set_key,
137
+ )),
138
+ **kwargs,
139
+ ),
140
+ )
141
+
142
+
143
+ items_binder_helper = ItemsBinderHelper
@@ -0,0 +1,54 @@
1
+ import typing as ta
2
+
3
+ from ... import cached
4
+ from ... import dataclasses as dc
5
+ from ..binder import bind
6
+ from ..elements import Elemental
7
+ from ..keys import Key
8
+ from ..keys import as_key
9
+ from ..privates import private
10
+
11
+
12
+ ##
13
+
14
+
15
+ @ta.final
16
+ class WrapperBinderHelper:
17
+ def __init__(self, key: ta.Any) -> None:
18
+ self._key = as_key(key)
19
+ self._root = WrapperBinderHelper._Root()
20
+ self._top = WrapperBinderHelper._Level(self._root, 0)
21
+
22
+ @dc.dataclass(frozen=True, eq=False)
23
+ @dc.extra_class_params(repr_id=True)
24
+ class _Root:
25
+ pass
26
+
27
+ @dc.dataclass(frozen=True)
28
+ class _Level:
29
+ root: 'WrapperBinderHelper._Root'
30
+ level: int
31
+
32
+ def next(self) -> 'WrapperBinderHelper._Level':
33
+ return WrapperBinderHelper._Level(self.root, self.level + 1)
34
+
35
+ @cached.property
36
+ def key(self) -> Key:
37
+ return Key(ta.Any, tag=self)
38
+
39
+ @property
40
+ def top(self) -> Key:
41
+ return self._top.key
42
+
43
+ def push_bind(self, **kwargs: ta.Any) -> Elemental:
44
+ prv = self._top
45
+ nxt = prv.next()
46
+ out = private(
47
+ *([bind(self._key, to_key=prv.key)] if prv.level else []),
48
+ bind(nxt.key, **kwargs, expose=True),
49
+ )
50
+ self._top = nxt
51
+ return out
52
+
53
+
54
+ wrapper_binder_helper = WrapperBinderHelper
@@ -27,6 +27,7 @@ from ... import collections as col
27
27
  from ... import lang
28
28
  from ..bindings import Binding
29
29
  from ..eagers import Eager
30
+ from ..elements import CollectedElements
30
31
  from ..elements import Element
31
32
  from ..elements import Elements
32
33
  from ..errors import ConflictingKeyError
@@ -47,14 +48,14 @@ from .multis import make_multi_provider_impl
47
48
  from .origins import Origins
48
49
  from .origins import set_origins
49
50
  from .providers import ProviderImpl
50
- from .providers import make_provider_impl
51
+ from .providersmap import make_provider_impl
51
52
  from .scopes import make_scope_impl
52
53
 
53
54
 
54
55
  if ta.TYPE_CHECKING:
55
- from . import privates as privates_
56
+ from . import privates as _privates
56
57
  else:
57
- privates_ = lang.proxy_import('.privates', __package__)
58
+ _privates = lang.proxy_import('.privates', __package__)
58
59
 
59
60
 
60
61
  ElementT = ta.TypeVar('ElementT', bound=Element)
@@ -63,23 +64,40 @@ ElementT = ta.TypeVar('ElementT', bound=Element)
63
64
  ##
64
65
 
65
66
 
66
- class ElementCollection(lang.Final):
67
+ _SIMPLE_KEYED_ELEMENT_TYPES: tuple[type[Element], ...] = (
68
+ Binding,
69
+ Eager,
70
+ Expose,
71
+ )
72
+
73
+ _SIMPLE_NON_KEYED_ELEMENT_TYPES: tuple[type[Element], ...] = (
74
+ ProvisionListenerBinding,
75
+ )
76
+
77
+ _NON_BINDING_ELEMENT_TYPES: tuple[type[Element], ...] = (
78
+ Eager,
79
+ Expose,
80
+ ProvisionListenerBinding,
81
+ )
82
+
83
+
84
+ class ElementCollection(CollectedElements, lang.Final):
67
85
  def __init__(self, es: Elements) -> None:
68
86
  super().__init__()
69
87
 
70
88
  self._es = check.isinstance(es, Elements)
71
89
 
72
- self._private_infos: ta.MutableMapping[Private, privates_.PrivateInfo] | None = None
90
+ self._private_infos: ta.MutableMapping[Private, _privates.PrivateInfo] | None = None
73
91
 
74
92
  ##
75
93
 
76
- def _get_private_info(self, p: Private) -> 'privates_.PrivateInfo':
94
+ def _get_private_info(self, p: Private) -> '_privates.PrivateInfo':
77
95
  if (pis := self._private_infos) is None:
78
96
  self._private_infos = pis = col.IdentityKeyDict()
79
97
  try:
80
98
  return pis[p]
81
99
  except KeyError:
82
- pis[p] = ec = privates_.PrivateInfo(self, p)
100
+ pis[p] = ec = _privates.PrivateInfo(self, p)
83
101
  return ec
84
102
 
85
103
  ##
@@ -96,28 +114,28 @@ class ElementCollection(lang.Final):
96
114
  out.setdefault(k, []).extend(e)
97
115
 
98
116
  for e in es:
99
- if isinstance(e, ScopeBinding):
117
+ if isinstance(e, _SIMPLE_KEYED_ELEMENT_TYPES):
118
+ add(e.key, e) # type: ignore[attr-defined] # noqa
119
+
120
+ elif isinstance(e, _SIMPLE_NON_KEYED_ELEMENT_TYPES):
121
+ add(None, e)
122
+
123
+ elif isinstance(e, (SetBinding, MapBinding)):
124
+ add(e.multi_key, e)
125
+
126
+ elif isinstance(e, ScopeBinding):
100
127
  add(None, e)
101
128
  sci = make_scope_impl(e.scope)
102
129
  if (sae := sci.auto_elements()) is not None:
103
130
  self._build_raw_element_multimap(sae, out)
104
131
 
105
- elif isinstance(e, (Binding, Eager, Expose)):
106
- add(e.key, e)
107
-
108
132
  elif isinstance(e, Private):
109
133
  pi = self._get_private_info(e)
110
134
  self._build_raw_element_multimap(pi.owner_elements(), out)
111
135
 
112
- elif isinstance(e, (SetBinding, MapBinding)):
113
- add(e.multi_key, e)
114
-
115
- elif isinstance(e, ProvisionListenerBinding):
116
- add(None, e)
117
-
118
136
  elif isinstance(e, Overrides):
119
- ovr = self._build_raw_element_multimap(e.ovr)
120
137
  src = self._build_raw_element_multimap(e.src)
138
+ ovr = self._build_raw_element_multimap(e.ovr)
121
139
  for k, b in src.items(): # FIXME: merge None keys?
122
140
  try:
123
141
  bs = ovr[k]
@@ -166,9 +184,8 @@ class ElementCollection(lang.Final):
166
184
 
167
185
  es_by_ty = col.multi_map_by(type, es)
168
186
 
169
- es_by_ty.pop(Eager, None)
170
- es_by_ty.pop(Expose, None)
171
- es_by_ty.pop(ProvisionListenerBinding, None)
187
+ for nb_ty in _NON_BINDING_ELEMENT_TYPES:
188
+ es_by_ty.pop(nb_ty, None)
172
189
 
173
190
  if (bs := es_by_ty.pop(Binding, None)):
174
191
  b = self._get_single_binding(k, bs) # type: ignore
@@ -176,7 +193,6 @@ class ElementCollection(lang.Final):
176
193
  p: ProviderImpl
177
194
  if isinstance(b.provider, (SetProvider, MapProvider)):
178
195
  p = make_multi_provider_impl(b.provider, es_by_ty)
179
-
180
196
  else:
181
197
  p = make_provider_impl(b.provider)
182
198
 
@@ -193,6 +209,10 @@ class ElementCollection(lang.Final):
193
209
 
194
210
  ##
195
211
 
212
+ @lang.cached_function
213
+ def scope_binding_scopes(self) -> ta.Sequence[Scope]:
214
+ return [sb.scope for sb in self.elements_of_type(ScopeBinding)]
215
+
196
216
  @lang.cached_function
197
217
  def eager_keys_by_scope(self) -> ta.Mapping[Scope, ta.Sequence[Key]]:
198
218
  bim = self.binding_impl_map()
@@ -201,3 +221,13 @@ class ElementCollection(lang.Final):
201
221
  bi = bim[e.key]
202
222
  ret.setdefault(bi.scope, []).append(e.key)
203
223
  return ret
224
+
225
+
226
+ ##
227
+
228
+
229
+ def collect_elements(es: Elements | CollectedElements) -> ElementCollection:
230
+ if isinstance(es, CollectedElements):
231
+ return check.isinstance(es, ElementCollection)
232
+ else:
233
+ return ElementCollection(es)