omlish 0.0.0.dev7__tar.gz → 0.0.0.dev9__tar.gz
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.
- {omlish-0.0.0.dev7/omlish.egg-info → omlish-0.0.0.dev9}/PKG-INFO +1 -1
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/__about__.py +2 -2
- omlish-0.0.0.dev9/omlish/lite/logs.py +121 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lite/marshal.py +3 -1
- omlish-0.0.0.dev9/omlish/logs/__init__.py +13 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/logs/configs.py +12 -30
- omlish-0.0.0.dev9/omlish/logs/formatters.py +26 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9/omlish.egg-info}/PKG-INFO +1 -1
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish.egg-info/SOURCES.txt +0 -1
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/pyproject.toml +1 -1
- omlish-0.0.0.dev7/omlish/lite/logs.py +0 -52
- omlish-0.0.0.dev7/omlish/logs/__init__.py +0 -9
- omlish-0.0.0.dev7/omlish/logs/filters.py +0 -11
- omlish-0.0.0.dev7/omlish/logs/formatters.py +0 -76
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/LICENSE +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/MANIFEST.in +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/README.rst +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/argparse.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/asyncs/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/asyncs/anyio.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/asyncs/asyncio.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/asyncs/asyncs.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/asyncs/bridge.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/asyncs/flavors.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/asyncs/trio.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/asyncs/trio_asyncio.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/bootstrap.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/c3.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/cached.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/check.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/_abc.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/_io_abc.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/cache/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/cache/descriptor.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/cache/impl.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/cache/types.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/coerce.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/exceptions.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/frozen.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/identity.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/indexed.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/mappings.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/ordered.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/persistent.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/skiplist.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/sorted.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/treap.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/treapmap.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/unmodifiable.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/collections/utils.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/concurrent.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/configs/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/configs/classes.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/configs/flattening.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/configs/strings.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/api.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/as_.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/copy.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/descriptors.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/exceptions.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/fields.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/frozen.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/hashing.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/init.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/internals.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/main.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/metaclass.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/metadata.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/order.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/params.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/processing.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/reflect.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/replace.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/repr.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/simple.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/slots.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/impl/utils.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dataclasses/utils.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/datetimes.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/defs.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/diag/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/diag/procfs.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/diag/procstats.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/diag/ps.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/diag/pydevd.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/diag/replserver/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/diag/replserver/__main__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/diag/replserver/console.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/diag/replserver/server.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/diag/threads.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dispatch/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dispatch/_dispatch2.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dispatch/_dispatch3.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dispatch/dispatch.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dispatch/functions.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dispatch/methods.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/docker.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/dynamic.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/fnpairs.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/formats/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/formats/dotenv.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/formats/json.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/formats/props.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/formats/yaml.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/graphs/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/graphs/dags.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/graphs/domination.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/graphs/dot/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/graphs/dot/items.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/graphs/dot/rendering.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/graphs/dot/utils.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/graphs/trees.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/http/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/http/asgi.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/http/collections.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/http/consts.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/http/cookies.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/http/dates.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/http/encodings.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/http/json.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/http/sessions.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/http/wsgi.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/binder.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/bindings.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/eagers.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/elements.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/exceptions.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/impl/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/impl/bindings.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/impl/elements.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/impl/injector.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/impl/inspect.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/impl/multis.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/impl/origins.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/impl/privates.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/impl/providers.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/impl/proxy.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/impl/scopes.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/injector.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/inspect.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/keys.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/listeners.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/managed.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/multis.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/origins.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/overrides.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/privates.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/providers.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/scopes.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/types.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/inject/utils.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/iterators.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/cached.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/classes/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/classes/abstract.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/classes/restrict.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/classes/simple.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/classes/virtual.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/clsdct.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/cmp.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/contextmanagers.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/descriptors.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/exceptions.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/functions.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/imports.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/iterables.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/maybes.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/objects.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/resolving.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/strings.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/sys.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/timeouts.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lang/typing.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/libc.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lifecycles/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lifecycles/abstract.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lifecycles/base.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lifecycles/contextmanagers.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lifecycles/controller.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lifecycles/manager.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lifecycles/states.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lifecycles/transitions.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lite/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lite/cached.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lite/check.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lite/contextmanagers.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lite/json.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lite/reflect.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lite/runtime.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lite/secrets.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lite/strings.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/lite/subprocesses.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/logs/_abc.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/logs/utils.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/any.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/base.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/base64.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/dataclasses.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/datetimes.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/enums.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/exceptions.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/factories.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/forbidden.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/global_.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/iterables.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/mappings.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/naming.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/numbers.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/objects.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/optionals.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/polymorphism.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/primitives.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/registries.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/standard.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/utils.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/uuids.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/marshal/values.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/matchfns.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/math.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/os.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/reflect/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/reflect/isinstance.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/reflect/ops.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/reflect/subst.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/reflect/types.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/runmodule.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/secrets/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/secrets/crypto.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/secrets/marshal.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/secrets/openssl.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/secrets/passwords.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/secrets/secrets.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/secrets/subprocesses.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/sql/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/sql/_abc.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/sql/asyncs.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/sql/dbs.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/sql/duckdb.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/sql/exprs.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/sql/secrets.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/sql/sqlean.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/stats.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/sync.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/term.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/helpers.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/inject/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/inject/harness.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/marks.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/plugins/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/plugins/_registry.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/plugins/asyncs.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/plugins/logging.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/plugins/managermarks.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/plugins/pydevd.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/plugins/repeat.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/plugins/skips.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/plugins/spacing.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/pytest/plugins/switches.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/testing/testing.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/text/__init__.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/text/delimit.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/text/glyphsplit.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/text/indent.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish/text/parts.py +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish.egg-info/dependency_links.txt +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish.egg-info/requires.txt +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/omlish.egg-info/top_level.txt +0 -0
- {omlish-0.0.0.dev7 → omlish-0.0.0.dev9}/setup.cfg +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
__version__ = '0.0.0.
|
|
1
|
+
__version__ = '0.0.0.dev9'
|
|
2
2
|
|
|
3
3
|
|
|
4
4
|
#
|
|
@@ -105,6 +105,6 @@ class SetuptoolsBase:
|
|
|
105
105
|
|
|
106
106
|
class Setuptools(SetuptoolsBase):
|
|
107
107
|
find_packages = {
|
|
108
|
-
'include': [
|
|
108
|
+
'include': [Project.name, f'{Project.name}.*'],
|
|
109
109
|
'exclude': [*SetuptoolsBase.find_packages['exclude']],
|
|
110
110
|
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"""
|
|
2
|
+
TODO:
|
|
3
|
+
- translate json keys
|
|
4
|
+
- debug
|
|
5
|
+
"""
|
|
6
|
+
# ruff: noqa: UP006 UP007 N802
|
|
7
|
+
import datetime
|
|
8
|
+
import logging
|
|
9
|
+
import threading
|
|
10
|
+
import typing as ta
|
|
11
|
+
|
|
12
|
+
from .json import json_dumps_compact
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
log = logging.getLogger(__name__)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
##
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class TidLogFilter(logging.Filter):
|
|
22
|
+
|
|
23
|
+
def filter(self, record):
|
|
24
|
+
record.tid = threading.get_native_id()
|
|
25
|
+
return True
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
##
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class JsonLogFormatter(logging.Formatter):
|
|
32
|
+
|
|
33
|
+
KEYS: ta.Mapping[str, bool] = {
|
|
34
|
+
'name': False,
|
|
35
|
+
'msg': False,
|
|
36
|
+
'args': False,
|
|
37
|
+
'levelname': False,
|
|
38
|
+
'levelno': False,
|
|
39
|
+
'pathname': False,
|
|
40
|
+
'filename': False,
|
|
41
|
+
'module': False,
|
|
42
|
+
'exc_info': True,
|
|
43
|
+
'exc_text': True,
|
|
44
|
+
'stack_info': True,
|
|
45
|
+
'lineno': False,
|
|
46
|
+
'funcName': False,
|
|
47
|
+
'created': False,
|
|
48
|
+
'msecs': False,
|
|
49
|
+
'relativeCreated': False,
|
|
50
|
+
'thread': False,
|
|
51
|
+
'threadName': False,
|
|
52
|
+
'processName': False,
|
|
53
|
+
'process': False,
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
def format(self, record: logging.LogRecord) -> str:
|
|
57
|
+
dct = {
|
|
58
|
+
k: v
|
|
59
|
+
for k, o in self.KEYS.items()
|
|
60
|
+
for v in [getattr(record, k)]
|
|
61
|
+
if not (o and v is None)
|
|
62
|
+
}
|
|
63
|
+
return json_dumps_compact(dct)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
##
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
STANDARD_LOG_FORMAT_PARTS = [
|
|
70
|
+
('asctime', '%(asctime)-15s'),
|
|
71
|
+
('process', 'pid=%(process)-6s'),
|
|
72
|
+
('thread', 'tid=%(thread)-16s'),
|
|
73
|
+
('levelname', '%(levelname)-8s'),
|
|
74
|
+
('name', '%(name)s'),
|
|
75
|
+
('separator', '::'),
|
|
76
|
+
('message', '%(message)s'),
|
|
77
|
+
]
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
class StandardLogFormatter(logging.Formatter):
|
|
81
|
+
|
|
82
|
+
@staticmethod
|
|
83
|
+
def build_log_format(parts: ta.Iterable[ta.Tuple[str, str]]) -> str:
|
|
84
|
+
return ' '.join(v for k, v in parts)
|
|
85
|
+
|
|
86
|
+
converter = datetime.datetime.fromtimestamp # type: ignore
|
|
87
|
+
|
|
88
|
+
def formatTime(self, record, datefmt=None):
|
|
89
|
+
ct = self.converter(record.created) # type: ignore
|
|
90
|
+
if datefmt:
|
|
91
|
+
return ct.strftime(datefmt) # noqa
|
|
92
|
+
else:
|
|
93
|
+
t = ct.strftime("%Y-%m-%d %H:%M:%S") # noqa
|
|
94
|
+
return '%s.%03d' % (t, record.msecs)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
##
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
def configure_standard_logging(
|
|
101
|
+
level: ta.Union[int, str] = logging.INFO,
|
|
102
|
+
*,
|
|
103
|
+
json: bool = False,
|
|
104
|
+
) -> logging.Handler:
|
|
105
|
+
handler = logging.StreamHandler()
|
|
106
|
+
|
|
107
|
+
formatter: logging.Formatter
|
|
108
|
+
if json:
|
|
109
|
+
formatter = JsonLogFormatter()
|
|
110
|
+
else:
|
|
111
|
+
formatter = StandardLogFormatter(StandardLogFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
|
|
112
|
+
handler.setFormatter(formatter)
|
|
113
|
+
|
|
114
|
+
handler.addFilter(TidLogFilter())
|
|
115
|
+
|
|
116
|
+
logging.root.addHandler(handler)
|
|
117
|
+
|
|
118
|
+
if level is not None:
|
|
119
|
+
logging.root.setLevel(level)
|
|
120
|
+
|
|
121
|
+
return handler
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
TODO:
|
|
3
3
|
- pickle stdlib objs? have to pin to 3.8 pickle protocol, will be cross-version
|
|
4
|
+
- nonstrict toggle
|
|
4
5
|
"""
|
|
5
6
|
# ruff: noqa: UP006 UP007
|
|
6
7
|
import abc
|
|
@@ -143,12 +144,13 @@ class IterableObjMarshaler(ObjMarshaler):
|
|
|
143
144
|
class DataclassObjMarshaler(ObjMarshaler):
|
|
144
145
|
ty: type
|
|
145
146
|
fs: ta.Mapping[str, ObjMarshaler]
|
|
147
|
+
nonstrict: bool = False
|
|
146
148
|
|
|
147
149
|
def marshal(self, o: ta.Any) -> ta.Any:
|
|
148
150
|
return {k: m.marshal(getattr(o, k)) for k, m in self.fs.items()}
|
|
149
151
|
|
|
150
152
|
def unmarshal(self, o: ta.Any) -> ta.Any:
|
|
151
|
-
return self.ty(**{k: self.fs[k].unmarshal(v) for k, v in o.items()})
|
|
153
|
+
return self.ty(**{k: self.fs[k].unmarshal(v) for k, v in o.items() if self.nonstrict or k in self.fs})
|
|
152
154
|
|
|
153
155
|
|
|
154
156
|
@dc.dataclass(frozen=True)
|
|
@@ -2,9 +2,10 @@ import dataclasses as dc
|
|
|
2
2
|
import logging
|
|
3
3
|
import typing as ta
|
|
4
4
|
|
|
5
|
-
from .
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
from ..lite.logs import configure_standard_logging as configure_lite_standard_logging
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
##
|
|
8
9
|
|
|
9
10
|
|
|
10
11
|
NOISY_LOGGERS: set[str] = {
|
|
@@ -16,6 +17,9 @@ NOISY_LOGGERS: set[str] = {
|
|
|
16
17
|
}
|
|
17
18
|
|
|
18
19
|
|
|
20
|
+
##
|
|
21
|
+
|
|
22
|
+
|
|
19
23
|
@dc.dataclass()
|
|
20
24
|
class DictConfig:
|
|
21
25
|
version: int = 1
|
|
@@ -33,19 +37,8 @@ FormatterConfig = dict[str, ta.Any]
|
|
|
33
37
|
HandlerConfig = dict[str, ta.Any]
|
|
34
38
|
LoggerConfig = dict[str, ta.Any]
|
|
35
39
|
|
|
36
|
-
STANDARD_LOG_FORMAT_PARTS = [
|
|
37
|
-
('asctime', '%(asctime)-15s'),
|
|
38
|
-
('process', 'pid=%(process)-6s'),
|
|
39
|
-
('thread', 'tid=%(thread)-16s'),
|
|
40
|
-
('levelname', '%(levelname)-8s'),
|
|
41
|
-
('name', '%(name)s'),
|
|
42
|
-
('separator', '::'),
|
|
43
|
-
('message', '%(message)s'),
|
|
44
|
-
]
|
|
45
|
-
|
|
46
40
|
|
|
47
|
-
|
|
48
|
-
return ' '.join(v for k, v in parts)
|
|
41
|
+
##
|
|
49
42
|
|
|
50
43
|
|
|
51
44
|
def configure_standard_logging(
|
|
@@ -53,21 +46,10 @@ def configure_standard_logging(
|
|
|
53
46
|
*,
|
|
54
47
|
json: bool = False,
|
|
55
48
|
) -> logging.Handler:
|
|
56
|
-
handler =
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
formatter = JsonLogFormatter()
|
|
61
|
-
else:
|
|
62
|
-
formatter = StandardLogFormatter(build_log_format(STANDARD_LOG_FORMAT_PARTS))
|
|
63
|
-
handler.setFormatter(formatter)
|
|
64
|
-
|
|
65
|
-
handler.addFilter(TidFilter())
|
|
66
|
-
|
|
67
|
-
logging.root.addHandler(handler)
|
|
68
|
-
|
|
69
|
-
if level is not None:
|
|
70
|
-
logging.root.setLevel(level)
|
|
49
|
+
handler = configure_lite_standard_logging(
|
|
50
|
+
level,
|
|
51
|
+
json=json,
|
|
52
|
+
)
|
|
71
53
|
|
|
72
54
|
for noisy_logger in NOISY_LOGGERS:
|
|
73
55
|
logging.getLogger(noisy_logger).setLevel(logging.WARNING)
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# ruff: noqa: ANN201 N802
|
|
2
|
+
import logging
|
|
3
|
+
import typing as ta
|
|
4
|
+
|
|
5
|
+
from .. import term
|
|
6
|
+
from ..lite.logs import JsonLogFormatter # noqa
|
|
7
|
+
from ..lite.logs import StandardLogFormatter
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class ColorLogFormatter(StandardLogFormatter):
|
|
11
|
+
|
|
12
|
+
LEVEL_COLORS: ta.Mapping[int, term.SGRs.FG] = {
|
|
13
|
+
logging.WARNING: term.SGRs.FG.BRIGHT_YELLOW,
|
|
14
|
+
logging.ERROR: term.SGRs.FG.BRIGHT_RED,
|
|
15
|
+
logging.CRITICAL: term.SGRs.FG.BRIGHT_RED,
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
def formatMessage(self, record):
|
|
19
|
+
buf = super().formatMessage(record)
|
|
20
|
+
try:
|
|
21
|
+
c = self.LEVEL_COLORS[record.levelno]
|
|
22
|
+
except KeyError:
|
|
23
|
+
pass
|
|
24
|
+
else:
|
|
25
|
+
buf = term.SGR(c) + buf + term.SGR(term.SGRs.RESET)
|
|
26
|
+
return buf
|
|
@@ -12,7 +12,7 @@ authors = [
|
|
|
12
12
|
urls = {source = 'https://github.com/wrmsr/omlish'}
|
|
13
13
|
license = {text = 'BSD-3-Clause'}
|
|
14
14
|
requires-python = '>=3.12'
|
|
15
|
-
version = '0.0.0.
|
|
15
|
+
version = '0.0.0.dev9'
|
|
16
16
|
classifiers = [
|
|
17
17
|
'License :: OSI Approved :: BSD License',
|
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"""
|
|
2
|
-
TODO:
|
|
3
|
-
- debug
|
|
4
|
-
"""
|
|
5
|
-
# ruff: noqa: UP007
|
|
6
|
-
import logging
|
|
7
|
-
import typing as ta
|
|
8
|
-
|
|
9
|
-
from .json import json_dumps_compact
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
log = logging.getLogger(__name__)
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
class JsonLogFormatter(logging.Formatter):
|
|
16
|
-
|
|
17
|
-
KEYS: ta.Mapping[str, bool] = {
|
|
18
|
-
'name': False,
|
|
19
|
-
'msg': False,
|
|
20
|
-
'args': False,
|
|
21
|
-
'levelname': False,
|
|
22
|
-
'levelno': False,
|
|
23
|
-
'pathname': False,
|
|
24
|
-
'filename': False,
|
|
25
|
-
'module': False,
|
|
26
|
-
'exc_info': True,
|
|
27
|
-
'exc_text': True,
|
|
28
|
-
'stack_info': True,
|
|
29
|
-
'lineno': False,
|
|
30
|
-
'funcName': False,
|
|
31
|
-
'created': False,
|
|
32
|
-
'msecs': False,
|
|
33
|
-
'relativeCreated': False,
|
|
34
|
-
'thread': False,
|
|
35
|
-
'threadName': False,
|
|
36
|
-
'processName': False,
|
|
37
|
-
'process': False,
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
def format(self, record: logging.LogRecord) -> str:
|
|
41
|
-
dct = {
|
|
42
|
-
k: v
|
|
43
|
-
for k, o in self.KEYS.items()
|
|
44
|
-
for v in [getattr(record, k)]
|
|
45
|
-
if not (o and v is None)
|
|
46
|
-
}
|
|
47
|
-
return json_dumps_compact(dct)
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
def configure_standard_logging(level: ta.Union[int, str] = logging.INFO) -> None:
|
|
51
|
-
logging.root.addHandler(logging.StreamHandler())
|
|
52
|
-
logging.root.setLevel(level)
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
from .configs import build_log_format # noqa
|
|
2
|
-
from .configs import configure_standard_logging # noqa
|
|
3
|
-
from .configs import DictConfig # noqa
|
|
4
|
-
from .configs import NOISY_LOGGERS # noqa
|
|
5
|
-
from .configs import STANDARD_LOG_FORMAT_PARTS # noqa
|
|
6
|
-
from .filters import TidFilter # noqa
|
|
7
|
-
from .formatters import ColorLogFormatter # noqa
|
|
8
|
-
from .formatters import JsonLogFormatter # noqa
|
|
9
|
-
from .utils import error_logging # noqa
|
|
@@ -1,76 +0,0 @@
|
|
|
1
|
-
# ruff: noqa: ANN201
|
|
2
|
-
# ruff: noqa: N802
|
|
3
|
-
|
|
4
|
-
import datetime
|
|
5
|
-
import logging
|
|
6
|
-
import typing as ta
|
|
7
|
-
|
|
8
|
-
from .. import term
|
|
9
|
-
from ..formats import json
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class StandardLogFormatter(logging.Formatter):
|
|
13
|
-
|
|
14
|
-
converter = datetime.datetime.fromtimestamp # type: ignore
|
|
15
|
-
|
|
16
|
-
def formatTime(self, record, datefmt=None):
|
|
17
|
-
ct = self.converter(record.created) # type: ignore
|
|
18
|
-
if datefmt:
|
|
19
|
-
return ct.strftime(datefmt) # noqa
|
|
20
|
-
else:
|
|
21
|
-
t = ct.strftime("%Y-%m-%d %H:%M:%S") # noqa
|
|
22
|
-
return '%s.%03d' % (t, record.msecs)
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
class ColorLogFormatter(StandardLogFormatter):
|
|
26
|
-
|
|
27
|
-
LEVEL_COLORS: ta.Mapping[int, term.SGRs.FG] = {
|
|
28
|
-
logging.WARNING: term.SGRs.FG.BRIGHT_YELLOW,
|
|
29
|
-
logging.ERROR: term.SGRs.FG.BRIGHT_RED,
|
|
30
|
-
logging.CRITICAL: term.SGRs.FG.BRIGHT_RED,
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
def formatMessage(self, record):
|
|
34
|
-
buf = super().formatMessage(record)
|
|
35
|
-
try:
|
|
36
|
-
c = self.LEVEL_COLORS[record.levelno]
|
|
37
|
-
except KeyError:
|
|
38
|
-
pass
|
|
39
|
-
else:
|
|
40
|
-
buf = term.SGR(c) + buf + term.SGR(term.SGRs.RESET)
|
|
41
|
-
return buf
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
class JsonLogFormatter(logging.Formatter):
|
|
45
|
-
|
|
46
|
-
KEYS: ta.Mapping[str, bool] = {
|
|
47
|
-
'name': False,
|
|
48
|
-
'msg': False,
|
|
49
|
-
'args': False,
|
|
50
|
-
'levelname': False,
|
|
51
|
-
'levelno': False,
|
|
52
|
-
'pathname': False,
|
|
53
|
-
'filename': False,
|
|
54
|
-
'module': False,
|
|
55
|
-
'exc_info': True,
|
|
56
|
-
'exc_text': True,
|
|
57
|
-
'stack_info': True,
|
|
58
|
-
'lineno': False,
|
|
59
|
-
'funcName': False,
|
|
60
|
-
'created': False,
|
|
61
|
-
'msecs': False,
|
|
62
|
-
'relativeCreated': False,
|
|
63
|
-
'thread': False,
|
|
64
|
-
'threadName': False,
|
|
65
|
-
'processName': False,
|
|
66
|
-
'process': False,
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
def format(self, record: logging.LogRecord) -> str:
|
|
70
|
-
dct = {
|
|
71
|
-
k: v
|
|
72
|
-
for k, o in self.KEYS.items()
|
|
73
|
-
for v in [getattr(record, k)]
|
|
74
|
-
if not (o and v is None)
|
|
75
|
-
}
|
|
76
|
-
return json.dumps_compact(dct)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|