Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-aiofiles for openSUSE:Factory
checked in at 2023-02-24 18:07:43
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-aiofiles (Old)
and /work/SRC/openSUSE:Factory/.python-aiofiles.new.31432 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-aiofiles"
Fri Feb 24 18:07:43 2023 rev:6 rq:1067414 version:23.1.0
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-aiofiles/python-aiofiles.changes
2022-09-23 14:15:59.266088148 +0200
+++
/work/SRC/openSUSE:Factory/.python-aiofiles.new.31432/python-aiofiles.changes
2023-02-24 18:08:03.709388959 +0100
@@ -1,0 +2,11 @@
+Thu Feb 23 14:10:32 UTC 2023 - Dirk Müller <[email protected]>
+
+- update to 23.1.0:
+ * Added ``aiofiles.os.access``.
+ * Removed
``aiofiles.tempfile.temptypes.AsyncSpooledTemporaryFile.softspace``.
+ * Added ``aiofiles.stdin``, ``aiofiles.stdin_bytes``, and
+ other stdio streams.
+ * Transition to ``asyncio.get_running_loop``
+ (vs ``asyncio.get_event_loop``) internally.
+
+-------------------------------------------------------------------
Old:
----
aiofiles-22.1.0.tar.gz
New:
----
aiofiles-23.1.0.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-aiofiles.spec ++++++
--- /var/tmp/diff_new_pack.XQZK4k/_old 2023-02-24 18:08:04.237392106 +0100
+++ /var/tmp/diff_new_pack.XQZK4k/_new 2023-02-24 18:08:04.241392129 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-aiofiles
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -19,7 +19,7 @@
%{?!python_module:%define python_module() python-%{**} python3-%{**}}
%define skip_python2 1
Name: python-aiofiles
-Version: 22.1.0
+Version: 23.1.0
Release: 0
Summary: File support for asyncio
License: Apache-2.0
++++++ aiofiles-22.1.0.tar.gz -> aiofiles-23.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/.github/FUNDING.yml
new/aiofiles-23.1.0/.github/FUNDING.yml
--- old/aiofiles-22.1.0/.github/FUNDING.yml 1970-01-01 01:00:00.000000000
+0100
+++ new/aiofiles-23.1.0/.github/FUNDING.yml 2023-02-09 02:10:39.000000000
+0100
@@ -0,0 +1,3 @@
+---
+tidelift: "pypi/aiofiles"
+github: Tinche
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/.github/SECURITY.md
new/aiofiles-23.1.0/.github/SECURITY.md
--- old/aiofiles-22.1.0/.github/SECURITY.md 1970-01-01 01:00:00.000000000
+0100
+++ new/aiofiles-23.1.0/.github/SECURITY.md 2023-02-09 02:10:39.000000000
+0100
@@ -0,0 +1,5 @@
+## Security contact information
+
+To report a security vulnerability, please use the
+[Tidelift security contact](https://tidelift.com/security).
+Tidelift will coordinate the fix and disclosure.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/.github/workflows/main.yml
new/aiofiles-23.1.0/.github/workflows/main.yml
--- old/aiofiles-22.1.0/.github/workflows/main.yml 2022-09-04
19:09:08.000000000 +0200
+++ new/aiofiles-23.1.0/.github/workflows/main.yml 2023-02-09
02:10:39.000000000 +0100
@@ -3,9 +3,9 @@
on:
push:
- branches: ["master"]
+ branches: ["main"]
pull_request:
- branches: ["master"]
+ branches: ["main"]
workflow_dispatch:
jobs:
@@ -17,11 +17,11 @@
strategy:
matrix:
- python-version: ["3.7", "3.8", "3.9", "3.10", "3.11.0-rc.1",
"pypy-3.7"]
+ python-version: ["3.7", "3.8", "3.9", "3.10", "3.11", "pypy-3.9"]
steps:
- - uses: "actions/checkout@v2"
- - uses: "actions/setup-python@v2"
+ - uses: "actions/checkout@v3"
+ - uses: "actions/setup-python@v4"
with:
python-version: "${{ matrix.python-version }}"
- name: "Install dependencies"
@@ -36,9 +36,9 @@
# We always use a modern Python version for combining coverage to prevent
# parsing errors in older versions for modern code.
- - uses: "actions/setup-python@v2"
+ - uses: "actions/setup-python@v4"
with:
- python-version: "3.9"
+ python-version: "3.x"
- name: "Upload coverage to Codecov"
if: "contains(env.USING_COVERAGE, matrix.python-version)"
@@ -51,10 +51,10 @@
runs-on: "ubuntu-latest"
steps:
- - uses: "actions/checkout@v2"
- - uses: "actions/setup-python@v2"
+ - uses: "actions/checkout@v3"
+ - uses: "actions/setup-python@v4"
with:
- python-version: "3.9"
+ python-version: "3.x"
- name: "Install poetry and twine"
run: "python -m pip install poetry twine check-wheel-contents"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/README.rst
new/aiofiles-23.1.0/README.rst
--- old/aiofiles-22.1.0/README.rst 2022-09-04 19:09:08.000000000 +0200
+++ new/aiofiles-23.1.0/README.rst 2023-02-09 02:10:39.000000000 +0100
@@ -4,8 +4,8 @@
.. image:: https://img.shields.io/pypi/v/aiofiles.svg
:target: https://pypi.python.org/pypi/aiofiles
-.. image:: https://travis-ci.org/Tinche/aiofiles.svg?branch=master
- :target: https://travis-ci.org/Tinche/aiofiles
+.. image::
https://github.com/Tinche/aiofiles/actions/workflows/main.yml/badge.svg
+ :target: https://github.com/Tinche/aiofiles/actions
.. image:: https://codecov.io/gh/Tinche/aiofiles/branch/master/graph/badge.svg
:target: https://codecov.io/gh/Tinche/aiofiles
@@ -96,6 +96,11 @@
In case of failure, one of the usual exceptions will be raised.
+``aiofiles.stdin``, ``aiofiles.stdout``, ``aiofiles.stderr``,
+``aiofiles.stdin_bytes``, ``aiofiles.stdout_bytes``, and
+``aiofiles.stderr_bytes`` provide async access to ``sys.stdin``,
+``sys.stdout``, ``sys.stderr``, and their corresponding ``.buffer`` properties.
+
The ``aiofiles.os`` module contains executor-enabled coroutine versions of
several useful ``os`` functions that deal with files:
@@ -115,6 +120,7 @@
* ``readlink``
* ``listdir``
* ``scandir``
+* ``access``
* ``path.exists``
* ``path.isfile``
* ``path.isdir``
@@ -173,8 +179,18 @@
History
~~~~~~~
-22.1.0 (TBC)
-````````````
+23.1.0 (2023-02-09)
+```````````````````
+* Added ``aiofiles.os.access``.
+ `#146 <https://github.com/Tinche/aiofiles/pull/146>`_
+* Removed ``aiofiles.tempfile.temptypes.AsyncSpooledTemporaryFile.softspace``.
+ `#151 <https://github.com/Tinche/aiofiles/pull/151>`_
+* Added ``aiofiles.stdin``, ``aiofiles.stdin_bytes``, and other stdio streams.
+ `#154 <https://github.com/Tinche/aiofiles/pull/154>`_
+* Transition to ``asyncio.get_running_loop`` (vs ``asyncio.get_event_loop``)
internally.
+
+22.1.0 (2022-09-04)
+```````````````````
* Added ``aiofiles.os.path.islink``.
`#126 <https://github.com/Tinche/aiofiles/pull/126>`_
* Added ``aiofiles.os.readlink``.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/poetry.lock
new/aiofiles-23.1.0/poetry.lock
--- old/aiofiles-22.1.0/poetry.lock 2022-09-04 19:09:08.000000000 +0200
+++ new/aiofiles-23.1.0/poetry.lock 2023-02-09 02:10:39.000000000 +0100
@@ -15,10 +15,45 @@
python-versions = ">=3.5"
[package.extras]
-dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest
(>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope-interface",
"furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"]
-docs = ["furo", "sphinx", "zope-interface", "sphinx-notfound-page"]
-tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest
(>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope-interface",
"cloudpickle"]
-tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest
(>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"]
+dev = ["cloudpickle", "coverage[toml] (>=5.0.2)", "furo", "hypothesis", "mypy
(>=0.900,!=0.940)", "pre-commit", "pympler", "pytest (>=4.3.0)",
"pytest-mypy-plugins", "sphinx", "sphinx-notfound-page", "zope.interface"]
+docs = ["furo", "sphinx", "sphinx-notfound-page", "zope.interface"]
+tests = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis", "mypy
(>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins",
"zope.interface"]
+tests_no_zope = ["cloudpickle", "coverage[toml] (>=5.0.2)", "hypothesis",
"mypy (>=0.900,!=0.940)", "pympler", "pytest (>=4.3.0)", "pytest-mypy-plugins"]
+
+[[package]]
+name = "black"
+version = "22.8.0"
+description = "The uncompromising code formatter."
+category = "dev"
+optional = false
+python-versions = ">=3.6.2"
+
+[package.dependencies]
+click = ">=8.0.0"
+mypy-extensions = ">=0.4.3"
+pathspec = ">=0.9.0"
+platformdirs = ">=2"
+tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""}
+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 = "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 = "colorama"
@@ -60,21 +95,34 @@
testing = ["covdefaults (>=2.2)", "coverage (>=6.4.2)", "pytest (>=7.1.2)",
"pytest-cov (>=3)", "pytest-timeout (>=2.1)"]
[[package]]
+name = "flake8"
+version = "5.0.4"
+description = "the modular source code checker: pep8 pyflakes and co"
+category = "dev"
+optional = false
+python-versions = ">=3.6.1"
+
+[package.dependencies]
+importlib-metadata = {version = ">=1.1.0,<4.3", markers = "python_version <
\"3.8\""}
+mccabe = ">=0.7.0,<0.8.0"
+pycodestyle = ">=2.9.0,<2.10.0"
+pyflakes = ">=2.5.0,<2.6.0"
+
+[[package]]
name = "importlib-metadata"
-version = "4.12.0"
+version = "4.2.0"
description = "Read metadata from Python packages"
category = "dev"
optional = false
-python-versions = ">=3.7"
+python-versions = ">=3.6"
[package.dependencies]
typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""}
zipp = ">=0.5"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"]
-perf = ["ipython"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8",
"pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs",
"flufl-flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy
(>=0.9.1)", "importlib-resources (>=1.3)"]
+docs = ["jaraco.packaging (>=8.2)", "rst.linker (>=1.9)", "sphinx"]
+testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging",
"pep517", "pyfakefs", "pytest (>=4.6)", "pytest-black (>=0.3.7)",
"pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=1.0.1)",
"pytest-flake8", "pytest-mypy"]
[[package]]
name = "iniconfig"
@@ -85,6 +133,22 @@
python-versions = "*"
[[package]]
+name = "mccabe"
+version = "0.7.0"
+description = "McCabe checker, plugin for flake8"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "mypy-extensions"
+version = "0.4.3"
+description = "Experimental type system extensions for programs checked with
the mypy typechecker."
+category = "dev"
+optional = false
+python-versions = "*"
+
+[[package]]
name = "packaging"
version = "21.3"
description = "Core utilities for Python packages"
@@ -96,6 +160,14 @@
pyparsing = ">=2.0.2,<3.0.5 || >3.0.5"
[[package]]
+name = "pathspec"
+version = "0.10.1"
+description = "Utility library for gitignore style pattern matching of file
paths."
+category = "dev"
+optional = false
+python-versions = ">=3.7"
+
+[[package]]
name = "platformdirs"
version = "2.5.2"
description = "A small Python module for determining appropriate
platform-specific dirs, e.g. a \"user data dir\"."
@@ -104,8 +176,8 @@
python-versions = ">=3.7"
[package.extras]
-docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)",
"sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"]
-test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)",
"pytest (>=6)"]
+docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx (>=4)",
"sphinx-autodoc-typehints (>=1.12)"]
+test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)",
"pytest-mock (>=3.6)"]
[[package]]
name = "pluggy"
@@ -131,6 +203,22 @@
python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*"
[[package]]
+name = "pycodestyle"
+version = "2.9.1"
+description = "Python style guide checker"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
+name = "pyflakes"
+version = "2.5.0"
+description = "passive checker of Python programs"
+category = "dev"
+optional = false
+python-versions = ">=3.6"
+
+[[package]]
name = "pyparsing"
version = "3.0.9"
description = "pyparsing module - Classes and methods to define and execute
parsing grammars"
@@ -139,7 +227,7 @@
python-versions = ">=3.6.8"
[package.extras]
-diagrams = ["railroad-diagrams", "jinja2"]
+diagrams = ["jinja2", "railroad-diagrams"]
[[package]]
name = "pytest"
@@ -176,7 +264,7 @@
typing-extensions = {version = ">=3.7.2", markers = "python_version < \"3.8\""}
[package.extras]
-testing = ["coverage (>=6.2)", "hypothesis (>=5.7.1)", "flaky (>=3.5.0)",
"mypy (>=0.931)", "pytest-trio (>=0.7.0)"]
+testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)",
"mypy (>=0.931)", "pytest-trio (>=0.7.0)"]
[[package]]
name = "six"
@@ -223,7 +311,15 @@
[package.extras]
docs = ["pygments-github-lexers (>=0.0.5)", "sphinx (>=2.0.0)",
"sphinxcontrib-autoprogram (>=0.1.5)", "towncrier (>=18.5.0)"]
-testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pytest (>=4.0.0)",
"pytest-cov (>=2.5.1)", "pytest-mock (>=1.10.0)", "pytest-randomly (>=1.0.0)",
"psutil (>=5.6.1)", "pathlib2 (>=2.3.3)"]
+testing = ["flaky (>=3.4.0)", "freezegun (>=0.3.11)", "pathlib2 (>=2.3.3)",
"psutil (>=5.6.1)", "pytest (>=4.0.0)", "pytest-cov (>=2.5.1)", "pytest-mock
(>=1.10.0)", "pytest-randomly (>=1.0.0)"]
+
+[[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"
@@ -235,21 +331,21 @@
[[package]]
name = "virtualenv"
-version = "20.16.4"
+version = "20.16.2"
description = "Virtual Python Environment builder"
category = "dev"
optional = false
python-versions = ">=3.6"
[package.dependencies]
-distlib = ">=0.3.5,<1"
-filelock = ">=3.4.1,<4"
-importlib-metadata = {version = ">=4.8.3", markers = "python_version <
\"3.8\""}
-platformdirs = ">=2.4,<3"
+distlib = ">=0.3.1,<1"
+filelock = ">=3.2,<4"
+importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""}
+platformdirs = ">=2,<3"
[package.extras]
-docs = ["proselint (>=0.13)", "sphinx (>=5.1.1)", "sphinx-argparse (>=0.3.1)",
"sphinx-rtd-theme (>=1)", "towncrier (>=21.9)"]
-testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky
(>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)",
"pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly
(>=3.10.3)", "pytest-timeout (>=2.1)"]
+docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)",
"sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"]
+testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky
(>=3)", "packaging (>=20.0)", "pytest (>=4)", "pytest-env (>=0.6.2)",
"pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)",
"pytest-timeout (>=1)"]
[[package]]
name = "zipp"
@@ -260,33 +356,143 @@
python-versions = ">=3.7"
[package.extras]
-docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)",
"jaraco.tidelift (>=1.4)"]
-testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8",
"pytest-cov", "pytest-enabler (>=1.3)", "jaraco-itertools", "func-timeout",
"pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"]
+docs = ["jaraco.packaging (>=9)", "jaraco.tidelift (>=1.4)", "rst.linker
(>=1.9)", "sphinx"]
+testing = ["func-timeout", "jaraco.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"
-content-hash =
"f93768f8e11b7774ec6be76e6c45ac6089c9ac91cc14d9f2dc19ea9cca3c7874"
+content-hash =
"66ad56398752c8ee3c4700648254483b9bf1b5b2cd10f3dec31c9e59e39ace0b"
[metadata.files]
-atomicwrites = []
-attrs = []
+atomicwrites = [
+ {file = "atomicwrites-1.4.1.tar.gz", hash =
"sha256:81b2c9071a49367a7f770170e5eec8cb66567cfbbc8c73d20ce5ca4a8d71cf11"},
+]
+attrs = [
+ {file = "attrs-22.1.0-py2.py3-none-any.whl", hash =
"sha256:86efa402f67bf2df34f51a335487cf46b1ec130d02b8d39fd248abfd30da551c"},
+ {file = "attrs-22.1.0.tar.gz", hash =
"sha256:29adc2665447e5191d0e7c568fde78b21f9672d344281d0c6e1ab085429b22b6"},
+]
+black = [
+ {file = "black-22.8.0-cp310-cp310-macosx_10_9_universal2.whl", hash =
"sha256:ce957f1d6b78a8a231b18e0dd2d94a33d2ba738cd88a7fe64f53f659eea49fdd"},
+ {file = "black-22.8.0-cp310-cp310-macosx_10_9_x86_64.whl", hash =
"sha256:5107ea36b2b61917956d018bd25129baf9ad1125e39324a9b18248d362156a27"},
+ {file = "black-22.8.0-cp310-cp310-macosx_11_0_arm64.whl", hash =
"sha256:e8166b7bfe5dcb56d325385bd1d1e0f635f24aae14b3ae437102dedc0c186747"},
+ {file =
"black-22.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash
= "sha256:dd82842bb272297503cbec1a2600b6bfb338dae017186f8f215c8958f8acf869"},
+ {file = "black-22.8.0-cp310-cp310-win_amd64.whl", hash =
"sha256:d839150f61d09e7217f52917259831fe2b689f5c8e5e32611736351b89bb2a90"},
+ {file = "black-22.8.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash =
"sha256:a05da0430bd5ced89176db098567973be52ce175a55677436a271102d7eaa3fe"},
+ {file =
"black-22.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash
= "sha256:4a098a69a02596e1f2a58a2a1c8d5a05d5a74461af552b371e82f9fa4ada8342"},
+ {file = "black-22.8.0-cp36-cp36m-win_amd64.whl", hash =
"sha256:5594efbdc35426e35a7defa1ea1a1cb97c7dbd34c0e49af7fb593a36bd45edab"},
+ {file = "black-22.8.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash =
"sha256:a983526af1bea1e4cf6768e649990f28ee4f4137266921c2c3cee8116ae42ec3"},
+ {file =
"black-22.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash
= "sha256:3b2c25f8dea5e8444bdc6788a2f543e1fb01494e144480bc17f806178378005e"},
+ {file = "black-22.8.0-cp37-cp37m-win_amd64.whl", hash =
"sha256:78dd85caaab7c3153054756b9fe8c611efa63d9e7aecfa33e533060cb14b6d16"},
+ {file = "black-22.8.0-cp38-cp38-macosx_10_9_universal2.whl", hash =
"sha256:cea1b2542d4e2c02c332e83150e41e3ca80dc0fb8de20df3c5e98e242156222c"},
+ {file = "black-22.8.0-cp38-cp38-macosx_10_9_x86_64.whl", hash =
"sha256:5b879eb439094751185d1cfdca43023bc6786bd3c60372462b6f051efa6281a5"},
+ {file = "black-22.8.0-cp38-cp38-macosx_11_0_arm64.whl", hash =
"sha256:0a12e4e1353819af41df998b02c6742643cfef58282915f781d0e4dd7a200411"},
+ {file =
"black-22.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash =
"sha256:c3a73f66b6d5ba7288cd5d6dad9b4c9b43f4e8a4b789a94bf5abfb878c663eb3"},
+ {file = "black-22.8.0-cp38-cp38-win_amd64.whl", hash =
"sha256:e981e20ec152dfb3e77418fb616077937378b322d7b26aa1ff87717fb18b4875"},
+ {file = "black-22.8.0-cp39-cp39-macosx_10_9_universal2.whl", hash =
"sha256:8ce13ffed7e66dda0da3e0b2eb1bdfc83f5812f66e09aca2b0978593ed636b6c"},
+ {file = "black-22.8.0-cp39-cp39-macosx_10_9_x86_64.whl", hash =
"sha256:32a4b17f644fc288c6ee2bafdf5e3b045f4eff84693ac069d87b1a347d861497"},
+ {file = "black-22.8.0-cp39-cp39-macosx_11_0_arm64.whl", hash =
"sha256:0ad827325a3a634bae88ae7747db1a395d5ee02cf05d9aa7a9bd77dfb10e940c"},
+ {file =
"black-22.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash =
"sha256:53198e28a1fb865e9fe97f88220da2e44df6da82b18833b588b1883b16bb5d41"},
+ {file = "black-22.8.0-cp39-cp39-win_amd64.whl", hash =
"sha256:bc4d4123830a2d190e9cc42a2e43570f82ace35c3aeb26a512a2102bce5af7ec"},
+ {file = "black-22.8.0-py3-none-any.whl", hash =
"sha256:d2c21d439b2baf7aa80d6dd4e3659259be64c6f49dfd0f32091063db0e006db4"},
+ {file = "black-22.8.0.tar.gz", hash =
"sha256:792f7eb540ba9a17e8656538701d3eb1afcb134e3b45b71f20b25c77a8db7e6e"},
+]
+click = [
+ {file = "click-8.1.3-py3-none-any.whl", hash =
"sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"},
+ {file = "click-8.1.3.tar.gz", hash =
"sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"},
+]
colorama = [
{file = "colorama-0.4.5-py2.py3-none-any.whl", hash =
"sha256:854bf444933e37f5824ae7bfc1e98d5bce2ebe4160d46b5edf346a89358e99da"},
{file = "colorama-0.4.5.tar.gz", hash =
"sha256:e6c6b4334fc50988a639d9b98aa429a0b57da6e17b9a44f0451f930b6967b7a4"},
]
-coverage = []
-distlib = []
-filelock = []
-importlib-metadata = []
+coverage = [
+ {file = "coverage-6.4.4-cp310-cp310-macosx_10_9_x86_64.whl", hash =
"sha256:e7b4da9bafad21ea45a714d3ea6f3e1679099e420c8741c74905b92ee9bfa7cc"},
+ {file = "coverage-6.4.4-cp310-cp310-macosx_11_0_arm64.whl", hash =
"sha256:fde17bc42e0716c94bf19d92e4c9f5a00c5feb401f5bc01101fdf2a8b7cacf60"},
+ {file =
"coverage-6.4.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
hash =
"sha256:cdbb0d89923c80dbd435b9cf8bba0ff55585a3cdb28cbec65f376c041472c60d"},
+ {file =
"coverage-6.4.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:67f9346aeebea54e845d29b487eb38ec95f2ecf3558a3cffb26ee3f0dcc3e760"},
+ {file =
"coverage-6.4.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:42c499c14efd858b98c4e03595bf914089b98400d30789511577aa44607a1b74"},
+ {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash =
"sha256:c35cca192ba700979d20ac43024a82b9b32a60da2f983bec6c0f5b84aead635c"},
+ {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_i686.whl", hash =
"sha256:9cc4f107009bca5a81caef2fca843dbec4215c05e917a59dec0c8db5cff1d2aa"},
+ {file = "coverage-6.4.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash =
"sha256:5f444627b3664b80d078c05fe6a850dd711beeb90d26731f11d492dcbadb6973"},
+ {file = "coverage-6.4.4-cp310-cp310-win32.whl", hash =
"sha256:66e6df3ac4659a435677d8cd40e8eb1ac7219345d27c41145991ee9bf4b806a0"},
+ {file = "coverage-6.4.4-cp310-cp310-win_amd64.whl", hash =
"sha256:35ef1f8d8a7a275aa7410d2f2c60fa6443f4a64fae9be671ec0696a68525b875"},
+ {file = "coverage-6.4.4-cp311-cp311-macosx_10_9_x86_64.whl", hash =
"sha256:c1328d0c2f194ffda30a45f11058c02410e679456276bfa0bbe0b0ee87225fac"},
+ {file =
"coverage-6.4.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
hash =
"sha256:61b993f3998ee384935ee423c3d40894e93277f12482f6e777642a0141f55782"},
+ {file =
"coverage-6.4.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:d5dd4b8e9cd0deb60e6fcc7b0647cbc1da6c33b9e786f9c79721fd303994832f"},
+ {file =
"coverage-6.4.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:7026f5afe0d1a933685d8f2169d7c2d2e624f6255fb584ca99ccca8c0e966fd7"},
+ {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash =
"sha256:9c7b9b498eb0c0d48b4c2abc0e10c2d78912203f972e0e63e3c9dc21f15abdaa"},
+ {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_i686.whl", hash =
"sha256:ee2b2fb6eb4ace35805f434e0f6409444e1466a47f620d1d5763a22600f0f892"},
+ {file = "coverage-6.4.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash =
"sha256:ab066f5ab67059d1f1000b5e1aa8bbd75b6ed1fc0014559aea41a9eb66fc2ce0"},
+ {file = "coverage-6.4.4-cp311-cp311-win32.whl", hash =
"sha256:9d6e1f3185cbfd3d91ac77ea065d85d5215d3dfa45b191d14ddfcd952fa53796"},
+ {file = "coverage-6.4.4-cp311-cp311-win_amd64.whl", hash =
"sha256:e3d3c4cc38b2882f9a15bafd30aec079582b819bec1b8afdbde8f7797008108a"},
+ {file = "coverage-6.4.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash =
"sha256:a095aa0a996ea08b10580908e88fbaf81ecf798e923bbe64fb98d1807db3d68a"},
+ {file =
"coverage-6.4.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
hash =
"sha256:ef6f44409ab02e202b31a05dd6666797f9de2aa2b4b3534e9d450e42dea5e817"},
+ {file =
"coverage-6.4.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:4b7101938584d67e6f45f0015b60e24a95bf8dea19836b1709a80342e01b472f"},
+ {file =
"coverage-6.4.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:14a32ec68d721c3d714d9b105c7acf8e0f8a4f4734c811eda75ff3718570b5e3"},
+ {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash =
"sha256:6a864733b22d3081749450466ac80698fe39c91cb6849b2ef8752fd7482011f3"},
+ {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_i686.whl", hash =
"sha256:08002f9251f51afdcc5e3adf5d5d66bb490ae893d9e21359b085f0e03390a820"},
+ {file = "coverage-6.4.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash =
"sha256:a3b2752de32c455f2521a51bd3ffb53c5b3ae92736afde67ce83477f5c1dd928"},
+ {file = "coverage-6.4.4-cp37-cp37m-win32.whl", hash =
"sha256:f855b39e4f75abd0dfbcf74a82e84ae3fc260d523fcb3532786bcbbcb158322c"},
+ {file = "coverage-6.4.4-cp37-cp37m-win_amd64.whl", hash =
"sha256:ee6ae6bbcac0786807295e9687169fba80cb0617852b2fa118a99667e8e6815d"},
+ {file = "coverage-6.4.4-cp38-cp38-macosx_10_9_x86_64.whl", hash =
"sha256:564cd0f5b5470094df06fab676c6d77547abfdcb09b6c29c8a97c41ad03b103c"},
+ {file = "coverage-6.4.4-cp38-cp38-macosx_11_0_arm64.whl", hash =
"sha256:cbbb0e4cd8ddcd5ef47641cfac97d8473ab6b132dd9a46bacb18872828031685"},
+ {file =
"coverage-6.4.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
hash =
"sha256:6113e4df2fa73b80f77663445be6d567913fb3b82a86ceb64e44ae0e4b695de1"},
+ {file =
"coverage-6.4.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:8d032bfc562a52318ae05047a6eb801ff31ccee172dc0d2504614e911d8fa83e"},
+ {file =
"coverage-6.4.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:e431e305a1f3126477abe9a184624a85308da8edf8486a863601d58419d26ffa"},
+ {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash =
"sha256:cf2afe83a53f77aec067033199797832617890e15bed42f4a1a93ea24794ae3e"},
+ {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_i686.whl", hash =
"sha256:783bc7c4ee524039ca13b6d9b4186a67f8e63d91342c713e88c1865a38d0892a"},
+ {file = "coverage-6.4.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash =
"sha256:ff934ced84054b9018665ca3967fc48e1ac99e811f6cc99ea65978e1d384454b"},
+ {file = "coverage-6.4.4-cp38-cp38-win32.whl", hash =
"sha256:e1fabd473566fce2cf18ea41171d92814e4ef1495e04471786cbc943b89a3781"},
+ {file = "coverage-6.4.4-cp38-cp38-win_amd64.whl", hash =
"sha256:4179502f210ebed3ccfe2f78bf8e2d59e50b297b598b100d6c6e3341053066a2"},
+ {file = "coverage-6.4.4-cp39-cp39-macosx_10_9_x86_64.whl", hash =
"sha256:98c0b9e9b572893cdb0a00e66cf961a238f8d870d4e1dc8e679eb8bdc2eb1b86"},
+ {file = "coverage-6.4.4-cp39-cp39-macosx_11_0_arm64.whl", hash =
"sha256:fc600f6ec19b273da1d85817eda339fb46ce9eef3e89f220055d8696e0a06908"},
+ {file =
"coverage-6.4.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
hash =
"sha256:7a98d6bf6d4ca5c07a600c7b4e0c5350cd483c85c736c522b786be90ea5bac4f"},
+ {file =
"coverage-6.4.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl",
hash =
"sha256:01778769097dbd705a24e221f42be885c544bb91251747a8a3efdec6eb4788f2"},
+ {file =
"coverage-6.4.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
hash =
"sha256:dfa0b97eb904255e2ab24166071b27408f1f69c8fbda58e9c0972804851e0558"},
+ {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash =
"sha256:fcbe3d9a53e013f8ab88734d7e517eb2cd06b7e689bedf22c0eb68db5e4a0a19"},
+ {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_i686.whl", hash =
"sha256:15e38d853ee224e92ccc9a851457fb1e1f12d7a5df5ae44544ce7863691c7a0d"},
+ {file = "coverage-6.4.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash =
"sha256:6913dddee2deff8ab2512639c5168c3e80b3ebb0f818fed22048ee46f735351a"},
+ {file = "coverage-6.4.4-cp39-cp39-win32.whl", hash =
"sha256:354df19fefd03b9a13132fa6643527ef7905712109d9c1c1903f2133d3a4e145"},
+ {file = "coverage-6.4.4-cp39-cp39-win_amd64.whl", hash =
"sha256:1238b08f3576201ebf41f7c20bf59baa0d05da941b123c6656e42cdb668e9827"},
+ {file = "coverage-6.4.4-pp36.pp37.pp38-none-any.whl", hash =
"sha256:f67cf9f406cf0d2f08a3515ce2db5b82625a7257f88aad87904674def6ddaec1"},
+ {file = "coverage-6.4.4.tar.gz", hash =
"sha256:e16c45b726acb780e1e6f88b286d3c10b3914ab03438f32117c4aa52d7f30d58"},
+]
+distlib = [
+ {file = "distlib-0.3.6-py2.py3-none-any.whl", hash =
"sha256:f35c4b692542ca110de7ef0bea44d73981caeb34ca0b9b6b2e6d7790dda8f80e"},
+ {file = "distlib-0.3.6.tar.gz", hash =
"sha256:14bad2d9b04d3a36127ac97f30b12a19268f211063d8f8ee4f47108896e11b46"},
+]
+filelock = [
+ {file = "filelock-3.8.0-py3-none-any.whl", hash =
"sha256:617eb4e5eedc82fc5f47b6d61e4d11cb837c56cb4544e39081099fa17ad109d4"},
+ {file = "filelock-3.8.0.tar.gz", hash =
"sha256:55447caa666f2198c5b6b13a26d2084d26fa5b115c00d065664b2124680c4edc"},
+]
+flake8 = [
+ {file = "flake8-5.0.4-py2.py3-none-any.whl", hash =
"sha256:7a1cf6b73744f5806ab95e526f6f0d8c01c66d7bbe349562d22dfca20610b248"},
+ {file = "flake8-5.0.4.tar.gz", hash =
"sha256:6fbe320aad8d6b95cec8b8e47bc933004678dc63095be98528b7bdd2a9f510db"},
+]
+importlib-metadata = [
+ {file = "importlib_metadata-4.2.0-py3-none-any.whl", hash =
"sha256:057e92c15bc8d9e8109738a48db0ccb31b4d9d5cfbee5a8670879a30be66304b"},
+ {file = "importlib_metadata-4.2.0.tar.gz", hash =
"sha256:b7e52a1f8dec14a75ea73e0891f3060099ca1d8e6a462a4dff11c3e119ea1b31"},
+]
iniconfig = [
{file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash =
"sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"},
{file = "iniconfig-1.1.1.tar.gz", hash =
"sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"},
]
+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-extensions = [
+ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash =
"sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"},
+ {file = "mypy_extensions-0.4.3.tar.gz", hash =
"sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"},
+]
packaging = [
{file = "packaging-21.3-py3-none-any.whl", hash =
"sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"},
{file = "packaging-21.3.tar.gz", hash =
"sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"},
]
+pathspec = [
+ {file = "pathspec-0.10.1-py3-none-any.whl", hash =
"sha256:46846318467efc4556ccfd27816e004270a9eeeeb4d062ce5e6fc7a87c573f93"},
+ {file = "pathspec-0.10.1.tar.gz", hash =
"sha256:7ace6161b621d31e7902eb6b5ae148d12cfd23f4a249b9ffb6b9fee12084323d"},
+]
platformdirs = [
{file = "platformdirs-2.5.2-py3-none-any.whl", hash =
"sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"},
{file = "platformdirs-2.5.2.tar.gz", hash =
"sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"},
@@ -299,6 +505,14 @@
{file = "py-1.11.0-py2.py3-none-any.whl", hash =
"sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"},
{file = "py-1.11.0.tar.gz", hash =
"sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"},
]
+pycodestyle = [
+ {file = "pycodestyle-2.9.1-py2.py3-none-any.whl", hash =
"sha256:d1735fc58b418fd7c5f658d28d943854f8a849b01a5d0a1e6f3f3fdd0166804b"},
+ {file = "pycodestyle-2.9.1.tar.gz", hash =
"sha256:2c9607871d58c76354b697b42f5d57e1ada7d261c261efac224b664affdc5785"},
+]
+pyflakes = [
+ {file = "pyflakes-2.5.0-py2.py3-none-any.whl", hash =
"sha256:4579f67d887f804e67edb544428f264b7b24f435b263c4614f384135cea553d2"},
+ {file = "pyflakes-2.5.0.tar.gz", hash =
"sha256:491feb020dca48ccc562a8c0cbe8df07ee13078df59813b83959cbdada312ea3"},
+]
pyparsing = [
{file = "pyparsing-3.0.9-py3-none-any.whl", hash =
"sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"},
{file = "pyparsing-3.0.9.tar.gz", hash =
"sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"},
@@ -307,7 +521,10 @@
{file = "pytest-7.1.2-py3-none-any.whl", hash =
"sha256:13d0e3ccfc2b6e26be000cb6568c832ba67ba32e719443bfe725814d3c42433c"},
{file = "pytest-7.1.2.tar.gz", hash =
"sha256:a06a0425453864a270bc45e71f783330a7428defb4230fb5e6a731fde06ecd45"},
]
-pytest-asyncio = []
+pytest-asyncio = [
+ {file = "pytest-asyncio-0.19.0.tar.gz", hash =
"sha256:ac4ebf3b6207259750bc32f4c1d8fcd7e79739edbc67ad0c58dd150b1d072fed"},
+ {file = "pytest_asyncio-0.19.0-py3-none-any.whl", hash =
"sha256:7a97e37cfe1ed296e2e84941384bdd37c376453912d397ed39293e0916f521fa"},
+]
six = [
{file = "six-1.16.0-py2.py3-none-any.whl", hash =
"sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"},
{file = "six-1.16.0.tar.gz", hash =
"sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"},
@@ -320,10 +537,45 @@
{file = "tomli-2.0.1-py3-none-any.whl", hash =
"sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"},
{file = "tomli-2.0.1.tar.gz", hash =
"sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"},
]
-tox = []
+tox = [
+ {file = "tox-3.25.1-py2.py3-none-any.whl", hash =
"sha256:c38e15f4733683a9cc0129fba078633e07eb0961f550a010ada879e95fb32632"},
+ {file = "tox-3.25.1.tar.gz", hash =
"sha256:c138327815f53bc6da4fe56baec5f25f00622ae69ef3fe4e1e385720e22486f9"},
+]
+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.3.0-py3-none-any.whl", hash =
"sha256:25642c956049920a5aa49edcdd6ab1e06d7e5d467fc00e0506c44ac86fbfca02"},
{file = "typing_extensions-4.3.0.tar.gz", hash =
"sha256:e6d2677a32f47fc7eb2795db1dd15c1f34eff616bcaf2cfb5e997f854fa1c4a6"},
]
-virtualenv = []
-zipp = []
+virtualenv = [
+ {file = "virtualenv-20.16.2-py2.py3-none-any.whl", hash =
"sha256:635b272a8e2f77cb051946f46c60a54ace3cb5e25568228bd6b57fc70eca9ff3"},
+ {file = "virtualenv-20.16.2.tar.gz", hash =
"sha256:0ef5be6d07181946891f5abc8047fda8bc2f0b4b9bf222c64e6e8963baee76db"},
+]
+zipp = [
+ {file = "zipp-3.8.1-py3-none-any.whl", hash =
"sha256:47c40d7fe183a6f21403a199b3e4192cca5774656965b0a4988ad2f8feb5f009"},
+ {file = "zipp-3.8.1.tar.gz", hash =
"sha256:05b45f1ee8f807d0cc928485ca40a07cb491cf092ff587c0df9cb1fd154848d2"},
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/pyproject.toml
new/aiofiles-23.1.0/pyproject.toml
--- old/aiofiles-22.1.0/pyproject.toml 2022-09-04 19:09:08.000000000 +0200
+++ new/aiofiles-23.1.0/pyproject.toml 2023-02-09 02:10:39.000000000 +0100
@@ -1,12 +1,16 @@
[tool.poetry]
name = "aiofiles"
-version = "22.1.0"
+version = "23.1.0"
description = "File support for asyncio."
authors = ["Tin Tvrtkovic <[email protected]>"]
license = "Apache-2.0"
readme = "README.rst"
repository = "https://github.com/Tinche/aiofiles"
+[tool.poetry.urls]
+"Changelog" = "hhttps://github.com/Tinche/aiofiles#history"
+"Bug Tracker" = "https://github.com/Tinche/aiofiles/issues"
+
[tool.poetry.dependencies]
python = "^3.7"
@@ -15,6 +19,9 @@
pytest-asyncio = "^0.19.0"
coverage = "^6.4.4"
tox = "^3.25.1"
+black = "^22.8.0"
+flake8 = "^5.0.4"
+
[build-system]
requires = ["poetry-core>=1.0.0"]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/src/aiofiles/__init__.py
new/aiofiles-23.1.0/src/aiofiles/__init__.py
--- old/aiofiles-22.1.0/src/aiofiles/__init__.py 2022-09-04
19:09:08.000000000 +0200
+++ new/aiofiles-23.1.0/src/aiofiles/__init__.py 2023-02-09
02:10:39.000000000 +0100
@@ -1,5 +1,22 @@
"""Utilities for asyncio-friendly file handling."""
-from .threadpool import open
+from .threadpool import (
+ open,
+ stdin,
+ stdout,
+ stderr,
+ stdin_bytes,
+ stdout_bytes,
+ stderr_bytes,
+)
from . import tempfile
-__all__ = ["open", "tempfile"]
+__all__ = [
+ "open",
+ "tempfile",
+ "stdin",
+ "stdout",
+ "stderr",
+ "stdin_bytes",
+ "stdout_bytes",
+ "stderr_bytes",
+]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/src/aiofiles/base.py
new/aiofiles-23.1.0/src/aiofiles/base.py
--- old/aiofiles-22.1.0/src/aiofiles/base.py 2022-09-04 19:09:08.000000000
+0200
+++ new/aiofiles-23.1.0/src/aiofiles/base.py 2023-02-09 02:10:39.000000000
+0100
@@ -1,13 +1,18 @@
"""Various base classes."""
from types import coroutine
from collections.abc import Coroutine
+from asyncio import get_running_loop
class AsyncBase:
def __init__(self, file, loop, executor):
self._file = file
- self._loop = loop
self._executor = executor
+ self._ref_loop = loop
+
+ @property
+ def _loop(self):
+ return self._ref_loop or get_running_loop()
def __aiter__(self):
"""We are our own iterator."""
@@ -25,6 +30,21 @@
raise StopAsyncIteration
+class AsyncIndirectBase(AsyncBase):
+ def __init__(self, name, loop, executor, indirect):
+ self._indirect = indirect
+ self._name = name
+ super().__init__(None, loop, executor)
+
+ @property
+ def _file(self):
+ return self._indirect()
+
+ @_file.setter
+ def _file(self, v):
+ pass # discard writes
+
+
class _ContextManager(Coroutine):
__slots__ = ("_coro", "_obj")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/src/aiofiles/os.py
new/aiofiles-23.1.0/src/aiofiles/os.py
--- old/aiofiles-22.1.0/src/aiofiles/os.py 2022-09-04 19:09:08.000000000
+0200
+++ new/aiofiles-23.1.0/src/aiofiles/os.py 2023-02-09 02:10:39.000000000
+0100
@@ -8,7 +8,7 @@
@wraps(func)
async def run(*args, loop=None, executor=None, **kwargs):
if loop is None:
- loop = asyncio.get_event_loop()
+ loop = asyncio.get_running_loop()
pfunc = partial(func, *args, **kwargs)
return await loop.run_in_executor(executor, pfunc)
@@ -33,6 +33,7 @@
readlink = wrap(os.readlink)
listdir = wrap(os.listdir)
scandir = wrap(os.scandir)
+access = wrap(os.access)
if hasattr(os, "sendfile"):
sendfile = wrap(os.sendfile)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/src/aiofiles/tempfile/__init__.py
new/aiofiles-23.1.0/src/aiofiles/tempfile/__init__.py
--- old/aiofiles-22.1.0/src/aiofiles/tempfile/__init__.py 2022-09-04
19:09:08.000000000 +0200
+++ new/aiofiles-23.1.0/src/aiofiles/tempfile/__init__.py 2023-02-09
02:10:39.000000000 +0100
@@ -141,7 +141,7 @@
):
"""Async method to open a temporary file with async interface"""
if loop is None:
- loop = asyncio.get_event_loop()
+ loop = asyncio.get_running_loop()
if named:
cb = partial(
@@ -195,7 +195,7 @@
):
"""Open a spooled temporary file with async interface"""
if loop is None:
- loop = asyncio.get_event_loop()
+ loop = asyncio.get_running_loop()
cb = partial(
syncSpooledTemporaryFile,
@@ -220,7 +220,7 @@
):
"""Async method to open a temporary directory with async interface"""
if loop is None:
- loop = asyncio.get_event_loop()
+ loop = asyncio.get_running_loop()
cb = partial(syncTemporaryDirectory, suffix, prefix, dir)
f = await loop.run_in_executor(executor, cb)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/src/aiofiles/tempfile/temptypes.py
new/aiofiles-23.1.0/src/aiofiles/tempfile/temptypes.py
--- old/aiofiles-22.1.0/src/aiofiles/tempfile/temptypes.py 2022-09-04
19:09:08.000000000 +0200
+++ new/aiofiles-23.1.0/src/aiofiles/tempfile/temptypes.py 2023-02-09
02:10:39.000000000 +0100
@@ -25,7 +25,7 @@
"tell",
"truncate",
)
-@proxy_property_directly("closed", "encoding", "mode", "name", "newlines",
"softspace")
+@proxy_property_directly("closed", "encoding", "mode", "name", "newlines")
class AsyncSpooledTemporaryFile(AsyncBase):
"""Async wrapper for SpooledTemporaryFile class"""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/src/aiofiles/threadpool/__init__.py
new/aiofiles-23.1.0/src/aiofiles/threadpool/__init__.py
--- old/aiofiles-22.1.0/src/aiofiles/threadpool/__init__.py 2022-09-04
19:09:08.000000000 +0200
+++ new/aiofiles-23.1.0/src/aiofiles/threadpool/__init__.py 2023-02-09
02:10:39.000000000 +0100
@@ -1,5 +1,6 @@
"""Handle files using a thread pool executor."""
import asyncio
+import sys
from types import coroutine
from io import (
@@ -8,16 +9,32 @@
BufferedReader,
BufferedWriter,
BufferedRandom,
+ BufferedIOBase,
)
from functools import partial, singledispatch
-from .binary import AsyncBufferedIOBase, AsyncBufferedReader, AsyncFileIO
-from .text import AsyncTextIOWrapper
+from .binary import (
+ AsyncBufferedIOBase,
+ AsyncBufferedReader,
+ AsyncFileIO,
+ AsyncIndirectBufferedIOBase,
+ AsyncIndirectBufferedReader,
+ AsyncIndirectFileIO,
+)
+from .text import AsyncTextIOWrapper, AsyncTextIndirectIOWrapper
from ..base import AiofilesContextManager
sync_open = open
-__all__ = ("open",)
+__all__ = (
+ "open",
+ "stdin",
+ "stdout",
+ "stderr",
+ "stdin_bytes",
+ "stdout_bytes",
+ "stderr_bytes",
+)
def open(
@@ -65,7 +82,7 @@
):
"""Open an asyncio file."""
if loop is None:
- loop = asyncio.get_event_loop()
+ loop = asyncio.get_running_loop()
cb = partial(
sync_open,
file,
@@ -93,6 +110,7 @@
@wrap.register(BufferedWriter)
[email protected](BufferedIOBase)
def _(file, *, loop=None, executor=None):
return AsyncBufferedIOBase(file, loop=loop, executor=executor)
@@ -105,4 +123,12 @@
@wrap.register(FileIO)
def _(file, *, loop=None, executor=None):
- return AsyncFileIO(file, loop, executor)
+ return AsyncFileIO(file, loop=loop, executor=executor)
+
+
+stdin = AsyncTextIndirectIOWrapper('sys.stdin', None, None, indirect=lambda:
sys.stdin)
+stdout = AsyncTextIndirectIOWrapper('sys.stdout', None, None, indirect=lambda:
sys.stdout)
+stderr = AsyncTextIndirectIOWrapper('sys.stderr', None, None, indirect=lambda:
sys.stderr)
+stdin_bytes = AsyncIndirectBufferedIOBase('sys.stdin.buffer', None, None,
indirect=lambda: sys.stdin.buffer)
+stdout_bytes = AsyncIndirectBufferedIOBase('sys.stdout.buffer', None, None,
indirect=lambda: sys.stdout.buffer)
+stderr_bytes = AsyncIndirectBufferedIOBase('sys.stderr.buffer', None, None,
indirect=lambda: sys.stderr.buffer)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/src/aiofiles/threadpool/binary.py
new/aiofiles-23.1.0/src/aiofiles/threadpool/binary.py
--- old/aiofiles-22.1.0/src/aiofiles/threadpool/binary.py 2022-09-04
19:09:08.000000000 +0200
+++ new/aiofiles-23.1.0/src/aiofiles/threadpool/binary.py 2023-02-09
02:10:39.000000000 +0100
@@ -1,4 +1,4 @@
-from ..base import AsyncBase
+from ..base import AsyncBase, AsyncIndirectBase
from .utils import (
delegate_to_executor,
proxy_method_directly,
@@ -26,7 +26,7 @@
@proxy_method_directly("detach", "fileno", "readable")
@proxy_property_directly("closed", "raw", "name", "mode")
class AsyncBufferedIOBase(AsyncBase):
- """The asyncio executor version of io.BufferedWriter."""
+ """The asyncio executor version of io.BufferedWriter and BufferedIOBase."""
@delegate_to_executor("peek")
@@ -55,3 +55,54 @@
@proxy_property_directly("closed", "name", "mode")
class AsyncFileIO(AsyncBase):
"""The asyncio executor version of io.FileIO."""
+
+
+@delegate_to_executor(
+ "close",
+ "flush",
+ "isatty",
+ "read",
+ "read1",
+ "readinto",
+ "readline",
+ "readlines",
+ "seek",
+ "seekable",
+ "tell",
+ "truncate",
+ "writable",
+ "write",
+ "writelines",
+)
+@proxy_method_directly("detach", "fileno", "readable")
+@proxy_property_directly("closed", "raw", "name", "mode")
+class AsyncIndirectBufferedIOBase(AsyncIndirectBase):
+ """The indirect asyncio executor version of io.BufferedWriter and
BufferedIOBase."""
+
+
+@delegate_to_executor("peek")
+class AsyncIndirectBufferedReader(AsyncIndirectBufferedIOBase):
+ """The indirect asyncio executor version of io.BufferedReader and
Random."""
+
+
+@delegate_to_executor(
+ "close",
+ "flush",
+ "isatty",
+ "read",
+ "readall",
+ "readinto",
+ "readline",
+ "readlines",
+ "seek",
+ "seekable",
+ "tell",
+ "truncate",
+ "writable",
+ "write",
+ "writelines",
+)
+@proxy_method_directly("fileno", "readable")
+@proxy_property_directly("closed", "name", "mode")
+class AsyncIndirectFileIO(AsyncIndirectBase):
+ """The indirect asyncio executor version of io.FileIO."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/src/aiofiles/threadpool/text.py
new/aiofiles-23.1.0/src/aiofiles/threadpool/text.py
--- old/aiofiles-22.1.0/src/aiofiles/threadpool/text.py 2022-09-04
19:09:08.000000000 +0200
+++ new/aiofiles-23.1.0/src/aiofiles/threadpool/text.py 2023-02-09
02:10:39.000000000 +0100
@@ -1,4 +1,4 @@
-from ..base import AsyncBase
+from ..base import AsyncBase, AsyncIndirectBase
from .utils import (
delegate_to_executor,
proxy_method_directly,
@@ -35,3 +35,34 @@
)
class AsyncTextIOWrapper(AsyncBase):
"""The asyncio executor version of io.TextIOWrapper."""
+
+
+@delegate_to_executor(
+ "close",
+ "flush",
+ "isatty",
+ "read",
+ "readable",
+ "readline",
+ "readlines",
+ "seek",
+ "seekable",
+ "tell",
+ "truncate",
+ "write",
+ "writable",
+ "writelines",
+)
+@proxy_method_directly("detach", "fileno", "readable")
+@proxy_property_directly(
+ "buffer",
+ "closed",
+ "encoding",
+ "errors",
+ "line_buffering",
+ "newlines",
+ "name",
+ "mode",
+)
+class AsyncTextIndirectIOWrapper(AsyncIndirectBase):
+ """The indirect asyncio executor version of io.TextIOWrapper."""
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/tests/test_os.py
new/aiofiles-23.1.0/tests/test_os.py
--- old/aiofiles-22.1.0/tests/test_os.py 2022-09-04 19:09:08.000000000
+0200
+++ new/aiofiles-23.1.0/tests/test_os.py 2023-02-09 02:10:39.000000000
+0100
@@ -1,8 +1,10 @@
"""Tests for asyncio's os module."""
import aiofiles.os
import asyncio
+import os
from os import stat
from os.path import join, dirname, exists, isdir
+from pathlib import Path
import pytest
import platform
@@ -73,9 +75,9 @@
assert exists(old_filename) is False and exists(new_filename)
await aiofiles.os.renames(new_filename, old_filename)
assert (
- exists(old_filename) and
- exists(new_filename) is False and
- exists(dirname(new_filename)) is False
+ exists(old_filename)
+ and exists(new_filename) is False
+ and exists(dirname(new_filename)) is False
)
@@ -321,6 +323,7 @@
await aiofiles.os.remove(some_file)
await aiofiles.os.rmdir(some_dir)
+
@pytest.mark.asyncio
async def test_listdir_dir_with_only_one_dir():
"""Test the listdir call when the dir has one dir."""
@@ -333,6 +336,7 @@
await aiofiles.os.rmdir(other_dir)
await aiofiles.os.rmdir(some_dir)
+
@pytest.mark.asyncio
async def test_listdir_dir_with_multiple_files():
"""Test the listdir call when the dir has multiple files."""
@@ -351,6 +355,7 @@
await aiofiles.os.remove(other_file)
await aiofiles.os.rmdir(some_dir)
+
@pytest.mark.asyncio
async def test_listdir_dir_with_a_file_and_a_dir():
"""Test the listdir call when the dir has files and other dirs."""
@@ -404,6 +409,7 @@
await aiofiles.os.remove(some_file)
await aiofiles.os.rmdir(some_dir)
+
@pytest.mark.asyncio
async def test_scandir_dir_with_only_one_dir():
"""Test the scandir call when the dir has one dir."""
@@ -424,3 +430,57 @@
some_dir = join(dirname(__file__), "resources", "some_dir")
with pytest.raises(FileNotFoundError) as excinfo:
await aiofiles.os.scandir(some_dir)
+
+
[email protected]
+async def test_access():
+ temp_file = Path(__file__).parent.joinpath("resources",
"os_access_temp.txt")
+ temp_dir = Path(__file__).parent.joinpath("resources", "os_access_temp")
+
+ # prepare
+ if temp_file.exists():
+ os.remove(temp_file)
+ assert not temp_file.exists()
+ temp_file.touch()
+
+ if temp_dir.exists():
+ os.rmdir(temp_dir)
+ assert not temp_dir.exists()
+ os.mkdir(temp_dir)
+
+ data = [
+ # full access
+ [0o777, os.F_OK, True],
+ [0o777, os.R_OK, True],
+ [0o777, os.W_OK, True],
+ [0o777, os.X_OK, True],
+ # chmod -x
+ [0o666, os.F_OK, True],
+ [0o666, os.R_OK, True],
+ [0o666, os.W_OK, True],
+ [0o666, os.X_OK, False],
+ # chmod -w
+ [0o444, os.F_OK, True],
+ [0o444, os.R_OK, True],
+ [0o444, os.W_OK, False],
+ [0o444, os.X_OK, False],
+ # chmod -r
+ [0o000, os.F_OK, True],
+ [0o000, os.R_OK, False],
+ [0o000, os.W_OK, False],
+ [0o000, os.X_OK, False],
+ ]
+ for ch, mode, access in data:
+ print("mode:{}, access:{}".format(mode, access))
+ temp_file.chmod(ch)
+ temp_dir.chmod(ch)
+ assert await aiofiles.os.access(temp_file, mode) == access
+ assert await aiofiles.os.access(temp_dir, mode) == access
+
+ # not exists
+ os.remove(temp_file)
+ os.rmdir(temp_dir)
+ for mode in [os.F_OK, os.R_OK, os.W_OK, os.X_OK]:
+ print("mode:{}".format(mode))
+ assert not await aiofiles.os.access(temp_file, mode)
+ assert not await aiofiles.os.access(temp_dir, mode)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/tests/test_stdio.py
new/aiofiles-23.1.0/tests/test_stdio.py
--- old/aiofiles-22.1.0/tests/test_stdio.py 1970-01-01 01:00:00.000000000
+0100
+++ new/aiofiles-23.1.0/tests/test_stdio.py 2023-02-09 02:10:39.000000000
+0100
@@ -0,0 +1,25 @@
+import sys
+import pytest
+from aiofiles import stdin, stdout, stderr, stdin_bytes, stdout_bytes,
stderr_bytes
+
+
[email protected]
+async def test_stdio(capsys):
+ await stdout.write("hello")
+ await stderr.write("world")
+ out, err = capsys.readouterr()
+ assert out == "hello"
+ assert err == "world"
+ with pytest.raises(OSError):
+ await stdin.read()
+
+
[email protected]
+async def test_stdio_bytes(capsysbinary):
+ await stdout_bytes.write(b"hello")
+ await stderr_bytes.write(b"world")
+ out, err = capsysbinary.readouterr()
+ assert out == b"hello"
+ assert err == b"world"
+ with pytest.raises(OSError):
+ await stdin_bytes.read()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/tests/test_tempfile.py
new/aiofiles-23.1.0/tests/test_tempfile.py
--- old/aiofiles-22.1.0/tests/test_tempfile.py 2022-09-04 19:09:08.000000000
+0200
+++ new/aiofiles-23.1.0/tests/test_tempfile.py 2023-02-09 02:10:39.000000000
+0100
@@ -69,9 +69,9 @@
@pytest.mark.skipif(
sys.version_info < (3, 7),
reason=(
- "text-mode SpooledTemporaryFile is implemented with StringIO in py3.6"
- "it doesn't support `newlines`"
- )
+ "text-mode SpooledTemporaryFile is implemented with StringIO in py3.6"
+ "it doesn't support `newlines`"
+ ),
)
@pytest.mark.parametrize(
"test_string, newlines", [("LF\n", "\n"), ("CRLF\r\n", "\r\n")]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/aiofiles-22.1.0/tox.ini new/aiofiles-23.1.0/tox.ini
--- old/aiofiles-22.1.0/tox.ini 2022-09-04 19:09:08.000000000 +0200
+++ new/aiofiles-23.1.0/tox.ini 2023-02-09 02:10:39.000000000 +0100
@@ -23,7 +23,7 @@
black --check --verbose src tests
[testenv]
-whitelist_externals = poetry
+allowlist_externals = poetry
commands =
poetry install -v --no-root
coverage run --source aiofiles -m pytest tests