diff --git a/.github/workflows/pythonapp.yml b/.github/workflows/pythonapp.yml index 40de8d3..5d5ddf4 100644 --- a/.github/workflows/pythonapp.yml +++ b/.github/workflows/pythonapp.yml @@ -8,12 +8,12 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: [3.6, 3.7, 3.8] + python-version: [3.6, 3.7, 3.8, 3.9] steps: - uses: actions/checkout@v2 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v1 + uses: actions/setup-python@v2 with: python-version: ${{ matrix.python-version }} - name: Install dependencies diff --git a/CHANGES.rst b/CHANGES.rst index 90be1e6..bd24872 100644 --- a/CHANGES.rst +++ b/CHANGES.rst @@ -1,6 +1,11 @@ Changelog --------- +1.0.8 +~~~~~ + +* Use httpx.RequestError as base exception for ClientConnectionError. + 1.0.7 ~~~~~ diff --git a/pyproject.toml b/pyproject.toml index 4438a5f..c2691b0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,3 +1,3 @@ [tool.black] line-length = 110 -target-version = ['py37'] +target-version = ['py38'] diff --git a/requirements.txt b/requirements.txt index 77af6ab..0206fd9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,3 @@ -httpx>=0.13.3 +httpx>=0.16.1 python-slugify>=4.0.0 python-status>=1.0.1 diff --git a/setup.py b/setup.py index 98ae337..44f2223 100644 --- a/setup.py +++ b/setup.py @@ -25,7 +25,7 @@ changelog = f.read() -install_requirements = ["python-status>=1.0.1", "httpx>=0.13.3", "python-slugify>=4.0.0"] +install_requirements = ["python-status>=1.0.1", "httpx>=0.16.1", "python-slugify>=4.0.0"] tests_requirements = ["pytest", "pytest-asyncio", "pytest-cov", "pytest-httpserver", "coveralls"] diff --git a/simple_rest_client/decorators.py b/simple_rest_client/decorators.py index f2122a5..98e735c 100644 --- a/simple_rest_client/decorators.py +++ b/simple_rest_client/decorators.py @@ -7,13 +7,7 @@ from .exceptions import AuthError, ClientConnectionError, ClientError, NotFoundError, ServerError logger = logging.getLogger(__name__) -client_connection_exceptions = ( - httpx.ConnectTimeout, - httpx.ReadTimeout, - httpx.WriteTimeout, - httpx.PoolTimeout, - httpx.NetworkError, -) +client_connection_exceptions = (httpx.RequestError,) def validate_response(response): diff --git a/tests/test_decorators.py b/tests/test_decorators.py index 6d510cd..4c6755e 100644 --- a/tests/test_decorators.py +++ b/tests/test_decorators.py @@ -54,19 +54,35 @@ def test_validate_response_client_error(status_code, response_kwargs): @pytest.mark.parametrize( "side_effect", - (httpx.ConnectTimeout, httpx.ReadTimeout, httpx.WriteTimeout, httpx.PoolTimeout, httpx.NetworkError), + ( + httpx.RequestError, + httpx.ConnectTimeout, + httpx.ReadTimeout, + httpx.WriteTimeout, + httpx.PoolTimeout, + httpx.NetworkError, + httpx.ProxyError, + ), ) def test_handle_request_error_exceptions(side_effect): - wrapped = mock.Mock(side_effect=side_effect) + wrapped = mock.Mock(side_effect=side_effect(message="message", request="Request")) with pytest.raises(ClientConnectionError): handle_request_error(wrapped)() @pytest.mark.parametrize( "side_effect", - (httpx.ConnectTimeout, httpx.ReadTimeout, httpx.WriteTimeout, httpx.PoolTimeout, httpx.NetworkError), + ( + httpx.RequestError, + httpx.ConnectTimeout, + httpx.ReadTimeout, + httpx.WriteTimeout, + httpx.PoolTimeout, + httpx.NetworkError, + httpx.ProxyError, + ), ) def test_handle_async_request_error_exceptions(event_loop, side_effect): - wrapped = CoroutineMock(side_effect=side_effect) + wrapped = CoroutineMock(side_effect=side_effect(message="message", request="Request")) with pytest.raises(ClientConnectionError): event_loop.run_until_complete(handle_async_request_error(wrapped)())