From 62c0e808c92046b9969664eb50d35d8ba16a7c68 Mon Sep 17 00:00:00 2001 From: Lura Skye Date: Sun, 5 Mar 2023 20:45:20 +0000 Subject: [PATCH 1/3] Rework packaging to use Poetry instead. --- poetry.lock | 1464 +++++++++++++++++ pyproject.toml | 64 + {trio => src/trio}/__init__.py | 0 {trio => src/trio}/_abc.py | 0 {trio => src/trio}/_channel.py | 0 {trio => src/trio}/_core/__init__.py | 0 {trio => src/trio}/_core/_asyncgens.py | 0 {trio => src/trio}/_core/_entry_queue.py | 0 {trio => src/trio}/_core/_exceptions.py | 0 .../trio}/_core/_generated_instrumentation.py | 0 .../trio}/_core/_generated_io_epoll.py | 0 .../trio}/_core/_generated_io_kqueue.py | 0 .../trio}/_core/_generated_io_windows.py | 0 {trio => src/trio}/_core/_generated_run.py | 0 {trio => src/trio}/_core/_instrumentation.py | 0 {trio => src/trio}/_core/_io_common.py | 0 {trio => src/trio}/_core/_io_epoll.py | 0 {trio => src/trio}/_core/_io_kqueue.py | 0 {trio => src/trio}/_core/_io_windows.py | 0 {trio => src/trio}/_core/_ki.py | 0 {trio => src/trio}/_core/_local.py | 0 {trio => src/trio}/_core/_mock_clock.py | 0 {trio => src/trio}/_core/_multierror.py | 0 {trio => src/trio}/_core/_parking_lot.py | 0 {trio => src/trio}/_core/_run.py | 0 {trio => src/trio}/_core/_thread_cache.py | 0 {trio => src/trio}/_core/_traps.py | 0 {trio => src/trio}/_core/_unbounded_queue.py | 0 .../trio}/_core/_wakeup_socketpair.py | 0 {trio => src/trio}/_core/_windows_cffi.py | 0 {trio => src/trio}/_core/tests/__init__.py | 0 {trio => src/trio}/_core/tests/conftest.py | 0 .../trio}/_core/tests/test_asyncgen.py | 0 .../trio}/_core/tests/test_guest_mode.py | 0 .../trio}/_core/tests/test_instrumentation.py | 0 {trio => src/trio}/_core/tests/test_io.py | 0 {trio => src/trio}/_core/tests/test_ki.py | 0 {trio => src/trio}/_core/tests/test_local.py | 0 .../trio}/_core/tests/test_mock_clock.py | 0 .../trio}/_core/tests/test_multierror.py | 0 .../tests/test_multierror_scripts/__init__.py | 0 .../tests/test_multierror_scripts/_common.py | 0 .../apport_excepthook.py | 0 .../ipython_custom_exc.py | 0 .../simple_excepthook.py | 0 .../simple_excepthook_IPython.py | 0 .../trio}/_core/tests/test_parking_lot.py | 0 {trio => src/trio}/_core/tests/test_run.py | 0 .../trio}/_core/tests/test_thread_cache.py | 0 {trio => src/trio}/_core/tests/test_tutil.py | 0 .../trio}/_core/tests/test_unbounded_queue.py | 0 {trio => src/trio}/_core/tests/test_util.py | 0 .../trio}/_core/tests/test_windows.py | 0 {trio => src/trio}/_core/tests/tutil.py | 0 {trio => src/trio}/_deprecate.py | 0 {trio => src/trio}/_dtls.py | 0 {trio => src/trio}/_file_io.py | 0 {trio => src/trio}/_highlevel_generic.py | 0 .../trio}/_highlevel_open_tcp_listeners.py | 0 .../trio}/_highlevel_open_tcp_stream.py | 0 .../trio}/_highlevel_open_unix_stream.py | 0 .../trio}/_highlevel_serve_listeners.py | 0 {trio => src/trio}/_highlevel_socket.py | 0 {trio => src/trio}/_highlevel_ssl_helpers.py | 0 {trio => src/trio}/_path.py | 0 {trio => src/trio}/_path.pyi | 0 {trio => src/trio}/_signals.py | 0 {trio => src/trio}/_socket.py | 0 {trio => src/trio}/_ssl.py | 0 {trio => src/trio}/_subprocess.py | 0 .../trio}/_subprocess_platform/__init__.py | 0 .../trio}/_subprocess_platform/kqueue.py | 0 .../trio}/_subprocess_platform/waitid.py | 0 .../trio}/_subprocess_platform/windows.py | 0 {trio => src/trio}/_sync.py | 0 {trio => src/trio}/_threads.py | 0 {trio => src/trio}/_timeouts.py | 0 {trio => src/trio}/_tools/__init__.py | 0 {trio => src/trio}/_tools/gen_exports.py | 0 {trio => src/trio}/_unix_pipes.py | 0 {trio => src/trio}/_util.py | 0 {trio => src/trio}/_version.py | 0 {trio => src/trio}/_wait_for_object.py | 0 {trio => src/trio}/_windows_pipes.py | 0 {trio => src/trio}/abc.py | 0 {trio => src/trio}/from_thread.py | 0 {trio => src/trio}/lowlevel.py | 0 {trio => src/trio}/socket.py | 0 {trio => src/trio}/testing/__init__.py | 0 {trio => src/trio}/testing/_check_streams.py | 0 {trio => src/trio}/testing/_checkpoints.py | 0 {trio => src/trio}/testing/_fake_net.py | 0 {trio => src/trio}/testing/_memory_streams.py | 0 {trio => src/trio}/testing/_network.py | 0 {trio => src/trio}/testing/_sequencer.py | 0 {trio => src/trio}/testing/_trio_test.py | 0 {trio => src/trio}/tests/__init__.py | 0 {trio => src/trio}/tests/conftest.py | 0 .../trio}/tests/module_with_deprecations.py | 0 {trio => src/trio}/tests/test_abc.py | 0 {trio => src/trio}/tests/test_channel.py | 0 {trio => src/trio}/tests/test_contextvars.py | 0 {trio => src/trio}/tests/test_deprecate.py | 0 {trio => src/trio}/tests/test_dtls.py | 0 {trio => src/trio}/tests/test_exports.py | 0 {trio => src/trio}/tests/test_fakenet.py | 0 {trio => src/trio}/tests/test_file_io.py | 0 .../trio}/tests/test_highlevel_generic.py | 0 .../test_highlevel_open_tcp_listeners.py | 0 .../tests/test_highlevel_open_tcp_stream.py | 0 .../tests/test_highlevel_open_unix_stream.py | 0 .../tests/test_highlevel_serve_listeners.py | 0 .../trio}/tests/test_highlevel_socket.py | 0 .../trio}/tests/test_highlevel_ssl_helpers.py | 0 {trio => src/trio}/tests/test_path.py | 0 .../trio}/tests/test_scheduler_determinism.py | 0 {trio => src/trio}/tests/test_signals.py | 0 {trio => src/trio}/tests/test_socket.py | 0 {trio => src/trio}/tests/test_ssl.py | 0 {trio => src/trio}/tests/test_subprocess.py | 0 {trio => src/trio}/tests/test_sync.py | 0 {trio => src/trio}/tests/test_testing.py | 0 {trio => src/trio}/tests/test_threads.py | 0 {trio => src/trio}/tests/test_timeouts.py | 0 {trio => src/trio}/tests/test_tracing.py | 0 {trio => src/trio}/tests/test_unix_pipes.py | 0 {trio => src/trio}/tests/test_util.py | 0 .../trio}/tests/test_wait_for_object.py | 0 .../trio}/tests/test_windows_pipes.py | 0 {trio => src/trio}/tests/tools/__init__.py | 0 .../trio}/tests/tools/test_gen_exports.py | 0 {trio => src/trio}/to_thread.py | 0 132 files changed, 1528 insertions(+) create mode 100644 poetry.lock rename {trio => src/trio}/__init__.py (100%) rename {trio => src/trio}/_abc.py (100%) rename {trio => src/trio}/_channel.py (100%) rename {trio => src/trio}/_core/__init__.py (100%) rename {trio => src/trio}/_core/_asyncgens.py (100%) rename {trio => src/trio}/_core/_entry_queue.py (100%) rename {trio => src/trio}/_core/_exceptions.py (100%) rename {trio => src/trio}/_core/_generated_instrumentation.py (100%) rename {trio => src/trio}/_core/_generated_io_epoll.py (100%) rename {trio => src/trio}/_core/_generated_io_kqueue.py (100%) rename {trio => src/trio}/_core/_generated_io_windows.py (100%) rename {trio => src/trio}/_core/_generated_run.py (100%) rename {trio => src/trio}/_core/_instrumentation.py (100%) rename {trio => src/trio}/_core/_io_common.py (100%) rename {trio => src/trio}/_core/_io_epoll.py (100%) rename {trio => src/trio}/_core/_io_kqueue.py (100%) rename {trio => src/trio}/_core/_io_windows.py (100%) rename {trio => src/trio}/_core/_ki.py (100%) rename {trio => src/trio}/_core/_local.py (100%) rename {trio => src/trio}/_core/_mock_clock.py (100%) rename {trio => src/trio}/_core/_multierror.py (100%) rename {trio => src/trio}/_core/_parking_lot.py (100%) rename {trio => src/trio}/_core/_run.py (100%) rename {trio => src/trio}/_core/_thread_cache.py (100%) rename {trio => src/trio}/_core/_traps.py (100%) rename {trio => src/trio}/_core/_unbounded_queue.py (100%) rename {trio => src/trio}/_core/_wakeup_socketpair.py (100%) rename {trio => src/trio}/_core/_windows_cffi.py (100%) rename {trio => src/trio}/_core/tests/__init__.py (100%) rename {trio => src/trio}/_core/tests/conftest.py (100%) rename {trio => src/trio}/_core/tests/test_asyncgen.py (100%) rename {trio => src/trio}/_core/tests/test_guest_mode.py (100%) rename {trio => src/trio}/_core/tests/test_instrumentation.py (100%) rename {trio => src/trio}/_core/tests/test_io.py (100%) rename {trio => src/trio}/_core/tests/test_ki.py (100%) rename {trio => src/trio}/_core/tests/test_local.py (100%) rename {trio => src/trio}/_core/tests/test_mock_clock.py (100%) rename {trio => src/trio}/_core/tests/test_multierror.py (100%) rename {trio => src/trio}/_core/tests/test_multierror_scripts/__init__.py (100%) rename {trio => src/trio}/_core/tests/test_multierror_scripts/_common.py (100%) rename {trio => src/trio}/_core/tests/test_multierror_scripts/apport_excepthook.py (100%) rename {trio => src/trio}/_core/tests/test_multierror_scripts/ipython_custom_exc.py (100%) rename {trio => src/trio}/_core/tests/test_multierror_scripts/simple_excepthook.py (100%) rename {trio => src/trio}/_core/tests/test_multierror_scripts/simple_excepthook_IPython.py (100%) rename {trio => src/trio}/_core/tests/test_parking_lot.py (100%) rename {trio => src/trio}/_core/tests/test_run.py (100%) rename {trio => src/trio}/_core/tests/test_thread_cache.py (100%) rename {trio => src/trio}/_core/tests/test_tutil.py (100%) rename {trio => src/trio}/_core/tests/test_unbounded_queue.py (100%) rename {trio => src/trio}/_core/tests/test_util.py (100%) rename {trio => src/trio}/_core/tests/test_windows.py (100%) rename {trio => src/trio}/_core/tests/tutil.py (100%) rename {trio => src/trio}/_deprecate.py (100%) rename {trio => src/trio}/_dtls.py (100%) rename {trio => src/trio}/_file_io.py (100%) rename {trio => src/trio}/_highlevel_generic.py (100%) rename {trio => src/trio}/_highlevel_open_tcp_listeners.py (100%) rename {trio => src/trio}/_highlevel_open_tcp_stream.py (100%) rename {trio => src/trio}/_highlevel_open_unix_stream.py (100%) rename {trio => src/trio}/_highlevel_serve_listeners.py (100%) rename {trio => src/trio}/_highlevel_socket.py (100%) rename {trio => src/trio}/_highlevel_ssl_helpers.py (100%) rename {trio => src/trio}/_path.py (100%) rename {trio => src/trio}/_path.pyi (100%) rename {trio => src/trio}/_signals.py (100%) rename {trio => src/trio}/_socket.py (100%) rename {trio => src/trio}/_ssl.py (100%) rename {trio => src/trio}/_subprocess.py (100%) rename {trio => src/trio}/_subprocess_platform/__init__.py (100%) rename {trio => src/trio}/_subprocess_platform/kqueue.py (100%) rename {trio => src/trio}/_subprocess_platform/waitid.py (100%) rename {trio => src/trio}/_subprocess_platform/windows.py (100%) rename {trio => src/trio}/_sync.py (100%) rename {trio => src/trio}/_threads.py (100%) rename {trio => src/trio}/_timeouts.py (100%) rename {trio => src/trio}/_tools/__init__.py (100%) rename {trio => src/trio}/_tools/gen_exports.py (100%) rename {trio => src/trio}/_unix_pipes.py (100%) rename {trio => src/trio}/_util.py (100%) rename {trio => src/trio}/_version.py (100%) rename {trio => src/trio}/_wait_for_object.py (100%) rename {trio => src/trio}/_windows_pipes.py (100%) rename {trio => src/trio}/abc.py (100%) rename {trio => src/trio}/from_thread.py (100%) rename {trio => src/trio}/lowlevel.py (100%) rename {trio => src/trio}/socket.py (100%) rename {trio => src/trio}/testing/__init__.py (100%) rename {trio => src/trio}/testing/_check_streams.py (100%) rename {trio => src/trio}/testing/_checkpoints.py (100%) rename {trio => src/trio}/testing/_fake_net.py (100%) rename {trio => src/trio}/testing/_memory_streams.py (100%) rename {trio => src/trio}/testing/_network.py (100%) rename {trio => src/trio}/testing/_sequencer.py (100%) rename {trio => src/trio}/testing/_trio_test.py (100%) rename {trio => src/trio}/tests/__init__.py (100%) rename {trio => src/trio}/tests/conftest.py (100%) rename {trio => src/trio}/tests/module_with_deprecations.py (100%) rename {trio => src/trio}/tests/test_abc.py (100%) rename {trio => src/trio}/tests/test_channel.py (100%) rename {trio => src/trio}/tests/test_contextvars.py (100%) rename {trio => src/trio}/tests/test_deprecate.py (100%) rename {trio => src/trio}/tests/test_dtls.py (100%) rename {trio => src/trio}/tests/test_exports.py (100%) rename {trio => src/trio}/tests/test_fakenet.py (100%) rename {trio => src/trio}/tests/test_file_io.py (100%) rename {trio => src/trio}/tests/test_highlevel_generic.py (100%) rename {trio => src/trio}/tests/test_highlevel_open_tcp_listeners.py (100%) rename {trio => src/trio}/tests/test_highlevel_open_tcp_stream.py (100%) rename {trio => src/trio}/tests/test_highlevel_open_unix_stream.py (100%) rename {trio => src/trio}/tests/test_highlevel_serve_listeners.py (100%) rename {trio => src/trio}/tests/test_highlevel_socket.py (100%) rename {trio => src/trio}/tests/test_highlevel_ssl_helpers.py (100%) rename {trio => src/trio}/tests/test_path.py (100%) rename {trio => src/trio}/tests/test_scheduler_determinism.py (100%) rename {trio => src/trio}/tests/test_signals.py (100%) rename {trio => src/trio}/tests/test_socket.py (100%) rename {trio => src/trio}/tests/test_ssl.py (100%) rename {trio => src/trio}/tests/test_subprocess.py (100%) rename {trio => src/trio}/tests/test_sync.py (100%) rename {trio => src/trio}/tests/test_testing.py (100%) rename {trio => src/trio}/tests/test_threads.py (100%) rename {trio => src/trio}/tests/test_timeouts.py (100%) rename {trio => src/trio}/tests/test_tracing.py (100%) rename {trio => src/trio}/tests/test_unix_pipes.py (100%) rename {trio => src/trio}/tests/test_util.py (100%) rename {trio => src/trio}/tests/test_wait_for_object.py (100%) rename {trio => src/trio}/tests/test_windows_pipes.py (100%) rename {trio => src/trio}/tests/tools/__init__.py (100%) rename {trio => src/trio}/tests/tools/test_gen_exports.py (100%) rename {trio => src/trio}/to_thread.py (100%) diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 0000000000..b6b7a45a4f --- /dev/null +++ b/poetry.lock @@ -0,0 +1,1464 @@ +[[package]] +name = "alabaster" +version = "0.7.13" +description = "A configurable sidebar-enabled Sphinx theme" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "astor" +version = "0.8.1" +description = "Read/rewrite/write Python ASTs" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" + +[[package]] +name = "astroid" +version = "2.14.2" +description = "An abstract syntax tree for Python with inference support." +category = "dev" +optional = false +python-versions = ">=3.7.2" + +[package.dependencies] +lazy-object-proxy = ">=1.4.0" +typed-ast = {version = ">=1.4.0,<2.0", markers = "implementation_name == \"cpython\" and python_version < \"3.8\""} +typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} +wrapt = [ + {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, +] + +[[package]] +name = "async-generator" +version = "1.10" +description = "Async generators and context managers for Python 3.5+" +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "attrs" +version = "22.2.0" +description = "Classes Without Boilerplate" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +cov = ["attrs[tests]", "coverage-enable-subprocess", "coverage[toml] (>=5.3)"] +dev = ["attrs[docs,tests]"] +docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope.interface"] +tests = ["attrs[tests-no-zope]", "zope.interface"] +tests-no-zope = ["cloudpickle", "cloudpickle", "hypothesis", "hypothesis", "mypy (>=0.971,<0.990)", "mypy (>=0.971,<0.990)", "pympler", "pympler", "pytest (>=4.3.0)", "pytest (>=4.3.0)", "pytest-mypy-plugins", "pytest-mypy-plugins", "pytest-xdist[psutil]", "pytest-xdist[psutil]"] + +[[package]] +name = "babel" +version = "2.12.1" +description = "Internationalization utilities" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +pytz = {version = ">=2015.7", markers = "python_version < \"3.9\""} + +[[package]] +name = "black" +version = "23.1.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +packaging = ">=22.0" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typed-ast = {version = ">=1.4.2", markers = "python_version < \"3.8\" and implementation_name == \"cpython\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "certifi" +version = "2022.12.7" +description = "Python package for providing Mozilla's CA Bundle." +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "cffi" +version = "1.15.1" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "2.0.12" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "dev" +optional = false +python-versions = ">=3.5.0" + +[package.extras] +unicode-backport = ["unicodedata2"] + +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} +importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} + +[[package]] +name = "click-default-group" +version = "1.2.2" +description = "Extends click.Group to invoke a command without explicit subcommand name" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +click = "*" + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" + +[[package]] +name = "coverage" +version = "7.2.1" +description = "Code coverage measurement for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +tomli = {version = "*", optional = true, markers = "python_full_version <= \"3.11.0a6\" and extra == \"toml\""} + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "cryptography" +version = "39.0.2" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cffi = ">=1.12" + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "sphinxcontrib-spelling (>=4.0.1)", "twine (>=1.12.0)"] +pep8test = ["black", "check-manifest", "mypy", "ruff", "types-pytz", "types-requests"] +sdist = ["setuptools-rust (>=0.11.4)"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["hypothesis (>=1.11.4,!=3.79.2)", "iso8601", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-shard (>=0.1.2)", "pytest-subtests", "pytest-xdist", "pytz"] +test-randomorder = ["pytest-randomly"] +tox = ["tox"] + +[[package]] +name = "dill" +version = "0.3.6" +description = "serialize all of python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +graph = ["objgraph (>=1.7.2)"] + +[[package]] +name = "docutils" +version = "0.17.1" +description = "Docutils -- Python Documentation Utilities" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" + +[[package]] +name = "exceptiongroup" +version = "1.1.0" +description = "Backport of PEP 654 (exception groups)" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +test = ["pytest (>=6)"] + +[[package]] +name = "idna" +version = "3.4" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "imagesize" +version = "1.4.1" +description = "Getting image size from png/jpeg/jpeg2000/gif file" +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "importlib-metadata" +version = "6.0.0" +description = "Read metadata from Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} +zipp = ">=0.5" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +perf = ["ipython"] +testing = ["flake8 (<5)", "flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)"] + +[[package]] +name = "incremental" +version = "22.10.0" +description = "\"A small library that versions your Python projects.\"" +category = "dev" +optional = false +python-versions = "*" + +[package.extras] +mypy = ["click (>=6.0)", "mypy (==0.812)", "twisted (>=16.4.0)"] +scripts = ["click (>=6.0)", "twisted (>=16.4.0)"] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "isort" +version = "5.11.5" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.7.0" + +[package.extras] +colors = ["colorama (>=0.4.3,<0.5.0)"] +pipfile-deprecated-finder = ["pip-shims (>=0.5.2)", "pipreqs", "requirementslib"] +plugins = ["setuptools"] +requirements-deprecated-finder = ["pip-api", "pipreqs"] + +[[package]] +name = "jedi" +version = "0.18.2" +description = "An autocompletion tool for Python that can be used for text editors." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +parso = ">=0.8.0,<0.9.0" + +[package.extras] +docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["Django (<3.1)", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] + +[[package]] +name = "jinja2" +version = "3.1.2" +description = "A very fast and expressive template engine." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +MarkupSafe = ">=2.0" + +[package.extras] +i18n = ["Babel (>=2.7)"] + +[[package]] +name = "lazy-object-proxy" +version = "1.9.0" +description = "A fast and thorough lazy object proxy." +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "markupsafe" +version = "2.1.2" +description = "Safely add untrusted strings to HTML/XML markup." +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "mypy" +version = "1.0.1" +description = "Optional static typing for Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +mypy-extensions = ">=0.4.3" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +typed-ast = {version = ">=1.4.0,<2", markers = "python_version < \"3.8\""} +typing-extensions = ">=3.10" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +python2 = ["typed-ast (>=1.4.0,<2)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" +optional = false +python-versions = ">=3.5" + +[[package]] +name = "outcome" +version = "1.2.0" +description = "Capture the outcome of Python function calls." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +attrs = ">=19.2.0" + +[[package]] +name = "packaging" +version = "23.0" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "parso" +version = "0.8.3" +description = "A Python Parser" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] +testing = ["docopt", "pytest (<6.0.0)"] + +[[package]] +name = "pathspec" +version = "0.11.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "platformdirs" +version = "3.1.0" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = {version = ">=4.4", markers = "python_version < \"3.8\""} + +[package.extras] +docs = ["furo (>=2022.12.7)", "proselint (>=0.13)", "sphinx (>=6.1.3)", "sphinx-autodoc-typehints (>=1.22,!=1.23.4)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.2.2)", "pytest (>=7.2.1)", "pytest-cov (>=4)", "pytest-mock (>=3.10)"] + +[[package]] +name = "pluggy" +version = "1.0.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pycparser" +version = "2.21" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[[package]] +name = "pygments" +version = "2.14.0" +description = "Pygments is a syntax highlighting package written in Python." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +plugins = ["importlib-metadata"] + +[[package]] +name = "pylint" +version = "2.16.3" +description = "python code static checker" +category = "dev" +optional = false +python-versions = ">=3.7.2" + +[package.dependencies] +astroid = ">=2.14.2,<=2.16.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = [ + {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, +] +isort = ">=4.2.5,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} +tomlkit = ">=0.10.1" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "pyopenssl" +version = "23.0.0" +description = "Python wrapper module around the OpenSSL library" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +cryptography = ">=38.0.0,<40" + +[package.extras] +docs = ["sphinx (!=5.2.0,!=5.2.0.post0)", "sphinx-rtd-theme"] +test = ["flaky", "pretend", "pytest (>=3.0.1)"] + +[[package]] +name = "pytest" +version = "7.2.2" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +attrs = ">=19.2.0" +colorama = {version = "*", markers = "sys_platform == \"win32\""} +exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} +importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=0.12,<2.0" +tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} + +[package.extras] +testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "4.0.0" +description = "Pytest plugin for measuring coverage." +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "six", "virtualenv"] + +[[package]] +name = "pytz" +version = "2022.7.1" +description = "World timezone definitions, modern and historical" +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "requests" +version = "2.27.1" +description = "Python HTTP for Humans." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} +idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +urllib3 = ">=1.21.1,<1.27" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<5)"] + +[[package]] +name = "setuptools" +version = "67.4.0" +description = "Easily download, build, install, upgrade, and uninstall Python packages" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-hoverxref (<2)", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (==0.8.3)", "sphinx-reredirects", "sphinxcontrib-towncrier"] +testing = ["build[virtualenv]", "filelock (>=3.4.0)", "flake8 (<5)", "flake8-2020", "ini2toml[lite] (>=0.9)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pip (>=19.1)", "pip-run (>=8.8)", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)", "pytest-perf", "pytest-timeout", "pytest-xdist", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] +testing-integration = ["build[virtualenv]", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] + +[[package]] +name = "sniffio" +version = "1.3.0" +description = "Sniff out which async library your code is running under" +category = "main" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "snowballstemmer" +version = "2.2.0" +description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." +category = "dev" +optional = false +python-versions = "*" + +[[package]] +name = "sortedcontainers" +version = "2.4.0" +description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" +category = "main" +optional = false +python-versions = "*" + +[[package]] +name = "sphinx" +version = "4.5.0" +description = "Python documentation generator" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.dependencies] +alabaster = ">=0.7,<0.8" +babel = ">=1.3" +colorama = {version = ">=0.3.5", markers = "sys_platform == \"win32\""} +docutils = ">=0.14,<0.18" +imagesize = "*" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.3" +packaging = "*" +Pygments = ">=2.0" +requests = ">=2.5.0" +snowballstemmer = ">=1.1" +sphinxcontrib-applehelp = "*" +sphinxcontrib-devhelp = "*" +sphinxcontrib-htmlhelp = ">=2.0.0" +sphinxcontrib-jsmath = "*" +sphinxcontrib-qthelp = "*" +sphinxcontrib-serializinghtml = ">=1.1.5" + +[package.extras] +docs = ["sphinxcontrib-websupport"] +lint = ["docutils-stubs", "flake8 (>=3.5.0)", "isort", "mypy (>=0.931)", "types-requests", "types-typed-ast"] +test = ["cython", "html5lib", "pytest", "pytest-cov", "typed-ast"] + +[[package]] +name = "sphinx-rtd-theme" +version = "1.2.0" +description = "Read the Docs theme for Sphinx" +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" + +[package.dependencies] +docutils = "<0.19" +sphinx = ">=1.6,<7" +sphinxcontrib-jquery = {version = ">=2.0.0,<3.0.0 || >3.0.0", markers = "python_version > \"3\""} + +[package.extras] +dev = ["bump2version", "sphinxcontrib-httpdomain", "transifex-client", "wheel"] + +[[package]] +name = "sphinxcontrib-applehelp" +version = "1.0.2" +description = "sphinxcontrib-applehelp is a sphinx extension which outputs Apple help books" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-devhelp" +version = "1.0.2" +description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-htmlhelp" +version = "2.0.0" +description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" +category = "dev" +optional = false +python-versions = ">=3.6" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["html5lib", "pytest"] + +[[package]] +name = "sphinxcontrib-jquery" +version = "2.0.0" +description = "Extension to include jQuery on newer Sphinx releases" +category = "dev" +optional = false +python-versions = ">=2.7" + +[package.dependencies] +setuptools = "*" + +[[package]] +name = "sphinxcontrib-jsmath" +version = "1.0.1" +description = "A sphinx extension which renders display math in HTML via JavaScript" +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +test = ["flake8", "mypy", "pytest"] + +[[package]] +name = "sphinxcontrib-qthelp" +version = "1.0.3" +description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp document." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-serializinghtml" +version = "1.1.5" +description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)." +category = "dev" +optional = false +python-versions = ">=3.5" + +[package.extras] +lint = ["docutils-stubs", "flake8", "mypy"] +test = ["pytest"] + +[[package]] +name = "sphinxcontrib-trio" +version = "1.1.2" +description = "Make Sphinx better at documenting Python functions and methods" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +sphinx = ">=1.7" + +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "tomlkit" +version = "0.11.6" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "towncrier" +version = "22.12.0" +description = "Building newsfiles for your project." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +click = "*" +click-default-group = "*" +incremental = "*" +jinja2 = "*" +setuptools = "*" +tomli = {version = "*", markers = "python_version < \"3.11\""} + +[package.extras] +dev = ["furo", "packaging", "sphinx (>=5)", "twisted"] + +[[package]] +name = "trustme" +version = "0.9.0" +description = "#1 quality TLS certs while you wait, for the discerning tester" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +cryptography = "*" +idna = "*" + +[[package]] +name = "typed-ast" +version = "1.5.4" +description = "a fork of Python 2 and 3 ast modules with type comment support" +category = "dev" +optional = false +python-versions = ">=3.6" + +[[package]] +name = "typing-extensions" +version = "4.5.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "dev" +optional = false +python-versions = ">=3.7" + +[[package]] +name = "urllib3" +version = "1.26.14" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "dev" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)", "brotlipy (>=0.6.0)"] +secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] +socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] + +[[package]] +name = "wrapt" +version = "1.15.0" +description = "Module for decorators, wrappers and monkey patching." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[[package]] +name = "zipp" +version = "3.15.0" +description = "Backport of pathlib-compatible object wrapper for zip files" +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo", "jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] +testing = ["big-O", "flake8 (<5)", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.3)", "pytest-flake8", "pytest-mypy (>=0.9.1)"] + +[metadata] +lock-version = "1.1" +python-versions = ">=3.7.2" +content-hash = "3d9650ee39f30637d56e839b1870211a50c74b5f5d0ddd7d45ef0886bd125e68" + +[metadata.files] +alabaster = [ + {file = "alabaster-0.7.13-py3-none-any.whl", hash = "sha256:1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3"}, + {file = "alabaster-0.7.13.tar.gz", hash = "sha256:a27a4a084d5e690e16e01e03ad2b2e552c61a65469419b907243193de1a84ae2"}, +] +astor = [ + {file = "astor-0.8.1-py2.py3-none-any.whl", hash = "sha256:070a54e890cefb5b3739d19f30f5a5ec840ffc9c50ffa7d23cc9fc1a38ebbfc5"}, + {file = "astor-0.8.1.tar.gz", hash = "sha256:6a6effda93f4e1ce9f618779b2dd1d9d84f1e32812c23a29b3fff6fd7f63fa5e"}, +] +astroid = [ + {file = "astroid-2.14.2-py3-none-any.whl", hash = "sha256:0e0e3709d64fbffd3037e4ff403580550f14471fd3eaae9fa11cc9a5c7901153"}, + {file = "astroid-2.14.2.tar.gz", hash = "sha256:a3cf9f02c53dd259144a7e8f3ccd75d67c9a8c716ef183e0c1f291bc5d7bb3cf"}, +] +async-generator = [ + {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"}, + {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"}, +] +attrs = [ + {file = "attrs-22.2.0-py3-none-any.whl", hash = "sha256:29e95c7f6778868dbd49170f98f8818f78f3dc5e0e37c0b1f474e3561b240836"}, + {file = "attrs-22.2.0.tar.gz", hash = "sha256:c9227bfc2f01993c03f68db37d1d15c9690188323c067c641f1a35ca58185f99"}, +] +babel = [ + {file = "Babel-2.12.1-py3-none-any.whl", hash = "sha256:b4246fb7677d3b98f501a39d43396d3cafdc8eadb045f4a31be01863f655c610"}, + {file = "Babel-2.12.1.tar.gz", hash = "sha256:cc2d99999cd01d44420ae725a21c9e3711b3aadc7976d6147f622d8581963455"}, +] +black = [ + {file = "black-23.1.0-cp310-cp310-macosx_10_16_arm64.whl", hash = "sha256:b6a92a41ee34b883b359998f0c8e6eb8e99803aa8bf3123bf2b2e6fec505a221"}, + {file = "black-23.1.0-cp310-cp310-macosx_10_16_universal2.whl", hash = "sha256:57c18c5165c1dbe291d5306e53fb3988122890e57bd9b3dcb75f967f13411a26"}, + {file = "black-23.1.0-cp310-cp310-macosx_10_16_x86_64.whl", hash = "sha256:9880d7d419bb7e709b37e28deb5e68a49227713b623c72b2b931028ea65f619b"}, + {file = "black-23.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6663f91b6feca5d06f2ccd49a10f254f9298cc1f7f49c46e498a0771b507104"}, + {file = "black-23.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9afd3f493666a0cd8f8df9a0200c6359ac53940cbde049dcb1a7eb6ee2dd7074"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_arm64.whl", hash = "sha256:bfffba28dc52a58f04492181392ee380e95262af14ee01d4bc7bb1b1c6ca8d27"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_universal2.whl", hash = "sha256:c1c476bc7b7d021321e7d93dc2cbd78ce103b84d5a4cf97ed535fbc0d6660648"}, + {file = "black-23.1.0-cp311-cp311-macosx_10_16_x86_64.whl", hash = "sha256:382998821f58e5c8238d3166c492139573325287820963d2f7de4d518bd76958"}, + {file = "black-23.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2bf649fda611c8550ca9d7592b69f0637218c2369b7744694c5e4902873b2f3a"}, + {file = "black-23.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:121ca7f10b4a01fd99951234abdbd97728e1240be89fde18480ffac16503d481"}, + {file = "black-23.1.0-cp37-cp37m-macosx_10_16_x86_64.whl", hash = "sha256:a8471939da5e824b891b25751955be52ee7f8a30a916d570a5ba8e0f2eb2ecad"}, + {file = "black-23.1.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8178318cb74f98bc571eef19068f6ab5613b3e59d4f47771582f04e175570ed8"}, + {file = "black-23.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:a436e7881d33acaf2536c46a454bb964a50eff59b21b51c6ccf5a40601fbef24"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_arm64.whl", hash = "sha256:a59db0a2094d2259c554676403fa2fac3473ccf1354c1c63eccf7ae65aac8ab6"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_universal2.whl", hash = "sha256:0052dba51dec07ed029ed61b18183942043e00008ec65d5028814afaab9a22fd"}, + {file = "black-23.1.0-cp38-cp38-macosx_10_16_x86_64.whl", hash = "sha256:49f7b39e30f326a34b5c9a4213213a6b221d7ae9d58ec70df1c4a307cf2a1580"}, + {file = "black-23.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:162e37d49e93bd6eb6f1afc3e17a3d23a823042530c37c3c42eeeaf026f38468"}, + {file = "black-23.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:8b70eb40a78dfac24842458476135f9b99ab952dd3f2dab738c1881a9b38b753"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_arm64.whl", hash = "sha256:a29650759a6a0944e7cca036674655c2f0f63806ddecc45ed40b7b8aa314b651"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_universal2.whl", hash = "sha256:bb460c8561c8c1bec7824ecbc3ce085eb50005883a6203dcfb0122e95797ee06"}, + {file = "black-23.1.0-cp39-cp39-macosx_10_16_x86_64.whl", hash = "sha256:c91dfc2c2a4e50df0026f88d2215e166616e0c80e86004d0003ece0488db2739"}, + {file = "black-23.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2a951cc83ab535d248c89f300eccbd625e80ab880fbcfb5ac8afb5f01a258ac9"}, + {file = "black-23.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:0680d4380db3719ebcfb2613f34e86c8e6d15ffeabcf8ec59355c5e7b85bb555"}, + {file = "black-23.1.0-py3-none-any.whl", hash = "sha256:7a0f701d314cfa0896b9001df70a530eb2472babb76086344e688829efd97d32"}, + {file = "black-23.1.0.tar.gz", hash = "sha256:b0bd97bea8903f5a2ba7219257a44e3f1f9d00073d6cc1add68f0beec69692ac"}, +] +certifi = [ + {file = "certifi-2022.12.7-py3-none-any.whl", hash = "sha256:4ad3232f5e926d6718ec31cfc1fcadfde020920e278684144551c91769c7bc18"}, + {file = "certifi-2022.12.7.tar.gz", hash = "sha256:35824b4c3a97115964b408844d64aa14db1cc518f6562e8d7261699d1350a9e3"}, +] +cffi = [ + {file = "cffi-1.15.1-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:a66d3508133af6e8548451b25058d5812812ec3798c886bf38ed24a98216fab2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:470c103ae716238bbe698d67ad020e1db9d9dba34fa5a899b5e21577e6d52ed2"}, + {file = "cffi-1.15.1-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:9ad5db27f9cabae298d151c85cf2bad1d359a1b9c686a275df03385758e2f914"}, + {file = "cffi-1.15.1-cp27-cp27m-win32.whl", hash = "sha256:b3bbeb01c2b273cca1e1e0c5df57f12dce9a4dd331b4fa1635b8bec26350bde3"}, + {file = "cffi-1.15.1-cp27-cp27m-win_amd64.whl", hash = "sha256:e00b098126fd45523dd056d2efba6c5a63b71ffe9f2bbe1a4fe1716e1d0c331e"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:d61f4695e6c866a23a21acab0509af1cdfd2c013cf256bbf5b6b5e2695827162"}, + {file = "cffi-1.15.1-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:ed9cb427ba5504c1dc15ede7d516b84757c3e3d7868ccc85121d9310d27eed0b"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d39875251ca8f612b6f33e6b1195af86d1b3e60086068be9cc053aa4376e21"}, + {file = "cffi-1.15.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:285d29981935eb726a4399badae8f0ffdff4f5050eaa6d0cfc3f64b857b77185"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3eb6971dcff08619f8d91607cfc726518b6fa2a9eba42856be181c6d0d9515fd"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:21157295583fe8943475029ed5abdcf71eb3911894724e360acff1d61c1d54bc"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5635bd9cb9731e6d4a1132a498dd34f764034a8ce60cef4f5319c0541159392f"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2012c72d854c2d03e45d06ae57f40d78e5770d252f195b93f581acf3ba44496e"}, + {file = "cffi-1.15.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd86c085fae2efd48ac91dd7ccffcfc0571387fe1193d33b6394db7ef31fe2a4"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:fa6693661a4c91757f4412306191b6dc88c1703f780c8234035eac011922bc01"}, + {file = "cffi-1.15.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:59c0b02d0a6c384d453fece7566d1c7e6b7bae4fc5874ef2ef46d56776d61c9e"}, + {file = "cffi-1.15.1-cp310-cp310-win32.whl", hash = "sha256:cba9d6b9a7d64d4bd46167096fc9d2f835e25d7e4c121fb2ddfc6528fb0413b2"}, + {file = "cffi-1.15.1-cp310-cp310-win_amd64.whl", hash = "sha256:ce4bcc037df4fc5e3d184794f27bdaab018943698f4ca31630bc7f84a7b69c6d"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3d08afd128ddaa624a48cf2b859afef385b720bb4b43df214f85616922e6a5ac"}, + {file = "cffi-1.15.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3799aecf2e17cf585d977b780ce79ff0dc9b78d799fc694221ce814c2c19db83"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a591fe9e525846e4d154205572a029f653ada1a78b93697f3b5a8f1f2bc055b9"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3548db281cd7d2561c9ad9984681c95f7b0e38881201e157833a2342c30d5e8c"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:91fc98adde3d7881af9b59ed0294046f3806221863722ba7d8d120c575314325"}, + {file = "cffi-1.15.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:94411f22c3985acaec6f83c6df553f2dbe17b698cc7f8ae751ff2237d96b9e3c"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:03425bdae262c76aad70202debd780501fabeaca237cdfddc008987c0e0f59ef"}, + {file = "cffi-1.15.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:cc4d65aeeaa04136a12677d3dd0b1c0c94dc43abac5860ab33cceb42b801c1e8"}, + {file = "cffi-1.15.1-cp311-cp311-win32.whl", hash = "sha256:a0f100c8912c114ff53e1202d0078b425bee3649ae34d7b070e9697f93c5d52d"}, + {file = "cffi-1.15.1-cp311-cp311-win_amd64.whl", hash = "sha256:04ed324bda3cda42b9b695d51bb7d54b680b9719cfab04227cdd1e04e5de3104"}, + {file = "cffi-1.15.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50a74364d85fd319352182ef59c5c790484a336f6db772c1a9231f1c3ed0cbd7"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e263d77ee3dd201c3a142934a086a4450861778baaeeb45db4591ef65550b0a6"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cec7d9412a9102bdc577382c3929b337320c4c4c4849f2c5cdd14d7368c5562d"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4289fc34b2f5316fbb762d75362931e351941fa95fa18789191b33fc4cf9504a"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:173379135477dc8cac4bc58f45db08ab45d228b3363adb7af79436135d028405"}, + {file = "cffi-1.15.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6975a3fac6bc83c4a65c9f9fcab9e47019a11d3d2cf7f3c0d03431bf145a941e"}, + {file = "cffi-1.15.1-cp36-cp36m-win32.whl", hash = "sha256:2470043b93ff09bf8fb1d46d1cb756ce6132c54826661a32d4e4d132e1977adf"}, + {file = "cffi-1.15.1-cp36-cp36m-win_amd64.whl", hash = "sha256:30d78fbc8ebf9c92c9b7823ee18eb92f2e6ef79b45ac84db507f52fbe3ec4497"}, + {file = "cffi-1.15.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:198caafb44239b60e252492445da556afafc7d1e3ab7a1fb3f0584ef6d742375"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5ef34d190326c3b1f822a5b7a45f6c4535e2f47ed06fec77d3d799c450b2651e"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8102eaf27e1e448db915d08afa8b41d6c7ca7a04b7d73af6514df10a3e74bd82"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5df2768244d19ab7f60546d0c7c63ce1581f7af8b5de3eb3004b9b6fc8a9f84b"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8c4917bd7ad33e8eb21e9a5bbba979b49d9a97acb3a803092cbc1133e20343c"}, + {file = "cffi-1.15.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0e2642fe3142e4cc4af0799748233ad6da94c62a8bec3a6648bf8ee68b1c7426"}, + {file = "cffi-1.15.1-cp37-cp37m-win32.whl", hash = "sha256:e229a521186c75c8ad9490854fd8bbdd9a0c9aa3a524326b55be83b54d4e0ad9"}, + {file = "cffi-1.15.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a0b71b1b8fbf2b96e41c4d990244165e2c9be83d54962a9a1d118fd8657d2045"}, + {file = "cffi-1.15.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:320dab6e7cb2eacdf0e658569d2575c4dad258c0fcc794f46215e1e39f90f2c3"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e74c6b51a9ed6589199c787bf5f9875612ca4a8a0785fb2d4a84429badaf22a"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a5c84c68147988265e60416b57fc83425a78058853509c1b0629c180094904a5"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b926aa83d1edb5aa5b427b4053dc420ec295a08e40911296b9eb1b6170f6cca"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:87c450779d0914f2861b8526e035c5e6da0a3199d8f1add1a665e1cbc6fc6d02"}, + {file = "cffi-1.15.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f2c9f67e9821cad2e5f480bc8d83b8742896f1242dba247911072d4fa94c192"}, + {file = "cffi-1.15.1-cp38-cp38-win32.whl", hash = "sha256:8b7ee99e510d7b66cdb6c593f21c043c248537a32e0bedf02e01e9553a172314"}, + {file = "cffi-1.15.1-cp38-cp38-win_amd64.whl", hash = "sha256:00a9ed42e88df81ffae7a8ab6d9356b371399b91dbdf0c3cb1e84c03a13aceb5"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:54a2db7b78338edd780e7ef7f9f6c442500fb0d41a5a4ea24fff1c929d5af585"}, + {file = "cffi-1.15.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:fcd131dd944808b5bdb38e6f5b53013c5aa4f334c5cad0c72742f6eba4b73db0"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7473e861101c9e72452f9bf8acb984947aa1661a7704553a9f6e4baa5ba64415"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c9a799e985904922a4d207a94eae35c78ebae90e128f0c4e521ce339396be9d"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3bcde07039e586f91b45c88f8583ea7cf7a0770df3a1649627bf598332cb6984"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33ab79603146aace82c2427da5ca6e58f2b3f2fb5da893ceac0c42218a40be35"}, + {file = "cffi-1.15.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d598b938678ebf3c67377cdd45e09d431369c3b1a5b331058c338e201f12b27"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db0fbb9c62743ce59a9ff687eb5f4afbe77e5e8403d6697f7446e5f609976f76"}, + {file = "cffi-1.15.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:98d85c6a2bef81588d9227dde12db8a7f47f639f4a17c9ae08e773aa9c697bf3"}, + {file = "cffi-1.15.1-cp39-cp39-win32.whl", hash = "sha256:40f4774f5a9d4f5e344f31a32b5096977b5d48560c5592e2f3d2c4374bd543ee"}, + {file = "cffi-1.15.1-cp39-cp39-win_amd64.whl", hash = "sha256:70df4e3b545a17496c9b3f41f5115e69a4f2e77e94e1d2a8e1070bc0c38c8a3c"}, + {file = "cffi-1.15.1.tar.gz", hash = "sha256:d400bfb9a37b1351253cb402671cea7e89bdecc294e8016a707f6d1d8ac934f9"}, +] +charset-normalizer = [ + {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, + {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, +] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] +click-default-group = [ + {file = "click-default-group-1.2.2.tar.gz", hash = "sha256:d9560e8e8dfa44b3562fbc9425042a0fd6d21956fcc2db0077f63f34253ab904"}, +] +colorama = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] +coverage = [ + {file = "coverage-7.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:49567ec91fc5e0b15356da07a2feabb421d62f52a9fff4b1ec40e9e19772f5f8"}, + {file = "coverage-7.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:d2ef6cae70168815ed91388948b5f4fcc69681480a0061114db737f957719f03"}, + {file = "coverage-7.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3004765bca3acd9e015794e5c2f0c9a05587f5e698127ff95e9cfba0d3f29339"}, + {file = "coverage-7.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cca7c0b7f5881dfe0291ef09ba7bb1582cb92ab0aeffd8afb00c700bf692415a"}, + {file = "coverage-7.2.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b2167d116309f564af56f9aa5e75ef710ef871c5f9b313a83050035097b56820"}, + {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cb5f152fb14857cbe7f3e8c9a5d98979c4c66319a33cad6e617f0067c9accdc4"}, + {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:87dc37f16fb5e3a28429e094145bf7c1753e32bb50f662722e378c5851f7fdc6"}, + {file = "coverage-7.2.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e191a63a05851f8bce77bc875e75457f9b01d42843f8bd7feed2fc26bbe60833"}, + {file = "coverage-7.2.1-cp310-cp310-win32.whl", hash = "sha256:e3ea04b23b114572b98a88c85379e9e9ae031272ba1fb9b532aa934c621626d4"}, + {file = "coverage-7.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:0cf557827be7eca1c38a2480484d706693e7bb1929e129785fe59ec155a59de6"}, + {file = "coverage-7.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:570c21a29493b350f591a4b04c158ce1601e8d18bdcd21db136fbb135d75efa6"}, + {file = "coverage-7.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9e872b082b32065ac2834149dc0adc2a2e6d8203080501e1e3c3c77851b466f9"}, + {file = "coverage-7.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fac6343bae03b176e9b58104a9810df3cdccd5cfed19f99adfa807ffbf43cf9b"}, + {file = "coverage-7.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:abacd0a738e71b20e224861bc87e819ef46fedba2fb01bc1af83dfd122e9c319"}, + {file = "coverage-7.2.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9256d4c60c4bbfec92721b51579c50f9e5062c21c12bec56b55292464873508"}, + {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:80559eaf6c15ce3da10edb7977a1548b393db36cbc6cf417633eca05d84dd1ed"}, + {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:0bd7e628f6c3ec4e7d2d24ec0e50aae4e5ae95ea644e849d92ae4805650b4c4e"}, + {file = "coverage-7.2.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:09643fb0df8e29f7417adc3f40aaf379d071ee8f0350ab290517c7004f05360b"}, + {file = "coverage-7.2.1-cp311-cp311-win32.whl", hash = "sha256:1b7fb13850ecb29b62a447ac3516c777b0e7a09ecb0f4bb6718a8654c87dfc80"}, + {file = "coverage-7.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:617a94ada56bbfe547aa8d1b1a2b8299e2ec1ba14aac1d4b26a9f7d6158e1273"}, + {file = "coverage-7.2.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:8649371570551d2fd7dee22cfbf0b61f1747cdfb2b7587bb551e4beaaa44cb97"}, + {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d2b9b5e70a21474c105a133ba227c61bc95f2ac3b66861143ce39a5ea4b3f84"}, + {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae82c988954722fa07ec5045c57b6d55bc1a0890defb57cf4a712ced65b26ddd"}, + {file = "coverage-7.2.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:861cc85dfbf55a7a768443d90a07e0ac5207704a9f97a8eb753292a7fcbdfcfc"}, + {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:0339dc3237c0d31c3b574f19c57985fcbe494280153bbcad33f2cdf469f4ac3e"}, + {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:5928b85416a388dd557ddc006425b0c37e8468bd1c3dc118c1a3de42f59e2a54"}, + {file = "coverage-7.2.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8d3843ca645f62c426c3d272902b9de90558e9886f15ddf5efe757b12dd376f5"}, + {file = "coverage-7.2.1-cp37-cp37m-win32.whl", hash = "sha256:6a034480e9ebd4e83d1aa0453fd78986414b5d237aea89a8fdc35d330aa13bae"}, + {file = "coverage-7.2.1-cp37-cp37m-win_amd64.whl", hash = "sha256:6fce673f79a0e017a4dc35e18dc7bb90bf6d307c67a11ad5e61ca8d42b87cbff"}, + {file = "coverage-7.2.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7f099da6958ddfa2ed84bddea7515cb248583292e16bb9231d151cd528eab657"}, + {file = "coverage-7.2.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:97a3189e019d27e914ecf5c5247ea9f13261d22c3bb0cfcfd2a9b179bb36f8b1"}, + {file = "coverage-7.2.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a81dbcf6c6c877986083d00b834ac1e84b375220207a059ad45d12f6e518a4e3"}, + {file = "coverage-7.2.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:78d2c3dde4c0b9be4b02067185136b7ee4681978228ad5ec1278fa74f5ca3e99"}, + {file = "coverage-7.2.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a209d512d157379cc9ab697cbdbb4cfd18daa3e7eebaa84c3d20b6af0037384"}, + {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f3d07edb912a978915576a776756069dede66d012baa503022d3a0adba1b6afa"}, + {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8dca3c1706670297851bca1acff9618455122246bdae623be31eca744ade05ec"}, + {file = "coverage-7.2.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b1991a6d64231a3e5bbe3099fb0dd7c9aeaa4275ad0e0aeff4cb9ef885c62ba2"}, + {file = "coverage-7.2.1-cp38-cp38-win32.whl", hash = "sha256:22c308bc508372576ffa3d2dbc4824bb70d28eeb4fcd79d4d1aed663a06630d0"}, + {file = "coverage-7.2.1-cp38-cp38-win_amd64.whl", hash = "sha256:b0c0d46de5dd97f6c2d1b560bf0fcf0215658097b604f1840365296302a9d1fb"}, + {file = "coverage-7.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4dd34a935de268a133e4741827ae951283a28c0125ddcdbcbba41c4b98f2dfef"}, + {file = "coverage-7.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0f8318ed0f3c376cfad8d3520f496946977abde080439d6689d7799791457454"}, + {file = "coverage-7.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:834c2172edff5a08d78e2f53cf5e7164aacabeb66b369f76e7bb367ca4e2d993"}, + {file = "coverage-7.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4d70c853f0546855f027890b77854508bdb4d6a81242a9d804482e667fff6e6"}, + {file = "coverage-7.2.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a6450da4c7afc4534305b2b7d8650131e130610cea448ff240b6ab73d7eab63"}, + {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:99f4dd81b2bb8fc67c3da68b1f5ee1650aca06faa585cbc6818dbf67893c6d58"}, + {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:bdd3f2f285ddcf2e75174248b2406189261a79e7fedee2ceeadc76219b6faa0e"}, + {file = "coverage-7.2.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:f29351393eb05e6326f044a7b45ed8e38cb4dcc38570d12791f271399dc41431"}, + {file = "coverage-7.2.1-cp39-cp39-win32.whl", hash = "sha256:e2b50ebc2b6121edf352336d503357321b9d8738bb7a72d06fc56153fd3f4cd8"}, + {file = "coverage-7.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:bd5a12239c0006252244f94863f1c518ac256160cd316ea5c47fb1a11b25889a"}, + {file = "coverage-7.2.1-pp37.pp38.pp39-none-any.whl", hash = "sha256:436313d129db7cf5b4ac355dd2bd3f7c7e5294af077b090b85de75f8458b8616"}, + {file = "coverage-7.2.1.tar.gz", hash = "sha256:c77f2a9093ccf329dd523a9b2b3c854c20d2a3d968b6def3b820272ca6732242"}, +] +cryptography = [ + {file = "cryptography-39.0.2-cp36-abi3-macosx_10_12_universal2.whl", hash = "sha256:2725672bb53bb92dc7b4150d233cd4b8c59615cd8288d495eaa86db00d4e5c06"}, + {file = "cryptography-39.0.2-cp36-abi3-macosx_10_12_x86_64.whl", hash = "sha256:23df8ca3f24699167daf3e23e51f7ba7334d504af63a94af468f468b975b7dd7"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:eb40fe69cfc6f5cdab9a5ebd022131ba21453cf7b8a7fd3631f45bbf52bed612"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc0521cce2c1d541634b19f3ac661d7a64f9555135e9d8af3980965be717fd4a"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffd394c7896ed7821a6d13b24657c6a34b6e2650bd84ae063cf11ccffa4f1a97"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:e8a0772016feeb106efd28d4a328e77dc2edae84dfbac06061319fdb669ff828"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:8f35c17bd4faed2bc7797d2a66cbb4f986242ce2e30340ab832e5d99ae60e011"}, + {file = "cryptography-39.0.2-cp36-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:b49a88ff802e1993b7f749b1eeb31134f03c8d5c956e3c125c75558955cda536"}, + {file = "cryptography-39.0.2-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:5f8c682e736513db7d04349b4f6693690170f95aac449c56f97415c6980edef5"}, + {file = "cryptography-39.0.2-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:d7d84a512a59f4412ca8549b01f94be4161c94efc598bf09d027d67826beddc0"}, + {file = "cryptography-39.0.2-cp36-abi3-win32.whl", hash = "sha256:c43ac224aabcbf83a947eeb8b17eaf1547bce3767ee2d70093b461f31729a480"}, + {file = "cryptography-39.0.2-cp36-abi3-win_amd64.whl", hash = "sha256:788b3921d763ee35dfdb04248d0e3de11e3ca8eb22e2e48fef880c42e1f3c8f9"}, + {file = "cryptography-39.0.2-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d15809e0dbdad486f4ad0979753518f47980020b7a34e9fc56e8be4f60702fac"}, + {file = "cryptography-39.0.2-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:50cadb9b2f961757e712a9737ef33d89b8190c3ea34d0fb6675e00edbe35d074"}, + {file = "cryptography-39.0.2-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:103e8f7155f3ce2ffa0049fe60169878d47a4364b277906386f8de21c9234aa1"}, + {file = "cryptography-39.0.2-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:6236a9610c912b129610eb1a274bdc1350b5df834d124fa84729ebeaf7da42c3"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e944fe07b6f229f4c1a06a7ef906a19652bdd9fd54c761b0ff87e83ae7a30354"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:35d658536b0a4117c885728d1a7032bdc9a5974722ae298d6c533755a6ee3915"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:30b1d1bfd00f6fc80d11300a29f1d8ab2b8d9febb6ed4a38a76880ec564fae84"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:e029b844c21116564b8b61216befabca4b500e6816fa9f0ba49527653cae2108"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:fa507318e427169ade4e9eccef39e9011cdc19534f55ca2f36ec3f388c1f70f3"}, + {file = "cryptography-39.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:8bc0008ef798231fac03fe7d26e82d601d15bd16f3afaad1c6113771566570f3"}, + {file = "cryptography-39.0.2.tar.gz", hash = "sha256:bc5b871e977c8ee5a1bbc42fa8d19bcc08baf0c51cbf1586b0e87a2694dde42f"}, +] +dill = [ + {file = "dill-0.3.6-py3-none-any.whl", hash = "sha256:a07ffd2351b8c678dfc4a856a3005f8067aea51d6ba6c700796a4d9e280f39f0"}, + {file = "dill-0.3.6.tar.gz", hash = "sha256:e5db55f3687856d8fbdab002ed78544e1c4559a130302693d839dfe8f93f2373"}, +] +docutils = [ + {file = "docutils-0.17.1-py2.py3-none-any.whl", hash = "sha256:cf316c8370a737a022b72b56874f6602acf974a37a9fba42ec2876387549fc61"}, + {file = "docutils-0.17.1.tar.gz", hash = "sha256:686577d2e4c32380bb50cbb22f575ed742d58168cee37e99117a854bcd88f125"}, +] +exceptiongroup = [ + {file = "exceptiongroup-1.1.0-py3-none-any.whl", hash = "sha256:327cbda3da756e2de031a3107b81ab7b3770a602c4d16ca618298c526f4bec1e"}, + {file = "exceptiongroup-1.1.0.tar.gz", hash = "sha256:bcb67d800a4497e1b404c2dd44fca47d3b7a5e5433dbab67f96c1a685cdfdf23"}, +] +idna = [ + {file = "idna-3.4-py3-none-any.whl", hash = "sha256:90b77e79eaa3eba6de819a0c442c0b4ceefc341a7a2ab77d7562bf49f425c5c2"}, + {file = "idna-3.4.tar.gz", hash = "sha256:814f528e8dead7d329833b91c5faa87d60bf71824cd12a7530b5526063d02cb4"}, +] +imagesize = [ + {file = "imagesize-1.4.1-py2.py3-none-any.whl", hash = "sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b"}, + {file = "imagesize-1.4.1.tar.gz", hash = "sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a"}, +] +importlib-metadata = [ + {file = "importlib_metadata-6.0.0-py3-none-any.whl", hash = "sha256:7efb448ec9a5e313a57655d35aa54cd3e01b7e1fbcf72dce1bf06119420f5bad"}, + {file = "importlib_metadata-6.0.0.tar.gz", hash = "sha256:e354bedeb60efa6affdcc8ae121b73544a7aa74156d047311948f6d711cd378d"}, +] +incremental = [ + {file = "incremental-22.10.0-py2.py3-none-any.whl", hash = "sha256:b864a1f30885ee72c5ac2835a761b8fe8aa9c28b9395cacf27286602688d3e51"}, + {file = "incremental-22.10.0.tar.gz", hash = "sha256:912feeb5e0f7e0188e6f42241d2f450002e11bbc0937c65865045854c24c0bd0"}, +] +iniconfig = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] +isort = [ + {file = "isort-5.11.5-py3-none-any.whl", hash = "sha256:ba1d72fb2595a01c7895a5128f9585a5cc4b6d395f1c8d514989b9a7eb2a8746"}, + {file = "isort-5.11.5.tar.gz", hash = "sha256:6be1f76a507cb2ecf16c7cf14a37e41609ca082330be4e3436a18ef74add55db"}, +] +jedi = [ + {file = "jedi-0.18.2-py2.py3-none-any.whl", hash = "sha256:203c1fd9d969ab8f2119ec0a3342e0b49910045abe6af0a3ae83a5764d54639e"}, + {file = "jedi-0.18.2.tar.gz", hash = "sha256:bae794c30d07f6d910d32a7048af09b5a39ed740918da923c6b780790ebac612"}, +] +jinja2 = [ + {file = "Jinja2-3.1.2-py3-none-any.whl", hash = "sha256:6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61"}, + {file = "Jinja2-3.1.2.tar.gz", hash = "sha256:31351a702a408a9e7595a8fc6150fc3f43bb6bf7e319770cbc0db9df9437e852"}, +] +lazy-object-proxy = [ + {file = "lazy-object-proxy-1.9.0.tar.gz", hash = "sha256:659fb5809fa4629b8a1ac5106f669cfc7bef26fbb389dda53b3e010d1ac4ebae"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b40387277b0ed2d0602b8293b94d7257e17d1479e257b4de114ea11a8cb7f2d7"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8c6cfb338b133fbdbc5cfaa10fe3c6aeea827db80c978dbd13bc9dd8526b7d4"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:721532711daa7db0d8b779b0bb0318fa87af1c10d7fe5e52ef30f8eff254d0cd"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:66a3de4a3ec06cd8af3f61b8e1ec67614fbb7c995d02fa224813cb7afefee701"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:1aa3de4088c89a1b69f8ec0dcc169aa725b0ff017899ac568fe44ddc1396df46"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win32.whl", hash = "sha256:f0705c376533ed2a9e5e97aacdbfe04cecd71e0aa84c7c0595d02ef93b6e4455"}, + {file = "lazy_object_proxy-1.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:ea806fd4c37bf7e7ad82537b0757999264d5f70c45468447bb2b91afdbe73a6e"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:946d27deaff6cf8452ed0dba83ba38839a87f4f7a9732e8f9fd4107b21e6ff07"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:79a31b086e7e68b24b99b23d57723ef7e2c6d81ed21007b6281ebcd1688acb0a"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f699ac1c768270c9e384e4cbd268d6e67aebcfae6cd623b4d7c3bfde5a35db59"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:bfb38f9ffb53b942f2b5954e0f610f1e721ccebe9cce9025a38c8ccf4a5183a4"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:189bbd5d41ae7a498397287c408617fe5c48633e7755287b21d741f7db2706a9"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win32.whl", hash = "sha256:81fc4d08b062b535d95c9ea70dbe8a335c45c04029878e62d744bdced5141586"}, + {file = "lazy_object_proxy-1.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:f2457189d8257dd41ae9b434ba33298aec198e30adf2dcdaaa3a28b9994f6adb"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:d9e25ef10a39e8afe59a5c348a4dbf29b4868ab76269f81ce1674494e2565a6e"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cbf9b082426036e19c6924a9ce90c740a9861e2bdc27a4834fd0a910742ac1e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f5fa4a61ce2438267163891961cfd5e32ec97a2c444e5b842d574251ade27d2"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:8fa02eaab317b1e9e03f69aab1f91e120e7899b392c4fc19807a8278a07a97e8"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:e7c21c95cae3c05c14aafffe2865bbd5e377cfc1348c4f7751d9dc9a48ca4bda"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win32.whl", hash = "sha256:f12ad7126ae0c98d601a7ee504c1122bcef553d1d5e0c3bfa77b16b3968d2734"}, + {file = "lazy_object_proxy-1.9.0-cp37-cp37m-win_amd64.whl", hash = "sha256:edd20c5a55acb67c7ed471fa2b5fb66cb17f61430b7a6b9c3b4a1e40293b1671"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2d0daa332786cf3bb49e10dc6a17a52f6a8f9601b4cf5c295a4f85854d61de63"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9cd077f3d04a58e83d04b20e334f678c2b0ff9879b9375ed107d5d07ff160171"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:660c94ea760b3ce47d1855a30984c78327500493d396eac4dfd8bd82041b22be"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:212774e4dfa851e74d393a2370871e174d7ff0ebc980907723bb67d25c8a7c30"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:f0117049dd1d5635bbff65444496c90e0baa48ea405125c088e93d9cf4525b11"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win32.whl", hash = "sha256:0a891e4e41b54fd5b8313b96399f8b0e173bbbfc03c7631f01efbe29bb0bcf82"}, + {file = "lazy_object_proxy-1.9.0-cp38-cp38-win_amd64.whl", hash = "sha256:9990d8e71b9f6488e91ad25f322898c136b008d87bf852ff65391b004da5e17b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9e7551208b2aded9c1447453ee366f1c4070602b3d932ace044715d89666899b"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f83ac4d83ef0ab017683d715ed356e30dd48a93746309c8f3517e1287523ef4"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7322c3d6f1766d4ef1e51a465f47955f1e8123caee67dd641e67d539a534d006"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:18b78ec83edbbeb69efdc0e9c1cb41a3b1b1ed11ddd8ded602464c3fc6020494"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:09763491ce220c0299688940f8dc2c5d05fd1f45af1e42e636b2e8b2303e4382"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win32.whl", hash = "sha256:9090d8e53235aa280fc9239a86ae3ea8ac58eff66a705fa6aa2ec4968b95c821"}, + {file = "lazy_object_proxy-1.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:db1c1722726f47e10e0b5fdbf15ac3b8adb58c091d12b3ab713965795036985f"}, +] +markupsafe = [ + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:665a36ae6f8f20a4676b53224e33d456a6f5a72657d9c83c2aa00765072f31f7"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:340bea174e9761308703ae988e982005aedf427de816d1afe98147668cc03036"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22152d00bf4a9c7c83960521fc558f55a1adbc0631fbb00a9471e097b19d72e1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28057e985dace2f478e042eaa15606c7efccb700797660629da387eb289b9323"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ca244fa73f50a800cf8c3ebf7fd93149ec37f5cb9596aa8873ae2c1d23498601"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d9d971ec1e79906046aa3ca266de79eac42f1dbf3612a05dc9368125952bd1a1"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:7e007132af78ea9df29495dbf7b5824cb71648d7133cf7848a2a5dd00d36f9ff"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7313ce6a199651c4ed9d7e4cfb4aa56fe923b1adf9af3b420ee14e6d9a73df65"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win32.whl", hash = "sha256:c4a549890a45f57f1ebf99c067a4ad0cb423a05544accaf2b065246827ed9603"}, + {file = "MarkupSafe-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:835fb5e38fd89328e9c81067fd642b3593c33e1e17e2fdbf77f5676abb14a156"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2ec4f2d48ae59bbb9d1f9d7efb9236ab81429a764dedca114f5fdabbc3788013"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608e7073dfa9e38a85d38474c082d4281f4ce276ac0010224eaba11e929dd53a"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65608c35bfb8a76763f37036547f7adfd09270fbdbf96608be2bead319728fcd"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2bfb563d0211ce16b63c7cb9395d2c682a23187f54c3d79bfec33e6705473c6"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:da25303d91526aac3672ee6d49a2f3db2d9502a4a60b55519feb1a4c7714e07d"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:9cad97ab29dfc3f0249b483412c85c8ef4766d96cdf9dcf5a1e3caa3f3661cf1"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:085fd3201e7b12809f9e6e9bc1e5c96a368c8523fad5afb02afe3c051ae4afcc"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1bea30e9bf331f3fef67e0a3877b2288593c98a21ccb2cf29b74c581a4eb3af0"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win32.whl", hash = "sha256:7df70907e00c970c60b9ef2938d894a9381f38e6b9db73c5be35e59d92e06625"}, + {file = "MarkupSafe-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:e55e40ff0cc8cc5c07996915ad367fa47da6b3fc091fdadca7f5403239c5fec3"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a6e40afa7f45939ca356f348c8e23048e02cb109ced1eb8420961b2f40fb373a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf877ab4ed6e302ec1d04952ca358b381a882fbd9d1b07cccbfd61783561f98a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63ba06c9941e46fa389d389644e2d8225e0e3e5ebcc4ff1ea8506dce646f8c8a"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f1cd098434e83e656abf198f103a8207a8187c0fc110306691a2e94a78d0abb2"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:55f44b440d491028addb3b88f72207d71eeebfb7b5dbf0643f7c023ae1fba619"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:a6f2fcca746e8d5910e18782f976489939d54a91f9411c32051b4aab2bd7c513"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0b462104ba25f1ac006fdab8b6a01ebbfbce9ed37fd37fd4acd70c67c973e460"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win32.whl", hash = "sha256:7668b52e102d0ed87cb082380a7e2e1e78737ddecdde129acadb0eccc5423859"}, + {file = "MarkupSafe-2.1.2-cp37-cp37m-win_amd64.whl", hash = "sha256:6d6607f98fcf17e534162f0709aaad3ab7a96032723d8ac8750ffe17ae5a0666"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:a806db027852538d2ad7555b203300173dd1b77ba116de92da9afbc3a3be3eed"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a4abaec6ca3ad8660690236d11bfe28dfd707778e2442b45addd2f086d6ef094"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f03a532d7dee1bed20bc4884194a16160a2de9ffc6354b3878ec9682bb623c54"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cf06cdc1dda95223e9d2d3c58d3b178aa5dacb35ee7e3bbac10e4e1faacb419"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:22731d79ed2eb25059ae3df1dfc9cb1546691cc41f4e3130fe6bfbc3ecbbecfa"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f8ffb705ffcf5ddd0e80b65ddf7bed7ee4f5a441ea7d3419e861a12eaf41af58"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:8db032bf0ce9022a8e41a22598eefc802314e81b879ae093f36ce9ddf39ab1ba"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:2298c859cfc5463f1b64bd55cb3e602528db6fa0f3cfd568d3605c50678f8f03"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win32.whl", hash = "sha256:50c42830a633fa0cf9e7d27664637532791bfc31c731a87b202d2d8ac40c3ea2"}, + {file = "MarkupSafe-2.1.2-cp38-cp38-win_amd64.whl", hash = "sha256:bb06feb762bade6bf3c8b844462274db0c76acc95c52abe8dbed28ae3d44a147"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:99625a92da8229df6d44335e6fcc558a5037dd0a760e11d84be2260e6f37002f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8bca7e26c1dd751236cfb0c6c72d4ad61d986e9a41bbf76cb445f69488b2a2bd"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40627dcf047dadb22cd25ea7ecfe9cbf3bbbad0482ee5920b582f3809c97654f"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:40dfd3fefbef579ee058f139733ac336312663c6706d1163b82b3003fb1925c4"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:090376d812fb6ac5f171e5938e82e7f2d7adc2b629101cec0db8b267815c85e2"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:2e7821bffe00aa6bd07a23913b7f4e01328c3d5cc0b40b36c0bd81d362faeb65"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:c0a33bc9f02c2b17c3ea382f91b4db0e6cde90b63b296422a939886a7a80de1c"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:b8526c6d437855442cdd3d87eede9c425c4445ea011ca38d937db299382e6fa3"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win32.whl", hash = "sha256:137678c63c977754abe9086a3ec011e8fd985ab90631145dfb9294ad09c102a7"}, + {file = "MarkupSafe-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:0576fe974b40a400449768941d5d0858cc624e3249dfd1e0c33674e5c7ca7aed"}, + {file = "MarkupSafe-2.1.2.tar.gz", hash = "sha256:abcabc8c2b26036d62d4c746381a6f7cf60aafcc653198ad678306986b09450d"}, +] +mccabe = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] +mypy = [ + {file = "mypy-1.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:71a808334d3f41ef011faa5a5cd8153606df5fc0b56de5b2e89566c8093a0c9a"}, + {file = "mypy-1.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:920169f0184215eef19294fa86ea49ffd4635dedfdea2b57e45cb4ee85d5ccaf"}, + {file = "mypy-1.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:27a0f74a298769d9fdc8498fcb4f2beb86f0564bcdb1a37b58cbbe78e55cf8c0"}, + {file = "mypy-1.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:65b122a993d9c81ea0bfde7689b3365318a88bde952e4dfa1b3a8b4ac05d168b"}, + {file = "mypy-1.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:5deb252fd42a77add936b463033a59b8e48eb2eaec2976d76b6878d031933fe4"}, + {file = "mypy-1.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2013226d17f20468f34feddd6aae4635a55f79626549099354ce641bc7d40262"}, + {file = "mypy-1.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:48525aec92b47baed9b3380371ab8ab6e63a5aab317347dfe9e55e02aaad22e8"}, + {file = "mypy-1.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c96b8a0c019fe29040d520d9257d8c8f122a7343a8307bf8d6d4a43f5c5bfcc8"}, + {file = "mypy-1.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:448de661536d270ce04f2d7dddaa49b2fdba6e3bd8a83212164d4174ff43aa65"}, + {file = "mypy-1.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:d42a98e76070a365a1d1c220fcac8aa4ada12ae0db679cb4d910fabefc88b994"}, + {file = "mypy-1.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:e64f48c6176e243ad015e995de05af7f22bbe370dbb5b32bd6988438ec873919"}, + {file = "mypy-1.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5fdd63e4f50e3538617887e9aee91855368d9fc1dea30da743837b0df7373bc4"}, + {file = "mypy-1.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dbeb24514c4acbc78d205f85dd0e800f34062efcc1f4a4857c57e4b4b8712bff"}, + {file = "mypy-1.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:a2948c40a7dd46c1c33765718936669dc1f628f134013b02ff5ac6c7ef6942bf"}, + {file = "mypy-1.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5bc8d6bd3b274dd3846597855d96d38d947aedba18776aa998a8d46fabdaed76"}, + {file = "mypy-1.0.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:17455cda53eeee0a4adb6371a21dd3dbf465897de82843751cf822605d152c8c"}, + {file = "mypy-1.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e831662208055b006eef68392a768ff83596035ffd6d846786578ba1714ba8f6"}, + {file = "mypy-1.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e60d0b09f62ae97a94605c3f73fd952395286cf3e3b9e7b97f60b01ddfbbda88"}, + {file = "mypy-1.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:0af4f0e20706aadf4e6f8f8dc5ab739089146b83fd53cb4a7e0e850ef3de0bb6"}, + {file = "mypy-1.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:24189f23dc66f83b839bd1cce2dfc356020dfc9a8bae03978477b15be61b062e"}, + {file = "mypy-1.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:93a85495fb13dc484251b4c1fd7a5ac370cd0d812bbfc3b39c1bafefe95275d5"}, + {file = "mypy-1.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f546ac34093c6ce33f6278f7c88f0f147a4849386d3bf3ae193702f4fe31407"}, + {file = "mypy-1.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c6c2ccb7af7154673c591189c3687b013122c5a891bb5651eca3db8e6c6c55bd"}, + {file = "mypy-1.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:15b5a824b58c7c822c51bc66308e759243c32631896743f030daf449fe3677f3"}, + {file = "mypy-1.0.1-py3-none-any.whl", hash = "sha256:eda5c8b9949ed411ff752b9a01adda31afe7eae1e53e946dbdf9db23865e66c4"}, + {file = "mypy-1.0.1.tar.gz", hash = "sha256:28cea5a6392bb43d266782983b5a4216c25544cd7d80be681a155ddcdafd152d"}, +] +mypy-extensions = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] +outcome = [ + {file = "outcome-1.2.0-py2.py3-none-any.whl", hash = "sha256:c4ab89a56575d6d38a05aa16daeaa333109c1f96167aba8901ab18b6b5e0f7f5"}, + {file = "outcome-1.2.0.tar.gz", hash = "sha256:6f82bd3de45da303cf1f771ecafa1633750a358436a8bb60e06a1ceb745d2672"}, +] +packaging = [ + {file = "packaging-23.0-py3-none-any.whl", hash = "sha256:714ac14496c3e68c99c29b00845f7a2b85f3bb6f1078fd9f72fd20f0570002b2"}, + {file = "packaging-23.0.tar.gz", hash = "sha256:b6ad297f8907de0fa2fe1ccbd26fdaf387f5f47c7275fedf8cce89f99446cf97"}, +] +parso = [ + {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, + {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, +] +pathspec = [ + {file = "pathspec-0.11.0-py3-none-any.whl", hash = "sha256:3a66eb970cbac598f9e5ccb5b2cf58930cd8e3ed86d393d541eaf2d8b1705229"}, + {file = "pathspec-0.11.0.tar.gz", hash = "sha256:64d338d4e0914e91c1792321e6907b5a593f1ab1851de7fc269557a21b30ebbc"}, +] +platformdirs = [ + {file = "platformdirs-3.1.0-py3-none-any.whl", hash = "sha256:13b08a53ed71021350c9e300d4ea8668438fb0046ab3937ac9a29913a1a1350a"}, + {file = "platformdirs-3.1.0.tar.gz", hash = "sha256:accc3665857288317f32c7bebb5a8e482ba717b474f3fc1d18ca7f9214be0cef"}, +] +pluggy = [ + {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, + {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, +] +pycparser = [ + {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, + {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, +] +pygments = [ + {file = "Pygments-2.14.0-py3-none-any.whl", hash = "sha256:fa7bd7bd2771287c0de303af8bfdfc731f51bd2c6a47ab69d117138893b82717"}, + {file = "Pygments-2.14.0.tar.gz", hash = "sha256:b3ed06a9e8ac9a9aae5a6f5dbe78a8a58655d17b43b93c078f094ddc476ae297"}, +] +pylint = [ + {file = "pylint-2.16.3-py3-none-any.whl", hash = "sha256:3e803be66e3a34c76b0aa1a3cf4714b538335e79bd69718d34fcf36d8fff2a2b"}, + {file = "pylint-2.16.3.tar.gz", hash = "sha256:0decdf8dfe30298cd9f8d82e9a1542da464db47da60e03641631086671a03621"}, +] +pyopenssl = [ + {file = "pyOpenSSL-23.0.0-py3-none-any.whl", hash = "sha256:df5fc28af899e74e19fccb5510df423581047e10ab6f1f4ba1763ff5fde844c0"}, + {file = "pyOpenSSL-23.0.0.tar.gz", hash = "sha256:c1cc5f86bcacefc84dada7d31175cae1b1518d5f60d3d0bb595a67822a868a6f"}, +] +pytest = [ + {file = "pytest-7.2.2-py3-none-any.whl", hash = "sha256:130328f552dcfac0b1cec75c12e3f005619dc5f874f0a06e8ff7263f0ee6225e"}, + {file = "pytest-7.2.2.tar.gz", hash = "sha256:c99ab0c73aceb050f68929bc93af19ab6db0558791c6a0715723abe9d0ade9d4"}, +] +pytest-cov = [ + {file = "pytest-cov-4.0.0.tar.gz", hash = "sha256:996b79efde6433cdbd0088872dbc5fb3ed7fe1578b68cdbba634f14bb8dd0470"}, + {file = "pytest_cov-4.0.0-py3-none-any.whl", hash = "sha256:2feb1b751d66a8bd934e5edfa2e961d11309dc37b73b0eabe73b5945fee20f6b"}, +] +pytz = [ + {file = "pytz-2022.7.1-py2.py3-none-any.whl", hash = "sha256:78f4f37d8198e0627c5f1143240bb0206b8691d8d7ac6d78fee88b78733f8c4a"}, + {file = "pytz-2022.7.1.tar.gz", hash = "sha256:01a0681c4b9684a28304615eba55d1ab31ae00bf68ec157ec3708a8182dbbcd0"}, +] +requests = [ + {file = "requests-2.27.1-py2.py3-none-any.whl", hash = "sha256:f22fa1e554c9ddfd16e6e41ac79759e17be9e492b3587efa038054674760e72d"}, + {file = "requests-2.27.1.tar.gz", hash = "sha256:68d7c56fd5a8999887728ef304a6d12edc7be74f1cfa47714fc8b414525c9a61"}, +] +setuptools = [ + {file = "setuptools-67.4.0-py3-none-any.whl", hash = "sha256:f106dee1b506dee5102cc3f3e9e68137bbad6d47b616be7991714b0c62204251"}, + {file = "setuptools-67.4.0.tar.gz", hash = "sha256:e5fd0a713141a4a105412233c63dc4e17ba0090c8e8334594ac790ec97792330"}, +] +sniffio = [ + {file = "sniffio-1.3.0-py3-none-any.whl", hash = "sha256:eecefdce1e5bbfb7ad2eeaabf7c1eeb404d7757c379bd1f7e5cce9d8bf425384"}, + {file = "sniffio-1.3.0.tar.gz", hash = "sha256:e60305c5e5d314f5389259b7f22aaa33d8f7dee49763119234af3755c55b9101"}, +] +snowballstemmer = [ + {file = "snowballstemmer-2.2.0-py2.py3-none-any.whl", hash = "sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a"}, + {file = "snowballstemmer-2.2.0.tar.gz", hash = "sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1"}, +] +sortedcontainers = [ + {file = "sortedcontainers-2.4.0-py2.py3-none-any.whl", hash = "sha256:a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0"}, + {file = "sortedcontainers-2.4.0.tar.gz", hash = "sha256:25caa5a06cc30b6b83d11423433f65d1f9d76c4c6a0c90e3379eaa43b9bfdb88"}, +] +sphinx = [ + {file = "Sphinx-4.5.0-py3-none-any.whl", hash = "sha256:ebf612653238bcc8f4359627a9b7ce44ede6fdd75d9d30f68255c7383d3a6226"}, + {file = "Sphinx-4.5.0.tar.gz", hash = "sha256:7bf8ca9637a4ee15af412d1a1d9689fec70523a68ca9bb9127c2f3eeb344e2e6"}, +] +sphinx-rtd-theme = [ + {file = "sphinx_rtd_theme-1.2.0-py2.py3-none-any.whl", hash = "sha256:f823f7e71890abe0ac6aaa6013361ea2696fc8d3e1fa798f463e82bdb77eeff2"}, + {file = "sphinx_rtd_theme-1.2.0.tar.gz", hash = "sha256:a0d8bd1a2ed52e0b338cbe19c4b2eef3c5e7a048769753dac6a9f059c7b641b8"}, +] +sphinxcontrib-applehelp = [ + {file = "sphinxcontrib-applehelp-1.0.2.tar.gz", hash = "sha256:a072735ec80e7675e3f432fcae8610ecf509c5f1869d17e2eecff44389cdbc58"}, + {file = "sphinxcontrib_applehelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:806111e5e962be97c29ec4c1e7fe277bfd19e9652fb1a4392105b43e01af885a"}, +] +sphinxcontrib-devhelp = [ + {file = "sphinxcontrib-devhelp-1.0.2.tar.gz", hash = "sha256:ff7f1afa7b9642e7060379360a67e9c41e8f3121f2ce9164266f61b9f4b338e4"}, + {file = "sphinxcontrib_devhelp-1.0.2-py2.py3-none-any.whl", hash = "sha256:8165223f9a335cc1af7ffe1ed31d2871f325254c0423bc0c4c7cd1c1e4734a2e"}, +] +sphinxcontrib-htmlhelp = [ + {file = "sphinxcontrib-htmlhelp-2.0.0.tar.gz", hash = "sha256:f5f8bb2d0d629f398bf47d0d69c07bc13b65f75a81ad9e2f71a63d4b7a2f6db2"}, + {file = "sphinxcontrib_htmlhelp-2.0.0-py2.py3-none-any.whl", hash = "sha256:d412243dfb797ae3ec2b59eca0e52dac12e75a241bf0e4eb861e450d06c6ed07"}, +] +sphinxcontrib-jquery = [ + {file = "sphinxcontrib-jquery-2.0.0.tar.gz", hash = "sha256:8fb65f6dba84bf7bcd1aea1f02ab3955ac34611d838bcc95d4983b805b234daa"}, + {file = "sphinxcontrib_jquery-2.0.0-py3-none-any.whl", hash = "sha256:ed47fa425c338ffebe3c37e1cdb56e30eb806116b85f01055b158c7057fdb995"}, +] +sphinxcontrib-jsmath = [ + {file = "sphinxcontrib-jsmath-1.0.1.tar.gz", hash = "sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8"}, + {file = "sphinxcontrib_jsmath-1.0.1-py2.py3-none-any.whl", hash = "sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178"}, +] +sphinxcontrib-qthelp = [ + {file = "sphinxcontrib-qthelp-1.0.3.tar.gz", hash = "sha256:4c33767ee058b70dba89a6fc5c1892c0d57a54be67ddd3e7875a18d14cba5a72"}, + {file = "sphinxcontrib_qthelp-1.0.3-py2.py3-none-any.whl", hash = "sha256:bd9fc24bcb748a8d51fd4ecaade681350aa63009a347a8c14e637895444dfab6"}, +] +sphinxcontrib-serializinghtml = [ + {file = "sphinxcontrib-serializinghtml-1.1.5.tar.gz", hash = "sha256:aa5f6de5dfdf809ef505c4895e51ef5c9eac17d0f287933eb49ec495280b6952"}, + {file = "sphinxcontrib_serializinghtml-1.1.5-py2.py3-none-any.whl", hash = "sha256:352a9a00ae864471d3a7ead8d7d79f5fc0b57e8b3f95e9867eb9eb28999b92fd"}, +] +sphinxcontrib-trio = [ + {file = "sphinxcontrib-trio-1.1.2.tar.gz", hash = "sha256:9f1ba9c1d5965b534e85258d8b677dd94e9b1a9a2e918b85ccd42590596b47c0"}, + {file = "sphinxcontrib_trio-1.1.2-py3-none-any.whl", hash = "sha256:1b849be08a147ef4113e35c191a51c5792613a9a54697b497cd91656d906a232"}, +] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +tomlkit = [ + {file = "tomlkit-0.11.6-py3-none-any.whl", hash = "sha256:07de26b0d8cfc18f871aec595fda24d95b08fef89d147caa861939f37230bf4b"}, + {file = "tomlkit-0.11.6.tar.gz", hash = "sha256:71b952e5721688937fb02cf9d354dbcf0785066149d2855e44531ebdd2b65d73"}, +] +towncrier = [ + {file = "towncrier-22.12.0-py3-none-any.whl", hash = "sha256:9767a899a4d6856950f3598acd9e8f08da2663c49fdcda5ea0f9e6ba2afc8eea"}, + {file = "towncrier-22.12.0.tar.gz", hash = "sha256:9c49d7e75f646a9aea02ae904c0bc1639c8fd14a01292d2b123b8d307564034d"}, +] +trustme = [ + {file = "trustme-0.9.0-py2.py3-none-any.whl", hash = "sha256:a6e53039cc43e70548ebd9a42ec1af5cba803a16d14321cd96352d2b4e010e04"}, + {file = "trustme-0.9.0.tar.gz", hash = "sha256:5e07b23d70ceed64f3bb36ae4b9abc52354c16c98d45ab037bee2b5fbffe586c"}, +] +typed-ast = [ + {file = "typed_ast-1.5.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:669dd0c4167f6f2cd9f57041e03c3c2ebf9063d0757dc89f79ba1daa2bfca9d4"}, + {file = "typed_ast-1.5.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:211260621ab1cd7324e0798d6be953d00b74e0428382991adfddb352252f1d62"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:267e3f78697a6c00c689c03db4876dd1efdfea2f251a5ad6555e82a26847b4ac"}, + {file = "typed_ast-1.5.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c542eeda69212fa10a7ada75e668876fdec5f856cd3d06829e6aa64ad17c8dfe"}, + {file = "typed_ast-1.5.4-cp310-cp310-win_amd64.whl", hash = "sha256:a9916d2bb8865f973824fb47436fa45e1ebf2efd920f2b9f99342cb7fab93f72"}, + {file = "typed_ast-1.5.4-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:79b1e0869db7c830ba6a981d58711c88b6677506e648496b1f64ac7d15633aec"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a94d55d142c9265f4ea46fab70977a1944ecae359ae867397757d836ea5a3f47"}, + {file = "typed_ast-1.5.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:183afdf0ec5b1b211724dfef3d2cad2d767cbefac291f24d69b00546c1837fb6"}, + {file = "typed_ast-1.5.4-cp36-cp36m-win_amd64.whl", hash = "sha256:639c5f0b21776605dd6c9dbe592d5228f021404dafd377e2b7ac046b0349b1a1"}, + {file = "typed_ast-1.5.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cf4afcfac006ece570e32d6fa90ab74a17245b83dfd6655a6f68568098345ff6"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed855bbe3eb3715fca349c80174cfcfd699c2f9de574d40527b8429acae23a66"}, + {file = "typed_ast-1.5.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:6778e1b2f81dfc7bc58e4b259363b83d2e509a65198e85d5700dfae4c6c8ff1c"}, + {file = "typed_ast-1.5.4-cp37-cp37m-win_amd64.whl", hash = "sha256:0261195c2062caf107831e92a76764c81227dae162c4f75192c0d489faf751a2"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:2efae9db7a8c05ad5547d522e7dbe62c83d838d3906a3716d1478b6c1d61388d"}, + {file = "typed_ast-1.5.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7d5d014b7daa8b0bf2eaef684295acae12b036d79f54178b92a2b6a56f92278f"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:370788a63915e82fd6f212865a596a0fefcbb7d408bbbb13dea723d971ed8bdc"}, + {file = "typed_ast-1.5.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4e964b4ff86550a7a7d56345c7864b18f403f5bd7380edf44a3c1fb4ee7ac6c6"}, + {file = "typed_ast-1.5.4-cp38-cp38-win_amd64.whl", hash = "sha256:683407d92dc953c8a7347119596f0b0e6c55eb98ebebd9b23437501b28dcbb8e"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4879da6c9b73443f97e731b617184a596ac1235fe91f98d279a7af36c796da35"}, + {file = "typed_ast-1.5.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3e123d878ba170397916557d31c8f589951e353cc95fb7f24f6bb69adc1a8a97"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ebd9d7f80ccf7a82ac5f88c521115cc55d84e35bf8b446fcd7836eb6b98929a3"}, + {file = "typed_ast-1.5.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98f80dee3c03455e92796b58b98ff6ca0b2a6f652120c263efdba4d6c5e58f72"}, + {file = "typed_ast-1.5.4-cp39-cp39-win_amd64.whl", hash = "sha256:0fdbcf2fef0ca421a3f5912555804296f0b0960f0418c440f5d6d3abb549f3e1"}, + {file = "typed_ast-1.5.4.tar.gz", hash = "sha256:39e21ceb7388e4bb37f4c679d72707ed46c2fbf2a5609b8b8ebc4b067d977df2"}, +] +typing-extensions = [ + {file = "typing_extensions-4.5.0-py3-none-any.whl", hash = "sha256:fb33085c39dd998ac16d1431ebc293a8b3eedd00fd4a32de0ff79002c19511b4"}, + {file = "typing_extensions-4.5.0.tar.gz", hash = "sha256:5cb5f4a79139d699607b3ef622a1dedafa84e115ab0024e0d9c044a9479ca7cb"}, +] +urllib3 = [ + {file = "urllib3-1.26.14-py2.py3-none-any.whl", hash = "sha256:75edcdc2f7d85b137124a6c3c9fc3933cdeaa12ecb9a6a959f22797a0feca7e1"}, + {file = "urllib3-1.26.14.tar.gz", hash = "sha256:076907bf8fd355cde77728471316625a4d2f7e713c125f51953bb5b3eecf4f72"}, +] +wrapt = [ + {file = "wrapt-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:ca1cccf838cd28d5a0883b342474c630ac48cac5df0ee6eacc9c7290f76b11c1"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:e826aadda3cae59295b95343db8f3d965fb31059da7de01ee8d1c40a60398b29"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:5fc8e02f5984a55d2c653f5fea93531e9836abbd84342c1d1e17abc4a15084c2"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:96e25c8603a155559231c19c0349245eeb4ac0096fe3c1d0be5c47e075bd4f46"}, + {file = "wrapt-1.15.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:40737a081d7497efea35ab9304b829b857f21558acfc7b3272f908d33b0d9d4c"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f87ec75864c37c4c6cb908d282e1969e79763e0d9becdfe9fe5473b7bb1e5f09"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:1286eb30261894e4c70d124d44b7fd07825340869945c79d05bda53a40caa079"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:493d389a2b63c88ad56cdc35d0fa5752daac56ca755805b1b0c530f785767d5e"}, + {file = "wrapt-1.15.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:58d7a75d731e8c63614222bcb21dd992b4ab01a399f1f09dd82af17bbfc2368a"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:21f6d9a0d5b3a207cdf7acf8e58d7d13d463e639f0c7e01d82cdb671e6cb7923"}, + {file = "wrapt-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ce42618f67741d4697684e501ef02f29e758a123aa2d669e2d964ff734ee00ee"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:41d07d029dd4157ae27beab04d22b8e261eddfc6ecd64ff7000b10dc8b3a5727"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54accd4b8bc202966bafafd16e69da9d5640ff92389d33d28555c5fd4f25ccb7"}, + {file = "wrapt-1.15.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fbfbca668dd15b744418265a9607baa970c347eefd0db6a518aaf0cfbd153c0"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:76e9c727a874b4856d11a32fb0b389afc61ce8aaf281ada613713ddeadd1cfec"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e20076a211cd6f9b44a6be58f7eeafa7ab5720eb796975d0c03f05b47d89eb90"}, + {file = "wrapt-1.15.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a74d56552ddbde46c246b5b89199cb3fd182f9c346c784e1a93e4dc3f5ec9975"}, + {file = "wrapt-1.15.0-cp310-cp310-win32.whl", hash = "sha256:26458da5653aa5b3d8dc8b24192f574a58984c749401f98fff994d41d3f08da1"}, + {file = "wrapt-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:75760a47c06b5974aa5e01949bf7e66d2af4d08cb8c1d6516af5e39595397f5e"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ba1711cda2d30634a7e452fc79eabcadaffedf241ff206db2ee93dd2c89a60e7"}, + {file = "wrapt-1.15.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:56374914b132c702aa9aa9959c550004b8847148f95e1b824772d453ac204a72"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a89ce3fd220ff144bd9d54da333ec0de0399b52c9ac3d2ce34b569cf1a5748fb"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3bbe623731d03b186b3d6b0d6f51865bf598587c38d6f7b0be2e27414f7f214e"}, + {file = "wrapt-1.15.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3abbe948c3cbde2689370a262a8d04e32ec2dd4f27103669a45c6929bcdbfe7c"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:b67b819628e3b748fd3c2192c15fb951f549d0f47c0449af0764d7647302fda3"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7eebcdbe3677e58dd4c0e03b4f2cfa346ed4049687d839adad68cc38bb559c92"}, + {file = "wrapt-1.15.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:74934ebd71950e3db69960a7da29204f89624dde411afbfb3b4858c1409b1e98"}, + {file = "wrapt-1.15.0-cp311-cp311-win32.whl", hash = "sha256:bd84395aab8e4d36263cd1b9308cd504f6cf713b7d6d3ce25ea55670baec5416"}, + {file = "wrapt-1.15.0-cp311-cp311-win_amd64.whl", hash = "sha256:a487f72a25904e2b4bbc0817ce7a8de94363bd7e79890510174da9d901c38705"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:4ff0d20f2e670800d3ed2b220d40984162089a6e2c9646fdb09b85e6f9a8fc29"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:9ed6aa0726b9b60911f4aed8ec5b8dd7bf3491476015819f56473ffaef8959bd"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:896689fddba4f23ef7c718279e42f8834041a21342d95e56922e1c10c0cc7afb"}, + {file = "wrapt-1.15.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:75669d77bb2c071333417617a235324a1618dba66f82a750362eccbe5b61d248"}, + {file = "wrapt-1.15.0-cp35-cp35m-win32.whl", hash = "sha256:fbec11614dba0424ca72f4e8ba3c420dba07b4a7c206c8c8e4e73f2e98f4c559"}, + {file = "wrapt-1.15.0-cp35-cp35m-win_amd64.whl", hash = "sha256:fd69666217b62fa5d7c6aa88e507493a34dec4fa20c5bd925e4bc12fce586639"}, + {file = "wrapt-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b0724f05c396b0a4c36a3226c31648385deb6a65d8992644c12a4963c70326ba"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbeccb1aa40ab88cd29e6c7d8585582c99548f55f9b2581dfc5ba68c59a85752"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:38adf7198f8f154502883242f9fe7333ab05a5b02de7d83aa2d88ea621f13364"}, + {file = "wrapt-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:578383d740457fa790fdf85e6d346fda1416a40549fe8db08e5e9bd281c6a475"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:a4cbb9ff5795cd66f0066bdf5947f170f5d63a9274f99bdbca02fd973adcf2a8"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:af5bd9ccb188f6a5fdda9f1f09d9f4c86cc8a539bd48a0bfdc97723970348418"}, + {file = "wrapt-1.15.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:b56d5519e470d3f2fe4aa7585f0632b060d532d0696c5bdfb5e8319e1d0f69a2"}, + {file = "wrapt-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:77d4c1b881076c3ba173484dfa53d3582c1c8ff1f914c6461ab70c8428b796c1"}, + {file = "wrapt-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:077ff0d1f9d9e4ce6476c1a924a3332452c1406e59d90a2cf24aeb29eeac9420"}, + {file = "wrapt-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:5c5aa28df055697d7c37d2099a7bc09f559d5053c3349b1ad0c39000e611d317"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a8564f283394634a7a7054b7983e47dbf39c07712d7b177b37e03f2467a024e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780c82a41dc493b62fc5884fb1d3a3b81106642c5c5c78d6a0d4cbe96d62ba7e"}, + {file = "wrapt-1.15.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169e957c33576f47e21864cf3fc9ff47c223a4ebca8960079b8bd36cb014fd0"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:b02f21c1e2074943312d03d243ac4388319f2456576b2c6023041c4d57cd7019"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f2e69b3ed24544b0d3dbe2c5c0ba5153ce50dcebb576fdc4696d52aa22db6034"}, + {file = "wrapt-1.15.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:d787272ed958a05b2c86311d3a4135d3c2aeea4fc655705f074130aa57d71653"}, + {file = "wrapt-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:02fce1852f755f44f95af51f69d22e45080102e9d00258053b79367d07af39c0"}, + {file = "wrapt-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:abd52a09d03adf9c763d706df707c343293d5d106aea53483e0ec8d9e310ad5e"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:cdb4f085756c96a3af04e6eca7f08b1345e94b53af8921b25c72f096e704e145"}, + {file = "wrapt-1.15.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:230ae493696a371f1dbffaad3dafbb742a4d27a0afd2b1aecebe52b740167e7f"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63424c681923b9f3bfbc5e3205aafe790904053d42ddcc08542181a30a7a51bd"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d6bcbfc99f55655c3d93feb7ef3800bd5bbe963a755687cbf1f490a71fb7794b"}, + {file = "wrapt-1.15.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c99f4309f5145b93eca6e35ac1a988f0dc0a7ccf9ccdcd78d3c0adf57224e62f"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b130fe77361d6771ecf5a219d8e0817d61b236b7d8b37cc045172e574ed219e6"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:96177eb5645b1c6985f5c11d03fc2dbda9ad24ec0f3a46dcce91445747e15094"}, + {file = "wrapt-1.15.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5fe3e099cf07d0fb5a1e23d399e5d4d1ca3e6dfcbe5c8570ccff3e9208274f7"}, + {file = "wrapt-1.15.0-cp38-cp38-win32.whl", hash = "sha256:abd8f36c99512755b8456047b7be10372fca271bf1467a1caa88db991e7c421b"}, + {file = "wrapt-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:b06fa97478a5f478fb05e1980980a7cdf2712015493b44d0c87606c1513ed5b1"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2e51de54d4fb8fb50d6ee8327f9828306a959ae394d3e01a1ba8b2f937747d86"}, + {file = "wrapt-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0970ddb69bba00670e58955f8019bec4a42d1785db3faa043c33d81de2bf843c"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:76407ab327158c510f44ded207e2f76b657303e17cb7a572ffe2f5a8a48aa04d"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd525e0e52a5ff16653a3fc9e3dd827981917d34996600bbc34c05d048ca35cc"}, + {file = "wrapt-1.15.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d37ac69edc5614b90516807de32d08cb8e7b12260a285ee330955604ed9dd29"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:078e2a1a86544e644a68422f881c48b84fef6d18f8c7a957ffd3f2e0a74a0d4a"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:2cf56d0e237280baed46f0b5316661da892565ff58309d4d2ed7dba763d984b8"}, + {file = "wrapt-1.15.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:7dc0713bf81287a00516ef43137273b23ee414fe41a3c14be10dd95ed98a2df9"}, + {file = "wrapt-1.15.0-cp39-cp39-win32.whl", hash = "sha256:46ed616d5fb42f98630ed70c3529541408166c22cdfd4540b88d5f21006b0eff"}, + {file = "wrapt-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:eef4d64c650f33347c1f9266fa5ae001440b232ad9b98f1f43dfe7a79435c0a6"}, + {file = "wrapt-1.15.0-py3-none-any.whl", hash = "sha256:64b1df0f83706b4ef4cfb4fb0e4c2669100fd7ecacfb59e091fad300d4e04640"}, + {file = "wrapt-1.15.0.tar.gz", hash = "sha256:d06730c6aed78cee4126234cf2d071e01b44b915e725a6cb439a879ec9754a3a"}, +] +zipp = [ + {file = "zipp-3.15.0-py3-none-any.whl", hash = "sha256:48904fc76a60e542af151aded95726c1a5c34ed43ab4134b597665c86d7ad556"}, + {file = "zipp-3.15.0.tar.gz", hash = "sha256:112929ad649da941c23de50f356a2b5570c954b65150642bccdd66bf194d224b"}, +] diff --git a/pyproject.toml b/pyproject.toml index 4b939510ef..06e1e7b688 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,67 @@ +[tool.poetry] +name = "trio" +version = "0.22.0" +description = "A friendly Python library for async concurrency and I/O" +readme = "README.rst" +authors = ["Nathaniel J. Smith "] +license = "MIT OR Apache-2.0" +homepage = "https://github.com/python-trio/trio" +documentation = "https://trio.readthedocs.io/" +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: MIT License", + "License :: OSI Approved :: Apache Software License", + "Operating System :: POSIX :: Linux", + "Operating System :: MacOS :: MacOS X", + "Operating System :: POSIX :: BSD", + "Operating System :: Microsoft :: Windows", + "Programming Language :: Python :: Implementation :: CPython", + "Programming Language :: Python :: Implementation :: PyPy", + "Programming Language :: Python :: 3 :: Only", + "Programming Language :: Python :: 3.7", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Topic :: System :: Networking", + "Framework :: Trio", +] +keywords = ["async", "io", "networking", "trio"] + + +[tool.poetry.dependencies] +python = ">=3.7.2" +attrs = ">= 20.1.0" +sortedcontainers = "^2.4.0" +idna = "^3.4" +outcome = "^1.2.0" +sniffio = "^1.3.0" +cffi = { version = ">=1.14", markers = "os_name == 'nt' and implementation_name != 'pypy'" } +exceptiongroup = { version = ">=1.0.0rc9", python = "<3.11" } + +[tool.poetry.group.dev.dependencies] +black = { version = "^23.1.0", markers = "platform_python_implementation == 'CPython'" } +mypy = { version = "*", markers = "platform_python_implementation == 'CPython'" } + +[tool.poetry.group.test.dependencies] +pytest = ">= 5.0" +pytest-cov = ">= 2.6.0" +# TODO: vaporise +async_generator = ">= 1.9" +trustme = "^0.9.0" +pyopenssl = "^23.0.0" +astor = "^0.8.1" +pylint = "^2.16.3" +jedi = "^0.18.2" + +[tool.poetry.group.docs.dependencies] +sphinx = "<5.0.0" +jinja2 = "^3.1.2" +sphinx-rtd-theme = "^1.2.0" +sphinxcontrib-trio = "^1.1.2" +towncrier = "^22.12.0" + [tool.black] target-version = ['py37'] diff --git a/trio/__init__.py b/src/trio/__init__.py similarity index 100% rename from trio/__init__.py rename to src/trio/__init__.py diff --git a/trio/_abc.py b/src/trio/_abc.py similarity index 100% rename from trio/_abc.py rename to src/trio/_abc.py diff --git a/trio/_channel.py b/src/trio/_channel.py similarity index 100% rename from trio/_channel.py rename to src/trio/_channel.py diff --git a/trio/_core/__init__.py b/src/trio/_core/__init__.py similarity index 100% rename from trio/_core/__init__.py rename to src/trio/_core/__init__.py diff --git a/trio/_core/_asyncgens.py b/src/trio/_core/_asyncgens.py similarity index 100% rename from trio/_core/_asyncgens.py rename to src/trio/_core/_asyncgens.py diff --git a/trio/_core/_entry_queue.py b/src/trio/_core/_entry_queue.py similarity index 100% rename from trio/_core/_entry_queue.py rename to src/trio/_core/_entry_queue.py diff --git a/trio/_core/_exceptions.py b/src/trio/_core/_exceptions.py similarity index 100% rename from trio/_core/_exceptions.py rename to src/trio/_core/_exceptions.py diff --git a/trio/_core/_generated_instrumentation.py b/src/trio/_core/_generated_instrumentation.py similarity index 100% rename from trio/_core/_generated_instrumentation.py rename to src/trio/_core/_generated_instrumentation.py diff --git a/trio/_core/_generated_io_epoll.py b/src/trio/_core/_generated_io_epoll.py similarity index 100% rename from trio/_core/_generated_io_epoll.py rename to src/trio/_core/_generated_io_epoll.py diff --git a/trio/_core/_generated_io_kqueue.py b/src/trio/_core/_generated_io_kqueue.py similarity index 100% rename from trio/_core/_generated_io_kqueue.py rename to src/trio/_core/_generated_io_kqueue.py diff --git a/trio/_core/_generated_io_windows.py b/src/trio/_core/_generated_io_windows.py similarity index 100% rename from trio/_core/_generated_io_windows.py rename to src/trio/_core/_generated_io_windows.py diff --git a/trio/_core/_generated_run.py b/src/trio/_core/_generated_run.py similarity index 100% rename from trio/_core/_generated_run.py rename to src/trio/_core/_generated_run.py diff --git a/trio/_core/_instrumentation.py b/src/trio/_core/_instrumentation.py similarity index 100% rename from trio/_core/_instrumentation.py rename to src/trio/_core/_instrumentation.py diff --git a/trio/_core/_io_common.py b/src/trio/_core/_io_common.py similarity index 100% rename from trio/_core/_io_common.py rename to src/trio/_core/_io_common.py diff --git a/trio/_core/_io_epoll.py b/src/trio/_core/_io_epoll.py similarity index 100% rename from trio/_core/_io_epoll.py rename to src/trio/_core/_io_epoll.py diff --git a/trio/_core/_io_kqueue.py b/src/trio/_core/_io_kqueue.py similarity index 100% rename from trio/_core/_io_kqueue.py rename to src/trio/_core/_io_kqueue.py diff --git a/trio/_core/_io_windows.py b/src/trio/_core/_io_windows.py similarity index 100% rename from trio/_core/_io_windows.py rename to src/trio/_core/_io_windows.py diff --git a/trio/_core/_ki.py b/src/trio/_core/_ki.py similarity index 100% rename from trio/_core/_ki.py rename to src/trio/_core/_ki.py diff --git a/trio/_core/_local.py b/src/trio/_core/_local.py similarity index 100% rename from trio/_core/_local.py rename to src/trio/_core/_local.py diff --git a/trio/_core/_mock_clock.py b/src/trio/_core/_mock_clock.py similarity index 100% rename from trio/_core/_mock_clock.py rename to src/trio/_core/_mock_clock.py diff --git a/trio/_core/_multierror.py b/src/trio/_core/_multierror.py similarity index 100% rename from trio/_core/_multierror.py rename to src/trio/_core/_multierror.py diff --git a/trio/_core/_parking_lot.py b/src/trio/_core/_parking_lot.py similarity index 100% rename from trio/_core/_parking_lot.py rename to src/trio/_core/_parking_lot.py diff --git a/trio/_core/_run.py b/src/trio/_core/_run.py similarity index 100% rename from trio/_core/_run.py rename to src/trio/_core/_run.py diff --git a/trio/_core/_thread_cache.py b/src/trio/_core/_thread_cache.py similarity index 100% rename from trio/_core/_thread_cache.py rename to src/trio/_core/_thread_cache.py diff --git a/trio/_core/_traps.py b/src/trio/_core/_traps.py similarity index 100% rename from trio/_core/_traps.py rename to src/trio/_core/_traps.py diff --git a/trio/_core/_unbounded_queue.py b/src/trio/_core/_unbounded_queue.py similarity index 100% rename from trio/_core/_unbounded_queue.py rename to src/trio/_core/_unbounded_queue.py diff --git a/trio/_core/_wakeup_socketpair.py b/src/trio/_core/_wakeup_socketpair.py similarity index 100% rename from trio/_core/_wakeup_socketpair.py rename to src/trio/_core/_wakeup_socketpair.py diff --git a/trio/_core/_windows_cffi.py b/src/trio/_core/_windows_cffi.py similarity index 100% rename from trio/_core/_windows_cffi.py rename to src/trio/_core/_windows_cffi.py diff --git a/trio/_core/tests/__init__.py b/src/trio/_core/tests/__init__.py similarity index 100% rename from trio/_core/tests/__init__.py rename to src/trio/_core/tests/__init__.py diff --git a/trio/_core/tests/conftest.py b/src/trio/_core/tests/conftest.py similarity index 100% rename from trio/_core/tests/conftest.py rename to src/trio/_core/tests/conftest.py diff --git a/trio/_core/tests/test_asyncgen.py b/src/trio/_core/tests/test_asyncgen.py similarity index 100% rename from trio/_core/tests/test_asyncgen.py rename to src/trio/_core/tests/test_asyncgen.py diff --git a/trio/_core/tests/test_guest_mode.py b/src/trio/_core/tests/test_guest_mode.py similarity index 100% rename from trio/_core/tests/test_guest_mode.py rename to src/trio/_core/tests/test_guest_mode.py diff --git a/trio/_core/tests/test_instrumentation.py b/src/trio/_core/tests/test_instrumentation.py similarity index 100% rename from trio/_core/tests/test_instrumentation.py rename to src/trio/_core/tests/test_instrumentation.py diff --git a/trio/_core/tests/test_io.py b/src/trio/_core/tests/test_io.py similarity index 100% rename from trio/_core/tests/test_io.py rename to src/trio/_core/tests/test_io.py diff --git a/trio/_core/tests/test_ki.py b/src/trio/_core/tests/test_ki.py similarity index 100% rename from trio/_core/tests/test_ki.py rename to src/trio/_core/tests/test_ki.py diff --git a/trio/_core/tests/test_local.py b/src/trio/_core/tests/test_local.py similarity index 100% rename from trio/_core/tests/test_local.py rename to src/trio/_core/tests/test_local.py diff --git a/trio/_core/tests/test_mock_clock.py b/src/trio/_core/tests/test_mock_clock.py similarity index 100% rename from trio/_core/tests/test_mock_clock.py rename to src/trio/_core/tests/test_mock_clock.py diff --git a/trio/_core/tests/test_multierror.py b/src/trio/_core/tests/test_multierror.py similarity index 100% rename from trio/_core/tests/test_multierror.py rename to src/trio/_core/tests/test_multierror.py diff --git a/trio/_core/tests/test_multierror_scripts/__init__.py b/src/trio/_core/tests/test_multierror_scripts/__init__.py similarity index 100% rename from trio/_core/tests/test_multierror_scripts/__init__.py rename to src/trio/_core/tests/test_multierror_scripts/__init__.py diff --git a/trio/_core/tests/test_multierror_scripts/_common.py b/src/trio/_core/tests/test_multierror_scripts/_common.py similarity index 100% rename from trio/_core/tests/test_multierror_scripts/_common.py rename to src/trio/_core/tests/test_multierror_scripts/_common.py diff --git a/trio/_core/tests/test_multierror_scripts/apport_excepthook.py b/src/trio/_core/tests/test_multierror_scripts/apport_excepthook.py similarity index 100% rename from trio/_core/tests/test_multierror_scripts/apport_excepthook.py rename to src/trio/_core/tests/test_multierror_scripts/apport_excepthook.py diff --git a/trio/_core/tests/test_multierror_scripts/ipython_custom_exc.py b/src/trio/_core/tests/test_multierror_scripts/ipython_custom_exc.py similarity index 100% rename from trio/_core/tests/test_multierror_scripts/ipython_custom_exc.py rename to src/trio/_core/tests/test_multierror_scripts/ipython_custom_exc.py diff --git a/trio/_core/tests/test_multierror_scripts/simple_excepthook.py b/src/trio/_core/tests/test_multierror_scripts/simple_excepthook.py similarity index 100% rename from trio/_core/tests/test_multierror_scripts/simple_excepthook.py rename to src/trio/_core/tests/test_multierror_scripts/simple_excepthook.py diff --git a/trio/_core/tests/test_multierror_scripts/simple_excepthook_IPython.py b/src/trio/_core/tests/test_multierror_scripts/simple_excepthook_IPython.py similarity index 100% rename from trio/_core/tests/test_multierror_scripts/simple_excepthook_IPython.py rename to src/trio/_core/tests/test_multierror_scripts/simple_excepthook_IPython.py diff --git a/trio/_core/tests/test_parking_lot.py b/src/trio/_core/tests/test_parking_lot.py similarity index 100% rename from trio/_core/tests/test_parking_lot.py rename to src/trio/_core/tests/test_parking_lot.py diff --git a/trio/_core/tests/test_run.py b/src/trio/_core/tests/test_run.py similarity index 100% rename from trio/_core/tests/test_run.py rename to src/trio/_core/tests/test_run.py diff --git a/trio/_core/tests/test_thread_cache.py b/src/trio/_core/tests/test_thread_cache.py similarity index 100% rename from trio/_core/tests/test_thread_cache.py rename to src/trio/_core/tests/test_thread_cache.py diff --git a/trio/_core/tests/test_tutil.py b/src/trio/_core/tests/test_tutil.py similarity index 100% rename from trio/_core/tests/test_tutil.py rename to src/trio/_core/tests/test_tutil.py diff --git a/trio/_core/tests/test_unbounded_queue.py b/src/trio/_core/tests/test_unbounded_queue.py similarity index 100% rename from trio/_core/tests/test_unbounded_queue.py rename to src/trio/_core/tests/test_unbounded_queue.py diff --git a/trio/_core/tests/test_util.py b/src/trio/_core/tests/test_util.py similarity index 100% rename from trio/_core/tests/test_util.py rename to src/trio/_core/tests/test_util.py diff --git a/trio/_core/tests/test_windows.py b/src/trio/_core/tests/test_windows.py similarity index 100% rename from trio/_core/tests/test_windows.py rename to src/trio/_core/tests/test_windows.py diff --git a/trio/_core/tests/tutil.py b/src/trio/_core/tests/tutil.py similarity index 100% rename from trio/_core/tests/tutil.py rename to src/trio/_core/tests/tutil.py diff --git a/trio/_deprecate.py b/src/trio/_deprecate.py similarity index 100% rename from trio/_deprecate.py rename to src/trio/_deprecate.py diff --git a/trio/_dtls.py b/src/trio/_dtls.py similarity index 100% rename from trio/_dtls.py rename to src/trio/_dtls.py diff --git a/trio/_file_io.py b/src/trio/_file_io.py similarity index 100% rename from trio/_file_io.py rename to src/trio/_file_io.py diff --git a/trio/_highlevel_generic.py b/src/trio/_highlevel_generic.py similarity index 100% rename from trio/_highlevel_generic.py rename to src/trio/_highlevel_generic.py diff --git a/trio/_highlevel_open_tcp_listeners.py b/src/trio/_highlevel_open_tcp_listeners.py similarity index 100% rename from trio/_highlevel_open_tcp_listeners.py rename to src/trio/_highlevel_open_tcp_listeners.py diff --git a/trio/_highlevel_open_tcp_stream.py b/src/trio/_highlevel_open_tcp_stream.py similarity index 100% rename from trio/_highlevel_open_tcp_stream.py rename to src/trio/_highlevel_open_tcp_stream.py diff --git a/trio/_highlevel_open_unix_stream.py b/src/trio/_highlevel_open_unix_stream.py similarity index 100% rename from trio/_highlevel_open_unix_stream.py rename to src/trio/_highlevel_open_unix_stream.py diff --git a/trio/_highlevel_serve_listeners.py b/src/trio/_highlevel_serve_listeners.py similarity index 100% rename from trio/_highlevel_serve_listeners.py rename to src/trio/_highlevel_serve_listeners.py diff --git a/trio/_highlevel_socket.py b/src/trio/_highlevel_socket.py similarity index 100% rename from trio/_highlevel_socket.py rename to src/trio/_highlevel_socket.py diff --git a/trio/_highlevel_ssl_helpers.py b/src/trio/_highlevel_ssl_helpers.py similarity index 100% rename from trio/_highlevel_ssl_helpers.py rename to src/trio/_highlevel_ssl_helpers.py diff --git a/trio/_path.py b/src/trio/_path.py similarity index 100% rename from trio/_path.py rename to src/trio/_path.py diff --git a/trio/_path.pyi b/src/trio/_path.pyi similarity index 100% rename from trio/_path.pyi rename to src/trio/_path.pyi diff --git a/trio/_signals.py b/src/trio/_signals.py similarity index 100% rename from trio/_signals.py rename to src/trio/_signals.py diff --git a/trio/_socket.py b/src/trio/_socket.py similarity index 100% rename from trio/_socket.py rename to src/trio/_socket.py diff --git a/trio/_ssl.py b/src/trio/_ssl.py similarity index 100% rename from trio/_ssl.py rename to src/trio/_ssl.py diff --git a/trio/_subprocess.py b/src/trio/_subprocess.py similarity index 100% rename from trio/_subprocess.py rename to src/trio/_subprocess.py diff --git a/trio/_subprocess_platform/__init__.py b/src/trio/_subprocess_platform/__init__.py similarity index 100% rename from trio/_subprocess_platform/__init__.py rename to src/trio/_subprocess_platform/__init__.py diff --git a/trio/_subprocess_platform/kqueue.py b/src/trio/_subprocess_platform/kqueue.py similarity index 100% rename from trio/_subprocess_platform/kqueue.py rename to src/trio/_subprocess_platform/kqueue.py diff --git a/trio/_subprocess_platform/waitid.py b/src/trio/_subprocess_platform/waitid.py similarity index 100% rename from trio/_subprocess_platform/waitid.py rename to src/trio/_subprocess_platform/waitid.py diff --git a/trio/_subprocess_platform/windows.py b/src/trio/_subprocess_platform/windows.py similarity index 100% rename from trio/_subprocess_platform/windows.py rename to src/trio/_subprocess_platform/windows.py diff --git a/trio/_sync.py b/src/trio/_sync.py similarity index 100% rename from trio/_sync.py rename to src/trio/_sync.py diff --git a/trio/_threads.py b/src/trio/_threads.py similarity index 100% rename from trio/_threads.py rename to src/trio/_threads.py diff --git a/trio/_timeouts.py b/src/trio/_timeouts.py similarity index 100% rename from trio/_timeouts.py rename to src/trio/_timeouts.py diff --git a/trio/_tools/__init__.py b/src/trio/_tools/__init__.py similarity index 100% rename from trio/_tools/__init__.py rename to src/trio/_tools/__init__.py diff --git a/trio/_tools/gen_exports.py b/src/trio/_tools/gen_exports.py similarity index 100% rename from trio/_tools/gen_exports.py rename to src/trio/_tools/gen_exports.py diff --git a/trio/_unix_pipes.py b/src/trio/_unix_pipes.py similarity index 100% rename from trio/_unix_pipes.py rename to src/trio/_unix_pipes.py diff --git a/trio/_util.py b/src/trio/_util.py similarity index 100% rename from trio/_util.py rename to src/trio/_util.py diff --git a/trio/_version.py b/src/trio/_version.py similarity index 100% rename from trio/_version.py rename to src/trio/_version.py diff --git a/trio/_wait_for_object.py b/src/trio/_wait_for_object.py similarity index 100% rename from trio/_wait_for_object.py rename to src/trio/_wait_for_object.py diff --git a/trio/_windows_pipes.py b/src/trio/_windows_pipes.py similarity index 100% rename from trio/_windows_pipes.py rename to src/trio/_windows_pipes.py diff --git a/trio/abc.py b/src/trio/abc.py similarity index 100% rename from trio/abc.py rename to src/trio/abc.py diff --git a/trio/from_thread.py b/src/trio/from_thread.py similarity index 100% rename from trio/from_thread.py rename to src/trio/from_thread.py diff --git a/trio/lowlevel.py b/src/trio/lowlevel.py similarity index 100% rename from trio/lowlevel.py rename to src/trio/lowlevel.py diff --git a/trio/socket.py b/src/trio/socket.py similarity index 100% rename from trio/socket.py rename to src/trio/socket.py diff --git a/trio/testing/__init__.py b/src/trio/testing/__init__.py similarity index 100% rename from trio/testing/__init__.py rename to src/trio/testing/__init__.py diff --git a/trio/testing/_check_streams.py b/src/trio/testing/_check_streams.py similarity index 100% rename from trio/testing/_check_streams.py rename to src/trio/testing/_check_streams.py diff --git a/trio/testing/_checkpoints.py b/src/trio/testing/_checkpoints.py similarity index 100% rename from trio/testing/_checkpoints.py rename to src/trio/testing/_checkpoints.py diff --git a/trio/testing/_fake_net.py b/src/trio/testing/_fake_net.py similarity index 100% rename from trio/testing/_fake_net.py rename to src/trio/testing/_fake_net.py diff --git a/trio/testing/_memory_streams.py b/src/trio/testing/_memory_streams.py similarity index 100% rename from trio/testing/_memory_streams.py rename to src/trio/testing/_memory_streams.py diff --git a/trio/testing/_network.py b/src/trio/testing/_network.py similarity index 100% rename from trio/testing/_network.py rename to src/trio/testing/_network.py diff --git a/trio/testing/_sequencer.py b/src/trio/testing/_sequencer.py similarity index 100% rename from trio/testing/_sequencer.py rename to src/trio/testing/_sequencer.py diff --git a/trio/testing/_trio_test.py b/src/trio/testing/_trio_test.py similarity index 100% rename from trio/testing/_trio_test.py rename to src/trio/testing/_trio_test.py diff --git a/trio/tests/__init__.py b/src/trio/tests/__init__.py similarity index 100% rename from trio/tests/__init__.py rename to src/trio/tests/__init__.py diff --git a/trio/tests/conftest.py b/src/trio/tests/conftest.py similarity index 100% rename from trio/tests/conftest.py rename to src/trio/tests/conftest.py diff --git a/trio/tests/module_with_deprecations.py b/src/trio/tests/module_with_deprecations.py similarity index 100% rename from trio/tests/module_with_deprecations.py rename to src/trio/tests/module_with_deprecations.py diff --git a/trio/tests/test_abc.py b/src/trio/tests/test_abc.py similarity index 100% rename from trio/tests/test_abc.py rename to src/trio/tests/test_abc.py diff --git a/trio/tests/test_channel.py b/src/trio/tests/test_channel.py similarity index 100% rename from trio/tests/test_channel.py rename to src/trio/tests/test_channel.py diff --git a/trio/tests/test_contextvars.py b/src/trio/tests/test_contextvars.py similarity index 100% rename from trio/tests/test_contextvars.py rename to src/trio/tests/test_contextvars.py diff --git a/trio/tests/test_deprecate.py b/src/trio/tests/test_deprecate.py similarity index 100% rename from trio/tests/test_deprecate.py rename to src/trio/tests/test_deprecate.py diff --git a/trio/tests/test_dtls.py b/src/trio/tests/test_dtls.py similarity index 100% rename from trio/tests/test_dtls.py rename to src/trio/tests/test_dtls.py diff --git a/trio/tests/test_exports.py b/src/trio/tests/test_exports.py similarity index 100% rename from trio/tests/test_exports.py rename to src/trio/tests/test_exports.py diff --git a/trio/tests/test_fakenet.py b/src/trio/tests/test_fakenet.py similarity index 100% rename from trio/tests/test_fakenet.py rename to src/trio/tests/test_fakenet.py diff --git a/trio/tests/test_file_io.py b/src/trio/tests/test_file_io.py similarity index 100% rename from trio/tests/test_file_io.py rename to src/trio/tests/test_file_io.py diff --git a/trio/tests/test_highlevel_generic.py b/src/trio/tests/test_highlevel_generic.py similarity index 100% rename from trio/tests/test_highlevel_generic.py rename to src/trio/tests/test_highlevel_generic.py diff --git a/trio/tests/test_highlevel_open_tcp_listeners.py b/src/trio/tests/test_highlevel_open_tcp_listeners.py similarity index 100% rename from trio/tests/test_highlevel_open_tcp_listeners.py rename to src/trio/tests/test_highlevel_open_tcp_listeners.py diff --git a/trio/tests/test_highlevel_open_tcp_stream.py b/src/trio/tests/test_highlevel_open_tcp_stream.py similarity index 100% rename from trio/tests/test_highlevel_open_tcp_stream.py rename to src/trio/tests/test_highlevel_open_tcp_stream.py diff --git a/trio/tests/test_highlevel_open_unix_stream.py b/src/trio/tests/test_highlevel_open_unix_stream.py similarity index 100% rename from trio/tests/test_highlevel_open_unix_stream.py rename to src/trio/tests/test_highlevel_open_unix_stream.py diff --git a/trio/tests/test_highlevel_serve_listeners.py b/src/trio/tests/test_highlevel_serve_listeners.py similarity index 100% rename from trio/tests/test_highlevel_serve_listeners.py rename to src/trio/tests/test_highlevel_serve_listeners.py diff --git a/trio/tests/test_highlevel_socket.py b/src/trio/tests/test_highlevel_socket.py similarity index 100% rename from trio/tests/test_highlevel_socket.py rename to src/trio/tests/test_highlevel_socket.py diff --git a/trio/tests/test_highlevel_ssl_helpers.py b/src/trio/tests/test_highlevel_ssl_helpers.py similarity index 100% rename from trio/tests/test_highlevel_ssl_helpers.py rename to src/trio/tests/test_highlevel_ssl_helpers.py diff --git a/trio/tests/test_path.py b/src/trio/tests/test_path.py similarity index 100% rename from trio/tests/test_path.py rename to src/trio/tests/test_path.py diff --git a/trio/tests/test_scheduler_determinism.py b/src/trio/tests/test_scheduler_determinism.py similarity index 100% rename from trio/tests/test_scheduler_determinism.py rename to src/trio/tests/test_scheduler_determinism.py diff --git a/trio/tests/test_signals.py b/src/trio/tests/test_signals.py similarity index 100% rename from trio/tests/test_signals.py rename to src/trio/tests/test_signals.py diff --git a/trio/tests/test_socket.py b/src/trio/tests/test_socket.py similarity index 100% rename from trio/tests/test_socket.py rename to src/trio/tests/test_socket.py diff --git a/trio/tests/test_ssl.py b/src/trio/tests/test_ssl.py similarity index 100% rename from trio/tests/test_ssl.py rename to src/trio/tests/test_ssl.py diff --git a/trio/tests/test_subprocess.py b/src/trio/tests/test_subprocess.py similarity index 100% rename from trio/tests/test_subprocess.py rename to src/trio/tests/test_subprocess.py diff --git a/trio/tests/test_sync.py b/src/trio/tests/test_sync.py similarity index 100% rename from trio/tests/test_sync.py rename to src/trio/tests/test_sync.py diff --git a/trio/tests/test_testing.py b/src/trio/tests/test_testing.py similarity index 100% rename from trio/tests/test_testing.py rename to src/trio/tests/test_testing.py diff --git a/trio/tests/test_threads.py b/src/trio/tests/test_threads.py similarity index 100% rename from trio/tests/test_threads.py rename to src/trio/tests/test_threads.py diff --git a/trio/tests/test_timeouts.py b/src/trio/tests/test_timeouts.py similarity index 100% rename from trio/tests/test_timeouts.py rename to src/trio/tests/test_timeouts.py diff --git a/trio/tests/test_tracing.py b/src/trio/tests/test_tracing.py similarity index 100% rename from trio/tests/test_tracing.py rename to src/trio/tests/test_tracing.py diff --git a/trio/tests/test_unix_pipes.py b/src/trio/tests/test_unix_pipes.py similarity index 100% rename from trio/tests/test_unix_pipes.py rename to src/trio/tests/test_unix_pipes.py diff --git a/trio/tests/test_util.py b/src/trio/tests/test_util.py similarity index 100% rename from trio/tests/test_util.py rename to src/trio/tests/test_util.py diff --git a/trio/tests/test_wait_for_object.py b/src/trio/tests/test_wait_for_object.py similarity index 100% rename from trio/tests/test_wait_for_object.py rename to src/trio/tests/test_wait_for_object.py diff --git a/trio/tests/test_windows_pipes.py b/src/trio/tests/test_windows_pipes.py similarity index 100% rename from trio/tests/test_windows_pipes.py rename to src/trio/tests/test_windows_pipes.py diff --git a/trio/tests/tools/__init__.py b/src/trio/tests/tools/__init__.py similarity index 100% rename from trio/tests/tools/__init__.py rename to src/trio/tests/tools/__init__.py diff --git a/trio/tests/tools/test_gen_exports.py b/src/trio/tests/tools/test_gen_exports.py similarity index 100% rename from trio/tests/tools/test_gen_exports.py rename to src/trio/tests/tools/test_gen_exports.py diff --git a/trio/to_thread.py b/src/trio/to_thread.py similarity index 100% rename from trio/to_thread.py rename to src/trio/to_thread.py From e4de39ea46ffcf8acc86683d81e299c15a41db79 Mon Sep 17 00:00:00 2001 From: Lura Skye Date: Sun, 5 Mar 2023 21:45:56 +0000 Subject: [PATCH 2/3] Separate tests out into their own directory/package. --- ci.sh | 29 +---- setup.py | 120 ------------------ src/trio/_core/tests/test_util.py | 1 - {src/trio/_core/tests => tests}/__init__.py | 0 {src/trio/tests => tests/_core}/__init__.py | 0 .../_core/tests => tests/_core}/conftest.py | 2 +- .../tests => tests/_core}/test_asyncgen.py | 2 +- .../tests => tests/_core}/test_guest_mode.py | 2 +- .../_core}/test_instrumentation.py | 4 +- .../_core/tests => tests/_core}/test_io.py | 13 +- .../_core/tests => tests/_core}/test_ki.py | 21 ++- .../_core/tests => tests/_core}/test_local.py | 2 +- .../tests => tests/_core}/test_mock_clock.py | 8 +- .../tests => tests/_core}/test_multierror.py | 20 ++- .../test_multierror_scripts/__init__.py | 0 .../_core}/test_multierror_scripts/_common.py | 0 .../apport_excepthook.py | 0 .../ipython_custom_exc.py | 0 .../simple_excepthook.py | 0 .../simple_excepthook_IPython.py | 0 .../tests => tests/_core}/test_parking_lot.py | 8 +- .../_core/tests => tests/_core}/test_run.py | 27 ++-- .../_core}/test_thread_cache.py | 6 +- .../_core/tests => tests/_core}/test_tutil.py | 0 .../_core}/test_unbounded_queue.py | 4 +- .../tests => tests/_core}/test_windows.py | 16 +-- .../trio/_core/tests => tests/_core}/tutil.py | 2 +- {src/trio/tests => tests}/conftest.py | 2 +- .../module_with_deprecations.py | 2 +- {src/trio/tests => tests}/test_abc.py | 4 +- {src/trio/tests => tests}/test_channel.py | 2 +- {src/trio/tests => tests}/test_contextvars.py | 9 +- {src/trio/tests => tests}/test_deprecate.py | 4 +- {src/trio/tests => tests}/test_dtls.py | 2 +- {src/trio/tests => tests}/test_exports.py | 10 +- {src/trio/tests => tests}/test_fakenet.py | 0 {src/trio/tests => tests}/test_file_io.py | 0 .../tests => tests}/test_highlevel_generic.py | 4 +- .../test_highlevel_open_tcp_listeners.py | 4 +- .../test_highlevel_open_tcp_stream.py | 2 +- .../test_highlevel_open_unix_stream.py | 0 .../test_highlevel_serve_listeners.py | 0 .../tests => tests}/test_highlevel_socket.py | 8 +- .../test_highlevel_ssl_helpers.py | 9 +- {src/trio/tests => tests}/test_path.py | 0 .../test_scheduler_determinism.py | 0 {src/trio/tests => tests}/test_signals.py | 6 +- {src/trio/tests => tests}/test_socket.py | 12 +- {src/trio/tests => tests}/test_ssl.py | 23 ++-- {src/trio/tests => tests}/test_subprocess.py | 13 +- {src/trio/tests => tests}/test_sync.py | 13 +- {src/trio/tests => tests}/test_testing.py | 16 +-- {src/trio/tests => tests}/test_threads.py | 16 +-- {src/trio/tests => tests}/test_timeouts.py | 8 +- {src/trio/tests => tests}/test_tracing.py | 0 {src/trio/tests => tests}/test_unix_pipes.py | 13 +- {src/trio/tests => tests}/test_util.py | 8 +- .../tests => tests}/test_wait_for_object.py | 10 +- .../tests => tests}/test_windows_pipes.py | 13 +- {src/trio/tests => tests}/tools/__init__.py | 0 .../tests => tests}/tools/test_gen_exports.py | 0 61 files changed, 162 insertions(+), 338 deletions(-) delete mode 100644 setup.py delete mode 100644 src/trio/_core/tests/test_util.py rename {src/trio/_core/tests => tests}/__init__.py (100%) rename {src/trio/tests => tests/_core}/__init__.py (100%) rename {src/trio/_core/tests => tests/_core}/conftest.py (93%) rename {src/trio/_core/tests => tests/_core}/test_asyncgen.py (99%) rename {src/trio/_core/tests => tests/_core}/test_guest_mode.py (99%) rename {src/trio/_core/tests => tests/_core}/test_instrumentation.py (98%) rename {src/trio/_core/tests => tests/_core}/test_io.py (99%) rename {src/trio/_core/tests => tests/_core}/test_ki.py (98%) rename {src/trio/_core/tests => tests/_core}/test_local.py (99%) rename {src/trio/_core/tests => tests/_core}/test_mock_clock.py (97%) rename {src/trio/_core/tests => tests/_core}/test_multierror.py (98%) rename {src/trio/_core/tests => tests/_core}/test_multierror_scripts/__init__.py (100%) rename {src/trio/_core/tests => tests/_core}/test_multierror_scripts/_common.py (100%) rename {src/trio/_core/tests => tests/_core}/test_multierror_scripts/apport_excepthook.py (100%) rename {src/trio/_core/tests => tests/_core}/test_multierror_scripts/ipython_custom_exc.py (100%) rename {src/trio/_core/tests => tests/_core}/test_multierror_scripts/simple_excepthook.py (100%) rename {src/trio/_core/tests => tests/_core}/test_multierror_scripts/simple_excepthook_IPython.py (100%) rename {src/trio/_core/tests => tests/_core}/test_parking_lot.py (97%) rename {src/trio/_core/tests => tests/_core}/test_run.py (99%) rename {src/trio/_core/tests => tests/_core}/test_thread_cache.py (96%) rename {src/trio/_core/tests => tests/_core}/test_tutil.py (100%) rename {src/trio/_core/tests => tests/_core}/test_unbounded_queue.py (97%) rename {src/trio/_core/tests => tests/_core}/test_windows.py (94%) rename {src/trio/_core/tests => tests/_core}/tutil.py (99%) rename {src/trio/tests => tests}/conftest.py (95%) rename {src/trio/tests => tests}/module_with_deprecations.py (95%) rename {src/trio/tests => tests}/test_abc.py (94%) rename {src/trio/tests => tests}/test_channel.py (99%) rename {src/trio/tests => tests}/test_contextvars.py (88%) rename {src/trio/tests => tests}/test_deprecate.py (98%) rename {src/trio/tests => tests}/test_dtls.py (99%) rename {src/trio/tests => tests}/test_exports.py (95%) rename {src/trio/tests => tests}/test_fakenet.py (100%) rename {src/trio/tests => tests}/test_file_io.py (100%) rename {src/trio/tests => tests}/test_highlevel_generic.py (96%) rename {src/trio/tests => tests}/test_highlevel_open_tcp_listeners.py (99%) rename {src/trio/tests => tests}/test_highlevel_open_tcp_stream.py (99%) rename {src/trio/tests => tests}/test_highlevel_open_unix_stream.py (100%) rename {src/trio/tests => tests}/test_highlevel_serve_listeners.py (100%) rename {src/trio/tests => tests}/test_highlevel_socket.py (98%) rename {src/trio/tests => tests}/test_highlevel_ssl_helpers.py (95%) rename {src/trio/tests => tests}/test_path.py (100%) rename {src/trio/tests => tests}/test_scheduler_determinism.py (100%) rename {src/trio/tests => tests}/test_signals.py (98%) rename {src/trio/tests => tests}/test_socket.py (99%) rename {src/trio/tests => tests}/test_ssl.py (99%) rename {src/trio/tests => tests}/test_subprocess.py (98%) rename {src/trio/tests => tests}/test_sync.py (98%) rename {src/trio/tests => tests}/test_testing.py (98%) rename {src/trio/tests => tests}/test_threads.py (98%) rename {src/trio/tests => tests}/test_timeouts.py (96%) rename {src/trio/tests => tests}/test_tracing.py (100%) rename {src/trio/tests => tests}/test_unix_pipes.py (97%) rename {src/trio/tests => tests}/test_util.py (97%) rename {src/trio/tests => tests}/test_wait_for_object.py (97%) rename {src/trio/tests => tests}/test_windows_pipes.py (89%) rename {src/trio/tests => tests}/tools/__init__.py (100%) rename {src/trio/tests => tests}/tools/test_gen_exports.py (100%) diff --git a/ci.sh b/ci.sh index d4f9df3a94..a880f58920 100755 --- a/ci.sh +++ b/ci.sh @@ -67,18 +67,14 @@ fi python -c "import sys, struct, ssl; print('#' * 70); print('python:', sys.version); print('version_info:', sys.version_info); print('bits:', struct.calcsize('P') * 8); print('openssl:', ssl.OPENSSL_VERSION, ssl.OPENSSL_VERSION_INFO); print('#' * 70)" python -m pip install -U pip setuptools wheel -python -m pip --version +curl-harder -sSL https://install.python-poetry.org | python3 - -python setup.py sdist --formats=zip -python -m pip install dist/*.zip +export PATH="$PATH:$(realpath ~)/.local/bin" +poetry install --with dev,tests if [ "$CHECK_FORMATTING" = "1" ]; then - python -m pip install -r test-requirements.txt source check.sh else - # Actual tests - python -m pip install -r test-requirements.txt - # So we can run the test for our apport/excepthook interaction working if [ -e /etc/lsb-release ] && grep -q Ubuntu /etc/lsb-release; then sudo apt install -q python3-apport @@ -128,20 +124,7 @@ else netsh winsock show catalog fi - # We run the tests from inside an empty directory, to make sure Python - # doesn't pick up any .py files from our working dir. Might have been - # pre-created by some of the code above. - mkdir empty || true - cd empty - - INSTALLDIR=$(python -c "import os, trio; print(os.path.dirname(trio.__file__))") - cp ../pyproject.toml $INSTALLDIR - # We have to copy .coveragerc into this directory, rather than passing - # --cov-config=../.coveragerc to pytest, because codecov.sh will run - # 'coverage xml' to generate the report that it uses, and that will only - # apply the ignore patterns in the current directory's .coveragerc. - cp ../.coveragerc . - if pytest -r a --junitxml=../test-results.xml --run-slow ${INSTALLDIR} --cov="$INSTALLDIR" --verbose; then + if poetry run pytest -r a --junitxml=../test-results.xml --run-slow --cov --verbose; then PASSED=true else PASSED=false @@ -158,8 +141,8 @@ else # server is flaky, so we instead save to a temp file with retries, and # wait until we've successfully fetched the whole script before trying to # run it. - curl-harder -o codecov.sh https://codecov.io/bash - bash codecov.sh -n "${JOB_NAME}" + # curl-harder -o codecov.sh https://codecov.io/bash + # bash codecov.sh -n "${JOB_NAME}" $PASSED fi diff --git a/setup.py b/setup.py deleted file mode 100644 index a8e1154dc6..0000000000 --- a/setup.py +++ /dev/null @@ -1,120 +0,0 @@ -from setuptools import setup, find_packages - -exec(open("trio/_version.py", encoding="utf-8").read()) - -LONG_DESC = """\ -.. image:: https://raw.githubusercontent.com/python-trio/trio/9b0bec646a31e0d0f67b8b6ecc6939726faf3e17/logo/logo-with-background.svg - :width: 200px - :align: right - -The Trio project's goal is to produce a production-quality, `permissively -licensed `__, -async/await-native I/O library for Python. Like all async libraries, -its main purpose is to help you write programs that do **multiple -things at the same time** with **parallelized I/O**. A web spider that -wants to fetch lots of pages in parallel, a web server that needs to -juggle lots of downloads and websocket connections at the same time, a -process supervisor monitoring multiple subprocesses... that sort of -thing. Compared to other libraries, Trio attempts to distinguish -itself with an obsessive focus on **usability** and -**correctness**. Concurrency is complicated; we try to make it *easy* -to get things *right*. - -Trio was built from the ground up to take advantage of the `latest -Python features `__, and -draws inspiration from `many sources -`__, in -particular Dave Beazley's `Curio `__. -The resulting design is radically simpler than older competitors like -`asyncio `__ and -`Twisted `__, yet just as capable. Trio is -the Python I/O library I always wanted; I find it makes building -I/O-oriented programs easier, less error-prone, and just plain more -fun. `Perhaps you'll find the same -`__. - -This project is young and still somewhat experimental: the overall -design is solid and the existing features are fully tested and -documented, but you may encounter missing functionality or rough -edges. We *do* encourage you do use it, but you should `read and -subscribe to issue #1 -`__ to get warning and a -chance to give feedback about any compatibility-breaking changes. - -Vital statistics: - -* Supported environments: Linux, macOS, or Windows running some kind of Python - 3.7-or-better (either CPython or PyPy3 is fine). \\*BSD and illumos likely - work too, but are not tested. - -* Install: ``python3 -m pip install -U trio`` (or on Windows, maybe - ``py -3 -m pip install -U trio``). No compiler needed. - -* Tutorial and reference manual: https://trio.readthedocs.io - -* Bug tracker and source code: https://github.com/python-trio/trio - -* Real-time chat: https://gitter.im/python-trio/general - -* Discussion forum: https://trio.discourse.group - -* License: MIT or Apache 2, your choice - -* Contributor guide: https://trio.readthedocs.io/en/latest/contributing.html - -* Code of conduct: Contributors are requested to follow our `code of - conduct - `_ - in all project spaces. -""" - -setup( - name="trio", - version=__version__, - description="A friendly Python library for async concurrency and I/O", - long_description=LONG_DESC, - author="Nathaniel J. Smith", - author_email="njs@pobox.com", - url="https://github.com/python-trio/trio", - license="MIT OR Apache-2.0", - packages=find_packages(), - install_requires=[ - # attrs 19.2.0 adds `eq` option to decorators - # attrs 20.1.0 adds @frozen - "attrs >= 20.1.0", - "sortedcontainers", - "idna", - "outcome", - "sniffio", - # cffi 1.12 adds from_buffer(require_writable=True) and ffi.release() - # cffi 1.14 fixes memory leak inside ffi.getwinerror() - # cffi is required on Windows, except on PyPy where it is built-in - "cffi>=1.14; os_name == 'nt' and implementation_name != 'pypy'", - "exceptiongroup >= 1.0.0rc9; python_version < '3.11'", - ], - # This means, just install *everything* you see under trio/, even if it - # doesn't look like a source file, so long as it appears in MANIFEST.in: - include_package_data=True, - python_requires=">=3.7", - keywords=["async", "io", "networking", "trio"], - classifiers=[ - "Development Status :: 3 - Alpha", - "Intended Audience :: Developers", - "License :: OSI Approved :: MIT License", - "License :: OSI Approved :: Apache Software License", - "Operating System :: POSIX :: Linux", - "Operating System :: MacOS :: MacOS X", - "Operating System :: POSIX :: BSD", - "Operating System :: Microsoft :: Windows", - "Programming Language :: Python :: Implementation :: CPython", - "Programming Language :: Python :: Implementation :: PyPy", - "Programming Language :: Python :: 3 :: Only", - "Programming Language :: Python :: 3.7", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Topic :: System :: Networking", - "Framework :: Trio", - ], -) diff --git a/src/trio/_core/tests/test_util.py b/src/trio/_core/tests/test_util.py deleted file mode 100644 index 5871ed8eef..0000000000 --- a/src/trio/_core/tests/test_util.py +++ /dev/null @@ -1 +0,0 @@ -import pytest diff --git a/src/trio/_core/tests/__init__.py b/tests/__init__.py similarity index 100% rename from src/trio/_core/tests/__init__.py rename to tests/__init__.py diff --git a/src/trio/tests/__init__.py b/tests/_core/__init__.py similarity index 100% rename from src/trio/tests/__init__.py rename to tests/_core/__init__.py diff --git a/src/trio/_core/tests/conftest.py b/tests/_core/conftest.py similarity index 93% rename from src/trio/_core/tests/conftest.py rename to tests/_core/conftest.py index aca1f98a65..b37f9fc621 100644 --- a/src/trio/_core/tests/conftest.py +++ b/tests/_core/conftest.py @@ -2,7 +2,7 @@ import inspect # XX this should move into a global something -from ...testing import MockClock, trio_test +from trio.testing import MockClock, trio_test @pytest.fixture diff --git a/src/trio/_core/tests/test_asyncgen.py b/tests/_core/test_asyncgen.py similarity index 99% rename from src/trio/_core/tests/test_asyncgen.py rename to tests/_core/test_asyncgen.py index 65bde5857f..365d69b38c 100644 --- a/src/trio/_core/tests/test_asyncgen.py +++ b/tests/_core/test_asyncgen.py @@ -5,7 +5,7 @@ from math import inf from functools import partial -from ... import _core +from trio import _core from .tutil import gc_collect_harder, buggy_pypy_asyncgens, restore_unraisablehook diff --git a/src/trio/_core/tests/test_guest_mode.py b/tests/_core/test_guest_mode.py similarity index 99% rename from src/trio/_core/tests/test_guest_mode.py rename to tests/_core/test_guest_mode.py index 9fed232214..a9763ab4d7 100644 --- a/src/trio/_core/tests/test_guest_mode.py +++ b/tests/_core/test_guest_mode.py @@ -15,7 +15,7 @@ import trio import trio.testing from .tutil import gc_collect_harder, buggy_pypy_asyncgens, restore_unraisablehook -from ..._util import signal_raise +from trio._util import signal_raise # The simplest possible "host" loop. diff --git a/src/trio/_core/tests/test_instrumentation.py b/tests/_core/test_instrumentation.py similarity index 98% rename from src/trio/_core/tests/test_instrumentation.py rename to tests/_core/test_instrumentation.py index 57d3461d3b..dad7e4a7f4 100644 --- a/src/trio/_core/tests/test_instrumentation.py +++ b/tests/_core/test_instrumentation.py @@ -1,7 +1,7 @@ import attr import pytest -from ... import _core, _abc -from .tutil import check_sequence_matches +from trio import _core, _abc +from tests._core.tutil import check_sequence_matches @attr.s(eq=False, hash=False) diff --git a/src/trio/_core/tests/test_io.py b/tests/_core/test_io.py similarity index 99% rename from src/trio/_core/tests/test_io.py rename to tests/_core/test_io.py index 916ba6cd6f..2084005a72 100644 --- a/src/trio/_core/tests/test_io.py +++ b/tests/_core/test_io.py @@ -1,14 +1,13 @@ -import pytest - -import socket as stdlib_socket -import select import random -import errno +import socket as stdlib_socket from contextlib import suppress -from ... import _core -from ...testing import wait_all_tasks_blocked, Sequencer, assert_checkpoints +import pytest + import trio +from trio import _core +from trio.testing import wait_all_tasks_blocked, assert_checkpoints + # Cross-platform tests for IO handling diff --git a/src/trio/_core/tests/test_ki.py b/tests/_core/test_ki.py similarity index 98% rename from src/trio/_core/tests/test_ki.py rename to tests/_core/test_ki.py index 101e21441d..81f13f3a46 100644 --- a/src/trio/_core/tests/test_ki.py +++ b/tests/_core/test_ki.py @@ -1,23 +1,20 @@ -import outcome -import pytest -import sys -import os -import signal -import threading import contextlib -import time import inspect +import signal +import threading + +import outcome +import pytest try: from async_generator import yield_, async_generator except ImportError: # pragma: no cover async_generator = yield_ = None -from ... import _core -from ...testing import wait_all_tasks_blocked -from ..._util import signal_raise, is_main_thread -from ..._timeouts import sleep -from .tutil import slow +from trio import _core +from trio.testing import wait_all_tasks_blocked +from trio._util import signal_raise +from trio._timeouts import sleep def ki_self(): diff --git a/src/trio/_core/tests/test_local.py b/tests/_core/test_local.py similarity index 99% rename from src/trio/_core/tests/test_local.py rename to tests/_core/test_local.py index 619dcd20d4..a7af95891c 100644 --- a/src/trio/_core/tests/test_local.py +++ b/tests/_core/test_local.py @@ -1,6 +1,6 @@ import pytest -from ... import _core +from trio import _core # scary runvar tests diff --git a/src/trio/_core/tests/test_mock_clock.py b/tests/_core/test_mock_clock.py similarity index 97% rename from src/trio/_core/tests/test_mock_clock.py rename to tests/_core/test_mock_clock.py index e5b2373ca5..ceec9334ed 100644 --- a/src/trio/_core/tests/test_mock_clock.py +++ b/tests/_core/test_mock_clock.py @@ -1,12 +1,12 @@ -from math import inf import time +from math import inf import pytest +from trio import _core from trio import sleep -from ... import _core -from .. import wait_all_tasks_blocked -from .._mock_clock import MockClock +from trio._core._mock_clock import MockClock +from trio.testing import wait_all_tasks_blocked from .tutil import slow diff --git a/src/trio/_core/tests/test_multierror.py b/tests/_core/test_multierror.py similarity index 98% rename from src/trio/_core/tests/test_multierror.py rename to tests/_core/test_multierror.py index 650f9bf597..bddc5e2d6a 100644 --- a/src/trio/_core/tests/test_multierror.py +++ b/tests/_core/test_multierror.py @@ -1,24 +1,20 @@ import gc -import logging import os +import re import subprocess +import sys from pathlib import Path - -import pytest - +from traceback import _cause_message # type: ignore from traceback import ( extract_tb, print_exception, - format_exception, ) -from traceback import _cause_message # type: ignore -import sys -import re -from .tutil import slow -from .._multierror import MultiError, concat_tb, NonBaseMultiError -from ... import TrioDeprecationWarning -from ..._core import open_nursery +import pytest + +from tests._core.tutil import slow +from trio import TrioDeprecationWarning, open_nursery +from trio._core._multierror import MultiError, concat_tb, NonBaseMultiError if sys.version_info < (3, 11): from exceptiongroup import ExceptionGroup diff --git a/src/trio/_core/tests/test_multierror_scripts/__init__.py b/tests/_core/test_multierror_scripts/__init__.py similarity index 100% rename from src/trio/_core/tests/test_multierror_scripts/__init__.py rename to tests/_core/test_multierror_scripts/__init__.py diff --git a/src/trio/_core/tests/test_multierror_scripts/_common.py b/tests/_core/test_multierror_scripts/_common.py similarity index 100% rename from src/trio/_core/tests/test_multierror_scripts/_common.py rename to tests/_core/test_multierror_scripts/_common.py diff --git a/src/trio/_core/tests/test_multierror_scripts/apport_excepthook.py b/tests/_core/test_multierror_scripts/apport_excepthook.py similarity index 100% rename from src/trio/_core/tests/test_multierror_scripts/apport_excepthook.py rename to tests/_core/test_multierror_scripts/apport_excepthook.py diff --git a/src/trio/_core/tests/test_multierror_scripts/ipython_custom_exc.py b/tests/_core/test_multierror_scripts/ipython_custom_exc.py similarity index 100% rename from src/trio/_core/tests/test_multierror_scripts/ipython_custom_exc.py rename to tests/_core/test_multierror_scripts/ipython_custom_exc.py diff --git a/src/trio/_core/tests/test_multierror_scripts/simple_excepthook.py b/tests/_core/test_multierror_scripts/simple_excepthook.py similarity index 100% rename from src/trio/_core/tests/test_multierror_scripts/simple_excepthook.py rename to tests/_core/test_multierror_scripts/simple_excepthook.py diff --git a/src/trio/_core/tests/test_multierror_scripts/simple_excepthook_IPython.py b/tests/_core/test_multierror_scripts/simple_excepthook_IPython.py similarity index 100% rename from src/trio/_core/tests/test_multierror_scripts/simple_excepthook_IPython.py rename to tests/_core/test_multierror_scripts/simple_excepthook_IPython.py diff --git a/src/trio/_core/tests/test_parking_lot.py b/tests/_core/test_parking_lot.py similarity index 97% rename from src/trio/_core/tests/test_parking_lot.py rename to tests/_core/test_parking_lot.py index db3fc76709..3dd92ca4d1 100644 --- a/src/trio/_core/tests/test_parking_lot.py +++ b/tests/_core/test_parking_lot.py @@ -1,9 +1,9 @@ import pytest -from ... import _core -from ...testing import wait_all_tasks_blocked -from .._parking_lot import ParkingLot -from .tutil import check_sequence_matches +from tests._core.tutil import check_sequence_matches +from trio import _core +from trio._core._parking_lot import ParkingLot +from trio.testing import wait_all_tasks_blocked async def test_parking_lot_basic(): diff --git a/src/trio/_core/tests/test_run.py b/tests/_core/test_run.py similarity index 99% rename from src/trio/_core/tests/test_run.py rename to tests/_core/test_run.py index 17a9cfad58..1c7ba61806 100644 --- a/src/trio/_core/tests/test_run.py +++ b/tests/_core/test_run.py @@ -1,23 +1,19 @@ import contextvars import functools -import platform +import gc import sys import threading import time import types -import warnings import weakref -from contextlib import contextmanager, ExitStack +from contextlib import ExitStack from math import inf -from textwrap import dedent -import gc -import attr import outcome -import sniffio import pytest +import sniffio -from .tutil import ( +from tests._core.tutil import ( slow, check_sequence_matches, gc_collect_harder, @@ -26,13 +22,12 @@ restore_unraisablehook, create_asyncio_future_in_new_loop, ) - -from ... import _core -from ..._core._multierror import MultiError, NonBaseMultiError -from .._run import DEADLINE_HEAP_MIN_PRUNE_THRESHOLD -from ..._threads import to_thread_run_sync -from ..._timeouts import sleep, fail_after -from ...testing import ( +from trio import _core +from trio._core._multierror import MultiError, NonBaseMultiError +from trio._core._run import DEADLINE_HEAP_MIN_PRUNE_THRESHOLD +from trio._threads import to_thread_run_sync +from trio._timeouts import sleep, fail_after +from trio.testing import ( wait_all_tasks_blocked, Sequencer, assert_checkpoints, @@ -1598,8 +1593,6 @@ async def test_asyncio_function_inside_nursery_does_not_explode(): # Regression test for https://github.com/python-trio/trio/issues/552 with pytest.raises(TypeError) as excinfo: async with _core.open_nursery() as nursery: - import asyncio - nursery.start_soon(sleep_forever) await create_asyncio_future_in_new_loop() assert "asyncio" in str(excinfo.value) diff --git a/src/trio/_core/tests/test_thread_cache.py b/tests/_core/test_thread_cache.py similarity index 96% rename from src/trio/_core/tests/test_thread_cache.py rename to tests/_core/test_thread_cache.py index 5f19a5ac64..2ff0b6dee6 100644 --- a/src/trio/_core/tests/test_thread_cache.py +++ b/tests/_core/test_thread_cache.py @@ -5,9 +5,9 @@ import sys from contextlib import contextmanager -from .tutil import slow, gc_collect_harder, disable_threading_excepthook -from .. import _thread_cache -from .._thread_cache import start_thread_soon, ThreadCache +from tests._core.tutil import slow, gc_collect_harder, disable_threading_excepthook +from trio._core import _thread_cache +from trio._core._thread_cache import start_thread_soon, ThreadCache def test_thread_cache_basics(): diff --git a/src/trio/_core/tests/test_tutil.py b/tests/_core/test_tutil.py similarity index 100% rename from src/trio/_core/tests/test_tutil.py rename to tests/_core/test_tutil.py diff --git a/src/trio/_core/tests/test_unbounded_queue.py b/tests/_core/test_unbounded_queue.py similarity index 97% rename from src/trio/_core/tests/test_unbounded_queue.py rename to tests/_core/test_unbounded_queue.py index 801c34ce46..1d8683c454 100644 --- a/src/trio/_core/tests/test_unbounded_queue.py +++ b/tests/_core/test_unbounded_queue.py @@ -2,8 +2,8 @@ import pytest -from ... import _core -from ...testing import assert_checkpoints, wait_all_tasks_blocked +from trio import _core +from trio.testing import assert_checkpoints, wait_all_tasks_blocked pytestmark = pytest.mark.filterwarnings( "ignore:.*UnboundedQueue:trio.TrioDeprecationWarning" diff --git a/src/trio/_core/tests/test_windows.py b/tests/_core/test_windows.py similarity index 94% rename from src/trio/_core/tests/test_windows.py rename to tests/_core/test_windows.py index bd81ef0f33..c1a603e615 100644 --- a/src/trio/_core/tests/test_windows.py +++ b/tests/_core/test_windows.py @@ -8,12 +8,12 @@ # Mark all the tests in this file as being windows-only pytestmark = pytest.mark.skipif(not on_windows, reason="windows only") -from .tutil import slow, gc_collect_harder, restore_unraisablehook -from ... import _core, sleep, move_on_after -from ...testing import wait_all_tasks_blocked +from tests._core.tutil import slow, gc_collect_harder, restore_unraisablehook +from trio import _core, sleep +from trio.testing import wait_all_tasks_blocked if on_windows: - from .._windows_cffi import ( + from trio._core._windows_cffi import ( ffi, kernel32, INVALID_HANDLE_VALUE, @@ -175,8 +175,8 @@ async def test_too_late_to_cancel(): def test_lsp_that_hooks_select_gives_good_error(monkeypatch): - from .._windows_cffi import WSAIoctls, _handle - from .. import _io_windows + from trio._core._windows_cffi import WSAIoctls, _handle + from trio._core import _io_windows def patched_get_underlying(sock, *, which=WSAIoctls.SIO_BASE_HANDLE): if hasattr(sock, "fileno"): # pragma: no branch @@ -199,8 +199,8 @@ def test_lsp_that_completely_hides_base_socket_gives_good_error(monkeypatch): # self for SIO_BSP_HANDLE_POLL. No known LSP does this, but we want to # make sure we get an error rather than an infinite loop. - from .._windows_cffi import WSAIoctls, _handle - from .. import _io_windows + from trio._core._windows_cffi import WSAIoctls, _handle + from trio._core import _io_windows def patched_get_underlying(sock, *, which=WSAIoctls.SIO_BASE_HANDLE): if hasattr(sock, "fileno"): # pragma: no branch diff --git a/src/trio/_core/tests/tutil.py b/tests/_core/tutil.py similarity index 99% rename from src/trio/_core/tests/tutil.py rename to tests/_core/tutil.py index 016e0fd3e1..ac341fdd89 100644 --- a/src/trio/_core/tests/tutil.py +++ b/tests/_core/tutil.py @@ -13,7 +13,7 @@ import gc # See trio/tests/conftest.py for the other half of this -from trio.tests.conftest import RUN_SLOW +from tests.conftest import RUN_SLOW slow = pytest.mark.skipif(not RUN_SLOW, reason="use --run-slow to run slow tests") diff --git a/src/trio/tests/conftest.py b/tests/conftest.py similarity index 95% rename from src/trio/tests/conftest.py rename to tests/conftest.py index 772486e1eb..f95497cf3b 100644 --- a/src/trio/tests/conftest.py +++ b/tests/conftest.py @@ -7,7 +7,7 @@ import pytest import inspect -from ..testing import trio_test, MockClock +from trio.testing import trio_test, MockClock RUN_SLOW = True diff --git a/src/trio/tests/module_with_deprecations.py b/tests/module_with_deprecations.py similarity index 95% rename from src/trio/tests/module_with_deprecations.py rename to tests/module_with_deprecations.py index 73184d11e8..9f9ed52e51 100644 --- a/src/trio/tests/module_with_deprecations.py +++ b/tests/module_with_deprecations.py @@ -1,6 +1,6 @@ regular = "hi" -from .. import _deprecate +from trio import _deprecate _deprecate.enable_attribute_deprecations(__name__) diff --git a/src/trio/tests/test_abc.py b/tests/test_abc.py similarity index 94% rename from src/trio/tests/test_abc.py rename to tests/test_abc.py index c445c97103..e6d705c54a 100644 --- a/src/trio/tests/test_abc.py +++ b/tests/test_abc.py @@ -2,8 +2,8 @@ import attr -from ..testing import assert_checkpoints -from .. import abc as tabc +from trio.testing import assert_checkpoints +from trio import abc as tabc async def test_AsyncResource_defaults(): diff --git a/src/trio/tests/test_channel.py b/tests/test_channel.py similarity index 99% rename from src/trio/tests/test_channel.py rename to tests/test_channel.py index aabb368799..ccdf63555e 100644 --- a/src/trio/tests/test_channel.py +++ b/tests/test_channel.py @@ -1,6 +1,6 @@ import pytest -from ..testing import wait_all_tasks_blocked, assert_checkpoints +from trio.testing import wait_all_tasks_blocked, assert_checkpoints import trio from trio import open_memory_channel, EndOfChannel diff --git a/src/trio/tests/test_contextvars.py b/tests/test_contextvars.py similarity index 88% rename from src/trio/tests/test_contextvars.py rename to tests/test_contextvars.py index 63853f5171..e57c356c84 100644 --- a/src/trio/tests/test_contextvars.py +++ b/tests/test_contextvars.py @@ -1,6 +1,6 @@ import contextvars -from .. import _core +import trio trio_testing_contextvar = contextvars.ContextVar("trio_testing_contextvar") @@ -13,7 +13,7 @@ async def child(): value = trio_testing_contextvar.get() record.append(value) - async with _core.open_nursery() as nursery: + async with trio.open_nursery() as nursery: nursery.start_soon(child) assert record == ["main"] @@ -27,7 +27,7 @@ async def child(): value = trio_testing_contextvar.get() record.append(value) - async with _core.open_nursery() as nursery: + async with trio.open_nursery() as nursery: nursery.start_soon(child) value = trio_testing_contextvar.get() assert record == ["child"] @@ -44,9 +44,10 @@ async def child(): value = trio_testing_contextvar.get() record.append(value) - async with _core.open_nursery() as nursery: + async with trio.open_nursery() as nursery: context.run(nursery.start_soon, child) nursery.start_soon(child) + value = trio_testing_contextvar.get() assert set(record) == {"main", "second_main"} assert value == "second_main" diff --git a/src/trio/tests/test_deprecate.py b/tests/test_deprecate.py similarity index 98% rename from src/trio/tests/test_deprecate.py rename to tests/test_deprecate.py index e5e1da8c5f..d1f0afd2dd 100644 --- a/src/trio/tests/test_deprecate.py +++ b/tests/test_deprecate.py @@ -3,7 +3,7 @@ import inspect import warnings -from .._deprecate import ( +from trio._deprecate import ( TrioDeprecationWarning, warn_deprecated, deprecated, @@ -24,7 +24,7 @@ def recwarn_always(recwarn): def _here(): info = inspect.getframeinfo(inspect.currentframe().f_back) - return (info.filename, info.lineno) + return info.filename, info.lineno def test_warn_deprecated(recwarn_always): diff --git a/src/trio/tests/test_dtls.py b/tests/test_dtls.py similarity index 99% rename from src/trio/tests/test_dtls.py rename to tests/test_dtls.py index 680a8793eb..41a6d3793d 100644 --- a/src/trio/tests/test_dtls.py +++ b/tests/test_dtls.py @@ -11,7 +11,7 @@ from OpenSSL import SSL from trio.testing._fake_net import FakeNet -from .._core.tests.tutil import slow, binds_ipv6, gc_collect_harder +from tests._core.tutil import slow, binds_ipv6, gc_collect_harder ca = trustme.CA() server_cert = ca.issue_cert("example.com") diff --git a/src/trio/tests/test_exports.py b/tests/test_exports.py similarity index 95% rename from src/trio/tests/test_exports.py rename to tests/test_exports.py index 026d6f5efa..1c2857cbf8 100644 --- a/src/trio/tests/test_exports.py +++ b/tests/test_exports.py @@ -10,9 +10,10 @@ import trio import trio.testing -from .. import _core -from .. import _util +from trio import _core +from trio import _util +# TODO: Vaporise ALL of this nonsense def test_core_is_properly_reexported(): # Each export from _core should be re-exported by exactly one of these @@ -78,11 +79,6 @@ def no_underscores(symbols): runtime_names = no_underscores(dir(module)) - # We should rename the trio.tests module (#274), but until then we use a - # special-case hack: - if modname == "trio": - runtime_names.remove("tests") - if tool == "pylint": from pylint.lint import PyLinter diff --git a/src/trio/tests/test_fakenet.py b/tests/test_fakenet.py similarity index 100% rename from src/trio/tests/test_fakenet.py rename to tests/test_fakenet.py diff --git a/src/trio/tests/test_file_io.py b/tests/test_file_io.py similarity index 100% rename from src/trio/tests/test_file_io.py rename to tests/test_file_io.py diff --git a/src/trio/tests/test_highlevel_generic.py b/tests/test_highlevel_generic.py similarity index 96% rename from src/trio/tests/test_highlevel_generic.py rename to tests/test_highlevel_generic.py index df2b2cecf7..51193efccf 100644 --- a/src/trio/tests/test_highlevel_generic.py +++ b/tests/test_highlevel_generic.py @@ -2,8 +2,8 @@ import attr -from ..abc import SendStream, ReceiveStream -from .._highlevel_generic import StapledStream +from trio.abc import SendStream, ReceiveStream +from trio import StapledStream @attr.s diff --git a/src/trio/tests/test_highlevel_open_tcp_listeners.py b/tests/test_highlevel_open_tcp_listeners.py similarity index 99% rename from src/trio/tests/test_highlevel_open_tcp_listeners.py rename to tests/test_highlevel_open_tcp_listeners.py index 0c38b4ca69..f07b3ff70d 100644 --- a/src/trio/tests/test_highlevel_open_tcp_listeners.py +++ b/tests/test_highlevel_open_tcp_listeners.py @@ -10,8 +10,8 @@ import trio from trio import open_tcp_listeners, serve_tcp, SocketListener, open_tcp_stream from trio.testing import open_stream_to_socket_listener -from .. import socket as tsocket -from .._core.tests.tutil import slow, creates_ipv6, binds_ipv6 +from trio import socket as tsocket +from tests._core.tutil import slow, creates_ipv6, binds_ipv6 if sys.version_info < (3, 11): from exceptiongroup import BaseExceptionGroup diff --git a/src/trio/tests/test_highlevel_open_tcp_stream.py b/tests/test_highlevel_open_tcp_stream.py similarity index 99% rename from src/trio/tests/test_highlevel_open_tcp_stream.py rename to tests/test_highlevel_open_tcp_stream.py index 35ddd3e118..80e5107376 100644 --- a/src/trio/tests/test_highlevel_open_tcp_stream.py +++ b/tests/test_highlevel_open_tcp_stream.py @@ -59,7 +59,7 @@ def fake4(i): ) def fake6(i): - return (AF_INET6, SOCK_STREAM, IPPROTO_TCP, "", (f"::{i}", 80)) + return AF_INET6, SOCK_STREAM, IPPROTO_TCP, "", (f"::{i}", 80) for fake in fake4, fake6: # No effect on homogeneous lists diff --git a/src/trio/tests/test_highlevel_open_unix_stream.py b/tests/test_highlevel_open_unix_stream.py similarity index 100% rename from src/trio/tests/test_highlevel_open_unix_stream.py rename to tests/test_highlevel_open_unix_stream.py diff --git a/src/trio/tests/test_highlevel_serve_listeners.py b/tests/test_highlevel_serve_listeners.py similarity index 100% rename from src/trio/tests/test_highlevel_serve_listeners.py rename to tests/test_highlevel_serve_listeners.py diff --git a/src/trio/tests/test_highlevel_socket.py b/tests/test_highlevel_socket.py similarity index 98% rename from src/trio/tests/test_highlevel_socket.py rename to tests/test_highlevel_socket.py index 9dcb834d2c..a6f049ab2e 100644 --- a/src/trio/tests/test_highlevel_socket.py +++ b/tests/test_highlevel_socket.py @@ -4,14 +4,14 @@ import socket as stdlib_socket import errno -from .. import _core -from ..testing import ( +from trio import _core +from trio.testing import ( check_half_closeable_stream, wait_all_tasks_blocked, assert_checkpoints, ) -from .._highlevel_socket import * -from .. import socket as tsocket +from trio._highlevel_socket import * +from trio import socket as tsocket async def test_SocketStream_basics(): diff --git a/src/trio/tests/test_highlevel_ssl_helpers.py b/tests/test_highlevel_ssl_helpers.py similarity index 95% rename from src/trio/tests/test_highlevel_ssl_helpers.py rename to tests/test_highlevel_ssl_helpers.py index c00f5dc464..f612611f86 100644 --- a/src/trio/tests/test_highlevel_ssl_helpers.py +++ b/tests/test_highlevel_ssl_helpers.py @@ -7,14 +7,9 @@ import trio from trio.socket import AF_INET, SOCK_STREAM, IPPROTO_TCP import trio.testing -from .test_ssl import client_ctx, SERVER_CTX - -from .._highlevel_ssl_helpers import ( - open_ssl_over_tcp_stream, - open_ssl_over_tcp_listeners, - serve_ssl_over_tcp, -) +from tests.test_ssl import client_ctx, SERVER_CTX +from trio import open_ssl_over_tcp_stream, open_ssl_over_tcp_listeners, serve_ssl_over_tcp async def echo_handler(stream): async with stream: diff --git a/src/trio/tests/test_path.py b/tests/test_path.py similarity index 100% rename from src/trio/tests/test_path.py rename to tests/test_path.py diff --git a/src/trio/tests/test_scheduler_determinism.py b/tests/test_scheduler_determinism.py similarity index 100% rename from src/trio/tests/test_scheduler_determinism.py rename to tests/test_scheduler_determinism.py diff --git a/src/trio/tests/test_signals.py b/tests/test_signals.py similarity index 98% rename from src/trio/tests/test_signals.py rename to tests/test_signals.py index 235772f900..504025ff9d 100644 --- a/src/trio/tests/test_signals.py +++ b/tests/test_signals.py @@ -3,9 +3,9 @@ import pytest import trio -from .. import _core -from .._util import signal_raise -from .._signals import open_signal_receiver, _signal_handler +from trio import _core +from trio._util import signal_raise +from trio._signals import open_signal_receiver, _signal_handler async def test_open_signal_receiver(): diff --git a/src/trio/tests/test_socket.py b/tests/test_socket.py similarity index 99% rename from src/trio/tests/test_socket.py rename to tests/test_socket.py index db21096fac..5bea44cfc8 100644 --- a/src/trio/tests/test_socket.py +++ b/tests/test_socket.py @@ -8,12 +8,12 @@ import inspect import tempfile import sys as _sys -from .._core.tests.tutil import creates_ipv6, binds_ipv6 -from .. import _core -from .. import _socket as _tsocket -from .. import socket as tsocket -from .._socket import _NUMERIC_ONLY, _try_sync -from ..testing import assert_checkpoints, wait_all_tasks_blocked +from tests._core.tutil import creates_ipv6, binds_ipv6 +from trio import _core +from trio import _socket as _tsocket +from trio import socket as tsocket +from trio._socket import _NUMERIC_ONLY, _try_sync +from trio.testing import assert_checkpoints, wait_all_tasks_blocked ################################################################ # utils diff --git a/src/trio/tests/test_ssl.py b/tests/test_ssl.py similarity index 99% rename from src/trio/tests/test_ssl.py rename to tests/test_ssl.py index 26e107e08f..ffbd8baa2f 100644 --- a/src/trio/tests/test_ssl.py +++ b/tests/test_ssl.py @@ -17,18 +17,17 @@ import trustme import trio -from .. import _core -from .._highlevel_socket import SocketStream, SocketListener -from .._highlevel_generic import aclose_forcefully -from .._core import ClosedResourceError, BrokenResourceError -from .._highlevel_open_tcp_stream import open_tcp_stream -from .. import socket as tsocket -from .._ssl import SSLStream, SSLListener, NeedHandshakeError, _is_eof -from .._util import ConflictDetector - -from .._core.tests.tutil import slow - -from ..testing import ( +from trio import ( + _core, + SocketStream, SocketListener, aclose_forcefully, ClosedResourceError, BrokenResourceError, + open_tcp_stream, socket as tsocket, SSLStream, SSLListener, NeedHandshakeError +) +from trio._ssl import _is_eof +from trio._util import ConflictDetector + +from tests._core.tutil import slow + +from trio.testing import ( assert_checkpoints, Sequencer, memory_stream_pair, diff --git a/src/trio/tests/test_subprocess.py b/tests/test_subprocess.py similarity index 98% rename from src/trio/tests/test_subprocess.py rename to tests/test_subprocess.py index e2d66f654d..785e05e1b1 100644 --- a/src/trio/tests/test_subprocess.py +++ b/tests/test_subprocess.py @@ -9,7 +9,7 @@ import pytest -from .. import ( +from trio import ( ClosedResourceError, Event, Process, @@ -20,9 +20,9 @@ sleep, sleep_forever, ) -from .._core.tests.tutil import skip_if_fbsd_pipes_broken, slow -from ..lowlevel import open_process -from ..testing import assert_no_checkpoints, wait_all_tasks_blocked +from tests._core.tutil import skip_if_fbsd_pipes_broken, slow +from trio.lowlevel import open_process +from trio.testing import assert_no_checkpoints, wait_all_tasks_blocked posix = os.name == "posix" if posix: @@ -464,11 +464,12 @@ async def test_wait_reapable_fails(background_process): def test_waitid_eintr(): # This only matters on PyPy (where we're coding EINTR handling # ourselves) but the test works on all waitid platforms. - from .._subprocess_platform import wait_child_exiting + from trio._subprocess_platform import wait_child_exiting if not wait_child_exiting.__module__.endswith("waitid"): pytest.skip("waitid only") - from .._subprocess_platform.waitid import sync_wait_reapable + + from trio._subprocess_platform.waitid import sync_wait_reapable got_alarm = False sleeper = subprocess.Popen(["sleep", "3600"]) diff --git a/src/trio/tests/test_sync.py b/tests/test_sync.py similarity index 98% rename from src/trio/tests/test_sync.py rename to tests/test_sync.py index 33f79c4df2..1abb7955d6 100644 --- a/src/trio/tests/test_sync.py +++ b/tests/test_sync.py @@ -1,13 +1,10 @@ -import pytest - import weakref -from ..testing import wait_all_tasks_blocked, assert_checkpoints +import pytest -from .. import _core -from .. import _timeouts -from .._timeouts import sleep_forever, move_on_after -from .._sync import * +from trio import _core, sleep_forever, open_memory_channel +from trio._sync import * +from trio.testing import wait_all_tasks_blocked, assert_checkpoints async def test_Event(): @@ -401,8 +398,6 @@ async def waiter(i): assert c.locked() -from .._sync import AsyncContextManagerMixin -from .._channel import open_memory_channel # Three ways of implementing a Lock in terms of a channel. Used to let us put # the channel through the generic lock tests. diff --git a/src/trio/tests/test_testing.py b/tests/test_testing.py similarity index 98% rename from src/trio/tests/test_testing.py rename to tests/test_testing.py index a2dba728d5..7df298a357 100644 --- a/src/trio/tests/test_testing.py +++ b/tests/test_testing.py @@ -4,15 +4,13 @@ import pytest -from .._core.tests.tutil import can_bind_ipv6 -from .. import sleep -from .. import _core -from .._highlevel_generic import aclose_forcefully -from ..testing import * -from ..testing._check_streams import _assert_raises -from ..testing._memory_streams import _UnboundedByteQueue -from .. import socket as tsocket -from .._highlevel_socket import SocketListener +from tests._core.tutil import can_bind_ipv6 +from trio import _core +from trio import sleep, aclose_forcefully, SocketListener +from trio import socket as tsocket +from trio.testing import * +from trio.testing._check_streams import _assert_raises +from trio.testing._memory_streams import _UnboundedByteQueue async def test_wait_all_tasks_blocked(): diff --git a/src/trio/tests/test_threads.py b/tests/test_threads.py similarity index 98% rename from src/trio/tests/test_threads.py rename to tests/test_threads.py index ce852d4612..ba3c6f6482 100644 --- a/src/trio/tests/test_threads.py +++ b/tests/test_threads.py @@ -11,18 +11,17 @@ import pytest from sniffio import current_async_library_cvar +from tests._core.test_ki import ki_self +from tests._core.tutil import buggy_pypy_asyncgens +from trio import CapacityLimiter, Event, _core, sleep from trio._core import TrioToken, current_trio_token - -from .. import CapacityLimiter, Event, _core, sleep -from .._core.tests.test_ki import ki_self -from .._core.tests.tutil import buggy_pypy_asyncgens -from .._threads import ( +from trio._threads import ( current_default_thread_limiter, from_thread_run, from_thread_run_sync, to_thread_run_sync, ) -from ..testing import wait_all_tasks_blocked +from trio.testing import wait_all_tasks_blocked async def test_do_in_trio_thread(): @@ -168,7 +167,7 @@ async def main(): async def test_named_thread(): - ending = " from trio.tests.test_threads.test_named_thread" + ending = " from tests.test_threads.test_named_thread" def inner(name="inner" + ending) -> threading.Thread: assert threading.current_thread().name == name @@ -197,7 +196,6 @@ async def test_thread_name(name: str): def _get_thread_name(ident: Optional[int] = None) -> Optional[str]: - import ctypes import ctypes.util libpthread_path = ctypes.util.find_library("pthread") @@ -248,7 +246,7 @@ def f(name: str) -> Callable[[None], threading.Thread]: return partial(inner, name) # test defaults - default = "None from trio.tests.test_threads.test_named_thread" + default = "None from tests.test_threads.test_named_thread" await to_thread_run_sync(f(default)) await to_thread_run_sync(f(default), thread_name=None) diff --git a/src/trio/tests/test_timeouts.py b/tests/test_timeouts.py similarity index 96% rename from src/trio/tests/test_timeouts.py rename to tests/test_timeouts.py index 382c015b1d..d101a35b48 100644 --- a/src/trio/tests/test_timeouts.py +++ b/tests/test_timeouts.py @@ -2,10 +2,10 @@ import pytest import time -from .._core.tests.tutil import slow -from .. import _core -from ..testing import assert_checkpoints -from .._timeouts import * +from tests._core.tutil import slow +from trio import _core +from trio.testing import assert_checkpoints +from trio._timeouts import * async def check_takes_about(f, expected_dur): diff --git a/src/trio/tests/test_tracing.py b/tests/test_tracing.py similarity index 100% rename from src/trio/tests/test_tracing.py rename to tests/test_tracing.py diff --git a/src/trio/tests/test_unix_pipes.py b/tests/test_unix_pipes.py similarity index 97% rename from src/trio/tests/test_unix_pipes.py rename to tests/test_unix_pipes.py index cf98942ea4..e72114744f 100644 --- a/src/trio/tests/test_unix_pipes.py +++ b/tests/test_unix_pipes.py @@ -1,22 +1,21 @@ import errno -import select import os -import tempfile +import select import sys import pytest -from .._core.tests.tutil import gc_collect_harder, skip_if_fbsd_pipes_broken -from .. import _core, move_on_after -from ..testing import wait_all_tasks_blocked, check_one_way_stream +from tests._core.tutil import gc_collect_harder, skip_if_fbsd_pipes_broken +from trio import _core +from trio.testing import wait_all_tasks_blocked, check_one_way_stream posix = os.name == "posix" pytestmark = pytest.mark.skipif(not posix, reason="posix only") if posix: - from .._unix_pipes import FdStream + from trio._unix_pipes import FdStream else: with pytest.raises(ImportError): - from .._unix_pipes import FdStream + from trio._unix_pipes import FdStream # Have to use quoted types so import doesn't crash on windows diff --git a/src/trio/tests/test_util.py b/tests/test_util.py similarity index 97% rename from src/trio/tests/test_util.py rename to tests/test_util.py index 15ab09a80b..8e99a26d83 100644 --- a/src/trio/tests/test_util.py +++ b/tests/test_util.py @@ -4,12 +4,12 @@ import pytest import trio -from .. import _core -from .._core.tests.tutil import ( +from trio import _core +from tests._core.tutil import ( ignore_coroutine_never_awaited_warnings, create_asyncio_future_in_new_loop, ) -from .._util import ( +from trio._util import ( signal_raise, ConflictDetector, is_main_thread, @@ -18,7 +18,7 @@ Final, NoPublicConstructor, ) -from ..testing import wait_all_tasks_blocked +from trio.testing import wait_all_tasks_blocked def test_signal_raise(): diff --git a/src/trio/tests/test_wait_for_object.py b/tests/test_wait_for_object.py similarity index 97% rename from src/trio/tests/test_wait_for_object.py rename to tests/test_wait_for_object.py index 38acfa802d..66ccc79a20 100644 --- a/src/trio/tests/test_wait_for_object.py +++ b/tests/test_wait_for_object.py @@ -6,14 +6,14 @@ # Mark all the tests in this file as being windows-only pytestmark = pytest.mark.skipif(not on_windows, reason="windows only") -from .._core.tests.tutil import slow +from tests._core.tutil import slow import trio -from .. import _core -from .. import _timeouts +from trio import _core +from trio import _timeouts if on_windows: - from .._core._windows_cffi import ffi, kernel32 - from .._wait_for_object import ( + from trio._core._windows_cffi import ffi, kernel32 + from trio._wait_for_object import ( WaitForSingleObject, WaitForMultipleObjects_sync, ) diff --git a/src/trio/tests/test_windows_pipes.py b/tests/test_windows_pipes.py similarity index 89% rename from src/trio/tests/test_windows_pipes.py rename to tests/test_windows_pipes.py index 2bcc64a072..dd03db9288 100644 --- a/src/trio/tests/test_windows_pipes.py +++ b/tests/test_windows_pipes.py @@ -1,20 +1,15 @@ -import errno -import select - -import os import sys from typing import Any from typing import Tuple import pytest -from .._core.tests.tutil import gc_collect_harder -from .. import _core, move_on_after -from ..testing import wait_all_tasks_blocked, check_one_way_stream +from trio import _core +from trio.testing import wait_all_tasks_blocked, check_one_way_stream if sys.platform == "win32": - from .._windows_pipes import PipeSendStream, PipeReceiveStream - from .._core._windows_cffi import _handle, kernel32 + from trio._windows_pipes import PipeSendStream, PipeReceiveStream + from trio._core._windows_cffi import _handle, kernel32 from asyncio.windows_utils import pipe else: pytestmark = pytest.mark.skip(reason="windows only") diff --git a/src/trio/tests/tools/__init__.py b/tests/tools/__init__.py similarity index 100% rename from src/trio/tests/tools/__init__.py rename to tests/tools/__init__.py diff --git a/src/trio/tests/tools/test_gen_exports.py b/tests/tools/test_gen_exports.py similarity index 100% rename from src/trio/tests/tools/test_gen_exports.py rename to tests/tools/test_gen_exports.py From 3632d32bd56cad2d7a0d3558d7dcb6e4fc26c2b4 Mon Sep 17 00:00:00 2001 From: Lura Skye Date: Sun, 5 Mar 2023 22:05:15 +0000 Subject: [PATCH 3/3] Add build-system to pyproject that I forgot to add. --- pyproject.toml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pyproject.toml b/pyproject.toml index 06e1e7b688..89908f3e50 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,6 +62,10 @@ sphinx-rtd-theme = "^1.2.0" sphinxcontrib-trio = "^1.1.2" towncrier = "^22.12.0" +[build-system] +requires = ["poetry-core>=1.0.0"] +build-backend = "poetry.core.masonry.api" + [tool.black] target-version = ['py37']