omlish 0.0.0.dev55__tar.gz → 0.0.0.dev56__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.
- {omlish-0.0.0.dev55/omlish.egg-info → omlish-0.0.0.dev56}/PKG-INFO +1 -1
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/.manifests.json +12 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/__about__.py +2 -2
- omlish-0.0.0.dev56/omlish/formats/json/__init__.py +19 -0
- omlish-0.0.0.dev56/omlish/formats/json/__main__.py +11 -0
- omlish-0.0.0.dev56/omlish/formats/json/backends/orjson.py +72 -0
- omlish-0.0.0.dev56/omlish/formats/json/backends/std.py +37 -0
- omlish-0.0.0.dev56/omlish/formats/json/backends/ujson.py +25 -0
- omlish-0.0.0.dev56/omlish/formats/json/cli.py +72 -0
- {omlish-0.0.0.dev55/omlish/formats → omlish-0.0.0.dev56/omlish/formats/json}/json.py +0 -11
- omlish-0.0.0.dev56/omlish/formats/json/render.py +114 -0
- omlish-0.0.0.dev56/omlish/text/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56/omlish.egg-info}/PKG-INFO +1 -1
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish.egg-info/SOURCES.txt +9 -1
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/pyproject.toml +1 -1
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/LICENSE +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/MANIFEST.in +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/README.rst +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/argparse.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/asyncs/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/asyncs/anyio.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/asyncs/asyncio.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/asyncs/asyncs.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/asyncs/bridge.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/asyncs/flavors.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/asyncs/trio.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/asyncs/trio_asyncio.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/bootstrap/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/bootstrap/__main__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/bootstrap/base.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/bootstrap/diag.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/bootstrap/harness.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/bootstrap/main.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/bootstrap/marshal.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/bootstrap/sys.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/c3.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/cached.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/check.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/_abc.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/_io_abc.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/cache/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/cache/descriptor.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/cache/impl.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/cache/types.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/coerce.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/exceptions.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/frozen.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/identity.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/indexed.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/mappings.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/ordered.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/persistent.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/skiplist.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/sorted.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/treap.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/treapmap.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/unmodifiable.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/collections/utils.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/concurrent/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/concurrent/executors.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/concurrent/futures.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/concurrent/threadlets.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/configs/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/configs/classes.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/configs/flattening.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/configs/strings.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/LICENSE +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/api.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/as_.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/copy.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/descriptors.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/exceptions.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/fields.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/frozen.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/hashing.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/init.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/internals.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/main.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/metaclass.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/metadata.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/order.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/params.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/processing.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/reflect.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/replace.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/repr.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/simple.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/slots.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/impl/utils.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dataclasses/utils.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/datetimes.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/defs.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/asts.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/procfs.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/procstats.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/ps.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/pycharm.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/pydevd.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/replserver/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/replserver/__main__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/replserver/console.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/replserver/server.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/diag/threads.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dispatch/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dispatch/_dispatch2.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dispatch/_dispatch3.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dispatch/dispatch.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dispatch/functions.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dispatch/methods.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/docker/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/docker/cli.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/docker/compose.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/docker/helpers.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/docker/hub.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/docker/manifests.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/dynamic.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/fnpairs.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/fnpipes.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/formats/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/formats/dotenv.py +0 -0
- {omlish-0.0.0.dev55/omlish/graphs → omlish-0.0.0.dev56/omlish/formats/json/backends}/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/formats/props.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/formats/yaml.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/genmachine.py +0 -0
- {omlish-0.0.0.dev55/omlish/inject/impl → omlish-0.0.0.dev56/omlish/graphs}/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/graphs/dags.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/graphs/domination.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/graphs/dot/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/graphs/dot/items.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/graphs/dot/make.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/graphs/dot/rendering.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/graphs/dot/utils.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/graphs/trees.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/http/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/http/asgi.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/http/collections.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/http/consts.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/http/cookies.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/http/dates.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/http/encodings.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/http/json.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/http/sessions.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/http/wsgi.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/binder.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/bindings.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/eagers.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/elements.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/exceptions.py +0 -0
- {omlish-0.0.0.dev55/omlish/math → omlish-0.0.0.dev56/omlish/inject/impl}/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/impl/bindings.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/impl/elements.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/impl/injector.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/impl/inspect.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/impl/multis.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/impl/origins.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/impl/privates.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/impl/providers.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/impl/proxy.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/impl/scopes.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/injector.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/inspect.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/keys.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/listeners.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/managed.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/multis.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/origins.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/overrides.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/privates.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/providers.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/scopes.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/types.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/inject/utils.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/iterators.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/cached.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/classes/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/classes/abstract.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/classes/restrict.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/classes/simple.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/classes/virtual.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/clsdct.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/cmp.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/contextmanagers.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/datetimes.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/descriptors.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/exceptions.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/functions.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/imports.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/iterables.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/maybes.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/objects.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/resolving.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/resources.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/strings.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/sys.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/timeouts.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lang/typing.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/libc.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lifecycles/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lifecycles/abstract.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lifecycles/base.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lifecycles/contextmanagers.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lifecycles/controller.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lifecycles/manager.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lifecycles/states.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lifecycles/transitions.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/cached.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/check.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/contextmanagers.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/json.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/logs.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/marshal.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/reflect.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/runtime.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/secrets.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/strings.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/lite/subprocesses.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/logs/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/logs/_abc.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/logs/configs.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/logs/formatters.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/logs/handlers.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/logs/noisy.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/logs/utils.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/any.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/base.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/base64.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/dataclasses.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/datetimes.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/enums.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/exceptions.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/factories.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/forbidden.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/global_.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/helpers.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/iterables.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/mappings.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/maybes.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/naming.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/numbers.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/objects.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/optionals.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/polymorphism.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/primitives.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/registries.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/standard.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/unions.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/utils.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/uuids.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/marshal/values.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/matchfns.py +0 -0
- {omlish-0.0.0.dev55/omlish/specs/jsonschema → omlish-0.0.0.dev56/omlish/math}/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/math/bits.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/math/floats.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/math/stats.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/multiprocessing.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/os.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/reflect/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/reflect/isinstance.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/reflect/ops.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/reflect/subst.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/reflect/types.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/runmodule.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/secrets/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/secrets/crypto.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/secrets/marshal.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/secrets/openssl.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/secrets/passwords.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/secrets/secrets.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/secrets/subprocesses.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jmespath/LICENSE +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jmespath/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jmespath/__main__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jmespath/ast.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jmespath/cli.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jmespath/exceptions.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jmespath/functions.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jmespath/lexer.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jmespath/parser.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jmespath/scope.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jmespath/visitor.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonrpc/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonrpc/errors.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonrpc/marshal.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonrpc/types.py +0 -0
- {omlish-0.0.0.dev55/omlish/specs/jsonschema/schemas → omlish-0.0.0.dev56/omlish/specs/jsonschema}/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/keywords/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/keywords/base.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/keywords/core.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/keywords/metadata.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/keywords/parse.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/keywords/render.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/keywords/validation.py +0 -0
- {omlish-0.0.0.dev55/omlish/specs/jsonschema/schemas/draft202012 → omlish-0.0.0.dev56/omlish/specs/jsonschema/schemas}/__init__.py +0 -0
- {omlish-0.0.0.dev55/omlish/specs/jsonschema/schemas/draft202012/vocabularies → omlish-0.0.0.dev56/omlish/specs/jsonschema/schemas/draft202012}/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/schemas/draft202012/metaschema.json +0 -0
- {omlish-0.0.0.dev55/omlish/text → omlish-0.0.0.dev56/omlish/specs/jsonschema/schemas/draft202012/vocabularies}/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/applicator.json +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/content.json +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/core.json +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format-annotation.json +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format-assertion.json +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format.json +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/meta-data.json +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/unevaluated.json +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/validation.json +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/jsonschema/types.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/openapi/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/openapi/marshal.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/specs/openapi/openapi.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/sql/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/sql/_abc.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/sql/alchemy/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/sql/alchemy/asyncs.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/sql/alchemy/duckdb.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/sql/alchemy/exprs.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/sql/alchemy/secrets.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/sql/alchemy/sqlean.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/sql/dbs.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/sql/qualifiedname.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/sync.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/term.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/helpers.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/inject/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/inject/harness.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/marks.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/__init__.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/_registry.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/asyncs.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/depskip.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/logging.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/managermarks.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/pydevd.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/repeat.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/skips.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/spacing.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/switches.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/plugins/utils.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/pytest/skip.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/testing/testing.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/text/asdl.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/text/delimit.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/text/glyphsplit.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/text/indent.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish/text/parts.py +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish.egg-info/dependency_links.txt +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish.egg-info/entry_points.txt +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish.egg-info/requires.txt +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/omlish.egg-info/top_level.txt +0 -0
- {omlish-0.0.0.dev55 → omlish-0.0.0.dev56}/setup.cfg +0 -0
@@ -35,6 +35,18 @@
|
|
35
35
|
}
|
36
36
|
}
|
37
37
|
},
|
38
|
+
{
|
39
|
+
"module": ".formats.json.__main__",
|
40
|
+
"attr": "_CLI_MODULE",
|
41
|
+
"file": "omlish/formats/json/__main__.py",
|
42
|
+
"line": 1,
|
43
|
+
"value": {
|
44
|
+
"$omdev.cli.types.CliModule": {
|
45
|
+
"cmd_name": "json",
|
46
|
+
"mod_name": "omlish.formats.json.__main__"
|
47
|
+
}
|
48
|
+
}
|
49
|
+
},
|
38
50
|
{
|
39
51
|
"module": ".specs.jmespath.__main__",
|
40
52
|
"attr": "_CLI_MODULE",
|
@@ -0,0 +1,19 @@
|
|
1
|
+
from .json import ( # noqa
|
2
|
+
COMPACT_KWARGS,
|
3
|
+
COMPACT_SEPARATORS,
|
4
|
+
PRETTY_INDENT,
|
5
|
+
PRETTY_KWARGS,
|
6
|
+
detect_encoding,
|
7
|
+
dump,
|
8
|
+
dump_compact,
|
9
|
+
dump_pretty,
|
10
|
+
dumps,
|
11
|
+
dumps_compact,
|
12
|
+
dumps_pretty,
|
13
|
+
load,
|
14
|
+
loads,
|
15
|
+
)
|
16
|
+
|
17
|
+
from .render import ( # noqa
|
18
|
+
JsonRenderer,
|
19
|
+
)
|
@@ -0,0 +1,72 @@
|
|
1
|
+
"""
|
2
|
+
def loads(obj: str | bytes | bytearray | memoryview) -> ta.Any | oj.JSONDEcodeError
|
3
|
+
def dumps(obj: ta.Any, **DumpOpts) -> bytes
|
4
|
+
"""
|
5
|
+
import dataclasses as dc
|
6
|
+
import typing as ta
|
7
|
+
|
8
|
+
from .... import lang
|
9
|
+
|
10
|
+
|
11
|
+
if ta.TYPE_CHECKING:
|
12
|
+
import orjson as oj
|
13
|
+
else:
|
14
|
+
oj = lang.proxy_import('orjson')
|
15
|
+
|
16
|
+
|
17
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
18
|
+
class Options:
|
19
|
+
append_newline: bool = False # append \n to the output
|
20
|
+
|
21
|
+
indent_2: bool = False # pretty-print output with an indent of two spaces.
|
22
|
+
|
23
|
+
naive_utc: bool = False # serialize datetime.datetime objects without a tzinfo as UTC
|
24
|
+
|
25
|
+
non_str_keys: bool = False # serialize dict keys of type other than str
|
26
|
+
|
27
|
+
omit_microseconds: bool = False # do not serialize the microsecond field on datetime.datetime and datetime.time instances # noqa
|
28
|
+
|
29
|
+
passthrough_dataclass: bool = False # passthrough dataclasses.dataclass instances to default
|
30
|
+
passthrough_datetime: bool = False # passthrough datetime.datetime, datetime.date, and datetime.time instances to default # noqa
|
31
|
+
passthrough_subclass: bool = False # passthrough subclasses of builtin types to default
|
32
|
+
|
33
|
+
serialize_numpy: bool = False # serialize numpy.ndarray instances
|
34
|
+
|
35
|
+
sort_keys: bool = False # serialize dict keys in sorted order - the default is to serialize in an unspecified order
|
36
|
+
|
37
|
+
strict_integer: bool = False # enforce 53-bit limit on integers
|
38
|
+
|
39
|
+
utc_z: bool = False # serialize a UTC timezone on datetime.datetime instances as Z instead of +00:00
|
40
|
+
|
41
|
+
##
|
42
|
+
|
43
|
+
def __int__(self) -> int:
|
44
|
+
return (
|
45
|
+
(oj.OPT_APPEND_NEWLINE if self.append_newline else 0) |
|
46
|
+
|
47
|
+
(oj.OPT_INDENT_2 if self.indent_2 else 0) |
|
48
|
+
|
49
|
+
(oj.OPT_NAIVE_UTC if self.naive_utc else 0) |
|
50
|
+
|
51
|
+
(oj.OPT_NON_STR_KEYS if self.non_str_keys else 0) |
|
52
|
+
|
53
|
+
(oj.OPT_OMIT_MICROSECONDS if self.omit_microseconds else 0) |
|
54
|
+
|
55
|
+
(oj.OPT_PASSTHROUGH_DATACLASS if self.passthrough_dataclass else 0) |
|
56
|
+
(oj.OPT_PASSTHROUGH_DATETIME if self.passthrough_datetime else 0) |
|
57
|
+
(oj.OPT_PASSTHROUGH_SUBCLASS if self.passthrough_subclass else 0) |
|
58
|
+
|
59
|
+
(oj.OPT_SERIALIZE_NUMPY if self.serialize_numpy else 0) |
|
60
|
+
|
61
|
+
(oj.OPT_SORT_KEYS if self.sort_keys else 0) |
|
62
|
+
|
63
|
+
(oj.OPT_STRICT_INTEGER if self.strict_integer else 0) |
|
64
|
+
|
65
|
+
(oj.OPT_UTC_Z if self.utc_z else 0)
|
66
|
+
)
|
67
|
+
|
68
|
+
|
69
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
70
|
+
class DumpOpts:
|
71
|
+
default: ta.Callable[[ta.Any], ta.Any] | None = None
|
72
|
+
option: Options = Options()
|
@@ -0,0 +1,37 @@
|
|
1
|
+
"""
|
2
|
+
load(fp: File, **LoadOpts) -> ta.Any | json.JSONDecodeError
|
3
|
+
loads(s: str | bytes | bytearray, **LoadOpts) -> ta.Any | json.JSONDecodeError
|
4
|
+
dump(obj: ta.Any, fp: File, **DumpOpts) -> None
|
5
|
+
dumps(obj: ta.Any, **DumpOpts) -> str
|
6
|
+
"""
|
7
|
+
import dataclasses as dc
|
8
|
+
import json
|
9
|
+
import typing as ta
|
10
|
+
|
11
|
+
|
12
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
13
|
+
class DumpOpts:
|
14
|
+
cls: type[json.JSONEncoder] | None = None
|
15
|
+
skipkeys: bool = False # dict keys that are not basic types will be skipped instead of raising a TypeError
|
16
|
+
ensure_ascii: bool = True # escape non-ASCII characters in JSON strings
|
17
|
+
check_circular: bool = True # if False a circular reference will result in an RecursionError
|
18
|
+
allow_nan: bool = True # use JS equivalents for out-of-range float values, otherwise raise ValueError
|
19
|
+
indent: int | None = None # item indent - 0 will insert only newlines, None is most compact
|
20
|
+
separators: tuple[str, str] | None = None # (item_separator, key_separator) - default (', ', ': ') if indent is None else (',', ': ') # noqa
|
21
|
+
default: ta.Callable[[ta.Any], ta.Any] | None = None # should return a serializable version of obj or raise TypeError # noqa
|
22
|
+
sort_keys: bool = False
|
23
|
+
|
24
|
+
|
25
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
26
|
+
class LoadOpts:
|
27
|
+
cls: type[json.JSONDecoder] | None = None
|
28
|
+
|
29
|
+
parse_float: ta.Callable[[str], ta.Any] | None = None # by default this is equivalent to float(num_str)
|
30
|
+
parse_int: ta.Callable[[str], ta.Any] | None = None # by default this is equivalent to int(num_str)
|
31
|
+
parse_constant: ta.Callable[[str], ta.Any] | None = None # # called with one of the following strings: -Infinity, Infinity, NaN # noqa
|
32
|
+
|
33
|
+
# called with the result of any object literal decoded
|
34
|
+
object_hook: ta.Callable[[dict], ta.Any] | None = None
|
35
|
+
|
36
|
+
# called with the result of any object literal decoded with an ordered list of pairs, by default dict # noqa
|
37
|
+
object_pairs_hook: ta.Callable[[list[tuple[str, ta.Any]]], ta.Any] | None = None
|
@@ -0,0 +1,25 @@
|
|
1
|
+
"""
|
2
|
+
load(fp: File) -> ta.Any | uj.JSONDecodeError
|
3
|
+
loads(s: str | bytes | bytearray) -> ta.Any | uj.JSONDecodeError
|
4
|
+
dump(obj: ta.Any, fp: File, **DumpOpts) -> None
|
5
|
+
dumps(obj: ta.Any, **DumpOpts) -> None
|
6
|
+
"""
|
7
|
+
import dataclasses as dc
|
8
|
+
import typing as ta
|
9
|
+
|
10
|
+
|
11
|
+
@dc.dataclass(frozen=True, kw_only=True)
|
12
|
+
class DumpOpts:
|
13
|
+
"""
|
14
|
+
https://github.com/ultrajson/ultrajson/blob/2e4aba339b0ab08f893590aaa989d12846afc5d6/python/objToJSON.c#L662
|
15
|
+
"""
|
16
|
+
|
17
|
+
ensure_ascii: bool = True # limits output to ASCII and escapes all extended characters above 127.
|
18
|
+
encode_html_chars: bool = False # enables special encoding of "unsafe" HTML characters into safer Unicode sequences
|
19
|
+
escape_forward_slashes: bool = True # whether forward slashes (/) are escaped
|
20
|
+
indent: int = 0
|
21
|
+
sort_keys: bool = False
|
22
|
+
allow_nan: bool = True
|
23
|
+
reject_bytes: bool = True
|
24
|
+
default: ta.Callable[[ta.Any], ta.Any] | None = None # should return a serializable version of obj or raise TypeError # noqa
|
25
|
+
separators: tuple[str, str] | None = None
|
@@ -0,0 +1,72 @@
|
|
1
|
+
import argparse
|
2
|
+
import contextlib
|
3
|
+
import json
|
4
|
+
import sys
|
5
|
+
import typing as ta
|
6
|
+
|
7
|
+
from ... import term
|
8
|
+
from .render import JsonRenderer
|
9
|
+
|
10
|
+
|
11
|
+
def term_color(o: ta.Any, state: JsonRenderer.State) -> tuple[str, str]:
|
12
|
+
if state is JsonRenderer.State.KEY:
|
13
|
+
return term.SGR(term.SGRs.FG.BRIGHT_BLUE), term.SGR(term.SGRs.RESET)
|
14
|
+
elif isinstance(o, str):
|
15
|
+
return term.SGR(term.SGRs.FG.GREEN), term.SGR(term.SGRs.RESET)
|
16
|
+
else:
|
17
|
+
return '', ''
|
18
|
+
|
19
|
+
|
20
|
+
def _main() -> None:
|
21
|
+
parser = argparse.ArgumentParser()
|
22
|
+
parser.add_argument('file', nargs='?')
|
23
|
+
parser.add_argument('-z', '--compact', action='store_true')
|
24
|
+
parser.add_argument('-p', '--pretty', action='store_true')
|
25
|
+
parser.add_argument('-i', '--indent')
|
26
|
+
parser.add_argument('-s', '--sort-keys', action='store_true')
|
27
|
+
parser.add_argument('-c', '--color', action='store_true')
|
28
|
+
args = parser.parse_args()
|
29
|
+
|
30
|
+
separators = None
|
31
|
+
if args.compact:
|
32
|
+
separators = (',', ':')
|
33
|
+
|
34
|
+
indent = None
|
35
|
+
if args.pretty:
|
36
|
+
indent = 2
|
37
|
+
if args.indent:
|
38
|
+
try:
|
39
|
+
indent = int(args.indent)
|
40
|
+
except ValueError:
|
41
|
+
indent = args.indent
|
42
|
+
|
43
|
+
with contextlib.ExitStack() as es:
|
44
|
+
if args.file is None:
|
45
|
+
in_file = sys.stdin
|
46
|
+
else:
|
47
|
+
in_file = es.enter_context(open(args.file))
|
48
|
+
|
49
|
+
data = json.load(in_file)
|
50
|
+
|
51
|
+
kw: dict[str, ta.Any] = dict(
|
52
|
+
indent=indent,
|
53
|
+
separators=separators,
|
54
|
+
)
|
55
|
+
|
56
|
+
if args.color:
|
57
|
+
JsonRenderer(
|
58
|
+
sys.stdout,
|
59
|
+
**kw,
|
60
|
+
style=term_color,
|
61
|
+
).render(data)
|
62
|
+
print()
|
63
|
+
|
64
|
+
else:
|
65
|
+
print(json.dumps(
|
66
|
+
data,
|
67
|
+
**kw,
|
68
|
+
))
|
69
|
+
|
70
|
+
|
71
|
+
if __name__ == '__main__':
|
72
|
+
_main()
|
@@ -7,17 +7,6 @@ import functools
|
|
7
7
|
import json as _json
|
8
8
|
import typing as ta
|
9
9
|
|
10
|
-
from .. import lang
|
11
|
-
|
12
|
-
|
13
|
-
if ta.TYPE_CHECKING:
|
14
|
-
import orjson as _orjson
|
15
|
-
import ujson as _ujson
|
16
|
-
|
17
|
-
else:
|
18
|
-
_orjson = lang.proxy_import('orjson')
|
19
|
-
_ujson = lang.proxy_import('ujson')
|
20
|
-
|
21
10
|
|
22
11
|
##
|
23
12
|
|
@@ -0,0 +1,114 @@
|
|
1
|
+
import enum
|
2
|
+
import io
|
3
|
+
import json
|
4
|
+
import typing as ta
|
5
|
+
|
6
|
+
|
7
|
+
class JsonRenderer:
|
8
|
+
class State(enum.Enum):
|
9
|
+
VALUE = enum.auto()
|
10
|
+
KEY = enum.auto()
|
11
|
+
|
12
|
+
def __init__(
|
13
|
+
self,
|
14
|
+
out: ta.TextIO,
|
15
|
+
*,
|
16
|
+
indent: int | str | None = None,
|
17
|
+
separators: tuple[str, str] | None = None,
|
18
|
+
sort_keys: bool = False,
|
19
|
+
style: ta.Callable[[ta.Any, State], tuple[str, str]] | None = None,
|
20
|
+
) -> None:
|
21
|
+
super().__init__()
|
22
|
+
|
23
|
+
self._out = out
|
24
|
+
if isinstance(indent, (str, int)):
|
25
|
+
self._indent = (' ' * indent) if isinstance(indent, int) else indent
|
26
|
+
self._endl = '\n'
|
27
|
+
if separators is None:
|
28
|
+
separators = (',', ': ')
|
29
|
+
elif indent is None:
|
30
|
+
self._indent = self._endl = ''
|
31
|
+
if separators is None:
|
32
|
+
separators = (', ', ': ')
|
33
|
+
else:
|
34
|
+
raise TypeError(indent)
|
35
|
+
self._comma, self._colon = separators
|
36
|
+
self._sort_keys = sort_keys
|
37
|
+
self._style = style
|
38
|
+
|
39
|
+
self._level = 0
|
40
|
+
|
41
|
+
_literals: ta.ClassVar[ta.Mapping[ta.Any, str]] = {
|
42
|
+
True: 'true',
|
43
|
+
False: 'false',
|
44
|
+
None: 'null',
|
45
|
+
}
|
46
|
+
|
47
|
+
def _write(self, s: str) -> None:
|
48
|
+
if s:
|
49
|
+
self._out.write(s)
|
50
|
+
|
51
|
+
def _write_indent(self) -> None:
|
52
|
+
if self._indent:
|
53
|
+
self._write(self._endl)
|
54
|
+
if self._level:
|
55
|
+
self._write(self._indent * self._level)
|
56
|
+
|
57
|
+
def _render(self, o: ta.Any, state: State = State.VALUE) -> None:
|
58
|
+
if self._style is not None:
|
59
|
+
pre, post = self._style(o, state)
|
60
|
+
self._write(pre)
|
61
|
+
else:
|
62
|
+
post = None
|
63
|
+
|
64
|
+
if o is None or isinstance(o, bool):
|
65
|
+
self._write(self._literals[o])
|
66
|
+
|
67
|
+
elif isinstance(o, (str, int, float)):
|
68
|
+
self._write(json.dumps(o))
|
69
|
+
|
70
|
+
elif isinstance(o, ta.Mapping):
|
71
|
+
self._write('{')
|
72
|
+
self._level += 1
|
73
|
+
items = list(o.items())
|
74
|
+
if self._sort_keys:
|
75
|
+
items.sort(key=lambda t: t[0])
|
76
|
+
for i, (k, v) in enumerate(items):
|
77
|
+
if i:
|
78
|
+
self._write(self._comma)
|
79
|
+
self._write_indent()
|
80
|
+
self._render(k, JsonRenderer.State.KEY)
|
81
|
+
self._write(self._colon)
|
82
|
+
self._render(v)
|
83
|
+
self._level -= 1
|
84
|
+
if o:
|
85
|
+
self._write_indent()
|
86
|
+
self._write('}')
|
87
|
+
|
88
|
+
elif isinstance(o, ta.Sequence):
|
89
|
+
self._write('[')
|
90
|
+
self._level += 1
|
91
|
+
for i, e in enumerate(o):
|
92
|
+
if i:
|
93
|
+
self._write(self._comma)
|
94
|
+
self._write_indent()
|
95
|
+
self._render(e)
|
96
|
+
self._level -= 1
|
97
|
+
if o:
|
98
|
+
self._write_indent()
|
99
|
+
self._write(']')
|
100
|
+
|
101
|
+
else:
|
102
|
+
raise TypeError(o)
|
103
|
+
|
104
|
+
if post:
|
105
|
+
self._write(post)
|
106
|
+
|
107
|
+
def render(self, o: ta.Any) -> None:
|
108
|
+
self._render(o)
|
109
|
+
|
110
|
+
@classmethod
|
111
|
+
def render_str(cls, o: ta.Any, **kwargs: ta.Any) -> str:
|
112
|
+
out = io.StringIO()
|
113
|
+
cls(out, **kwargs).render(o)
|
114
|
+
return out.getvalue()
|
File without changes
|
@@ -126,9 +126,17 @@ omlish/docker/hub.py
|
|
126
126
|
omlish/docker/manifests.py
|
127
127
|
omlish/formats/__init__.py
|
128
128
|
omlish/formats/dotenv.py
|
129
|
-
omlish/formats/json.py
|
130
129
|
omlish/formats/props.py
|
131
130
|
omlish/formats/yaml.py
|
131
|
+
omlish/formats/json/__init__.py
|
132
|
+
omlish/formats/json/__main__.py
|
133
|
+
omlish/formats/json/cli.py
|
134
|
+
omlish/formats/json/json.py
|
135
|
+
omlish/formats/json/render.py
|
136
|
+
omlish/formats/json/backends/__init__.py
|
137
|
+
omlish/formats/json/backends/orjson.py
|
138
|
+
omlish/formats/json/backends/std.py
|
139
|
+
omlish/formats/json/backends/ujson.py
|
132
140
|
omlish/graphs/__init__.py
|
133
141
|
omlish/graphs/dags.py
|
134
142
|
omlish/graphs/domination.py
|
@@ -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.dev56'
|
16
16
|
classifiers = [
|
17
17
|
'License :: OSI Approved :: BSD License',
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
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
|