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/sync.py ADDED
@@ -0,0 +1,49 @@
1
+ import abc
2
+ import typing as ta
3
+
4
+ from .. import lang
5
+ from .injector import _InjectorCreator
6
+ from .inspect import KwargsTarget
7
+ from .keys import Key
8
+
9
+
10
+ if ta.TYPE_CHECKING:
11
+ from .impl import sync as _sync
12
+ else:
13
+ _sync = lang.proxy_import('.impl.sync', __package__)
14
+
15
+
16
+ T = ta.TypeVar('T')
17
+
18
+
19
+ ##
20
+
21
+
22
+ class Injector(lang.Abstract):
23
+ @abc.abstractmethod
24
+ def try_provide(self, key: ta.Any) -> lang.Maybe[ta.Any]:
25
+ raise NotImplementedError
26
+
27
+ @abc.abstractmethod
28
+ def provide(self, key: ta.Any) -> ta.Any:
29
+ raise NotImplementedError
30
+
31
+ @abc.abstractmethod
32
+ def provide_kwargs(self, kt: KwargsTarget) -> ta.Mapping[str, ta.Any]:
33
+ raise NotImplementedError
34
+
35
+ @abc.abstractmethod
36
+ def inject(self, obj: ta.Any) -> ta.Any:
37
+ raise NotImplementedError
38
+
39
+ def __getitem__(
40
+ self,
41
+ target: Key[T] | type[T],
42
+ ) -> T:
43
+ return self.provide(target)
44
+
45
+
46
+ ##
47
+
48
+
49
+ create_injector = _InjectorCreator[Injector](lambda ce: _sync.create_injector(ce))
omlish/io/buffers.py CHANGED
@@ -1,10 +1,18 @@
1
1
  # ruff: noqa: UP006 UP007 UP043 UP045
2
2
  # @omlish-lite
3
+ """
4
+ TODO:
5
+ - overhaul and just coro-ify pyio?
6
+ """
3
7
  import io
4
8
  import typing as ta
5
9
 
10
+ from ..lite.attrops import attr_repr
6
11
  from ..lite.check import check
7
- from ..lite.strings import attr_repr
12
+ from .readers import AsyncBufferedBytesReader
13
+ from .readers import AsyncRawBytesReader
14
+ from .readers import BufferedBytesReader
15
+ from .readers import RawBytesReader
8
16
 
9
17
 
10
18
  ##
@@ -183,6 +191,9 @@ class ReadableListBuffer:
183
191
 
184
192
  self._lst: list[bytes] = []
185
193
 
194
+ def __bool__(self) -> ta.NoReturn:
195
+ raise TypeError("Use 'buf is not None' or 'len(buf)'.")
196
+
186
197
  def __len__(self) -> int:
187
198
  return sum(map(len, self._lst))
188
199
 
@@ -208,6 +219,9 @@ class ReadableListBuffer:
208
219
 
209
220
  def read(self, n: ta.Optional[int] = None) -> ta.Optional[bytes]:
210
221
  if n is None:
222
+ if not self._lst:
223
+ return b''
224
+
211
225
  o = b''.join(self._lst)
212
226
  self._lst = []
213
227
  return o
@@ -246,6 +260,110 @@ class ReadableListBuffer:
246
260
  r = self.read_until_(delim)
247
261
  return r if isinstance(r, bytes) else None
248
262
 
263
+ #
264
+
265
+ DEFAULT_BUFFERED_READER_CHUNK_SIZE: ta.ClassVar[int] = -1
266
+
267
+ @ta.final
268
+ class _BufferedBytesReader(BufferedBytesReader):
269
+ def __init__(
270
+ self,
271
+ raw: RawBytesReader,
272
+ buf: 'ReadableListBuffer',
273
+ *,
274
+ chunk_size: ta.Optional[int] = None,
275
+ ) -> None:
276
+ self._raw = raw
277
+ self._buf = buf
278
+ self._chunk_size = chunk_size or ReadableListBuffer.DEFAULT_BUFFERED_READER_CHUNK_SIZE
279
+
280
+ def read1(self, n: int = -1, /) -> bytes:
281
+ if n < 0:
282
+ n = self._chunk_size
283
+ if not n:
284
+ return b''
285
+ if 0 < n <= len(self._buf):
286
+ return self._buf.read(n) or b''
287
+ return self._raw.read1(n)
288
+
289
+ def read(self, /, n: int = -1) -> bytes:
290
+ if n < 0:
291
+ return self.readall()
292
+ while len(self._buf) < n:
293
+ if not (b := self._raw.read1(n)):
294
+ break
295
+ self._buf.feed(b)
296
+ return self._buf.read(n) or b''
297
+
298
+ def readall(self) -> bytes:
299
+ buf = io.BytesIO()
300
+ buf.write(self._buf.read() or b'')
301
+ while (b := self._raw.read1(self._chunk_size)):
302
+ buf.write(b)
303
+ return buf.getvalue()
304
+
305
+ def new_buffered_reader(
306
+ self,
307
+ raw: RawBytesReader,
308
+ *,
309
+ chunk_size: ta.Optional[int] = None,
310
+ ) -> BufferedBytesReader:
311
+ return self._BufferedBytesReader(
312
+ raw,
313
+ self,
314
+ chunk_size=chunk_size,
315
+ )
316
+
317
+ @ta.final
318
+ class _AsyncBufferedBytesReader(AsyncBufferedBytesReader):
319
+ def __init__(
320
+ self,
321
+ raw: AsyncRawBytesReader,
322
+ buf: 'ReadableListBuffer',
323
+ *,
324
+ chunk_size: ta.Optional[int] = None,
325
+ ) -> None:
326
+ self._raw = raw
327
+ self._buf = buf
328
+ self._chunk_size = chunk_size or ReadableListBuffer.DEFAULT_BUFFERED_READER_CHUNK_SIZE
329
+
330
+ async def read1(self, n: int = -1, /) -> bytes:
331
+ if n < 0:
332
+ n = self._chunk_size
333
+ if not n:
334
+ return b''
335
+ if 0 < n <= len(self._buf):
336
+ return self._buf.read(n) or b''
337
+ return await self._raw.read1(n)
338
+
339
+ async def read(self, /, n: int = -1) -> bytes:
340
+ if n < 0:
341
+ return await self.readall()
342
+ while len(self._buf) < n:
343
+ if not (b := await self._raw.read1(n)):
344
+ break
345
+ self._buf.feed(b)
346
+ return self._buf.read(n) or b''
347
+
348
+ async def readall(self) -> bytes:
349
+ buf = io.BytesIO()
350
+ buf.write(self._buf.read() or b'')
351
+ while b := await self._raw.read1(self._chunk_size):
352
+ buf.write(b)
353
+ return buf.getvalue()
354
+
355
+ def new_async_buffered_reader(
356
+ self,
357
+ raw: AsyncRawBytesReader,
358
+ *,
359
+ chunk_size: ta.Optional[int] = None,
360
+ ) -> AsyncBufferedBytesReader:
361
+ return self._AsyncBufferedBytesReader(
362
+ raw,
363
+ self,
364
+ chunk_size=chunk_size,
365
+ )
366
+
249
367
 
250
368
  ##
251
369
 
omlish/io/readers.py ADDED
@@ -0,0 +1,29 @@
1
+ # ruff: noqa: UP045
2
+ # @omlish-lite
3
+ import typing as ta
4
+
5
+
6
+ ##
7
+
8
+
9
+ class RawBytesReader(ta.Protocol):
10
+ def read1(self, n: int = -1, /) -> bytes: ...
11
+
12
+
13
+ class BufferedBytesReader(RawBytesReader, ta.Protocol):
14
+ def read(self, n: int = -1, /) -> bytes: ...
15
+
16
+ def readall(self) -> bytes: ...
17
+
18
+
19
+ #
20
+
21
+
22
+ class AsyncRawBytesReader(ta.Protocol):
23
+ def read1(self, n: int = -1, /) -> ta.Awaitable[bytes]: ...
24
+
25
+
26
+ class AsyncBufferedBytesReader(AsyncRawBytesReader, ta.Protocol):
27
+ def read(self, n: int = -1, /) -> ta.Awaitable[bytes]: ...
28
+
29
+ def readall(self) -> ta.Awaitable[bytes]: ...
@@ -1,23 +1,31 @@
1
- from .iterators import ( # noqa
2
- PeekIterator,
3
- PrefetchIterator,
4
- ProxyIterator,
5
- RetainIterator,
6
- )
1
+ from .. import lang as _lang # noqa
7
2
 
8
- from .recipes import ( # noqa
9
- sliding_window,
10
- )
11
3
 
12
- from .tools import ( # noqa
13
- expand_indexed_pairs,
14
- merge_on,
15
- take,
16
- unzip,
17
- )
4
+ with _lang.auto_proxy_init(globals()):
5
+ ##
18
6
 
19
- from .unique import ( # noqa
20
- UniqueItem,
21
- UniqueIterator,
22
- UniqueStats,
23
- )
7
+ from .iterators import ( # noqa
8
+ PeekIterator,
9
+ PrefetchIterator,
10
+ ProxyIterator,
11
+ RetainIterator,
12
+ )
13
+
14
+ from .recipes import ( # noqa
15
+ sliding_window,
16
+ )
17
+
18
+ from .tools import ( # noqa
19
+ expand_indexed_pairs,
20
+ merge_on,
21
+ take,
22
+ unzip,
23
+ )
24
+
25
+ from . import transforms as tf # noqa
26
+
27
+ from .unique import ( # noqa
28
+ UniqueItem,
29
+ UniqueIterator,
30
+ UniqueStats,
31
+ )
@@ -0,0 +1,204 @@
1
+ import abc
2
+ import dataclasses as dc
3
+ import itertools
4
+ import typing as ta
5
+
6
+ from .. import lang
7
+
8
+
9
+ T = ta.TypeVar('T')
10
+ U = ta.TypeVar('U')
11
+
12
+ Transform: ta.TypeAlias = ta.Callable[[ta.Iterable[T]], ta.Iterable[U]]
13
+
14
+ X0 = ta.TypeVar('X0')
15
+ X1 = ta.TypeVar('X1')
16
+ X2 = ta.TypeVar('X2')
17
+ X3 = ta.TypeVar('X3')
18
+ X4 = ta.TypeVar('X4')
19
+ X5 = ta.TypeVar('X5')
20
+
21
+
22
+ ##
23
+
24
+
25
+ _filter = filter
26
+ _map = map
27
+ _zip = zip
28
+
29
+
30
+ ##
31
+
32
+
33
+ class Transform_(lang.Abstract, ta.Generic[T, U]): # noqa
34
+ @abc.abstractmethod
35
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
36
+ raise NotImplementedError
37
+
38
+
39
+ ##
40
+
41
+
42
+ @dc.dataclass(frozen=True)
43
+ class Filter(Transform_[T, T]):
44
+ fn: ta.Callable[[T], bool] | None
45
+
46
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[T]:
47
+ return _filter(self.fn, it)
48
+
49
+
50
+ filter = Filter # noqa
51
+
52
+
53
+ ##
54
+
55
+
56
+ @dc.dataclass(frozen=True)
57
+ class Map(Transform_[T, U]):
58
+ fn: ta.Callable[[T], U]
59
+
60
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
61
+ return _map(self.fn, it)
62
+
63
+
64
+ map = Map # noqa
65
+
66
+
67
+ ##
68
+
69
+
70
+ @dc.dataclass(frozen=True)
71
+ class Apply(Transform_[T, T]):
72
+ fn: ta.Callable[[T], ta.Any]
73
+
74
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[T]:
75
+ return _map(lambda e: (self.fn(e), e)[1], it)
76
+
77
+
78
+ apply = Apply
79
+
80
+
81
+ ##
82
+
83
+
84
+ @dc.dataclass(frozen=True)
85
+ class Flatten(Transform_[ta.Iterable[T], T]):
86
+ def __call__(self, it: ta.Iterable[ta.Iterable[T]]) -> ta.Iterable[T]:
87
+ return itertools.chain.from_iterable(it)
88
+
89
+
90
+ flatten = Flatten
91
+
92
+
93
+ ##
94
+
95
+
96
+ @dc.dataclass(frozen=True)
97
+ class FlatMap(Transform_[T, U]):
98
+ fn: ta.Callable[[T], ta.Iterable[U]]
99
+
100
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
101
+ return itertools.chain.from_iterable(_map(self.fn, it))
102
+
103
+
104
+ flat_map = FlatMap
105
+
106
+ # Alternatively:
107
+ # def flat_map(fn: ta.Callable[[T], ta.Iterable[U]]) -> Transform[T, U]:
108
+ # return compose(map(fn), flatten())
109
+
110
+
111
+ ##
112
+
113
+
114
+ @dc.dataclass(frozen=True)
115
+ class Compose(Transform_[T, U]):
116
+ tfs: ta.Sequence[Transform]
117
+
118
+ def __call__(self, it: ta.Iterable[T]) -> ta.Iterable[U]:
119
+ for tf in self.tfs:
120
+ it = tf(it)
121
+ return it # type: ignore[return-value]
122
+
123
+
124
+ @ta.overload
125
+ def compose(
126
+ tf0: Transform[T, U],
127
+ ) -> Transform[T, U]:
128
+ ...
129
+
130
+
131
+ @ta.overload
132
+ def compose(
133
+ tf0: Transform[T, X0],
134
+ tf1: Transform[X0, U],
135
+ ) -> Transform[T, U]:
136
+ ...
137
+
138
+
139
+ @ta.overload
140
+ def compose(
141
+ tf0: Transform[T, X0],
142
+ tf1: Transform[X0, X1],
143
+ tf2: Transform[X1, U],
144
+ ) -> Transform[T, U]:
145
+ ...
146
+
147
+
148
+ @ta.overload
149
+ def compose(
150
+ tf0: Transform[T, X0],
151
+ tf1: Transform[X0, X1],
152
+ tf2: Transform[X1, X2],
153
+ tf3: Transform[X2, U],
154
+ ) -> Transform[T, U]:
155
+ ...
156
+
157
+
158
+ @ta.overload
159
+ def compose(
160
+ tf0: Transform[T, X0],
161
+ tf1: Transform[X0, X1],
162
+ tf2: Transform[X1, X2],
163
+ tf3: Transform[X2, X3],
164
+ tf4: Transform[X3, U],
165
+ ) -> Transform[T, U]:
166
+ ...
167
+
168
+
169
+ @ta.overload
170
+ def compose(
171
+ tf0: Transform[T, X0],
172
+ tf1: Transform[X0, X1],
173
+ tf2: Transform[X1, X2],
174
+ tf3: Transform[X2, X3],
175
+ tf4: Transform[X3, X4],
176
+ tf5: Transform[X4, U],
177
+ ) -> Transform[T, U]:
178
+ ...
179
+
180
+
181
+ @ta.overload
182
+ def compose(
183
+ tf0: Transform[T, X0],
184
+ tf1: Transform[X0, X1],
185
+ tf2: Transform[X1, X2],
186
+ tf3: Transform[X2, X3],
187
+ tf4: Transform[X3, X4],
188
+ tf5: Transform[X4, X5],
189
+ tf6: Transform[X5, U],
190
+ ) -> Transform[T, U]:
191
+ ...
192
+
193
+
194
+ @ta.overload
195
+ def compose(
196
+ *tf: Transform,
197
+ ) -> Transform:
198
+ ...
199
+
200
+
201
+ def compose(tf0, *tfn):
202
+ if not tfn:
203
+ return tf0
204
+ return Compose([tf0, *tfn])