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
@@ -0,0 +1,15 @@
1
+ import typing as ta
2
+
3
+ from ._compat import compat
4
+
5
+
6
+ K = ta.TypeVar('K')
7
+ V = ta.TypeVar('V')
8
+
9
+
10
+ ##
11
+
12
+
13
+ @compat
14
+ class ImmutableMultiDict(ta.Mapping[K, V]):
15
+ pass
omlish/http/handlers.py CHANGED
@@ -7,6 +7,7 @@ import logging
7
7
  import typing as ta
8
8
 
9
9
  from ..lite.abstract import Abstract
10
+ from ..logs.protocols import LoggerLike
10
11
  from ..sockets.addresses import SocketAddress
11
12
  from .parsing import HttpHeaders
12
13
 
@@ -70,7 +71,7 @@ class HttpHandler_(Abstract): # noqa
70
71
  @dc.dataclass(frozen=True)
71
72
  class LoggingHttpHandler(HttpHandler_):
72
73
  handler: HttpHandler
73
- log: logging.Logger
74
+ log: LoggerLike
74
75
  level: int = logging.DEBUG
75
76
 
76
77
  def __call__(self, req: HttpHandlerRequest) -> HttpHandlerResponse:
@@ -83,7 +84,7 @@ class LoggingHttpHandler(HttpHandler_):
83
84
  @dc.dataclass(frozen=True)
84
85
  class ExceptionLoggingHttpHandler(HttpHandler_):
85
86
  handler: HttpHandler
86
- log: logging.Logger
87
+ log: LoggerLike
87
88
  message: ta.Union[str, ta.Callable[[HttpHandlerRequest, BaseException], str]] = 'Error in http handler'
88
89
 
89
90
  def __call__(self, req: HttpHandlerRequest) -> HttpHandlerResponse:
omlish/http/headers.py CHANGED
@@ -1,3 +1,5 @@
1
+ # @omlish-lite
2
+ # ruff: noqa: UP006 UP007
1
3
  """
2
4
  TODO:
3
5
  - handle secrets (but they're strs..)
@@ -5,40 +7,44 @@ TODO:
5
7
  import http.client
6
8
  import typing as ta
7
9
 
8
- from .. import cached
9
- from .. import check
10
- from .. import collections as col
10
+ from ..lite.cached import cached_nullary
11
+ from ..lite.cached import cached_property
12
+ from ..lite.check import check
11
13
 
12
14
 
13
- StrOrBytes: ta.TypeAlias = str | bytes
15
+ StrOrBytes = ta.Union[str, bytes] # ta.TypeAlias
14
16
 
15
17
 
16
18
  ##
17
19
 
18
20
 
19
- CanHttpHeaders: ta.TypeAlias = ta.Union[
21
+ CanHttpHeaders = ta.Union[ # ta.TypeAlias # omlish-amalg-typing-no-move
20
22
  'HttpHeaders',
21
23
 
22
24
  http.client.HTTPMessage,
23
25
 
24
26
  ta.Mapping[str, str],
25
27
  ta.Mapping[str, ta.Sequence[str]],
26
- ta.Mapping[str, str | ta.Sequence[str]],
28
+ ta.Mapping[str, ta.Union[str, ta.Sequence[str]]],
27
29
 
28
30
  ta.Mapping[bytes, bytes],
29
31
  ta.Mapping[bytes, ta.Sequence[bytes]],
30
- ta.Mapping[bytes, bytes | ta.Sequence[bytes]],
32
+ ta.Mapping[bytes, ta.Union[bytes, ta.Sequence[bytes]]],
31
33
 
32
34
  ta.Mapping[StrOrBytes, StrOrBytes],
33
35
  ta.Mapping[StrOrBytes, ta.Sequence[StrOrBytes]],
34
- ta.Mapping[StrOrBytes, StrOrBytes | ta.Sequence[StrOrBytes]],
36
+ ta.Mapping[StrOrBytes, ta.Union[StrOrBytes, ta.Sequence[StrOrBytes]]],
35
37
 
36
- ta.Sequence[tuple[str, str]],
37
- ta.Sequence[tuple[bytes, bytes]],
38
- ta.Sequence[tuple[StrOrBytes, StrOrBytes]],
38
+ ta.Sequence[ta.Tuple[str, str]],
39
+ ta.Sequence[ta.Tuple[bytes, bytes]],
40
+ ta.Sequence[ta.Tuple[StrOrBytes, StrOrBytes]],
39
41
  ]
40
42
 
41
43
 
44
+ class DuplicateHttpHeaderError(Exception):
45
+ pass
46
+
47
+
42
48
  class HttpHeaders:
43
49
  def __init__(self, src: CanHttpHeaders) -> None:
44
50
  super().__init__()
@@ -48,7 +54,7 @@ class HttpHeaders:
48
54
  return
49
55
 
50
56
  # TODO: optimized storage, 'use-whats-given'
51
- lst: list[tuple[bytes, bytes]] = []
57
+ lst: ta.List[ta.Tuple[bytes, bytes]] = []
52
58
  if isinstance(src, http.client.HTTPMessage):
53
59
  lst = [(self._as_bytes(k), self._as_bytes(v)) for k, v in src.items()]
54
60
 
@@ -98,55 +104,83 @@ class HttpHeaders:
98
104
 
99
105
  #
100
106
 
101
- @cached.function
107
+ @cached_nullary
102
108
  def __repr__(self) -> str:
103
109
  return f'{self.__class__.__name__}({{{", ".join(repr(k) for k in self.single_str_dct)}}})'
104
110
 
105
111
  #
106
112
 
107
113
  @property
108
- def raw(self) -> ta.Sequence[tuple[bytes, bytes]]:
114
+ def raw(self) -> ta.Sequence[ta.Tuple[bytes, bytes]]:
109
115
  return self._lst
110
116
 
111
117
  @classmethod
112
118
  def _as_key(cls, o: StrOrBytes) -> bytes:
113
119
  return cls._as_bytes(o).lower()
114
120
 
115
- @cached.property
116
- def normalized(self) -> ta.Sequence[tuple[bytes, bytes]]:
121
+ @cached_property
122
+ def normalized(self) -> ta.Sequence[ta.Tuple[bytes, bytes]]:
117
123
  return [(self._as_key(k), v) for k, v in self._lst]
118
124
 
119
125
  #
120
126
 
121
- @cached.property
127
+ @cached_property
122
128
  def multi_dct(self) -> ta.Mapping[bytes, ta.Sequence[bytes]]:
123
- return col.multi_map(self.normalized)
124
-
125
- @cached.property
129
+ d: ta.Dict[bytes, ta.List[bytes]] = {}
130
+ for k, v in self.normalized:
131
+ try:
132
+ l = d[k]
133
+ except KeyError:
134
+ l = d[k] = []
135
+ l.append(v)
136
+ return d
137
+
138
+ @cached_property
126
139
  def single_dct(self) -> ta.Mapping[bytes, bytes]:
127
140
  return {k: v[0] for k, v in self.multi_dct.items() if len(v) == 1}
128
141
 
129
- @cached.property
142
+ @cached_property
130
143
  def strict_dct(self) -> ta.Mapping[bytes, bytes]:
131
- return col.make_map(self.normalized, strict=True)
144
+ d: ta.Dict[bytes, bytes] = {}
145
+ for k, v in self.normalized:
146
+ if k in d:
147
+ if True:
148
+ raise DuplicateHttpHeaderError(k)
149
+ else:
150
+ d[k] = v
151
+ return d
132
152
 
133
153
  #
134
154
 
135
- @cached.property
136
- def strs(self) -> ta.Sequence[tuple[str, str]]:
155
+ @cached_property
156
+ def strs(self) -> ta.Sequence[ta.Tuple[str, str]]:
137
157
  return tuple((k.decode(self.ENCODING), v.decode(self.ENCODING)) for k, v in self.normalized)
138
158
 
139
- @cached.property
159
+ @cached_property
140
160
  def multi_str_dct(self) -> ta.Mapping[str, ta.Sequence[str]]:
141
- return col.multi_map(self.strs)
142
-
143
- @cached.property
161
+ d: ta.Dict[str, ta.List[str]] = {}
162
+ for k, v in self.strs:
163
+ try:
164
+ l = d[k]
165
+ except KeyError:
166
+ l = d[k] = []
167
+ l.append(v)
168
+ return d
169
+
170
+ @cached_property
144
171
  def single_str_dct(self) -> ta.Mapping[str, str]:
145
172
  return {k: v[0] for k, v in self.multi_str_dct.items() if len(v) == 1}
146
173
 
147
- @cached.property
174
+ @cached_property
148
175
  def strict_str_dct(self) -> ta.Mapping[str, str]:
149
- return col.make_map(self.strs, strict=True)
176
+ d: ta.Dict[str, str] = {}
177
+ for k, v in self.strs:
178
+ if k in d:
179
+ if True:
180
+ raise DuplicateHttpHeaderError(k)
181
+ else:
182
+ d[k] = v
183
+ return d
150
184
 
151
185
  #
152
186
 
@@ -156,7 +190,7 @@ class HttpHeaders:
156
190
  def __len__(self) -> int:
157
191
  return len(self._lst)
158
192
 
159
- def __iter__(self) -> ta.Iterator[tuple[bytes, bytes]]:
193
+ def __iter__(self) -> ta.Iterator[ta.Tuple[bytes, bytes]]:
160
194
  return iter(self._lst)
161
195
 
162
196
  @ta.overload
@@ -168,11 +202,11 @@ class HttpHeaders:
168
202
  ...
169
203
 
170
204
  @ta.overload
171
- def __getitem__(self, item: int) -> tuple[StrOrBytes, StrOrBytes]:
205
+ def __getitem__(self, item: int) -> ta.Tuple[StrOrBytes, StrOrBytes]:
172
206
  ...
173
207
 
174
208
  @ta.overload
175
- def __getitem__(self, item: slice) -> ta.Sequence[tuple[StrOrBytes, StrOrBytes]]:
209
+ def __getitem__(self, item: slice) -> ta.Sequence[ta.Tuple[StrOrBytes, StrOrBytes]]:
176
210
  ...
177
211
 
178
212
  def __getitem__(self, item):
@@ -188,14 +222,14 @@ class HttpHeaders:
188
222
  def keys(self) -> ta.Iterable[bytes]:
189
223
  return self.multi_dct.keys()
190
224
 
191
- def items(self) -> ta.Iterable[tuple[bytes, bytes]]:
225
+ def items(self) -> ta.Iterable[ta.Tuple[bytes, bytes]]:
192
226
  return self._lst
193
227
 
194
228
  #
195
229
 
196
230
  def update(
197
231
  self,
198
- *items: tuple[bytes, bytes], # FIXME: all arg types
232
+ *items: ta.Tuple[bytes, bytes], # FIXME: all arg types
199
233
  override: bool = False,
200
234
  ) -> 'HttpHeaders':
201
235
  if override:
omlish/http/sse.py CHANGED
@@ -82,7 +82,7 @@ class SseDecoder:
82
82
 
83
83
  return e
84
84
 
85
- def process_line(self, line: bytes) -> ta.Iterable[SseDecoderOutput]:
85
+ def process_line(self, line: bytes) -> ta.Iterator[SseDecoderOutput]:
86
86
  if b'\r' in line or b'\n' in line:
87
87
  raise ValueError(line)
88
88
 
omlish/http/urls.py ADDED
@@ -0,0 +1,67 @@
1
+ # ruff: noqa: UP006 UP007 UP045
2
+ # @omlish-lite
3
+ import re
4
+ import typing as ta
5
+ import urllib.parse
6
+
7
+ from ..lite.cached import cached_nullary
8
+
9
+
10
+ ##
11
+
12
+
13
+ @cached_nullary
14
+ def _url_split_host_pat() -> re.Pattern:
15
+ return re.compile('//([^/#?]*)(.*)', re.DOTALL)
16
+
17
+
18
+ def url_split_host(url: str) -> ta.Tuple[ta.Optional[str], str]:
19
+ """splithost('//host[:port]/path') --> 'host[:port]', '/path'."""
20
+
21
+ # https://github.com/python/cpython/blob/364ae607d8035db8ba92486ebebd8225446c1a90/Lib/urllib/parse.py#L1143
22
+ if not (m := _url_split_host_pat().match(url)):
23
+ return None, url
24
+
25
+ host_port, path = m.groups()
26
+ if path and path[0] != '/':
27
+ path = '/' + path
28
+ return host_port, path
29
+
30
+
31
+ ##
32
+
33
+
34
+ def unparse_url_request_path(url: ta.Union[str, urllib.parse.ParseResult]) -> str:
35
+ if isinstance(url, urllib.parse.ParseResult):
36
+ ups = url
37
+ else:
38
+ ups = urllib.parse.urlparse(url)
39
+
40
+ return urllib.parse.urlunparse((
41
+ '',
42
+ '',
43
+ ups.path,
44
+ ups.params,
45
+ ups.query,
46
+ ups.fragment,
47
+ ))
48
+
49
+
50
+ def parsed_url_replace(
51
+ url: urllib.parse.ParseResult,
52
+ *,
53
+ scheme: ta.Optional[str] = None,
54
+ netloc: ta.Optional[str] = None,
55
+ path: ta.Optional[str] = None,
56
+ params: ta.Optional[str] = None,
57
+ query: ta.Optional[str] = None,
58
+ fragment: ta.Optional[str] = None,
59
+ ) -> urllib.parse.ParseResult:
60
+ return urllib.parse.ParseResult(
61
+ scheme if scheme is not None else url.scheme,
62
+ netloc if netloc is not None else url.netloc,
63
+ path if path is not None else url.path,
64
+ params if params is not None else url.params,
65
+ query if query is not None else url.query,
66
+ fragment if fragment is not None else url.fragment,
67
+ )
omlish/inject/__init__.py CHANGED
@@ -13,129 +13,176 @@ _dc.init_package(
13
13
  ##
14
14
 
15
15
 
16
- from .binder import ( # noqa
17
- bind,
18
- bind_as_fn,
19
- bind_map_entry_const,
20
- bind_set_entry_const,
21
- )
22
-
23
- from .bindings import ( # noqa
24
- Binding,
25
- )
26
-
27
- from .eagers import ( # noqa
28
- Eager,
29
- )
30
-
31
- from .elements import ( # noqa
32
- Element,
33
- Elemental,
34
- Elements,
35
- as_elements,
36
- )
37
-
38
- from .errors import ( # noqa
39
- BaseKeyError,
40
- ConflictingKeyError,
41
- CyclicDependencyError,
42
- ScopeAlreadyOpenError,
43
- ScopeError,
44
- ScopeNotOpenError,
45
- UnboundKeyError,
46
- )
47
-
48
- from .injector import ( # noqa
49
- create_injector,
50
- Injector,
51
- )
52
-
53
- from .inspect import ( # noqa
54
- Kwarg,
55
- KwargsTarget,
56
- build_kwargs_target,
57
- tag,
58
- )
59
-
60
- from .keys import ( # noqa
61
- Key,
62
- as_key,
63
- )
64
-
65
- from .listeners import ( # noqa
66
- ProvisionListener,
67
- ProvisionListenerBinding,
68
- bind_provision_listener,
69
- )
70
-
71
- from .managed import ( # noqa
72
- create_async_managed_injector,
73
- create_managed_injector,
74
- make_async_managed_provider,
75
- make_managed_provider,
76
- )
77
-
78
- from .multis import ( # noqa
79
- MapBinding,
80
- MapProvider,
81
- SetBinding,
82
- SetProvider,
83
- MapBinder,
84
- SetBinder,
85
-
86
- MapBinder as map_binder, # noqa
87
- SetBinder as set_binder, # noqa
88
- )
89
-
90
-
91
- from .overrides import ( # noqa
92
- Overrides,
93
- override,
94
- )
95
-
96
- from .origins import ( # noqa
97
- HasOrigins,
98
- Origin,
99
- Origins,
100
- )
101
-
102
- from .privates import ( # noqa
103
- Expose,
104
- Private,
105
- private,
106
-
107
- Expose as expose, # noqa
108
- )
109
-
110
- from .providers import ( # noqa
111
- ConstProvider,
112
- CtorProvider,
113
- FnProvider,
114
- LinkProvider,
115
- Provider,
116
- )
117
-
118
- from .scopes import ( # noqa
119
- ScopeBinding,
120
- ScopeSeededProvider,
121
- SeededScope,
122
- Singleton,
123
- ThreadScope,
124
- bind_scope,
125
- bind_scope_seed,
126
- enter_seeded_scope,
127
- )
128
-
129
- from .tags import ( # noqa
130
- Id,
131
- )
132
-
133
- from .types import ( # noqa
134
- Scope,
135
- Tag,
136
- Unscoped,
137
- )
138
-
139
- from .utils import ( # noqa
140
- ConstFn,
141
- )
16
+ from .. import lang as _lang # noqa
17
+
18
+
19
+ with _lang.auto_proxy_init(globals()):
20
+ ##
21
+
22
+ from .helpers.constfn import ( # noqa
23
+ ConstFn,
24
+ )
25
+
26
+ from .helpers.id import ( # noqa
27
+ Id,
28
+ )
29
+
30
+ from .helpers.multis import ( # noqa
31
+ bind_map_entry_const,
32
+ bind_set_entry_const,
33
+
34
+ ItemsBinderHelper,
35
+ items_binder_helper,
36
+ )
37
+
38
+ from .helpers.wrappers import ( # noqa
39
+ WrapperBinderHelper,
40
+ wrapper_binder_helper,
41
+ )
42
+
43
+ from .binder import ( # noqa
44
+ bind,
45
+ bind_as_fn,
46
+ )
47
+
48
+ from .bindings import ( # noqa
49
+ Binding,
50
+ )
51
+
52
+ from .eagers import ( # noqa
53
+ Eager,
54
+ )
55
+
56
+ from .elements import ( # noqa
57
+ Element,
58
+ Elements,
59
+ Elemental,
60
+
61
+ as_elements,
62
+ iter_elements,
63
+
64
+ CollectedElements,
65
+ collect_elements,
66
+ )
67
+
68
+ from .errors import ( # noqa
69
+ BaseKeyError,
70
+ ConflictingKeyError,
71
+ CyclicDependencyError,
72
+ ScopeAlreadyOpenError,
73
+ ScopeError,
74
+ ScopeNotOpenError,
75
+ UnboundKeyError,
76
+ )
77
+
78
+ from .injector import ( # noqa
79
+ AsyncInjector,
80
+ create_async_injector,
81
+ )
82
+
83
+ from .inspect import ( # noqa
84
+ Kwarg,
85
+ KwargsTarget,
86
+ build_kwargs_target,
87
+ tag,
88
+ )
89
+
90
+ from .keys import ( # noqa
91
+ Key,
92
+ as_key,
93
+ )
94
+
95
+ from .listeners import ( # noqa
96
+ ProvisionListener,
97
+ ProvisionListenerBinding,
98
+ bind_provision_listener,
99
+ )
100
+
101
+ from .managed import ( # noqa
102
+ create_async_managed_injector,
103
+ make_async_managed_provider,
104
+
105
+ create_managed_injector,
106
+ make_managed_provider,
107
+
108
+ create_maysync_managed_injector,
109
+ make_maysync_managed_provider,
110
+ )
111
+
112
+ from .maysync import ( # noqa
113
+ MaysyncInjector,
114
+ create_maysync_injector,
115
+ )
116
+
117
+ from .multis import ( # noqa
118
+ is_set_multi_key,
119
+ SetBinding,
120
+ SetProvider,
121
+
122
+ is_map_multi_key,
123
+ MapBinding,
124
+ MapProvider,
125
+
126
+ SetBinder,
127
+ set_binder,
128
+
129
+ MapBinder,
130
+ map_binder,
131
+ )
132
+
133
+
134
+ from .overrides import ( # noqa
135
+ Overrides,
136
+ override,
137
+ )
138
+
139
+ from .origins import ( # noqa
140
+ HasOrigins,
141
+ Origin,
142
+ Origins,
143
+ )
144
+
145
+ from .privates import ( # noqa
146
+ Expose,
147
+ expose,
148
+
149
+ Private,
150
+ private,
151
+ )
152
+
153
+ from .providers import ( # noqa
154
+ AsyncFnProvider,
155
+ ConstProvider,
156
+ CtorProvider,
157
+ FnProvider,
158
+ LinkProvider,
159
+ Provider,
160
+ )
161
+
162
+ from .scopes import ( # noqa
163
+ ScopeBinding,
164
+ bind_scope,
165
+
166
+ Singleton,
167
+
168
+ ThreadScope,
169
+
170
+ SeededScope,
171
+ ScopeSeededProvider,
172
+ bind_scope_seed,
173
+
174
+ async_enter_seeded_scope,
175
+ enter_seeded_scope,
176
+ maysync_enter_seeded_scope,
177
+ )
178
+
179
+ from .sync import ( # noqa
180
+ Injector,
181
+ create_injector,
182
+ )
183
+
184
+ from .types import ( # noqa
185
+ Scope,
186
+ Tag,
187
+ Unscoped,
188
+ )