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/configs/types.py CHANGED
@@ -3,7 +3,7 @@
3
3
  import typing as ta
4
4
 
5
5
 
6
- ConfigMap = ta.Mapping[str, ta.Any]
6
+ ConfigMap = ta.Mapping[str, ta.Any] # ta.TypeAlias
7
7
 
8
8
 
9
9
  ##
@@ -0,0 +1,70 @@
1
+ from .. import lang as _lang # noqa
2
+
3
+
4
+ with _lang.auto_proxy_init(globals()):
5
+ ##
6
+
7
+ from .daemon import ( # noqa
8
+ Daemon,
9
+ )
10
+
11
+ from .launching import ( # noqa
12
+ Launcher,
13
+ )
14
+
15
+ from .services import ( # noqa
16
+ Service,
17
+
18
+ ServiceTarget,
19
+ ServiceTargetRunner,
20
+
21
+ ServiceConfigTarget,
22
+ ServiceConfigTargetRunner,
23
+ )
24
+
25
+ from .spawning import ( # noqa
26
+ Spawning,
27
+ Spawn,
28
+ Spawner,
29
+ InProcessSpawner,
30
+ spawner_for,
31
+
32
+ MultiprocessingSpawning,
33
+ MultiprocessingSpawner,
34
+
35
+ ForkSpawning,
36
+ ForkSpawner,
37
+
38
+ ThreadSpawning,
39
+ ThreadSpawner,
40
+ )
41
+
42
+ from .targets import ( # noqa
43
+ Target,
44
+ TargetRunner,
45
+ target_runner_for,
46
+
47
+ FnTarget,
48
+ FnTargetRunner,
49
+
50
+ NameTarget,
51
+ NameTargetRunner,
52
+
53
+ ExecTarget,
54
+ ExecTargetRunner,
55
+ )
56
+
57
+ from .waiting import ( # noqa
58
+ Wait,
59
+ Waiter,
60
+ waiter_for,
61
+
62
+ SequentialWait,
63
+ SequentialWaiter,
64
+
65
+ FnWait,
66
+ FnWaiter,
67
+
68
+ ConnectWait,
69
+ ConnectWaiter,
70
+ )
omlish/daemons/daemon.py CHANGED
@@ -16,13 +16,13 @@ TODO:
16
16
  - pickle protocol, revision / venv check, multiprocessing manager support
17
17
  """
18
18
  import itertools
19
- import logging
20
19
  import os.path
21
20
  import time
22
21
 
23
22
  from .. import check
24
23
  from .. import dataclasses as dc
25
24
  from .. import lang
25
+ from ..logs import all as logs
26
26
  from ..os.pidfiles.pidfile import Pidfile
27
27
  from .launching import Launcher
28
28
  from .spawning import Spawning
@@ -31,7 +31,7 @@ from .waiting import Wait
31
31
  from .waiting import waiter_for
32
32
 
33
33
 
34
- log = logging.getLogger(__name__)
34
+ log = logs.get_module_logger(globals())
35
35
 
36
36
 
37
37
  ##
@@ -5,12 +5,12 @@ TODO:
5
5
  """
6
6
  import contextlib
7
7
  import functools
8
- import logging
9
8
  import threading
10
9
  import typing as ta
11
10
 
12
11
  from .. import check
13
12
  from .. import lang
13
+ from ..logs import all as logs
14
14
  from ..os.pidfiles.manager import open_inheritable_pidfile
15
15
  from ..os.pidfiles.pidfile import Pidfile
16
16
  from .reparent import reparent_process
@@ -23,7 +23,7 @@ from .targets import Target
23
23
  from .targets import target_runner_for
24
24
 
25
25
 
26
- log = logging.getLogger(__name__)
26
+ log = logs.get_module_logger(globals())
27
27
 
28
28
 
29
29
  ##
@@ -10,13 +10,12 @@ def reparent_process(
10
10
  no_close_stdio: bool = False,
11
11
  ) -> None:
12
12
  if (pid := os.fork()): # noqa
13
- sys.exit(0)
14
- raise RuntimeError('Unreachable') # noqa
13
+ raise SystemExit(0)
15
14
 
16
15
  os.setsid()
17
16
 
18
17
  if (pid := os.fork()): # noqa
19
- sys.exit(0)
18
+ raise SystemExit(0)
20
19
 
21
20
  if not no_close_stdio:
22
21
  rn_fd = os.open('/dev/null', os.O_RDONLY)
@@ -2,7 +2,6 @@ import abc
2
2
  import enum
3
3
  import functools
4
4
  import os
5
- import sys
6
5
  import threading
7
6
  import typing as ta
8
7
 
@@ -166,9 +165,9 @@ class ForkSpawner(Spawner, dc.Frozen):
166
165
  try:
167
166
  spawn.fn()
168
167
  except BaseException: # noqa
169
- sys.exit(1)
168
+ raise SystemExit(1) from None
170
169
  else:
171
- sys.exit(0)
170
+ raise SystemExit(0)
172
171
 
173
172
  raise RuntimeError('Unreachable') # noqa
174
173
 
@@ -119,11 +119,6 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
119
119
  ClassSpec,
120
120
  )
121
121
 
122
- from .tools.as_ import ( # noqa
123
- shallow_asdict,
124
- shallow_astuple,
125
- )
126
-
127
122
  from .tools.iter import ( # noqa
128
123
  fields_dict,
129
124
 
@@ -158,9 +153,14 @@ with _lang.auto_proxy_init(globals()) as _api_cap:
158
153
  # lite imports
159
154
 
160
155
  from ..lite.dataclasses import ( # noqa
156
+ dataclass_shallow_asdict as shallow_asdict,
157
+ dataclass_shallow_astuple as shallow_astuple,
158
+
161
159
  is_immediate_dataclass,
162
160
 
163
161
  dataclass_maybe_post_init as maybe_post_init,
162
+
163
+ dataclass_descriptor_method as descriptor_method,
164
164
  )
165
165
 
166
166
 
@@ -6,7 +6,7 @@ import typing as ta
6
6
 
7
7
 
8
8
  def _hands_off_repr(obj: ta.Any) -> str:
9
- return f'{obj.__class__.__qualname__}@{hex(id(obj))[2:]}'
9
+ return f'{obj.__class__.__qualname__}@{id(obj):x}'
10
10
 
11
11
 
12
12
  def _fn_repr(fn: ta.Callable) -> str:
@@ -10,6 +10,7 @@ from ..... import lang
10
10
  from ...._internals import STD_FIELDS_ATTR
11
11
  from ...._internals import STD_PARAMS_ATTR
12
12
  from ....specs import ClassSpec
13
+ from ....specs import ReprFn
13
14
  from ...processing.driving import drive_cls_processing
14
15
  from ...utils import class_decorator
15
16
  from ..fields.building import build_cls_std_fields
@@ -53,6 +54,7 @@ def dataclass(
53
54
 
54
55
  repr_id: bool | None = None,
55
56
  terse_repr: bool | None = None,
57
+ default_repr_fn: ReprFn | None = None,
56
58
 
57
59
  allow_redundant_decorator: bool | None = None,
58
60
 
@@ -158,6 +160,7 @@ def dataclass(
158
160
 
159
161
  repr_id=repr_id,
160
162
  terse_repr=terse_repr,
163
+ default_repr_fn=default_repr_fn,
161
164
 
162
165
  allow_redundant_decorator=allow_redundant_decorator,
163
166
  ),
@@ -4,6 +4,7 @@ import sys
4
4
  import types
5
5
  import typing as ta
6
6
 
7
+ from ....specs import ReprFn
7
8
  from .decorator import dataclass
8
9
 
9
10
 
@@ -53,6 +54,7 @@ def make_dataclass( # noqa
53
54
 
54
55
  repr_id: bool | None = None,
55
56
  terse_repr: bool | None = None,
57
+ default_repr_fn: ReprFn | None = None,
56
58
 
57
59
  allow_redundant_decorator: bool | None = None,
58
60
 
@@ -142,7 +144,7 @@ def make_dataclass( # noqa
142
144
 
143
145
  if module is None:
144
146
  try:
145
- module = sys._getframemodulename(_frame_offset) or '__main__' # type: ignore # noqa
147
+ module = sys._getframemodulename(_frame_offset) or '__main__' # noqa
146
148
  except AttributeError:
147
149
  with contextlib.suppress(AttributeError, ValueError):
148
150
  module = sys._getframe(_frame_offset).f_globals.get('__name__', '__main__') # noqa
@@ -174,6 +176,7 @@ def make_dataclass( # noqa
174
176
 
175
177
  repr_id=repr_id,
176
178
  terse_repr=terse_repr,
179
+ default_repr_fn=default_repr_fn,
177
180
 
178
181
  allow_redundant_decorator=allow_redundant_decorator,
179
182
  )
@@ -36,7 +36,7 @@ def _build_cls_doc(cls: type) -> str:
36
36
 
37
37
 
38
38
  class _LazyClsDocDescriptor:
39
- def __get__(self, instance, owner):
39
+ def __get__(self, instance, owner=None):
40
40
  if instance is not None:
41
41
  owner = instance.__class__
42
42
  if not owner:
@@ -32,6 +32,7 @@ class ReprPlan(Plan):
32
32
 
33
33
  id: bool = False
34
34
  terse: bool = False
35
+ default_fn: OpRef[ReprFn] | None = None
35
36
 
36
37
 
37
38
  @register_generator_type(ReprPlan)
@@ -66,11 +67,17 @@ class ReprGenerator(Generator[ReprPlan]):
66
67
  fn=fnr,
67
68
  ))
68
69
 
70
+ drf: OpRef | None = None
71
+ if ctx.cs.default_repr_fn is not None:
72
+ drf = OpRef(f'repr.default_fn')
73
+ orm[drf] = ctx.cs.default_repr_fn
74
+
69
75
  return PlanResult(
70
76
  ReprPlan(
71
77
  fields=tuple(rfs),
72
78
  id=ctx.cs.repr_id,
73
79
  terse=ctx.cs.terse_repr,
80
+ default_fn=drf,
74
81
  ),
75
82
  orm,
76
83
  )
@@ -85,10 +92,16 @@ class ReprGenerator(Generator[ReprPlan]):
85
92
  if not (pl.terse and not f.kw_only):
86
93
  pfx = f'{f.name}='
87
94
 
95
+ fn: OpRef[ReprFn] | None = None
88
96
  if f.fn is not None:
89
- ors.add(f.fn)
97
+ fn = f.fn
98
+ elif pl.default_fn is not None:
99
+ fn = pl.default_fn
100
+
101
+ if fn is not None:
102
+ ors.add(fn)
90
103
  part_lines.extend([
91
- f' if (s := {f.fn.ident()}(self.{f.name})) is not None:',
104
+ f' if (s := {fn.ident()}(self.{f.name})) is not None:',
92
105
  f' parts.append(f"{pfx}{{s}}")',
93
106
  ])
94
107
  else:
@@ -1,6 +1,14 @@
1
+ """
2
+ TODO:
3
+ - better support anonymous / weakref'd / unlaoded modules / etc.
4
+ - anonymous=False on class spec?
5
+ """
1
6
  import dataclasses as dc
7
+ import threading
2
8
  import typing as ta
3
9
 
10
+ from ... import check
11
+
4
12
 
5
13
  ##
6
14
 
@@ -19,51 +27,104 @@ DEFAULT_PACKAGE_CONFIG = PackageConfig()
19
27
  ##
20
28
 
21
29
 
22
- def init_package(
23
- init_globals: ta.MutableMapping[str, ta.Any],
24
- *,
25
- codegen: bool = False,
26
- ) -> None:
27
- pass
30
+ @dc.dataclass(frozen=True)
31
+ class NamedPackageConfig:
32
+ pkg: str | None
33
+ cfg: PackageConfig
34
+
35
+
36
+ DEFAULT_NAMED_PACKAGE_CONFIG = NamedPackageConfig(None, DEFAULT_PACKAGE_CONFIG)
28
37
 
29
38
 
30
39
  ##
31
40
 
32
41
 
42
+ @ta.final
33
43
  class PackageConfigCache:
34
44
  def __init__(self) -> None:
35
45
  super().__init__()
36
46
 
37
- self._dct: dict[str, PackageConfig | None] = {}
38
-
39
- @ta.overload
40
- def get(self, pkg: str, default: PackageConfig) -> PackageConfig:
41
- ...
42
-
43
- @ta.overload
44
- def get(self, pkg: str, default: PackageConfig | None = None) -> PackageConfig | None:
45
- ...
46
-
47
- def get(self, pkg, default=None):
48
- # try:
49
- # return self._dct[pkg]
50
- # except KeyError:
51
- # pass
52
- #
53
- # try:
54
- # s = importlib.resources.read_text(pkg, PACKAGE_CONFIG_FILE_NAME)
55
- # except FileNotFoundError:
56
- # self._dct[pkg] = None
57
- # else:
58
- # c = PackageConfig.loads(s)
59
- # self._dct[pkg] = c
60
- # return c
61
- #
62
- # if '.' not in pkg:
63
- # return default
64
- #
65
- # return self.get(pkg.rpartition('.')[0], default)
66
- return None
47
+ self._lock = threading.Lock()
48
+ self._root = PackageConfigCache._Node('', None)
49
+ self._nodes: dict[str, PackageConfigCache._Node] = {}
50
+
51
+ @ta.final
52
+ class _Node:
53
+ def __init__(self, pkg: str, n_cfg: NamedPackageConfig | None) -> None:
54
+ self.pkg = pkg
55
+ self.n_cfg = n_cfg
56
+
57
+ self.children: dict[str, PackageConfigCache._Node] = {}
58
+
59
+ def __repr__(self) -> str:
60
+ return f'{self.__class__.__name__}(pkg={self.pkg!r}, n_cfg={self.n_cfg!r})'
61
+
62
+ def _navigate(self, *parts: str) -> _Node:
63
+ node = self._root
64
+ for i, p in enumerate(parts):
65
+ if (child := node.children.get(p)) is None:
66
+ child_pkg = '.'.join(parts[:i + 1])
67
+ check.not_in(child_pkg, self._nodes)
68
+ child = node.children[p] = self._nodes[child_pkg] = PackageConfigCache._Node(child_pkg, node.n_cfg)
69
+ node = child
70
+ return node
71
+
72
+ def put(self, pkg: str, cfg: PackageConfig) -> None:
73
+ n_cfg = NamedPackageConfig(pkg, cfg)
74
+ check.non_empty_str(pkg)
75
+ with self._lock:
76
+ check.not_in(pkg, self._nodes)
77
+ parts = pkg.split('.')
78
+ parent = self._navigate(*parts[:-1])
79
+ check.not_in(parts[-1], parent.children)
80
+ parent.children[parts[-1]] = self._nodes[pkg] = PackageConfigCache._Node(pkg, n_cfg)
81
+
82
+ def get(self, pkg: str) -> NamedPackageConfig | None:
83
+ if not pkg:
84
+ return None
85
+
86
+ try:
87
+ node = self._nodes[pkg]
88
+ except KeyError:
89
+ pass
90
+ else:
91
+ return node.n_cfg
92
+
93
+ # Flimsy - if no config anywhere for root package then don't cache. Want to support unlimited anonymous modules
94
+ # which may be unloaded without polluting cache forever.
95
+ parts = pkg.split('.')
96
+ if parts[0] not in self._root.children:
97
+ return None
98
+
99
+ with self._lock:
100
+ try:
101
+ node = self._nodes[pkg]
102
+ except KeyError:
103
+ pass
104
+ else:
105
+ return node.n_cfg
106
+
107
+ node = self._navigate(*pkg.split('.'))
108
+ return node.n_cfg
67
109
 
68
110
 
69
111
  PACKAGE_CONFIG_CACHE = PackageConfigCache()
112
+
113
+
114
+ ##
115
+
116
+
117
+ def init_package(
118
+ init_globals: ta.MutableMapping[str, ta.Any],
119
+ *,
120
+ codegen: bool = False,
121
+ ) -> None:
122
+ pkg = check.non_empty_str(init_globals['__package__'])
123
+ if init_globals['__name__'] not in (pkg, '__main__'):
124
+ raise NameError('Must call dataclasses.init_package from __init__')
125
+
126
+ pkg_cfg = PackageConfig(
127
+ codegen=codegen,
128
+ )
129
+
130
+ PACKAGE_CONFIG_CACHE.put(pkg, pkg_cfg)
@@ -64,7 +64,6 @@ class OpCompiler:
64
64
  f'import {i}'
65
65
  for i in FN_GLOBAL_IMPORTS
66
66
  ],
67
- '\n',
68
67
  ]
69
68
 
70
69
  def globals_ns(self) -> ta.Mapping[str, ta.Any]:
@@ -84,11 +83,14 @@ class OpCompiler:
84
83
  def style(self) -> Style:
85
84
  return self._style
86
85
 
87
- @dc.dataclass(frozen=True)
86
+ @dc.dataclass(frozen=True, kw_only=True)
88
87
  class CompileResult:
89
88
  fn_name: str
90
- params: ta.Sequence[str]
91
- src: str
89
+ fn_params: ta.Sequence[str]
90
+
91
+ hdr_lines: ta.Sequence[str]
92
+ fn_lines: ta.Sequence[str]
93
+
92
94
  refs: frozenset[Ref]
93
95
 
94
96
  @dc.dataclass(frozen=True)
@@ -137,7 +139,10 @@ class OpCompiler:
137
139
  ) -> CompileResult:
138
140
  body_lines: list[str] = []
139
141
 
140
- for op in ops:
142
+ for i, op in enumerate(ops):
143
+ if i:
144
+ body_lines.append('')
145
+
141
146
  if isinstance(op, SetAttrOp):
142
147
  if isinstance(v := op.value, OpRef):
143
148
  vs = v.ident()
@@ -202,8 +207,6 @@ class OpCompiler:
202
207
  else:
203
208
  raise TypeError(op)
204
209
 
205
- body_lines.append('')
206
-
207
210
  #
208
211
 
209
212
  refs = frozenset.union(*[get_op_refs(o) for o in ops])
@@ -226,14 +229,12 @@ class OpCompiler:
226
229
  src=f'{k.ident}={v.src}' if not v.src.startswith('.') else k.ident,
227
230
  noqa=k.ident != k.ident.lower() or not v.src.startswith('.'),
228
231
  )
229
- for k, v in FN_GLOBALS.items()
232
+ for k, v in sorted(FN_GLOBALS.items(), key=lambda t: t[0])
230
233
  ])
231
234
 
232
- lines: list[str] = []
233
-
234
- lines.extend(self._style.header_lines())
235
+ #
235
236
 
236
- lines.extend([
237
+ fn_lines = [
237
238
  f'def {fn_name}(',
238
239
  f' *,',
239
240
  *[
@@ -245,15 +246,16 @@ class OpCompiler:
245
246
  f' {l}'
246
247
  for l in body_lines
247
248
  ],
248
- ])
249
+ ]
249
250
 
250
251
  #
251
252
 
252
- src = '\n'.join(lines)
253
-
254
253
  return self.CompileResult(
255
- fn_name,
256
- [p.name for p in params],
257
- src,
258
- refs,
254
+ fn_name=fn_name,
255
+ fn_params=[p.name for p in params],
256
+
257
+ hdr_lines=self._style.header_lines(),
258
+ fn_lines=fn_lines,
259
+
260
+ refs=refs,
259
261
  )
@@ -12,6 +12,7 @@ from .idents import IDENT_PREFIX
12
12
  ##
13
13
 
14
14
 
15
+ @ta.final
15
16
  class FnGlobal(ta.NamedTuple):
16
17
  ident: str
17
18
 
@@ -16,6 +16,7 @@ class _OpRef(ta.NamedTuple, ta.Generic[T]):
16
16
  name: str
17
17
 
18
18
 
19
+ @ta.final
19
20
  class OpRef(_OpRef[T]):
20
21
  def __repr__(self) -> str:
21
22
  return f'OpRef(name={self.name!r})'