omlish 0.0.0.dev30__tar.gz → 0.0.0.dev31__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.dev30/omlish.egg-info → omlish-0.0.0.dev31}/PKG-INFO +3 -3
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/__about__.py +3 -3
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/asyncs/anyio.py +1 -1
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/asyncs/bridge.py +17 -9
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/asyncs/trio.py +1 -1
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/bootstrap/main.py +5 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/concurrent/threadlets.py +2 -2
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/docker.py +9 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/logs/noisy.py +1 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/matchfns.py +2 -2
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/switches.py +29 -9
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31/omlish.egg-info}/PKG-INFO +3 -3
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish.egg-info/requires.txt +2 -2
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/pyproject.toml +3 -3
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/LICENSE +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/MANIFEST.in +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/README.rst +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/.manifests.json +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/argparse.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/asyncs/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/asyncs/asyncio.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/asyncs/asyncs.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/asyncs/flavors.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/asyncs/trio_asyncio.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/bootstrap/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/bootstrap/__main__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/bootstrap/base.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/bootstrap/diag.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/bootstrap/harness.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/bootstrap/marshal.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/bootstrap/sys.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/c3.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/cached.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/check.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/_abc.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/_io_abc.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/cache/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/cache/descriptor.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/cache/impl.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/cache/types.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/coerce.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/exceptions.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/frozen.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/identity.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/indexed.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/mappings.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/ordered.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/persistent.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/skiplist.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/sorted.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/treap.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/treapmap.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/unmodifiable.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/collections/utils.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/concurrent/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/concurrent/executors.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/concurrent/futures.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/configs/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/configs/classes.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/configs/flattening.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/configs/strings.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/LICENSE +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/api.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/as_.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/copy.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/descriptors.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/exceptions.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/fields.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/frozen.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/hashing.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/init.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/internals.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/main.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/metaclass.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/metadata.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/order.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/params.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/processing.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/reflect.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/replace.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/repr.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/simple.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/slots.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/impl/utils.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dataclasses/utils.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/datetimes.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/defs.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/asts.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/procfs.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/procstats.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/ps.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/pycharm.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/pydevd.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/replserver/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/replserver/__main__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/replserver/console.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/replserver/server.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/diag/threads.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dispatch/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dispatch/_dispatch2.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dispatch/_dispatch3.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dispatch/dispatch.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dispatch/functions.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dispatch/methods.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/dynamic.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/fnpairs.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/fnpipes.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/formats/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/formats/dotenv.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/formats/json.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/formats/props.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/formats/yaml.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/genmachine.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/graphs/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/graphs/dags.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/graphs/domination.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/graphs/dot/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/graphs/dot/items.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/graphs/dot/make.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/graphs/dot/rendering.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/graphs/dot/utils.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/graphs/trees.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/http/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/http/asgi.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/http/collections.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/http/consts.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/http/cookies.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/http/dates.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/http/encodings.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/http/json.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/http/sessions.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/http/wsgi.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/binder.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/bindings.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/eagers.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/elements.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/exceptions.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/impl/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/impl/bindings.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/impl/elements.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/impl/injector.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/impl/inspect.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/impl/multis.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/impl/origins.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/impl/privates.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/impl/providers.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/impl/proxy.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/impl/scopes.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/injector.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/inspect.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/keys.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/listeners.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/managed.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/multis.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/origins.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/overrides.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/privates.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/providers.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/scopes.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/types.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/inject/utils.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/iterators.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/cached.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/classes/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/classes/abstract.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/classes/restrict.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/classes/simple.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/classes/virtual.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/clsdct.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/cmp.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/contextmanagers.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/datetimes.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/descriptors.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/exceptions.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/functions.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/imports.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/iterables.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/maybes.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/objects.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/resolving.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/resources.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/strings.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/sys.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/timeouts.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lang/typing.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/libc.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lifecycles/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lifecycles/abstract.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lifecycles/base.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lifecycles/contextmanagers.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lifecycles/controller.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lifecycles/manager.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lifecycles/states.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lifecycles/transitions.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/cached.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/check.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/contextmanagers.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/json.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/logs.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/marshal.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/reflect.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/runtime.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/secrets.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/strings.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/lite/subprocesses.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/logs/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/logs/_abc.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/logs/configs.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/logs/formatters.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/logs/handlers.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/logs/utils.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/any.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/base.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/base64.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/dataclasses.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/datetimes.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/enums.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/exceptions.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/factories.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/forbidden.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/global_.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/helpers.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/iterables.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/mappings.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/maybes.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/naming.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/numbers.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/objects.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/optionals.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/polymorphism.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/primitives.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/registries.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/standard.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/unions.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/utils.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/uuids.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/marshal/values.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/math/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/math/bits.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/math/floats.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/math/stats.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/multiprocessing.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/os.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/reflect/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/reflect/isinstance.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/reflect/ops.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/reflect/subst.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/reflect/types.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/runmodule.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/secrets/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/secrets/crypto.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/secrets/marshal.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/secrets/openssl.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/secrets/passwords.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/secrets/secrets.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/secrets/subprocesses.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/keywords/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/keywords/base.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/keywords/core.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/keywords/metadata.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/keywords/parse.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/keywords/render.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/keywords/validation.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/metaschema.json +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/applicator.json +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/content.json +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/core.json +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format-annotation.json +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format-assertion.json +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/format.json +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/meta-data.json +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/unevaluated.json +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/schemas/draft202012/vocabularies/validation.json +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/specs/jsonschema/types.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/sql/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/sql/_abc.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/sql/alchemy/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/sql/alchemy/asyncs.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/sql/alchemy/duckdb.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/sql/alchemy/exprs.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/sql/alchemy/secrets.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/sql/alchemy/sqlean.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/sql/dbs.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/sql/qualifiedname.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/sync.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/term.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/helpers.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/inject/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/inject/harness.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/marks.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/_registry.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/asyncs.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/depskip.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/logging.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/managermarks.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/pydevd.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/repeat.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/skips.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/spacing.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/pytest/plugins/utils.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/testing/testing.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/text/__init__.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/text/asdl.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/text/delimit.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/text/glyphsplit.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/text/indent.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish/text/parts.py +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish.egg-info/SOURCES.txt +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish.egg-info/dependency_links.txt +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/omlish.egg-info/top_level.txt +0 -0
- {omlish-0.0.0.dev30 → omlish-0.0.0.dev31}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: omlish
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev31
|
4
4
|
Summary: omlish
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -13,7 +13,7 @@ Classifier: Operating System :: POSIX
|
|
13
13
|
Requires-Python: ~=3.12
|
14
14
|
License-File: LICENSE
|
15
15
|
Provides-Extra: all
|
16
|
-
Requires-Dist: anyio~=4.
|
16
|
+
Requires-Dist: anyio~=4.6; extra == "all"
|
17
17
|
Requires-Dist: sniffio~=1.3; extra == "all"
|
18
18
|
Requires-Dist: greenlet~=3.1; extra == "all"
|
19
19
|
Requires-Dist: trio~=0.26; extra == "all"
|
@@ -42,7 +42,7 @@ Requires-Dist: sqlean.py~=3.45; python_version < "3.13" and extra == "all"
|
|
42
42
|
Requires-Dist: duckdb~=1.1; extra == "all"
|
43
43
|
Requires-Dist: pytest~=8.0; extra == "all"
|
44
44
|
Provides-Extra: async
|
45
|
-
Requires-Dist: anyio~=4.
|
45
|
+
Requires-Dist: anyio~=4.6; extra == "async"
|
46
46
|
Requires-Dist: sniffio~=1.3; extra == "async"
|
47
47
|
Requires-Dist: greenlet~=3.1; extra == "async"
|
48
48
|
Requires-Dist: trio~=0.26; extra == "async"
|
@@ -1,5 +1,5 @@
|
|
1
|
-
__version__ = '0.0.0.
|
2
|
-
__revision__ = '
|
1
|
+
__version__ = '0.0.0.dev31'
|
2
|
+
__revision__ = 'bd655a8d18c1cc31ce2c9d79fedaec771c5e1593'
|
3
3
|
|
4
4
|
|
5
5
|
#
|
@@ -30,7 +30,7 @@ class Project(ProjectBase):
|
|
30
30
|
|
31
31
|
optional_dependencies = {
|
32
32
|
'async': [
|
33
|
-
'anyio ~= 4.
|
33
|
+
'anyio ~= 4.6',
|
34
34
|
'sniffio ~= 1.3',
|
35
35
|
|
36
36
|
'greenlet ~= 3.1',
|
@@ -4,7 +4,7 @@ TODO:
|
|
4
4
|
- owned lock
|
5
5
|
- async once
|
6
6
|
|
7
|
-
|
7
|
+
See:
|
8
8
|
- https://github.com/davidbrochart/sqlite-anyio/blob/a3ba4c6ef0535b14a5a60071fcd6ed565a514963/sqlite_anyio/sqlite.py
|
9
9
|
- https://github.com/rafalkrupinski/ratelimit-anyio/blob/2910a8a3d6fa54ed17ee6ba457686c9f7a4c4beb/src/ratelimit_anyio/__init__.py
|
10
10
|
- https://github.com/nekitdev/async-extensions/tree/main/async_extensions
|
@@ -12,8 +12,9 @@ TODO:
|
|
12
12
|
See:
|
13
13
|
- https://greenback.readthedocs.io/en/latest/
|
14
14
|
"""
|
15
|
+
import functools # noqa
|
15
16
|
import itertools
|
16
|
-
import sys
|
17
|
+
import sys # noqa
|
17
18
|
import types
|
18
19
|
import typing as ta
|
19
20
|
import weakref
|
@@ -90,7 +91,7 @@ class UnexpectedBridgeNestingError(Exception):
|
|
90
91
|
|
91
92
|
|
92
93
|
_DEBUG_PRINT: ta.Callable[..., None] | None = None
|
93
|
-
# _DEBUG_PRINT = print # noqa
|
94
|
+
# _DEBUG_PRINT = functools.partial(print, file=sys.stderr) # noqa
|
94
95
|
|
95
96
|
_TRACK_TRANSITION_OBJS = False
|
96
97
|
|
@@ -253,8 +254,8 @@ def s_to_a(fn, *, require_await=False):
|
|
253
254
|
switch_occurred = True
|
254
255
|
try:
|
255
256
|
value = yield result
|
256
|
-
except BaseException: # noqa
|
257
|
-
result = g.throw(
|
257
|
+
except BaseException as e: # noqa
|
258
|
+
result = g.throw(e)
|
258
259
|
else:
|
259
260
|
result = g.switch(value)
|
260
261
|
|
@@ -302,15 +303,22 @@ def a_to_s(fn):
|
|
302
303
|
|
303
304
|
cr = gate()
|
304
305
|
sv = None
|
306
|
+
he = False
|
305
307
|
try:
|
306
308
|
while True:
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
|
309
|
+
if not he:
|
310
|
+
try:
|
311
|
+
sv = cr.send(sv)
|
312
|
+
except StopIteration:
|
313
|
+
break
|
314
|
+
he = False
|
311
315
|
|
312
316
|
if ret is missing or cr.cr_await is not None or cr.cr_running:
|
313
|
-
|
317
|
+
try:
|
318
|
+
sv = s_to_a_await(sv) # type: ignore
|
319
|
+
except BaseException as e: # noqa
|
320
|
+
sv = cr.throw(e)
|
321
|
+
he = True
|
314
322
|
|
315
323
|
finally:
|
316
324
|
cr.close()
|
@@ -48,7 +48,7 @@ class Threadlet(abc.ABC):
|
|
48
48
|
raise NotImplementedError
|
49
49
|
|
50
50
|
@abc.abstractmethod
|
51
|
-
def throw(self, ex:
|
51
|
+
def throw(self, ex: BaseException) -> ta.Any:
|
52
52
|
raise NotImplementedError
|
53
53
|
|
54
54
|
|
@@ -84,7 +84,7 @@ class GreenletThreadlet(Threadlet):
|
|
84
84
|
def switch(self, *args: ta.Any, **kwargs: ta.Any) -> ta.Any:
|
85
85
|
return self.g.switch(*args, **kwargs)
|
86
86
|
|
87
|
-
def throw(self, ex:
|
87
|
+
def throw(self, ex: BaseException) -> ta.Any:
|
88
88
|
return self.g.throw(ex)
|
89
89
|
|
90
90
|
|
@@ -107,6 +107,15 @@ def cli_inspect(ids: list[str]) -> list[Inspect]:
|
|
107
107
|
return msh.unmarshal(json.loads(o.decode()), list[Inspect])
|
108
108
|
|
109
109
|
|
110
|
+
def has_cli() -> bool:
|
111
|
+
try:
|
112
|
+
proc = subprocess.run(['docker', '--version']) # noqa
|
113
|
+
except (FileNotFoundError, subprocess.CalledProcessError):
|
114
|
+
return False
|
115
|
+
else:
|
116
|
+
return not proc.returncode
|
117
|
+
|
118
|
+
|
110
119
|
##
|
111
120
|
|
112
121
|
|
@@ -130,7 +130,7 @@ def multi(*children: MatchFn[P, T], strict: bool = False) -> MultiMatchFn: # Mu
|
|
130
130
|
##
|
131
131
|
|
132
132
|
|
133
|
-
class
|
133
|
+
class CachedMatchFn(MatchFn[P, T]):
|
134
134
|
@staticmethod
|
135
135
|
def _default_key(*args, **kwargs):
|
136
136
|
return (args, tuple(sorted(kwargs.items(), key=lambda t: t[0])))
|
@@ -187,7 +187,7 @@ class CachedMultiFn(MatchFn[P, T]):
|
|
187
187
|
return self.__class__(self._f.__get__(instance, owner), key=self._key) # noqa
|
188
188
|
|
189
189
|
|
190
|
-
cached =
|
190
|
+
cached = CachedMatchFn
|
191
191
|
|
192
192
|
|
193
193
|
##
|
@@ -10,19 +10,24 @@ import pytest
|
|
10
10
|
|
11
11
|
from .... import check
|
12
12
|
from .... import collections as col
|
13
|
+
from .... import docker
|
14
|
+
from .... import lang
|
13
15
|
from ._registry import register
|
14
16
|
|
15
17
|
|
16
18
|
Configable = pytest.FixtureRequest | pytest.Config
|
17
19
|
|
18
20
|
|
19
|
-
SWITCHES = {
|
20
|
-
'docker':
|
21
|
+
SWITCHES: ta.Mapping[str, bool | ta.Callable[[], bool]] = {
|
22
|
+
'docker': docker.has_cli,
|
23
|
+
'docker-guest': docker.is_likely_in_docker,
|
21
24
|
'online': True,
|
22
25
|
'integration': True,
|
23
26
|
'slow': False,
|
24
27
|
}
|
25
28
|
|
29
|
+
SWITCH_ATTRS = {k.replace('-', '_'): k for k in SWITCHES}
|
30
|
+
|
26
31
|
|
27
32
|
SwitchState: ta.TypeAlias = bool | ta.Literal['only']
|
28
33
|
|
@@ -53,9 +58,9 @@ def skip_if_disabled(obj: Configable | None, name: str) -> None:
|
|
53
58
|
pytest.skip(f'{name} disabled')
|
54
59
|
|
55
60
|
|
56
|
-
def
|
61
|
+
def get_specified_switches(obj: Configable) -> ta.Mapping[str, SwitchState]:
|
57
62
|
ret: dict[str, SwitchState] = {}
|
58
|
-
for sw
|
63
|
+
for sw in SWITCHES:
|
59
64
|
sts = {
|
60
65
|
st
|
61
66
|
for st, pfx in SWITCH_STATE_OPT_PREFIXES.items()
|
@@ -65,8 +70,6 @@ def get_switches(obj: Configable) -> ta.Mapping[str, SwitchState]:
|
|
65
70
|
if len(sts) > 1:
|
66
71
|
raise Exception(f'Multiple switches specified for {sw}')
|
67
72
|
ret[sw] = check.single(sts)
|
68
|
-
else:
|
69
|
-
ret[sw] = d
|
70
73
|
return ret
|
71
74
|
|
72
75
|
|
@@ -74,8 +77,9 @@ def get_switches(obj: Configable) -> ta.Mapping[str, SwitchState]:
|
|
74
77
|
class SwitchesPlugin:
|
75
78
|
|
76
79
|
def pytest_configure(self, config):
|
77
|
-
for sw in
|
80
|
+
for sw in SWITCH_ATTRS:
|
78
81
|
config.addinivalue_line('markers', f'{sw}: mark test as {sw}')
|
82
|
+
config.addinivalue_line('markers', f'not_{sw}: mark test as not {sw}')
|
79
83
|
|
80
84
|
def pytest_addoption(self, parser):
|
81
85
|
for sw in SWITCHES:
|
@@ -83,13 +87,25 @@ class SwitchesPlugin:
|
|
83
87
|
parser.addoption(f'--{sw}', action='store_true', default=False, help=f'enables {sw} tests')
|
84
88
|
parser.addoption(f'--only-{sw}', action='store_true', default=False, help=f'enables only {sw} tests')
|
85
89
|
|
90
|
+
@lang.cached_function
|
91
|
+
def get_switches(self) -> ta.Mapping[str, SwitchState]:
|
92
|
+
return {
|
93
|
+
k: v() if callable(v) else v
|
94
|
+
for k, v in SWITCHES.items()
|
95
|
+
}
|
96
|
+
|
86
97
|
def pytest_collection_modifyitems(self, config, items):
|
87
|
-
sts =
|
98
|
+
sts = {
|
99
|
+
**self.get_switches(),
|
100
|
+
**get_specified_switches(config),
|
101
|
+
}
|
102
|
+
|
88
103
|
stx = col.multi_map(map(reversed, sts.items())) # type: ignore
|
89
104
|
ts, fs, onlys = (stx.get(k, ()) for k in (True, False, 'only'))
|
90
105
|
|
91
106
|
def process(item):
|
92
|
-
sws = {sw for sw in
|
107
|
+
sws = {sw for swa, sw in SWITCH_ATTRS.items() if swa in item.keywords}
|
108
|
+
nsws = {sw for swa, sw in SWITCH_ATTRS.items() if ('not_' + swa) in item.keywords}
|
93
109
|
|
94
110
|
if onlys:
|
95
111
|
if not any(sw in onlys for sw in sws):
|
@@ -101,5 +117,9 @@ class SwitchesPlugin:
|
|
101
117
|
if sw in fs:
|
102
118
|
item.add_marker(pytest.mark.skip(reason=f'skipping switches {sw}'))
|
103
119
|
|
120
|
+
for nsw in nsws:
|
121
|
+
if nsw in ts:
|
122
|
+
item.add_marker(pytest.mark.skip(reason=f'skipping switches {nsw}'))
|
123
|
+
|
104
124
|
for item in items:
|
105
125
|
process(item)
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: omlish
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev31
|
4
4
|
Summary: omlish
|
5
5
|
Author: wrmsr
|
6
6
|
License: BSD-3-Clause
|
@@ -13,7 +13,7 @@ Classifier: Operating System :: POSIX
|
|
13
13
|
Requires-Python: ~=3.12
|
14
14
|
License-File: LICENSE
|
15
15
|
Provides-Extra: all
|
16
|
-
Requires-Dist: anyio~=4.
|
16
|
+
Requires-Dist: anyio~=4.6; extra == "all"
|
17
17
|
Requires-Dist: sniffio~=1.3; extra == "all"
|
18
18
|
Requires-Dist: greenlet~=3.1; extra == "all"
|
19
19
|
Requires-Dist: trio~=0.26; extra == "all"
|
@@ -42,7 +42,7 @@ Requires-Dist: sqlean.py~=3.45; python_version < "3.13" and extra == "all"
|
|
42
42
|
Requires-Dist: duckdb~=1.1; extra == "all"
|
43
43
|
Requires-Dist: pytest~=8.0; extra == "all"
|
44
44
|
Provides-Extra: async
|
45
|
-
Requires-Dist: anyio~=4.
|
45
|
+
Requires-Dist: anyio~=4.6; extra == "async"
|
46
46
|
Requires-Dist: sniffio~=1.3; extra == "async"
|
47
47
|
Requires-Dist: greenlet~=3.1; extra == "async"
|
48
48
|
Requires-Dist: trio~=0.26; extra == "async"
|
@@ -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.dev31'
|
16
16
|
classifiers = [
|
17
17
|
'License :: OSI Approved :: BSD License',
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
@@ -24,7 +24,7 @@ description = 'omlish'
|
|
24
24
|
|
25
25
|
[project.optional-dependencies]
|
26
26
|
all = [
|
27
|
-
'anyio ~= 4.
|
27
|
+
'anyio ~= 4.6',
|
28
28
|
'sniffio ~= 1.3',
|
29
29
|
'greenlet ~= 3.1',
|
30
30
|
'trio ~= 0.26',
|
@@ -54,7 +54,7 @@ all = [
|
|
54
54
|
'pytest ~= 8.0',
|
55
55
|
]
|
56
56
|
async = [
|
57
|
-
'anyio ~= 4.
|
57
|
+
'anyio ~= 4.6',
|
58
58
|
'sniffio ~= 1.3',
|
59
59
|
'greenlet ~= 3.1',
|
60
60
|
'trio ~= 0.26',
|
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
|
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
|