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/funcs/match.py DELETED
@@ -1,227 +0,0 @@
1
- """
2
- Analogous to scala's partial functions ( https://www.scala-lang.org/api/current/scala/PartialFunction.html ).
3
-
4
- TODO:
5
- - unify MatchFnClass with dispatch.method?
6
- - __call__ = mfs.method(); @__call__.register(lambda: ...) def _call_... ?
7
- - not really the same thing, dispatch is unordered this is necessarily ordered
8
- """
9
- import abc
10
- import dataclasses as dc
11
- import typing as ta
12
-
13
- from .. import lang
14
-
15
-
16
- T = ta.TypeVar('T')
17
- P = ta.ParamSpec('P')
18
-
19
-
20
- ##
21
-
22
-
23
- class MatchGuardError(Exception):
24
- pass
25
-
26
-
27
- class MatchFn(lang.Abstract, ta.Generic[P, T]):
28
- @abc.abstractmethod
29
- def guard(self, *args: P.args, **kwargs: P.kwargs) -> bool:
30
- raise NotImplementedError
31
-
32
- @abc.abstractmethod
33
- def fn(self, *args: P.args, **kwargs: P.kwargs) -> T:
34
- raise NotImplementedError
35
-
36
- def __get__(self, instance, owner=None):
37
- return self
38
-
39
- @ta.final
40
- def __call__(self, *args: P.args, **kwargs: P.kwargs) -> T:
41
- if not self.guard(*args, **kwargs):
42
- raise MatchGuardError(*args, **kwargs)
43
- return self.fn(*args, **kwargs)
44
-
45
-
46
- ##
47
-
48
-
49
- @dc.dataclass(frozen=True)
50
- class SimpleMatchFn(MatchFn[P, T]):
51
- _guard: ta.Callable[P, bool]
52
- _fn: ta.Callable[P, T]
53
-
54
- def guard(self, *args: P.args, **kwargs: P.kwargs) -> bool:
55
- return self._guard(*args, **kwargs)
56
-
57
- def fn(self, *args: P.args, **kwargs: P.kwargs) -> T:
58
- return self._fn(*args, **kwargs)
59
-
60
- def __get__(self, instance, owner=None):
61
- return self.__class__(
62
- self._guard.__get__(instance, owner), # noqa
63
- self._fn.__get__(instance, owner), # noqa
64
- )
65
-
66
-
67
- @ta.overload
68
- def simple(guard: ta.Callable[..., bool], fn: ta.Callable[P, T]) -> SimpleMatchFn[P, T]:
69
- ...
70
-
71
-
72
- @ta.overload
73
- def simple(guard: ta.Callable[..., bool]) -> ta.Callable[[ta.Callable[P, T]], SimpleMatchFn[P, T]]:
74
- ...
75
-
76
-
77
- def simple(guard, fn=None):
78
- def inner(fn): # noqa
79
- return SimpleMatchFn(guard, fn)
80
- if fn is not None:
81
- return inner(fn)
82
- else:
83
- return inner
84
-
85
-
86
- ##
87
-
88
-
89
- class AmbiguousMatchesError(Exception):
90
- pass
91
-
92
-
93
- @dc.dataclass(frozen=True)
94
- class MultiMatchFn(MatchFn[P, T]):
95
- children: ta.Sequence[MatchFn[P, T]]
96
- strict: bool = False
97
-
98
- def match(self, *args: P.args, **kwargs: P.kwargs) -> MatchFn[P, T] | None:
99
- matches = []
100
- for cur in self.children:
101
- if cur.guard(*args, **kwargs):
102
- if self.strict:
103
- matches.append(cur)
104
- else:
105
- return cur
106
- if not matches:
107
- return None
108
- elif len(matches) > 1:
109
- raise AmbiguousMatchesError
110
- else:
111
- return matches[0]
112
-
113
- def guard(self, *args: P.args, **kwargs: P.kwargs) -> bool:
114
- return self.match(*args, **kwargs) is not None
115
-
116
- def fn(self, *args: P.args, **kwargs: P.kwargs) -> T:
117
- if (m := self.match(*args, **kwargs)) is None:
118
- raise MatchGuardError(*args, **kwargs)
119
- return m.fn(*args, **kwargs)
120
-
121
- def __get__(self, instance, owner=None):
122
- return self.__class__(
123
- [c.__get__(instance, owner) for c in self.children],
124
- strict=self.strict,
125
- )
126
-
127
-
128
- def multi(*children: MatchFn[P, T], strict: bool = False) -> MultiMatchFn: # MultiMatchFn[P[0], T[-1]]
129
- return MultiMatchFn(children, strict=strict) # noqa
130
-
131
-
132
- ##
133
-
134
-
135
- class CachedMatchFn(MatchFn[P, T]):
136
- @staticmethod
137
- def _default_key(*args, **kwargs):
138
- return (args, tuple(sorted(kwargs.items(), key=lambda t: t[0])))
139
-
140
- def __init__(
141
- self,
142
- f: MatchFn[P, T],
143
- *,
144
- key: ta.Callable[P, ta.Any] = _default_key,
145
- lock: lang.DefaultLockable = None,
146
- ) -> None:
147
- super().__init__()
148
-
149
- self._f = f
150
- self._key = key
151
- self._lock = lock
152
- self._lock_impl = lang.default_lock(lock)()
153
- self._dct: dict[ta.Any, lang.Maybe[ta.Any]] = {}
154
-
155
- def guard(self, *args: P.args, **kwargs: P.kwargs) -> bool:
156
- with self._lock_impl:
157
- k = self._key(*args, **kwargs)
158
- try:
159
- e = self._dct[k]
160
- except KeyError:
161
- if self._f.guard(*args, **kwargs):
162
- return True
163
- else:
164
- self._dct[k] = lang.empty()
165
- return False
166
- else:
167
- return e.present
168
-
169
- def fn(self, *args: P.args, **kwargs: P.kwargs) -> T:
170
- with self._lock_impl:
171
- k = self._key(*args, **kwargs)
172
- try:
173
- e = self._dct[k]
174
- except KeyError:
175
- try:
176
- ret = self._f(*args, **kwargs)
177
- except MatchGuardError:
178
- self._dct[k] = lang.empty()
179
- raise
180
- else:
181
- self._dct[k] = lang.just(ret)
182
- return ret
183
- else:
184
- if e.present:
185
- return e.must()
186
- else:
187
- raise MatchGuardError(*args, **kwargs)
188
-
189
- def __get__(self, instance, owner=None):
190
- return self.__class__(self._f.__get__(instance, owner), key=self._key) # noqa
191
-
192
-
193
- cached = CachedMatchFn
194
-
195
-
196
- ##
197
-
198
-
199
- class MatchFnClass(MatchFn[P, T]):
200
- _cls_match_fn: ta.ClassVar[MultiMatchFn]
201
-
202
- __match_fn: MatchFn[P, T] | None = None
203
-
204
- @property
205
- def _match_fn(self) -> MatchFn[P, T]:
206
- if (mf := self.__match_fn) is None:
207
- mf = self.__match_fn = self._cls_match_fn.__get__(self)
208
- return mf
209
-
210
- def __init_subclass__(cls, strict: bool = False, **kwargs: ta.Any) -> None:
211
- super().__init_subclass__()
212
-
213
- if '_cls_match_fn' in cls.__dict__:
214
- raise AttributeError('_cls_match_fn')
215
-
216
- d = {}
217
- for c in cls.__mro__:
218
- for a, o in c.__dict__.items():
219
- if isinstance(o, MatchFn) and a not in d:
220
- d[a] = o
221
- cls._cls_match_fn = MultiMatchFn(list(d.values()), strict=strict)
222
-
223
- def guard(self, *args: P.args, **kwargs: P.kwargs) -> bool:
224
- return self._match_fn.guard(*args, **kwargs)
225
-
226
- def fn(self, *args: P.args, **kwargs: P.kwargs) -> T:
227
- return self._match_fn.fn(*args, **kwargs)
omlish/io/trampoline.py DELETED
@@ -1,289 +0,0 @@
1
- import abc
2
- import contextlib
3
- import io
4
- import typing as ta
5
-
6
- from .. import check
7
- from .. import lang
8
- from ..concurrent import threadlets as tls
9
- from ..sync import ConditionDeque
10
-
11
-
12
- if ta.TYPE_CHECKING:
13
- import threading
14
-
15
- from . import pyio # noqa
16
-
17
- else:
18
- threading = lang.proxy_import('threading')
19
-
20
- pyio = lang.proxy_import('.pyio', __package__)
21
-
22
-
23
- T = ta.TypeVar('T')
24
-
25
- BytesLike: ta.TypeAlias = ta.Any
26
-
27
- BufferedReader: ta.TypeAlias = io.BufferedReader
28
- # BufferedReader: ta.TypeAlias = pyio.BufferedReader
29
-
30
-
31
- ##
32
-
33
-
34
- class ProxyReadFile:
35
- def __init__(self, read: ta.Callable[[int], bytes | BaseException]) -> None:
36
- super().__init__()
37
-
38
- self._read = read
39
- self._eof = False
40
- self._closed = False
41
-
42
- #
43
-
44
- def read(self, n: int, /) -> bytes:
45
- if self._closed:
46
- raise RuntimeError('Closed')
47
- if self._eof:
48
- return b''
49
- d = self._read(n)
50
- if isinstance(d, BaseException):
51
- raise d
52
- if not d:
53
- self._eof = True
54
- return d
55
-
56
- def readall(self, *args, **kwargs):
57
- raise TypeError # FIXME
58
-
59
- def readinto(self, b: BytesLike) -> int | None:
60
- d = self.read(len(b))
61
- if d:
62
- b[:len(d)] = d
63
- return len(d)
64
-
65
- #
66
-
67
- def readable(self) -> bool:
68
- return not (self._eof or self._closed)
69
-
70
- @property
71
- def closed(self) -> bool:
72
- return self._closed
73
-
74
- def close(self) -> None:
75
- self._closed = True
76
-
77
- #
78
-
79
- def flush(self) -> None:
80
- pass
81
-
82
- def seekable(self) -> bool:
83
- return False
84
-
85
- def seek(self, n: int, /) -> ta.Any:
86
- raise TypeError
87
-
88
-
89
- ##
90
-
91
-
92
- class NeedMore(lang.Marker):
93
- pass
94
-
95
-
96
- class Exited(lang.Marker):
97
- pass
98
-
99
-
100
- class Shutdown(BaseException): # noqa
101
- pass
102
-
103
-
104
- IoTrampolineTarget: ta.TypeAlias = ta.Callable[[io.BufferedReader], ta.ContextManager[ta.Callable[[], bytes]]]
105
-
106
-
107
- class IoTrampoline(lang.Abstract):
108
- def __init__(
109
- self,
110
- target: IoTrampolineTarget,
111
- *,
112
- buffer_size: int | None = None,
113
- ) -> None:
114
- super().__init__()
115
-
116
- self._target = target
117
- self._buffer_size = buffer_size
118
-
119
- def _make_buffered_reader(self, raw: ta.Any) -> io.BufferedReader:
120
- return io.BufferedReader(
121
- raw,
122
- **(dict(buffer_size=self._buffer_size) if self._buffer_size is not None else {}),
123
- )
124
-
125
- @abc.abstractmethod
126
- def close(self, timeout: float | None = None) -> None:
127
- raise NotImplementedError
128
-
129
- @abc.abstractmethod
130
- def __enter__(self) -> ta.Self:
131
- raise NotImplementedError
132
-
133
- @abc.abstractmethod
134
- def __exit__(self, exc_type, exc_val, exc_tb):
135
- raise NotImplementedError
136
-
137
- @abc.abstractmethod
138
- def feed(self, *data: bytes) -> ta.Iterable[bytes]:
139
- raise NotImplementedError
140
-
141
-
142
- #
143
-
144
-
145
- class ThreadIoTrampoline(IoTrampoline):
146
- def __init__(self, target: IoTrampolineTarget, **kwargs: ta.Any) -> None:
147
- super().__init__(target, **kwargs)
148
-
149
- self._in: ConditionDeque[bytes | BaseException] = ConditionDeque()
150
- self._out: ConditionDeque[
151
- bytes | # noqa
152
- type[NeedMore] |
153
- type[Exited] |
154
- BaseException
155
- ] = ConditionDeque()
156
-
157
- self._proxy = ProxyReadFile(self._read)
158
-
159
- self._thread = threading.Thread(target=self._thread_proc, daemon=True)
160
-
161
- #
162
-
163
- def close(self, timeout: float | None = None) -> None:
164
- if not self._thread.is_alive():
165
- return
166
- self._out.push(Shutdown())
167
- self._thread.join(timeout)
168
- if self._thread.is_alive():
169
- if timeout is not None:
170
- raise TimeoutError
171
- else:
172
- raise RuntimeError('Failed to join thread')
173
-
174
- #
175
-
176
- def __enter__(self) -> ta.Self:
177
- self._thread.start()
178
- return self
179
-
180
- def __exit__(self, exc_type, exc_val, exc_tb):
181
- self.close()
182
-
183
- #
184
-
185
- def _read(self, n: int, /) -> bytes | BaseException:
186
- return self._in.pop(if_empty=lambda: self._out.push(NeedMore))
187
-
188
- def _thread_proc(self) -> None:
189
- try:
190
- with contextlib.closing(self._make_buffered_reader(self._proxy)) as bf: # noqa
191
- with self._target(bf) as read:
192
- while out := read():
193
- self._out.push(out)
194
- self._out.push(out)
195
- except BaseException as e:
196
- self._out.push(e)
197
- raise
198
- finally:
199
- self._out.push(Exited)
200
-
201
- def feed(self, *data: bytes) -> ta.Iterable[bytes]:
202
- self._in.push(*data)
203
- while True:
204
- e = self._out.pop()
205
- if e is NeedMore:
206
- break
207
- elif isinstance(e, BaseException):
208
- raise e
209
- elif e is Exited:
210
- raise RuntimeError('IO thread exited')
211
- elif isinstance(e, bytes):
212
- yield e
213
- if not e:
214
- return
215
- else:
216
- raise TypeError(e)
217
-
218
-
219
- #
220
-
221
-
222
- class ThreadletIoTrampoline(IoTrampoline):
223
- def __init__(
224
- self,
225
- target: IoTrampolineTarget,
226
- threadlets: tls.Threadlets = tls.GREENLET_THREADLETS,
227
- ** kwargs: ta.Any,
228
- ) -> None:
229
- super().__init__(target, **kwargs)
230
-
231
- self._proxy = ProxyReadFile(self._read)
232
- self._tl: tls.Threadlet = threadlets.spawn(self._g_proc)
233
-
234
- #
235
-
236
- def close(self, timeout: float | None = None) -> None:
237
- if self._tl.dead:
238
- return
239
- out = self._tl.switch(Shutdown())
240
- if out is not Exited or not self._tl.dead:
241
- raise RuntimeError
242
-
243
- #
244
-
245
- def __enter__(self) -> ta.Self:
246
- out = self._tl.switch()
247
- if out is not NeedMore:
248
- raise RuntimeError
249
- return self
250
-
251
- def __exit__(self, exc_type, exc_val, exc_tb):
252
- self.close()
253
-
254
- #
255
-
256
- def _read(self, n: int, /) -> bytes:
257
- out = check.not_none(self._tl.parent).switch(NeedMore)
258
- return out
259
-
260
- def _g_proc(self) -> ta.Any:
261
- try:
262
- with contextlib.closing(self._make_buffered_reader(self._proxy)) as bf: # noqa
263
- with self._target(bf) as read:
264
- while out := read():
265
- e = check.not_none(self._tl.parent).switch(out)
266
- if e is not NeedMore:
267
- raise TypeError(e) # noqa
268
- e = check.not_none(self._tl.parent).switch(out)
269
- if not isinstance(e, Shutdown):
270
- raise TypeError(e) # noqa
271
- return Exited
272
- except BaseException as e:
273
- check.not_none(self._tl.parent).throw(e)
274
- raise
275
-
276
- def feed(self, *data: bytes) -> ta.Iterable[bytes]:
277
- i: bytes | type[NeedMore]
278
- for i in data:
279
- while True:
280
- e = self._tl.switch(i)
281
- i = NeedMore
282
- if e is NeedMore:
283
- break
284
- elif isinstance(e, bytes):
285
- yield e
286
- if not e:
287
- return
288
- else:
289
- raise TypeError(e)