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
@@ -1,774 +0,0 @@
1
- """
2
- TODO:
3
- - PONG - optional *before* required ...
4
- - CAPABILITIES - ':' last param
5
-
6
- ==
7
-
8
- https://datatracker.ietf.org/doc/html/rfc2812
9
- https://modern.ircdocs.horse/
10
- """
11
- import typing as ta
12
-
13
- from .... import check
14
- from .... import dataclasses as dc
15
- from ..numerics import numerics as nr
16
- from .base import Message
17
- from .base import MessageFormat
18
- from .base import list_pair_params_unpacker
19
-
20
-
21
- ##
22
-
23
-
24
- _REGISTERED_IRC_MESSAGES_BY_NAME: dict[str, list[type['Message']]] = {}
25
-
26
-
27
- def _register_irc_message(cls):
28
- check.issubclass(cls, Message)
29
- _REGISTERED_IRC_MESSAGES_BY_NAME.setdefault(cls.FORMAT.name, []).append(cls)
30
- return cls
31
-
32
-
33
- ##
34
- # Connection Messages
35
-
36
-
37
- @_register_irc_message
38
- class CapMessage(Message):
39
- FORMAT = MessageFormat.of(
40
- 'CAP',
41
- 'subcommand',
42
- 'capabilities',
43
- )
44
-
45
- subcommand: str
46
- capabilities: ta.Sequence[str]
47
-
48
-
49
- @_register_irc_message
50
- class AuthenticateMessage(Message):
51
- FORMAT = MessageFormat.of('AUTHENTICATE')
52
-
53
-
54
- @_register_irc_message
55
- class PassMessage(Message):
56
- FORMAT = MessageFormat.of(
57
- 'PASS',
58
- 'password',
59
- )
60
-
61
- REPLIES = (
62
- nr.ERR_NEEDMOREPARAMS,
63
- nr.ERR_ALREADYREGISTERED,
64
- nr.ERR_PASSWDMISMATCH,
65
- )
66
-
67
- password: str
68
-
69
-
70
- @_register_irc_message
71
- class NickMessage(Message):
72
- FORMAT = MessageFormat.of(
73
- 'NICK',
74
- 'nickname',
75
- )
76
-
77
- REPLIES = (
78
- nr.ERR_NONICKNAMEGIVEN,
79
- nr.ERR_ERRONEUSNICKNAME,
80
- nr.ERR_NICKNAMEINUSE,
81
- nr.ERR_NICKCOLLISION,
82
- )
83
-
84
- nickname: str
85
-
86
-
87
- class UserMessage(Message):
88
- FORMAT = MessageFormat.of(
89
- 'USER',
90
- 'username',
91
- 'param1', # 0
92
- 'param2', # *
93
- 'realname',
94
- )
95
-
96
- REPLIES = (
97
- nr.ERR_NEEDMOREPARAMS,
98
- nr.ERR_ALREADYREGISTERED,
99
- )
100
-
101
- username: str
102
- realname: str
103
-
104
- param1: str = '8'
105
- param2: str = '*'
106
-
107
-
108
- @_register_irc_message
109
- class PingMessage(Message):
110
- FORMAT = MessageFormat.of(
111
- 'PING',
112
- 'token',
113
- )
114
-
115
- REPLIES = (
116
- nr.ERR_NEEDMOREPARAMS,
117
- nr.ERR_NOORIGIN,
118
- nr.ERR_NOSUCHSERVER,
119
- )
120
-
121
- token: str
122
-
123
-
124
- @_register_irc_message
125
- class PongMessage(Message):
126
- FORMAT = MessageFormat.of(
127
- 'PONG',
128
- '?server',
129
- 'token',
130
- )
131
-
132
- token: str
133
- server: str | None = None
134
-
135
-
136
- @_register_irc_message
137
- class OperMessage(Message):
138
- FORMAT = MessageFormat.of(
139
- 'OPER',
140
- 'name',
141
- 'password',
142
- )
143
-
144
- REPLIES = (
145
- nr.ERR_NEEDMOREPARAMS,
146
- nr.ERR_PASSWDMISMATCH,
147
- nr.ERR_NOOPERHOST,
148
- nr.RPL_YOUREOPER,
149
- )
150
-
151
- name: str
152
- password: str
153
-
154
-
155
- @_register_irc_message
156
- class QuitMessage(Message):
157
- FORMAT = MessageFormat.of(
158
- 'QUIT',
159
- '?reason',
160
- )
161
-
162
- reason: str | None = None
163
-
164
-
165
- @_register_irc_message
166
- class ErrorMessage(Message):
167
- FORMAT = MessageFormat.of(
168
- 'ERROR',
169
- '?reason',
170
- )
171
-
172
- reason: str | None = None
173
-
174
-
175
- ##
176
- # Channel Operations
177
-
178
-
179
- @_register_irc_message
180
- class JoinMessage(Message):
181
- FORMAT = MessageFormat.of(
182
- 'JOIN',
183
- ','
184
- 'channels', '?,keys',
185
- unpack_params=list_pair_params_unpacker(
186
- 'channels',
187
- 'channels',
188
- 'keys',
189
- ),
190
- )
191
-
192
- REPLIES = (
193
- nr.ERR_NEEDMOREPARAMS,
194
- nr.ERR_NOSUCHCHANNEL,
195
- nr.ERR_TOOMANYCHANNELS,
196
- nr.ERR_BADCHANNELKEY,
197
- nr.ERR_BANNEDFROMCHAN,
198
- nr.ERR_CHANNELISFULL,
199
- nr.ERR_INVITEONLYCHAN,
200
- nr.ERR_BADCHANMASK,
201
- nr.RPL_TOPIC,
202
- nr.RPL_TOPICWHOTIME,
203
- nr.RPL_NAMREPLY,
204
- nr.RPL_ENDOFNAMES,
205
- )
206
-
207
- channels: ta.Sequence[str | tuple[str, str]]
208
-
209
- @property
210
- def has_keys(self) -> bool:
211
- return check.single({isinstance(e, tuple) for e in self.channels})
212
-
213
- @dc.init
214
- def _validate_channels(self) -> None:
215
- check.not_isinstance(self.channels, str)
216
- if self.has_keys:
217
- for c, _ in self.channels: # type: ignore[misc]
218
- check.non_empty_str(c)
219
- else:
220
- for c in self.channels:
221
- check.non_empty_str(c) # type: ignore
222
-
223
-
224
- @_register_irc_message
225
- class LeaveAllJoinMessage(Message):
226
- FORMAT = MessageFormat.of(
227
- 'JOIN',
228
- MessageFormat.LiteralParam('0'),
229
- )
230
-
231
- REPLIES = JoinMessage.REPLIES
232
-
233
-
234
- @_register_irc_message
235
- class PartMessage(Message):
236
- FORMAT = MessageFormat.of(
237
- 'PART',
238
- ',channels',
239
- '?reason',
240
- )
241
-
242
- REPLIES = (
243
- nr.ERR_NEEDMOREPARAMS,
244
- nr.ERR_NOSUCHCHANNEL,
245
- nr.ERR_NOTONCHANNEL,
246
- )
247
-
248
- channels: ta.Sequence[str] = dc.xfield(validate=check.of_not_isinstance(str))
249
- reason: str | None = None
250
-
251
-
252
- @_register_irc_message
253
- class TopicMessage(Message):
254
- FORMAT = MessageFormat.of(
255
- 'TOPIC',
256
- 'channel',
257
- '?topic',
258
- )
259
-
260
- REPLIES = (
261
- nr.ERR_NEEDMOREPARAMS,
262
- nr.ERR_NOSUCHCHANNEL,
263
- nr.ERR_NOTONCHANNEL,
264
- nr.ERR_CHANOPRIVSNEEDED,
265
- nr.RPL_NOTOPIC,
266
- nr.RPL_TOPIC,
267
- nr.RPL_TOPICWHOTIME,
268
- )
269
-
270
- channel: str
271
- topic: str | None = None
272
-
273
-
274
- @_register_irc_message
275
- class NamesMessage(Message):
276
- FORMAT = MessageFormat.of(
277
- 'NAMES',
278
- ',channels',
279
- )
280
-
281
- REPLIES = (
282
- nr.RPL_NAMREPLY,
283
- nr.RPL_ENDOFNAMES,
284
- )
285
-
286
- channels: ta.Sequence[str] = dc.xfield(validate=check.of_not_isinstance(str))
287
-
288
-
289
- @_register_irc_message
290
- class ListMessage(Message):
291
- FORMAT = MessageFormat.of(
292
- 'LIST',
293
- '?,channels',
294
- '?,elistconds',
295
- )
296
-
297
- REPLIES = (
298
- nr.RPL_LISTSTART,
299
- nr.RPL_LIST,
300
- nr.RPL_LISTEND,
301
- )
302
-
303
- channels: ta.Sequence[str]
304
- elistconds: ta.Sequence[str]
305
-
306
-
307
- @_register_irc_message
308
- class InviteMessage(Message):
309
- FORMAT = MessageFormat.of(
310
- 'INVITE',
311
- 'nickname',
312
- 'channel',
313
- )
314
-
315
- REPLIES = (
316
- nr.RPL_INVITING,
317
- nr.ERR_NEEDMOREPARAMS,
318
- nr.ERR_NOSUCHCHANNEL,
319
- nr.ERR_NOTONCHANNEL,
320
- nr.ERR_CHANOPRIVSNEEDED,
321
- nr.ERR_USERONCHANNEL,
322
- )
323
-
324
- nickname: str
325
- channel: str
326
-
327
-
328
- @_register_irc_message
329
- class KickMessage(Message):
330
- FORMAT = MessageFormat.of(
331
- 'KICK',
332
- 'channel',
333
- ',users',
334
- '?comment',
335
- )
336
-
337
- REPLIES = (
338
- nr.ERR_NEEDMOREPARAMS,
339
- nr.ERR_NOSUCHCHANNEL,
340
- nr.ERR_CHANOPRIVSNEEDED,
341
- nr.ERR_USERNOTINCHANNEL,
342
- nr.ERR_NOTONCHANNEL,
343
- nr.ERR_BADCHANMASK,
344
- )
345
-
346
- channel: str
347
- users: ta.Sequence[str]
348
- comment: str | None = None
349
-
350
-
351
- ##
352
- # Server Queries and Commands
353
-
354
-
355
- @_register_irc_message
356
- class MotdMessage(Message):
357
- FORMAT = MessageFormat.of(
358
- 'MOTD',
359
- '?target',
360
- )
361
-
362
- REPLIES = (
363
- nr.ERR_NOSUCHSERVER,
364
- nr.ERR_NOMOTD,
365
- nr.RPL_MOTDSTART,
366
- nr.RPL_MOTD,
367
- nr.RPL_ENDOFMOTD,
368
- )
369
-
370
- target: str | None = None
371
-
372
-
373
- @_register_irc_message
374
- class VersionMessage(Message):
375
- FORMAT = MessageFormat.of(
376
- 'VERSION',
377
- '?target',
378
- )
379
-
380
- REPLIES = (
381
- nr.ERR_NOSUCHSERVER,
382
- nr.RPL_ISUPPORT,
383
- nr.RPL_VERSION,
384
- )
385
-
386
- target: str | None = None
387
-
388
-
389
- @_register_irc_message
390
- class AdminMessage(Message):
391
- FORMAT = MessageFormat.of(
392
- 'ADMIN',
393
- '?target',
394
- )
395
-
396
- REPLIES = (
397
- nr.ERR_NOSUCHSERVER,
398
- nr.RPL_ADMINME,
399
- nr.RPL_ADMINLOC1,
400
- nr.RPL_ADMINLOC2,
401
- nr.RPL_ADMINEMAIL,
402
- )
403
-
404
- target: str | None = None
405
-
406
-
407
- @_register_irc_message
408
- class ConnectMessage(Message):
409
- FORMAT = MessageFormat.of(
410
- 'CONNECT',
411
- 'target_server',
412
- '?port',
413
- '?remote_server',
414
- )
415
-
416
- REPLIES = (
417
- nr.ERR_NOSUCHSERVER,
418
- nr.ERR_NEEDMOREPARAMS,
419
- nr.ERR_NOPRIVILEGES,
420
- nr.ERR_NOPRIVS,
421
- )
422
-
423
- target_server: str
424
- port: str | None = None
425
- remote_server: str | None = None
426
-
427
-
428
- @_register_irc_message
429
- class LusersMessage(Message):
430
- FORMAT = MessageFormat.of('LUSERS')
431
-
432
- REPLIES = (
433
- nr.RPL_LUSERCLIENT,
434
- nr.RPL_LUSEROP,
435
- nr.RPL_LUSERUNKNOWN,
436
- nr.RPL_LUSERCHANNELS,
437
- nr.RPL_LUSERME,
438
- nr.RPL_LOCALUSERS,
439
- nr.RPL_GLOBALUSERS,
440
- )
441
-
442
-
443
- @_register_irc_message
444
- class TimeMessage(Message):
445
- FORMAT = MessageFormat.of(
446
- 'TIME',
447
- '?server',
448
- )
449
-
450
- REPLIES = (
451
- nr.ERR_NOSUCHSERVER,
452
- nr.RPL_TIME,
453
- )
454
-
455
- server: str | None = None
456
-
457
-
458
- @_register_irc_message
459
- class StatsMessage(Message):
460
- FORMAT = MessageFormat.of(
461
- 'STATS',
462
- 'query',
463
- '?server',
464
- )
465
-
466
- REPLIES = (
467
- nr.ERR_NOSUCHSERVER,
468
- nr.ERR_NEEDMOREPARAMS,
469
- nr.ERR_NOPRIVILEGES,
470
- nr.ERR_NOPRIVS,
471
- nr.RPL_STATSCLINE,
472
- nr.RPL_STATSHLINE,
473
- nr.RPL_STATSILINE,
474
- nr.RPL_STATSKLINE,
475
- nr.RPL_STATSLLINE,
476
- nr.RPL_STATSOLINE,
477
- nr.RPL_STATSLINKINFO,
478
- nr.RPL_STATSUPTIME,
479
- nr.RPL_STATSCOMMANDS,
480
- nr.RPL_ENDOFSTATS,
481
- )
482
-
483
- query: str
484
- server: str | None = None
485
-
486
-
487
- @_register_irc_message
488
- class HelpMessage(Message):
489
- FORMAT = MessageFormat.of(
490
- 'HELP',
491
- '?subject',
492
- )
493
-
494
- REPLIES = (
495
- nr.ERR_HELPNOTFOUND,
496
- nr.RPL_HELPSTART,
497
- nr.RPL_HELPTXT,
498
- nr.RPL_ENDOFHELP,
499
- )
500
-
501
- subject: str | None = None
502
-
503
-
504
- @_register_irc_message
505
- class InfoMessage(Message):
506
- FORMAT = MessageFormat.of('INFO')
507
-
508
- REPLIES = (
509
- nr.RPL_INFO,
510
- nr.RPL_ENDOFINFO,
511
- )
512
-
513
-
514
- @_register_irc_message
515
- class ModeMessage(Message):
516
- FORMAT = MessageFormat.of(
517
- 'MODE',
518
- 'target',
519
- '?modestring',
520
- '*mode_arguments',
521
- )
522
-
523
- REPLIES = (
524
- nr.ERR_NOSUCHCHANNEL,
525
- nr.RPL_CHANNELMODEIS,
526
- nr.RPL_CREATIONTIME,
527
- nr.RPL_CHANNELMODEIS,
528
- nr.ERR_CHANOPRIVSNEEDED,
529
- nr.RPL_BANLIST,
530
- nr.RPL_ENDOFBANLIST,
531
- nr.RPL_EXCEPTLIST,
532
- nr.RPL_ENDOFEXCEPTLIST,
533
- nr.RPL_INVITELIST,
534
- nr.RPL_ENDOFINVITELIST,
535
- )
536
-
537
- target: str
538
- modestring: str | None = None
539
- mode_arguments: ta.Sequence[str] | None = None
540
-
541
-
542
- ##
543
- # Sending Messages
544
-
545
-
546
- @_register_irc_message
547
- class PrivmsgMessage(Message):
548
- FORMAT = MessageFormat.of(
549
- 'PRIVMSG',
550
- ',targets',
551
- 'text',
552
- )
553
-
554
- REPLIES = (
555
- nr.ERR_NOSUCHNICK,
556
- nr.ERR_NOSUCHSERVER,
557
- nr.ERR_CANNOTSENDTOCHAN,
558
- nr.ERR_TOOMANYTARGETS,
559
- nr.ERR_NORECIPIENT,
560
- nr.ERR_NOTEXTTOSEND,
561
- nr.ERR_NOTOPLEVEL,
562
- nr.ERR_WILDTOPLEVEL,
563
- nr.RPL_AWAY,
564
- )
565
-
566
- targets: ta.Sequence[str]
567
- text: str
568
-
569
-
570
- @_register_irc_message
571
- class NoticeMessage(Message):
572
- FORMAT = MessageFormat.of(
573
- 'NOTICE',
574
- ',targets',
575
- 'text',
576
- )
577
-
578
- targets: ta.Sequence[str]
579
- text: str
580
-
581
-
582
- ##
583
- # User-Based Queries
584
-
585
- @_register_irc_message
586
- class WhoMessage(Message):
587
- FORMAT = MessageFormat.of(
588
- 'WHO',
589
- 'mask',
590
- )
591
-
592
- REPLIES = (
593
- nr.RPL_WHOREPLY,
594
- nr.RPL_ENDOFWHO,
595
- )
596
-
597
- mask: str
598
-
599
-
600
- @_register_irc_message
601
- class WhoisMessage(Message):
602
- FORMAT = MessageFormat.of(
603
- 'WHOIS',
604
- '?target',
605
- 'nick',
606
- )
607
-
608
- REPLIES = (
609
- nr.ERR_NOSUCHNICK,
610
- nr.ERR_NOSUCHSERVER,
611
- nr.ERR_NONICKNAMEGIVEN,
612
- nr.RPL_WHOISCERTFP,
613
- nr.RPL_WHOISREGNICK,
614
- nr.RPL_WHOISUSER,
615
- nr.RPL_WHOISSERVER,
616
- nr.RPL_WHOISOPERATOR,
617
- nr.RPL_WHOISIDLE,
618
- nr.RPL_WHOISCHANNELS,
619
- nr.RPL_WHOISSPECIAL,
620
- nr.RPL_WHOISACCOUNT,
621
- nr.RPL_WHOISACTUALLY,
622
- nr.RPL_WHOISHOST,
623
- nr.RPL_WHOISMODES,
624
- nr.RPL_WHOISSECURE,
625
- nr.RPL_AWAY,
626
- )
627
-
628
- nick: str
629
- target: str | None = None
630
-
631
-
632
- @_register_irc_message
633
- class WhowasMessage(Message):
634
- FORMAT = MessageFormat.of(
635
- 'WHOWAS',
636
- 'nick',
637
- '?count',
638
- )
639
-
640
- REPLIES = (
641
- nr.ERR_WASNOSUCHNICK,
642
- nr.RPL_ENDOFWHOWAS,
643
- nr.RPL_WHOWASUSER,
644
- nr.RPL_WHOISACTUALLY,
645
- nr.RPL_WHOISSERVER,
646
- nr.RPL_WHOWASUSER,
647
- nr.ERR_NONICKNAMEGIVEN,
648
- nr.ERR_NEEDMOREPARAMS,
649
- )
650
-
651
- nick: str
652
- count: str | None = None
653
-
654
-
655
- ##
656
- # Operator Messages
657
-
658
-
659
- @_register_irc_message
660
- class KillMessage(Message):
661
- FORMAT = MessageFormat.of(
662
- 'KILL',
663
- 'nickname',
664
- 'comment',
665
- )
666
-
667
- REPLIES = (
668
- nr.ERR_NOSUCHSERVER,
669
- nr.ERR_NEEDMOREPARAMS,
670
- nr.ERR_NOPRIVILEGES,
671
- nr.ERR_NOPRIVS,
672
- )
673
-
674
- nickname: str
675
- comment: str
676
-
677
-
678
- @_register_irc_message
679
- class RehashMessage(Message):
680
- FORMAT = MessageFormat.of('REHASH')
681
-
682
- REPLIES = (
683
- nr.RPL_REHASHING,
684
- nr.ERR_NOPRIVILEGES,
685
- )
686
-
687
-
688
- @_register_irc_message
689
- class RestartMessage(Message):
690
- FORMAT = MessageFormat.of('RESTART')
691
-
692
- REPLIES = (
693
- nr.ERR_NOPRIVILEGES,
694
- )
695
-
696
-
697
- @_register_irc_message
698
- class SquitMessage(Message):
699
- FORMAT = MessageFormat.of(
700
- 'SQUIT',
701
- 'server',
702
- 'comment',
703
- )
704
-
705
- REPLIES = (
706
- nr.ERR_NOSUCHSERVER,
707
- nr.ERR_NEEDMOREPARAMS,
708
- nr.ERR_NOPRIVILEGES,
709
- nr.ERR_NOPRIVS,
710
- )
711
-
712
- server: str
713
- comment: str
714
-
715
-
716
- ##
717
- # Optional Messages
718
-
719
-
720
- @_register_irc_message
721
- class AwayMessage(Message):
722
- FORMAT = MessageFormat.of(
723
- 'AWAY',
724
- '?text',
725
- )
726
-
727
- REPLIES = (
728
- nr.RPL_AWAY,
729
- nr.RPL_UNAWAY,
730
- nr.RPL_NOWAWAY,
731
- )
732
-
733
- text: str | None = None
734
-
735
-
736
- @_register_irc_message
737
- class LinksMessage(Message):
738
- FORMAT = MessageFormat.of('LINKS')
739
-
740
- REPLIES = (
741
- nr.RPL_LINKS,
742
- nr.RPL_ENDOFLINKS,
743
- )
744
-
745
-
746
- @_register_irc_message
747
- class UserhostMessage(Message):
748
- FORMAT = MessageFormat.of(
749
- 'USERHOST',
750
- '*nicknames',
751
- )
752
-
753
- REPLIES = (
754
- nr.ERR_NEEDMOREPARAMS,
755
- nr.RPL_USERHOST,
756
- )
757
-
758
- nicknames: ta.Sequence[str] | None = dc.xfield(default=None, validate=check.of_not_isinstance(str))
759
-
760
-
761
- @_register_irc_message
762
- class WallopsMessage(Message):
763
- FORMAT = MessageFormat.of(
764
- 'WALLOPS',
765
- 'text',
766
- )
767
-
768
- REPLIES = (
769
- nr.ERR_NEEDMOREPARAMS,
770
- nr.ERR_NOPRIVILEGES,
771
- nr.ERR_NOPRIVS,
772
- )
773
-
774
- text: str