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/lite/pycharm.py CHANGED
@@ -6,7 +6,7 @@ import typing as ta
6
6
  ##
7
7
 
8
8
 
9
- DEFAULT_PYCHARM_VERSION = '242.23726.102'
9
+ DEFAULT_PYCHARM_VERSION = '252.26199.168'
10
10
 
11
11
 
12
12
  @dc.dataclass(frozen=True)
omlish/lite/strings.py CHANGED
@@ -73,13 +73,6 @@ def split_keep_delimiter(s, d):
73
73
  ##
74
74
 
75
75
 
76
- def attr_repr(obj: ta.Any, *attrs: str) -> str:
77
- return f'{type(obj).__name__}({", ".join(f"{attr}={getattr(obj, attr)!r}" for attr in attrs)})'
78
-
79
-
80
- ##
81
-
82
-
83
76
  FORMAT_NUM_BYTES_SUFFIXES: ta.Sequence[str] = ['B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB']
84
77
 
85
78
 
omlish/lite/timing.py CHANGED
@@ -1,6 +1,9 @@
1
- from ..logs.timing import LogTimingContext
2
- from ..logs.timing import log_timing_context
3
- from .logs import log
1
+ from ..logs.modules import get_module_logger
2
+ from ..logs.utils import LogTimingContext
3
+ from ..logs.utils import log_timing_context
4
+
5
+
6
+ log = get_module_logger(globals()) # noqa
4
7
 
5
8
 
6
9
  LogTimingContext.DEFAULT_LOG = log
omlish/lite/typing.py CHANGED
@@ -12,6 +12,12 @@ A2 = ta.TypeVar('A2')
12
12
 
13
13
  ##
14
14
  # A workaround for typing deficiencies (like `Argument 2 to NewType(...) must be subclassable`).
15
+ #
16
+ # Note that this problem doesn't happen at runtime - it happens in mypy:
17
+ #
18
+ # mypy <(echo "import typing as ta; MyCallback = ta.NewType('MyCallback', ta.Callable[[], None])")
19
+ # /dev/fd/11:1:22: error: Argument 2 to NewType(...) must be subclassable (got "Callable[[], None]") [valid-newtype]
20
+ #
15
21
 
16
22
 
17
23
  @dc.dataclass(frozen=True)
omlish/logs/_amalg.py ADDED
@@ -0,0 +1,8 @@
1
+ # @omlish-lite
2
+ # @omlish-amalg ../../omdev/scripts/lib/logs.py
3
+ from .base import AnyLogger # noqa
4
+ from .standard import configure_standard_logging # noqa
5
+ from .std.loggers import StdLogger # noqa
6
+
7
+
8
+ ##
omlish/logs/all.py CHANGED
@@ -5,64 +5,92 @@ from .. import lang as _lang
5
5
  with _lang.auto_proxy_init(globals()):
6
6
  ##
7
7
 
8
- from .callers import ( # noqa
9
- LoggingCaller,
8
+ from .std.filters import ( # noqa
9
+ TidLoggingFilter,
10
10
  )
11
11
 
12
- from .color import ( # noqa
13
- ColorLogFormatter,
12
+ from .std.formatters import ( # noqa
13
+ StdLoggingFormatter,
14
14
  )
15
15
 
16
- from .filters import ( # noqa
17
- TidLogFilter,
16
+ from .std.handlers import ( # noqa
17
+ ListLoggingHandler,
18
18
  )
19
19
 
20
- from .handlers import ( # noqa
21
- ListHandler,
20
+ from .std.json import ( # noqa
21
+ JsonLoggingFormatter,
22
22
  )
23
23
 
24
- from .json import ( # noqa
25
- JsonLogFormatter,
24
+ from .std.loggers import ( # noqa
25
+ StdLogger,
26
26
  )
27
27
 
28
- from .levels import ( # noqa
29
- LogLevel,
28
+ from .std.noisy import ( # noqa
29
+ silence_noisy_loggers,
30
30
  )
31
31
 
32
- from .noisy import ( # noqa
33
- silence_noisy_loggers,
32
+ from .std.proxy import ( # noqa
33
+ ProxyLoggingFilterer,
34
+ ProxyLoggingHandler,
35
+ )
36
+
37
+ from .std.records import ( # noqa
38
+ LoggingContextLogRecord,
39
+ )
40
+
41
+ from .base import ( # noqa
42
+ AnyLogger,
43
+ Logger,
44
+ AsyncLogger,
45
+
46
+ AnyNopLogger,
47
+ NopLogger,
48
+ AsyncNopLogger,
49
+ )
50
+
51
+ from .contexts import ( # noqa
52
+ LoggingContext,
34
53
  )
35
54
 
36
- from .protocol import ( # noqa
37
- AnyLogging,
38
- Logging,
39
- AsyncLogging,
55
+ from .formatters import ( # noqa
56
+ LoggingContextFormatter,
57
+ )
40
58
 
41
- AnyAbstractLogging,
42
- AbstractLogging,
43
- AbstractAsyncLogging,
59
+ from .infos import ( # noqa
60
+ LoggingContextInfo,
61
+ LoggingContextInfos,
62
+ )
63
+
64
+ from .levels import ( # noqa
65
+ LogLevel,
44
66
 
45
- AnyNopLogging,
46
- NopLogging,
47
- NopAsyncLogging,
67
+ NamedLogLevel,
68
+ )
48
69
 
49
- StdlibLogging,
70
+ from .modules import ( # noqa
71
+ get_module_logger,
50
72
  )
51
73
 
52
- from .proxy import ( # noqa
53
- ProxyLogFilterer,
54
- ProxyLogHandler,
74
+ from .protocols import ( # noqa
75
+ LoggerLike,
55
76
  )
56
77
 
57
78
  from .standard import ( # noqa
58
79
  STANDARD_LOG_FORMAT_PARTS,
59
- StandardLogFormatter,
80
+ StandardLoggingFormatter,
60
81
 
61
- StandardConfiguredLogHandler,
82
+ StandardConfiguredLoggingHandler,
62
83
 
63
84
  configure_standard_logging,
64
85
  )
65
86
 
66
87
  from .utils import ( # noqa
67
- error_logging,
88
+ LogTimingContext,
89
+ log_timing_context,
90
+
91
+ exception_logging,
92
+ )
93
+
94
+ from .warnings import ( # noqa
95
+ LoggingSetupWarning,
68
96
  )
omlish/logs/base.py ADDED
@@ -0,0 +1,204 @@
1
+ # ruff: noqa: UP006 UP007 UP045 UP046
2
+ # @omlish-lite
3
+ import abc
4
+ import typing as ta
5
+
6
+ from ..lite.abstract import Abstract
7
+ from .contexts import CaptureLoggingContext
8
+ from .contexts import CaptureLoggingContextImpl
9
+ from .contexts import LoggingExcInfoArg
10
+ from .levels import LogLevel
11
+ from .levels import NamedLogLevel
12
+
13
+
14
+ T = ta.TypeVar('T')
15
+
16
+
17
+ LoggingMsgFn = ta.Callable[[], ta.Union[str, tuple]] # ta.TypeAlias
18
+
19
+
20
+ ##
21
+
22
+
23
+ class AnyLogger(Abstract, ta.Generic[T]):
24
+ def is_enabled_for(self, level: LogLevel) -> bool:
25
+ return level >= self.get_effective_level()
26
+
27
+ @abc.abstractmethod
28
+ def get_effective_level(self) -> LogLevel:
29
+ raise NotImplementedError
30
+
31
+ #
32
+
33
+ @ta.final
34
+ def isEnabledFor(self, level: LogLevel) -> bool: # noqa
35
+ return self.is_enabled_for(level)
36
+
37
+ @ta.final
38
+ def getEffectiveLevel(self) -> LogLevel: # noqa
39
+ return self.get_effective_level()
40
+
41
+ ##
42
+
43
+ @ta.overload
44
+ def log(self, level: LogLevel, msg: str, *args: ta.Any, **kwargs: ta.Any) -> T:
45
+ ...
46
+
47
+ @ta.overload
48
+ def log(self, level: LogLevel, msg: ta.Tuple[ta.Any, ...], **kwargs: ta.Any) -> T:
49
+ ...
50
+
51
+ @ta.overload
52
+ def log(self, level: LogLevel, msg_fn: LoggingMsgFn, **kwargs: ta.Any) -> T:
53
+ ...
54
+
55
+ @ta.final
56
+ def log(self, level: LogLevel, *args, **kwargs):
57
+ return self._log(CaptureLoggingContextImpl(level, stack_offset=1), *args, **kwargs)
58
+
59
+ #
60
+
61
+ @ta.overload
62
+ def debug(self, msg: str, *args: ta.Any, **kwargs: ta.Any) -> T:
63
+ ...
64
+
65
+ @ta.overload
66
+ def debug(self, msg: ta.Tuple[ta.Any, ...], **kwargs: ta.Any) -> T:
67
+ ...
68
+
69
+ @ta.overload
70
+ def debug(self, msg_fn: LoggingMsgFn, **kwargs: ta.Any) -> T:
71
+ ...
72
+
73
+ @ta.final
74
+ def debug(self, *args, **kwargs):
75
+ return self._log(CaptureLoggingContextImpl(NamedLogLevel.DEBUG, stack_offset=1), *args, **kwargs)
76
+
77
+ #
78
+
79
+ @ta.overload
80
+ def info(self, msg: str, *args: ta.Any, **kwargs: ta.Any) -> T:
81
+ ...
82
+
83
+ @ta.overload
84
+ def info(self, msg: ta.Tuple[ta.Any, ...], **kwargs: ta.Any) -> T:
85
+ ...
86
+
87
+ @ta.overload
88
+ def info(self, msg_fn: LoggingMsgFn, **kwargs: ta.Any) -> T:
89
+ ...
90
+
91
+ @ta.final
92
+ def info(self, *args, **kwargs):
93
+ return self._log(CaptureLoggingContextImpl(NamedLogLevel.INFO, stack_offset=1), *args, **kwargs)
94
+
95
+ #
96
+
97
+ @ta.overload
98
+ def warning(self, msg: str, *args: ta.Any, **kwargs: ta.Any) -> T:
99
+ ...
100
+
101
+ @ta.overload
102
+ def warning(self, msg: ta.Tuple[ta.Any, ...], **kwargs: ta.Any) -> T:
103
+ ...
104
+
105
+ @ta.overload
106
+ def warning(self, msg_fn: LoggingMsgFn, **kwargs: ta.Any) -> T:
107
+ ...
108
+
109
+ @ta.final
110
+ def warning(self, *args, **kwargs):
111
+ return self._log(CaptureLoggingContextImpl(NamedLogLevel.WARNING, stack_offset=1), *args, **kwargs)
112
+
113
+ #
114
+
115
+ @ta.overload
116
+ def error(self, msg: str, *args: ta.Any, **kwargs: ta.Any) -> T:
117
+ ...
118
+
119
+ @ta.overload
120
+ def error(self, msg: ta.Tuple[ta.Any, ...], **kwargs: ta.Any) -> T:
121
+ ...
122
+
123
+ @ta.overload
124
+ def error(self, msg_fn: LoggingMsgFn, **kwargs: ta.Any) -> T:
125
+ ...
126
+
127
+ @ta.final
128
+ def error(self, *args, **kwargs):
129
+ return self._log(CaptureLoggingContextImpl(NamedLogLevel.ERROR, stack_offset=1), *args, **kwargs)
130
+
131
+ #
132
+
133
+ @ta.overload
134
+ def exception(self, msg: str, *args: ta.Any, exc_info: LoggingExcInfoArg = True, **kwargs: ta.Any) -> T:
135
+ ...
136
+
137
+ @ta.overload
138
+ def exception(self, msg: ta.Tuple[ta.Any, ...], *, exc_info: LoggingExcInfoArg = True, **kwargs: ta.Any) -> T:
139
+ ...
140
+
141
+ @ta.overload
142
+ def exception(self, msg_fn: LoggingMsgFn, *, exc_info: LoggingExcInfoArg = True, **kwargs: ta.Any) -> T:
143
+ ...
144
+
145
+ @ta.final
146
+ def exception(self, *args, exc_info: LoggingExcInfoArg = True, **kwargs):
147
+ return self._log(CaptureLoggingContextImpl(NamedLogLevel.ERROR, exc_info=exc_info, stack_offset=1), *args, **kwargs) # noqa
148
+
149
+ #
150
+
151
+ @ta.overload
152
+ def critical(self, msg: str, *args: ta.Any, **kwargs: ta.Any) -> T:
153
+ ...
154
+
155
+ @ta.overload
156
+ def critical(self, msg: ta.Tuple[ta.Any, ...], **kwargs: ta.Any) -> T:
157
+ ...
158
+
159
+ @ta.overload
160
+ def critical(self, msg_fn: LoggingMsgFn, **kwargs: ta.Any) -> T:
161
+ ...
162
+
163
+ @ta.final
164
+ def critical(self, *args, **kwargs):
165
+ return self._log(CaptureLoggingContextImpl(NamedLogLevel.CRITICAL, stack_offset=1), *args, **kwargs)
166
+
167
+ ##
168
+
169
+ @abc.abstractmethod
170
+ def _log(self, ctx: CaptureLoggingContext, msg: ta.Union[str, tuple, LoggingMsgFn], *args: ta.Any, **kwargs: ta.Any) -> T: # noqa
171
+ raise NotImplementedError
172
+
173
+
174
+ class Logger(AnyLogger[None], Abstract):
175
+ @abc.abstractmethod
176
+ def _log(self, ctx: CaptureLoggingContext, msg: ta.Union[str, tuple, LoggingMsgFn], *args: ta.Any, **kwargs: ta.Any) -> None: # noqa
177
+ raise NotImplementedError
178
+
179
+
180
+ class AsyncLogger(AnyLogger[ta.Awaitable[None]], Abstract):
181
+ @abc.abstractmethod
182
+ def _log(self, ctx: CaptureLoggingContext, msg: ta.Union[str, tuple, LoggingMsgFn], *args: ta.Any, **kwargs: ta.Any) -> ta.Awaitable[None]: # noqa
183
+ raise NotImplementedError
184
+
185
+
186
+ ##
187
+
188
+
189
+ class AnyNopLogger(AnyLogger[T], Abstract):
190
+ @ta.final
191
+ def get_effective_level(self) -> LogLevel:
192
+ return -999
193
+
194
+
195
+ @ta.final
196
+ class NopLogger(AnyNopLogger[None], Logger):
197
+ def _log(self, ctx: CaptureLoggingContext, msg: ta.Union[str, tuple, LoggingMsgFn], *args: ta.Any, **kwargs: ta.Any) -> None: # noqa
198
+ pass
199
+
200
+
201
+ @ta.final
202
+ class AsyncNopLogger(AnyNopLogger[ta.Awaitable[None]], AsyncLogger):
203
+ async def _log(self, ctx: CaptureLoggingContext, msg: ta.Union[str, tuple, LoggingMsgFn], *args: ta.Any, **kwargs: ta.Any) -> None: # noqa
204
+ pass
@@ -0,0 +1,171 @@
1
+ # ruff: noqa: UP006 UP007 UP045 UP046
2
+ # @omlish-lite
3
+ import abc
4
+ import time
5
+ import typing as ta
6
+
7
+ from ..lite.abstract import Abstract
8
+ from .infos import LoggingContextInfo
9
+ from .infos import LoggingContextInfos
10
+ from .infos import LoggingExcInfoArg
11
+ from .infos import LoggingMsgFn
12
+ from .levels import LogLevel
13
+
14
+
15
+ LoggingContextInfoT = ta.TypeVar('LoggingContextInfoT', bound=LoggingContextInfo)
16
+
17
+
18
+ ##
19
+
20
+
21
+ class LoggingContext(Abstract):
22
+ @abc.abstractmethod
23
+ def get_info(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
24
+ raise NotImplementedError
25
+
26
+ @ta.final
27
+ def __getitem__(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
28
+ return self.get_info(ty)
29
+
30
+ @ta.final
31
+ def must_get_info(self, ty: ta.Type[LoggingContextInfoT]) -> LoggingContextInfoT:
32
+ if (info := self.get_info(ty)) is None:
33
+ raise TypeError(f'LoggingContextInfo absent: {ty}')
34
+ return info
35
+
36
+
37
+ @ta.final
38
+ class SimpleLoggingContext(LoggingContext):
39
+ def __init__(self, *infos: LoggingContextInfo) -> None:
40
+ self._infos: ta.Dict[ta.Type[LoggingContextInfo], LoggingContextInfo] = {type(i): i for i in infos}
41
+
42
+ def get_info(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
43
+ return self._infos.get(ty)
44
+
45
+
46
+ ##
47
+
48
+
49
+ class CaptureLoggingContext(LoggingContext, Abstract):
50
+ @abc.abstractmethod
51
+ def set_basic(
52
+ self,
53
+ name: str,
54
+
55
+ msg: ta.Union[str, tuple, LoggingMsgFn],
56
+ args: tuple,
57
+ ) -> 'CaptureLoggingContext':
58
+ raise NotImplementedError
59
+
60
+ #
61
+
62
+ class AlreadyCapturedError(Exception):
63
+ pass
64
+
65
+ class NotCapturedError(Exception):
66
+ pass
67
+
68
+ @abc.abstractmethod
69
+ def capture(self) -> None:
70
+ """Must be cooperatively called only from the expected locations."""
71
+
72
+ raise NotImplementedError
73
+
74
+
75
+ @ta.final
76
+ class CaptureLoggingContextImpl(CaptureLoggingContext):
77
+ @ta.final
78
+ class NOT_SET: # noqa
79
+ def __new__(cls, *args, **kwargs): # noqa
80
+ raise TypeError
81
+
82
+ #
83
+
84
+ def __init__(
85
+ self,
86
+ level: LogLevel,
87
+ *,
88
+ time_ns: ta.Optional[int] = None,
89
+
90
+ exc_info: LoggingExcInfoArg = False,
91
+
92
+ caller: ta.Union[LoggingContextInfos.Caller, ta.Type[NOT_SET], None] = NOT_SET,
93
+ stack_offset: int = 0,
94
+ stack_info: bool = False,
95
+ ) -> None:
96
+ if time_ns is None:
97
+ time_ns = time.time_ns()
98
+
99
+ # Done early to not trample on sys.exc_info()
100
+ exc = LoggingContextInfos.Exc.build(exc_info)
101
+
102
+ self._infos: ta.Dict[ta.Type[LoggingContextInfo], LoggingContextInfo] = {}
103
+ self._set_info(
104
+ LoggingContextInfos.Level.build(level),
105
+ exc,
106
+ LoggingContextInfos.Time.build(time_ns),
107
+ )
108
+
109
+ if caller is not CaptureLoggingContextImpl.NOT_SET:
110
+ self._infos[LoggingContextInfos.Caller] = caller
111
+ else:
112
+ self._stack_offset = stack_offset
113
+ self._stack_info = stack_info
114
+
115
+ def _set_info(self, *infos: ta.Optional[LoggingContextInfo]) -> 'CaptureLoggingContextImpl':
116
+ for info in infos:
117
+ if info is not None:
118
+ self._infos[type(info)] = info
119
+ return self
120
+
121
+ def get_info(self, ty: ta.Type[LoggingContextInfoT]) -> ta.Optional[LoggingContextInfoT]:
122
+ return self._infos.get(ty)
123
+
124
+ ##
125
+
126
+ def set_basic(
127
+ self,
128
+ name: str,
129
+
130
+ msg: ta.Union[str, tuple, LoggingMsgFn],
131
+ args: tuple,
132
+ ) -> 'CaptureLoggingContextImpl':
133
+ return self._set_info(
134
+ LoggingContextInfos.Name(name),
135
+ LoggingContextInfos.Msg.build(msg, *args),
136
+ )
137
+
138
+ ##
139
+
140
+ _stack_offset: int
141
+ _stack_info: bool
142
+
143
+ def inc_stack_offset(self, ofs: int = 1) -> 'CaptureLoggingContext':
144
+ if hasattr(self, '_stack_offset'):
145
+ self._stack_offset += ofs
146
+ return self
147
+
148
+ _has_captured: bool = False
149
+
150
+ def capture(self) -> None:
151
+ if self._has_captured:
152
+ raise CaptureLoggingContextImpl.AlreadyCapturedError
153
+ self._has_captured = True
154
+
155
+ if LoggingContextInfos.Caller not in self._infos:
156
+ self._set_info(LoggingContextInfos.Caller.build(
157
+ self._stack_offset + 1,
158
+ stack_info=self._stack_info,
159
+ ))
160
+
161
+ if (caller := self[LoggingContextInfos.Caller]) is not None:
162
+ self._set_info(LoggingContextInfos.SourceFile.build(
163
+ caller.file_path,
164
+ ))
165
+
166
+ self._set_info(
167
+ LoggingContextInfos.Thread.build(),
168
+ LoggingContextInfos.Process.build(),
169
+ LoggingContextInfos.Multiprocessing.build(),
170
+ LoggingContextInfos.AsyncioTask.build(),
171
+ )
@@ -0,0 +1,13 @@
1
+ import abc
2
+
3
+ from ..lite.abstract import Abstract
4
+ from .contexts import LoggingContext
5
+
6
+
7
+ ##
8
+
9
+
10
+ class LoggingContextFormatter(Abstract):
11
+ @abc.abstractmethod
12
+ def format(self, ctx: LoggingContext) -> str:
13
+ raise NotImplementedError