omlish 0.0.0.dev10__tar.gz → 0.0.0.dev11__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.dev10/omlish.egg-info → omlish-0.0.0.dev11}/PKG-INFO +1 -1
- omlish-0.0.0.dev11/README.rst +5 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/__about__.py +2 -2
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/methods.py +2 -15
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/__init__.py +1 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/objects.py +25 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/matchfns.py +8 -2
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/__init__.py +1 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/inject/harness.py +28 -12
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/asyncs.py +16 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/testing.py +6 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11/omlish.egg-info}/PKG-INFO +1 -1
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/pyproject.toml +3 -3
- omlish-0.0.0.dev10/README.rst +0 -1
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/LICENSE +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/MANIFEST.in +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/argparse.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/anyio.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/asyncio.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/asyncs.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/bridge.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/flavors.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/trio.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/asyncs/trio_asyncio.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/bootstrap.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/c3.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/cached.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/check.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/_abc.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/_io_abc.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/cache/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/cache/descriptor.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/cache/impl.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/cache/types.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/coerce.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/exceptions.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/frozen.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/identity.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/indexed.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/mappings.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/ordered.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/persistent.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/skiplist.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/sorted.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/treap.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/treapmap.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/unmodifiable.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/collections/utils.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/concurrent.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/configs/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/configs/classes.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/configs/flattening.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/configs/strings.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/api.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/as_.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/copy.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/descriptors.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/exceptions.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/fields.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/frozen.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/hashing.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/init.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/internals.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/main.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/metaclass.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/metadata.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/order.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/params.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/processing.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/reflect.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/replace.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/repr.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/simple.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/slots.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/impl/utils.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dataclasses/utils.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/datetimes.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/defs.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/procfs.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/procstats.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/ps.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/pydevd.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/replserver/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/replserver/__main__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/replserver/console.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/replserver/server.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/diag/threads.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/_dispatch2.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/_dispatch3.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/dispatch.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dispatch/functions.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/docker.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/dynamic.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/fnpairs.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/formats/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/formats/dotenv.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/formats/json.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/formats/props.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/formats/yaml.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/dags.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/domination.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/dot/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/dot/items.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/dot/rendering.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/dot/utils.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/graphs/trees.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/asgi.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/collections.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/consts.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/cookies.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/dates.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/encodings.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/json.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/sessions.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/http/wsgi.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/binder.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/bindings.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/eagers.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/elements.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/exceptions.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/bindings.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/elements.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/injector.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/inspect.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/multis.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/origins.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/privates.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/providers.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/proxy.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/impl/scopes.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/injector.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/inspect.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/keys.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/listeners.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/managed.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/multis.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/origins.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/overrides.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/privates.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/providers.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/scopes.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/types.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/inject/utils.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/iterators.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/cached.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/classes/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/classes/abstract.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/classes/restrict.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/classes/simple.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/classes/virtual.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/clsdct.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/cmp.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/contextmanagers.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/descriptors.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/exceptions.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/functions.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/imports.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/iterables.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/maybes.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/resolving.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/strings.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/sys.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/timeouts.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lang/typing.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/libc.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/abstract.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/base.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/contextmanagers.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/controller.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/manager.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/states.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lifecycles/transitions.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/cached.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/check.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/contextmanagers.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/json.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/logs.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/marshal.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/reflect.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/runtime.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/secrets.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/strings.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/lite/subprocesses.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/logs/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/logs/_abc.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/logs/configs.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/logs/formatters.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/logs/utils.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/any.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/base.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/base64.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/dataclasses.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/datetimes.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/enums.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/exceptions.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/factories.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/forbidden.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/global_.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/iterables.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/mappings.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/naming.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/numbers.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/objects.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/optionals.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/polymorphism.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/primitives.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/registries.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/standard.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/utils.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/uuids.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/marshal/values.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/math.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/os.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/reflect/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/reflect/isinstance.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/reflect/ops.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/reflect/subst.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/reflect/types.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/runmodule.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/crypto.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/marshal.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/openssl.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/passwords.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/secrets.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/secrets/subprocesses.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/_abc.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/asyncs.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/dbs.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/duckdb.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/exprs.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/secrets.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sql/sqlean.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/stats.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/sync.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/term.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/helpers.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/inject/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/marks.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/_registry.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/logging.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/managermarks.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/pydevd.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/repeat.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/skips.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/spacing.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/testing/pytest/plugins/switches.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/text/__init__.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/text/delimit.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/text/glyphsplit.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/text/indent.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish/text/parts.py +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish.egg-info/SOURCES.txt +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish.egg-info/dependency_links.txt +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish.egg-info/requires.txt +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/omlish.egg-info/top_level.txt +0 -0
- {omlish-0.0.0.dev10 → omlish-0.0.0.dev11}/setup.cfg +0 -0
@@ -1,4 +1,4 @@
|
|
1
|
-
__version__ = '0.0.0.
|
1
|
+
__version__ = '0.0.0.dev11'
|
2
2
|
|
3
3
|
|
4
4
|
#
|
@@ -77,7 +77,7 @@ class Project(ProjectBase):
|
|
77
77
|
],
|
78
78
|
|
79
79
|
'sqlx': [
|
80
|
-
|
80
|
+
'sqlean.py >= 3.45; python_version < "3.13"',
|
81
81
|
|
82
82
|
'duckdb >= 1',
|
83
83
|
],
|
@@ -10,6 +10,7 @@ import typing as ta
|
|
10
10
|
import weakref
|
11
11
|
|
12
12
|
from .. import check
|
13
|
+
from .. import lang
|
13
14
|
from .dispatch import Dispatcher
|
14
15
|
from .dispatch import get_impl_func_cls_set
|
15
16
|
|
@@ -17,20 +18,6 @@ from .dispatch import get_impl_func_cls_set
|
|
17
18
|
T = ta.TypeVar('T')
|
18
19
|
|
19
20
|
|
20
|
-
def build_mro_dct(instance_cls: type, owner_cls: type | None = None) -> ta.Mapping[str, ta.Any]:
|
21
|
-
if owner_cls is None:
|
22
|
-
owner_cls = instance_cls
|
23
|
-
mro = instance_cls.__mro__[-2::-1]
|
24
|
-
try:
|
25
|
-
pos = mro.index(owner_cls)
|
26
|
-
except ValueError:
|
27
|
-
raise TypeError(f'Owner class {owner_cls} not in mro of instance class {instance_cls}') from None
|
28
|
-
dct: dict[str, ta.Any] = {}
|
29
|
-
for cur_cls in mro[:pos + 1]:
|
30
|
-
dct.update(cur_cls.__dict__)
|
31
|
-
return dct
|
32
|
-
|
33
|
-
|
34
21
|
class Method:
|
35
22
|
def __init__(self, func: ta.Callable) -> None:
|
36
23
|
if not callable(func) and not hasattr(func, '__get__'): # type: ignore
|
@@ -91,7 +78,7 @@ class Method:
|
|
91
78
|
def build_attr_dispatcher(self, instance_cls: type, owner_cls: type | None = None) -> Dispatcher[str]:
|
92
79
|
disp: Dispatcher[str] = Dispatcher()
|
93
80
|
|
94
|
-
mro_dct =
|
81
|
+
mro_dct = lang.build_mro_dict(instance_cls, owner_cls)
|
95
82
|
seen: ta.Mapping[ta.Any, str] = {}
|
96
83
|
for nam, att in mro_dct.items():
|
97
84
|
if att in self._impls:
|
@@ -97,6 +97,31 @@ def deep_subclasses(cls: type) -> ta.Iterator[type]:
|
|
97
97
|
todo.extend(reversed(cur.__subclasses__()))
|
98
98
|
|
99
99
|
|
100
|
+
def build_mro_dict(
|
101
|
+
instance_cls: type,
|
102
|
+
owner_cls: type | None = None,
|
103
|
+
*,
|
104
|
+
bottom_up_key_order: bool = False,
|
105
|
+
) -> ta.Mapping[str, ta.Any]:
|
106
|
+
if owner_cls is None:
|
107
|
+
owner_cls = instance_cls
|
108
|
+
mro = instance_cls.__mro__[-2::-1]
|
109
|
+
try:
|
110
|
+
pos = mro.index(owner_cls)
|
111
|
+
except ValueError:
|
112
|
+
raise TypeError(f'Owner class {owner_cls} not in mro of instance class {instance_cls}') from None
|
113
|
+
dct: dict[str, ta.Any] = {}
|
114
|
+
if not bottom_up_key_order:
|
115
|
+
for cur_cls in mro[:pos + 1][::-1]:
|
116
|
+
for k, v in cur_cls.__dict__.items():
|
117
|
+
if k not in dct:
|
118
|
+
dct[k] = v
|
119
|
+
else:
|
120
|
+
for cur_cls in mro[:pos + 1]:
|
121
|
+
dct.update(cur_cls.__dict__)
|
122
|
+
return dct
|
123
|
+
|
124
|
+
|
100
125
|
##
|
101
126
|
|
102
127
|
|
@@ -1,3 +1,9 @@
|
|
1
|
+
"""
|
2
|
+
TODO:
|
3
|
+
- unify MatchFnClass with dispatch.method?
|
4
|
+
- __call__ = mfs.method(); @__call__.register(lambda: ...) def _call_... ?
|
5
|
+
- not really the same thing, dispatch is unordered this is necessarily ordered
|
6
|
+
"""
|
1
7
|
import abc
|
2
8
|
import dataclasses as dc
|
3
9
|
import typing as ta
|
@@ -117,7 +123,7 @@ class MultiMatchFn(MatchFn[P, T]):
|
|
117
123
|
)
|
118
124
|
|
119
125
|
|
120
|
-
def multi(*children: MatchFn[P, T], strict: bool = False):
|
126
|
+
def multi(*children: MatchFn[P, T], strict: bool = False) -> MultiMatchFn: # MultiMatchFn[P[0], T[-1]]
|
121
127
|
return MultiMatchFn(children, strict=strict) # noqa
|
122
128
|
|
123
129
|
|
@@ -200,7 +206,7 @@ class MatchFnClass(MatchFn[P, T]):
|
|
200
206
|
mf = self.__match_fn = self._cls_match_fn.__get__(self)
|
201
207
|
return mf
|
202
208
|
|
203
|
-
def __init_subclass__(cls, strict: bool = False, **kwargs):
|
209
|
+
def __init_subclass__(cls, strict: bool = False, **kwargs: ta.Any) -> None:
|
204
210
|
super().__init_subclass__()
|
205
211
|
if '_cls_match_fn' in cls.__dict__:
|
206
212
|
raise AttributeError('_cls_match_fn')
|
@@ -120,29 +120,44 @@ class Harness:
|
|
120
120
|
|
121
121
|
@plugins.register
|
122
122
|
class HarnessPlugin:
|
123
|
+
def __init__(self) -> None:
|
124
|
+
super().__init__()
|
125
|
+
self._harnesses_by_session: dict[ta.Any, Harness] = {}
|
126
|
+
|
127
|
+
def get_session_harness(self, session: ta.Any) -> Harness:
|
128
|
+
return self._harnesses_by_session[session]
|
123
129
|
|
124
130
|
@pytest.fixture(scope='session', autouse=True)
|
125
|
-
def _harness_scope_listener_session(self,
|
126
|
-
with
|
127
|
-
|
131
|
+
def _harness_scope_listener_session(self, request):
|
132
|
+
with Harness(inj.as_elements(*_HARNESS_ELEMENTS_LIST)).activate() as harness:
|
133
|
+
self._harnesses_by_session[request.session] = harness
|
134
|
+
try:
|
135
|
+
with harness._pytest_scope_manager(PytestScope.SESSION, request): # noqa
|
136
|
+
yield
|
137
|
+
finally:
|
138
|
+
del self._harnesses_by_session[request.session]
|
128
139
|
|
129
140
|
@pytest.fixture(scope='package', autouse=True)
|
130
|
-
def _harness_scope_listener_package(self,
|
141
|
+
def _harness_scope_listener_package(self, request):
|
142
|
+
harness = self.get_session_harness(request.session)
|
131
143
|
with harness._pytest_scope_manager(PytestScope.PACKAGE, request): # noqa
|
132
144
|
yield
|
133
145
|
|
134
146
|
@pytest.fixture(scope='module', autouse=True)
|
135
|
-
def _harness_scope_listener_module(self,
|
147
|
+
def _harness_scope_listener_module(self, request):
|
148
|
+
harness = self.get_session_harness(request.session)
|
136
149
|
with harness._pytest_scope_manager(PytestScope.MODULE, request): # noqa
|
137
150
|
yield
|
138
151
|
|
139
152
|
@pytest.fixture(scope='class', autouse=True)
|
140
|
-
def _harness_scope_listener_class(self,
|
153
|
+
def _harness_scope_listener_class(self, request):
|
154
|
+
harness = self.get_session_harness(request.session)
|
141
155
|
with harness._pytest_scope_manager(PytestScope.CLASS, request): # noqa
|
142
156
|
yield
|
143
157
|
|
144
158
|
@pytest.fixture(scope='function', autouse=True) # noqa
|
145
|
-
def _harness_scope_listener_function(self,
|
159
|
+
def _harness_scope_listener_function(self, request):
|
160
|
+
harness = self.get_session_harness(request.session)
|
146
161
|
with harness._pytest_scope_manager(PytestScope.FUNCTION, request): # noqa
|
147
162
|
yield
|
148
163
|
|
@@ -163,7 +178,7 @@ TypeT = ta.TypeVar('TypeT', bound=type)
|
|
163
178
|
def bind(
|
164
179
|
scope: PytestScope | str = PytestScope.SESSION,
|
165
180
|
*,
|
166
|
-
eager: bool = False,
|
181
|
+
eager: bool = False, # FIXME
|
167
182
|
) -> ta.Callable[[TypeT], TypeT]:
|
168
183
|
def inner(cls):
|
169
184
|
pts = scope if isinstance(scope, PytestScope) else PytestScope[check.isinstance(scope, str).upper()]
|
@@ -175,7 +190,8 @@ def bind(
|
|
175
190
|
return inner
|
176
191
|
|
177
192
|
|
178
|
-
@pytest.fixture
|
179
|
-
def harness() ->
|
180
|
-
|
181
|
-
|
193
|
+
@pytest.fixture
|
194
|
+
def harness(request) -> Harness:
|
195
|
+
pm = request.session.config.pluginmanager
|
196
|
+
hp = check.single(p for n, p in pm.list_name_plugin() if isinstance(p, HarnessPlugin))
|
197
|
+
return hp.get_session_harness(request.session)
|
@@ -39,7 +39,9 @@ https://github.com/agronholm/anyio/blob/8907964926a24461840eee0925d3f355e729f15d
|
|
39
39
|
""" # noqa
|
40
40
|
import functools
|
41
41
|
import inspect
|
42
|
+
import sys
|
42
43
|
import typing as ta
|
44
|
+
import warnings
|
43
45
|
|
44
46
|
import pytest
|
45
47
|
|
@@ -80,6 +82,20 @@ class AsyncsPlugin:
|
|
80
82
|
*[s for s in KNOWN_BACKENDS if lang.can_import(s)],
|
81
83
|
]
|
82
84
|
|
85
|
+
def pytest_cmdline_main(self, config):
|
86
|
+
if (aio_plugin := sys.modules.get('pytest_asyncio.plugin')):
|
87
|
+
# warnings.filterwarnings is clobbered by pytest using warnings.catch_warnings
|
88
|
+
def aio_plugin_warn(message, *args, **kwargs):
|
89
|
+
if (
|
90
|
+
isinstance(message, pytest.PytestDeprecationWarning) and
|
91
|
+
message.args[0].startswith('The configuration option "asyncio_default_fixture_loop_scope" is unset.') # noqa
|
92
|
+
):
|
93
|
+
return
|
94
|
+
warnings.warn(message, *args, **kwargs)
|
95
|
+
|
96
|
+
aio_plugin.warnings = lang.proxy_import('warnings') # type: ignore
|
97
|
+
aio_plugin.warnings.warn = aio_plugin_warn # type: ignore
|
98
|
+
|
83
99
|
def pytest_configure(self, config):
|
84
100
|
config.addinivalue_line('markers', f'{ASYNCS_MARK}: marks for all async backends')
|
85
101
|
config.addinivalue_line('markers', 'trio_asyncio: marks for trio_asyncio backend')
|
@@ -11,6 +11,12 @@ import typing as ta
|
|
11
11
|
DEFAULT_TIMEOUT_S = 30
|
12
12
|
|
13
13
|
T = ta.TypeVar('T')
|
14
|
+
K = ta.TypeVar('K')
|
15
|
+
V = ta.TypeVar('V')
|
16
|
+
|
17
|
+
|
18
|
+
def assert_dicts_equal_ordered(l: ta.Mapping[K, V], r: ta.Mapping[K, V]) -> None:
|
19
|
+
assert list(l.items()) == list(r.items())
|
14
20
|
|
15
21
|
|
16
22
|
def call_many_with_timeout(
|
@@ -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.dev11'
|
16
16
|
classifiers = [
|
17
17
|
'License :: OSI Approved :: BSD License',
|
18
18
|
'Development Status :: 2 - Pre-Alpha',
|
@@ -47,7 +47,7 @@ all = [
|
|
47
47
|
'aiomysql >= 0.2',
|
48
48
|
'aiosqlite >= 0.20',
|
49
49
|
'asyncpg >= 0.29; python_version < "3.13"',
|
50
|
-
|
50
|
+
'sqlean.py >= 3.45; python_version < "3.13"',
|
51
51
|
'duckdb >= 1',
|
52
52
|
'pytest >= 8',
|
53
53
|
]
|
@@ -89,7 +89,7 @@ sql = [
|
|
89
89
|
'asyncpg >= 0.29; python_version < "3.13"',
|
90
90
|
]
|
91
91
|
sqlx = [
|
92
|
-
|
92
|
+
'sqlean.py >= 3.45; python_version < "3.13"',
|
93
93
|
'duckdb >= 1',
|
94
94
|
]
|
95
95
|
testing = [
|
omlish-0.0.0.dev10/README.rst
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
*omlish*
|
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
|
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
|