[0KRunning with gitlab-runner 17.7.0 (3153ccc6)[0;m [0K on Heavy runner on DO CsXVDUbD, system ID: s_a30377c9ccd3[0;m section_start:1735811515:prepare_executor [0K[0K[36;1mPreparing the "docker+machine" executor[0;m[0;m [0KUsing Docker executor with image python:3.11 ...[0;m [0KPulling docker image python:3.11 ...[0;m [0KUsing docker image sha256:e729f76087ee0eac048a797fb9a1789920373e6c614fc9f6cb3cc4c3d046006f for python:3.11 with digest python@sha256:b337e1fd27dbacda505219f713789bf82766694095876769ea10c2d34b4f470b ...[0;m section_end:1735811655:prepare_executor [0Ksection_start:1735811655:prepare_script [0K[0K[36;1mPreparing environment[0;m[0;m Running on runner-csxvdubd-project-6813-concurrent-0 via runner-csxvdubd-apertis-heavy-1735811515-e81b5cb0... section_end:1735811657:prepare_script [0Ksection_start:1735811657:get_sources [0K[0K[36;1mGetting source from Git repository[0;m[0;m [32;1mFetching changes with git depth set to 50...[0;m Initialized empty Git repository in /builds/infrastructure/obs-proxy/.git/ [32;1mCreated fresh repository.[0;m [32;1mChecking out 12369f55 as detached HEAD (ref is py-3.12-13-test)...[0;m [32;1mSkipping Git submodules setup[0;m section_end:1735811658:get_sources [0Ksection_start:1735811658:step_script [0K[0K[36;1mExecuting "step_script" stage of the job script[0;m[0;m [0KUsing docker image sha256:e729f76087ee0eac048a797fb9a1789920373e6c614fc9f6cb3cc4c3d046006f for python:3.11 with digest python@sha256:b337e1fd27dbacda505219f713789bf82766694095876769ea10c2d34b4f470b ...[0;m [32;1m$ pip install .[test][0;m Processing /builds/infrastructure/obs-proxy Preparing metadata (setup.py): started Preparing metadata (setup.py): finished with status 'done' Collecting bidict~=0.18 (from obs-proxy==0) Downloading bidict-0.23.1-py3-none-any.whl.metadata (8.7 kB) Collecting httpx~=0.22 (from obs-proxy==0) Downloading httpx-0.28.1-py3-none-any.whl.metadata (7.1 kB) Collecting json-rpc~=1.12 (from obs-proxy==0) Downloading json_rpc-1.15.0-py2.py3-none-any.whl.metadata (7.2 kB) Collecting Quart~=0.18 (from obs-proxy==0) Downloading quart-0.20.0-py3-none-any.whl.metadata (4.1 kB) Collecting Werkzeug~=2.3 (from obs-proxy==0) Downloading werkzeug-2.3.8-py3-none-any.whl.metadata (4.1 kB) Collecting websockets~=10.0 (from obs-proxy==0) Downloading websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (6.4 kB) Collecting xmltodict~=0.13 (from obs-proxy==0) Downloading xmltodict-0.14.2-py2.py3-none-any.whl.metadata (8.0 kB) Collecting aiofiles~=0.8 (from obs-proxy==0) Downloading aiofiles-0.8.0-py3-none-any.whl.metadata (7.0 kB) Collecting jinja2~=3.0.0 (from obs-proxy==0) Downloading Jinja2-3.0.3-py3-none-any.whl.metadata (3.5 kB) Collecting structlog~=22.3 (from obs-proxy==0) Downloading structlog-22.3.0-py3-none-any.whl.metadata (8.4 kB) Collecting rich (from obs-proxy==0) Downloading rich-13.9.4-py3-none-any.whl.metadata (18 kB) Collecting pytest>=6 (from obs-proxy==0) Downloading pytest-8.3.4-py3-none-any.whl.metadata (7.5 kB) Collecting pytest-asyncio>=0.17 (from obs-proxy==0) Downloading pytest_asyncio-0.25.1-py3-none-any.whl.metadata (3.9 kB) Collecting pytest-httpx>=0.20 (from obs-proxy==0) Downloading pytest_httpx-0.35.0-py3-none-any.whl.metadata (35 kB) Collecting anyio (from httpx~=0.22->obs-proxy==0) Downloading anyio-4.7.0-py3-none-any.whl.metadata (4.7 kB) Collecting certifi (from httpx~=0.22->obs-proxy==0) Downloading certifi-2024.12.14-py3-none-any.whl.metadata (2.3 kB) Collecting httpcore==1.* (from httpx~=0.22->obs-proxy==0) Downloading httpcore-1.0.7-py3-none-any.whl.metadata (21 kB) Collecting idna (from httpx~=0.22->obs-proxy==0) Downloading idna-3.10-py3-none-any.whl.metadata (10 kB) Collecting h11<0.15,>=0.13 (from httpcore==1.*->httpx~=0.22->obs-proxy==0) Downloading h11-0.14.0-py3-none-any.whl.metadata (8.2 kB) Collecting MarkupSafe>=2.0 (from jinja2~=3.0.0->obs-proxy==0) Downloading MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.0 kB) Collecting iniconfig (from pytest>=6->obs-proxy==0) Downloading iniconfig-2.0.0-py3-none-any.whl.metadata (2.6 kB) Collecting packaging (from pytest>=6->obs-proxy==0) Downloading packaging-24.2-py3-none-any.whl.metadata (3.2 kB) Collecting pluggy<2,>=1.5 (from pytest>=6->obs-proxy==0) Downloading pluggy-1.5.0-py3-none-any.whl.metadata (4.8 kB) Collecting blinker>=1.6 (from Quart~=0.18->obs-proxy==0) Downloading blinker-1.9.0-py3-none-any.whl.metadata (1.6 kB) Collecting click>=8.0 (from Quart~=0.18->obs-proxy==0) Downloading click-8.1.8-py3-none-any.whl.metadata (2.3 kB) Collecting flask>=3.0 (from Quart~=0.18->obs-proxy==0) Downloading flask-3.1.0-py3-none-any.whl.metadata (2.7 kB) Collecting hypercorn>=0.11.2 (from Quart~=0.18->obs-proxy==0) Downloading hypercorn-0.17.3-py3-none-any.whl.metadata (5.4 kB) Collecting itsdangerous (from Quart~=0.18->obs-proxy==0) Downloading itsdangerous-2.2.0-py3-none-any.whl.metadata (1.9 kB) INFO: pip is looking at multiple versions of quart to determine which version is compatible with other requirements. This could take a while. Collecting Quart~=0.18 (from obs-proxy==0) Downloading quart-0.19.9-py3-none-any.whl.metadata (5.7 kB) Downloading quart-0.19.8-py3-none-any.whl.metadata (5.7 kB) Downloading quart-0.19.7-py3-none-any.whl.metadata (5.7 kB) Downloading quart-0.19.6-py3-none-any.whl.metadata (5.7 kB) Downloading quart-0.19.5-py3-none-any.whl.metadata (5.7 kB) Downloading quart-0.19.4-py3-none-any.whl.metadata (5.7 kB) Downloading quart-0.19.3-py3-none-any.whl.metadata (5.6 kB) INFO: pip is still looking at multiple versions of quart to determine which version is compatible with other requirements. This could take a while. Downloading quart-0.19.2-py3-none-any.whl.metadata (5.6 kB) Downloading quart-0.19.1-py3-none-any.whl.metadata (5.6 kB) Downloading quart-0.19.0-py3-none-any.whl.metadata (5.6 kB) Downloading quart-0.18.4-py3-none-any.whl.metadata (5.9 kB) Collecting blinker<1.6 (from Quart~=0.18->obs-proxy==0) Downloading blinker-1.5-py2.py3-none-any.whl.metadata (1.8 kB) Collecting markdown-it-py>=2.2.0 (from rich->obs-proxy==0) Downloading markdown_it_py-3.0.0-py3-none-any.whl.metadata (6.9 kB) Collecting pygments<3.0.0,>=2.13.0 (from rich->obs-proxy==0) Downloading pygments-2.18.0-py3-none-any.whl.metadata (2.5 kB) Collecting h2>=3.1.0 (from hypercorn>=0.11.2->Quart~=0.18->obs-proxy==0) Downloading h2-4.1.0-py3-none-any.whl.metadata (3.6 kB) Collecting priority (from hypercorn>=0.11.2->Quart~=0.18->obs-proxy==0) Downloading priority-2.0.0-py3-none-any.whl.metadata (6.6 kB) Collecting wsproto>=0.14.0 (from hypercorn>=0.11.2->Quart~=0.18->obs-proxy==0) Downloading wsproto-1.2.0-py3-none-any.whl.metadata (5.6 kB) Collecting mdurl~=0.1 (from markdown-it-py>=2.2.0->rich->obs-proxy==0) Downloading mdurl-0.1.2-py3-none-any.whl.metadata (1.6 kB) Collecting sniffio>=1.1 (from anyio->httpx~=0.22->obs-proxy==0) Downloading sniffio-1.3.1-py3-none-any.whl.metadata (3.9 kB) Collecting typing_extensions>=4.5 (from anyio->httpx~=0.22->obs-proxy==0) Downloading typing_extensions-4.12.2-py3-none-any.whl.metadata (3.0 kB) Collecting hyperframe<7,>=6.0 (from h2>=3.1.0->hypercorn>=0.11.2->Quart~=0.18->obs-proxy==0) Downloading hyperframe-6.0.1-py3-none-any.whl.metadata (2.7 kB) Collecting hpack<5,>=4.0 (from h2>=3.1.0->hypercorn>=0.11.2->Quart~=0.18->obs-proxy==0) Downloading hpack-4.0.0-py3-none-any.whl.metadata (2.5 kB) Downloading aiofiles-0.8.0-py3-none-any.whl (13 kB) Downloading bidict-0.23.1-py3-none-any.whl (32 kB) Downloading httpx-0.28.1-py3-none-any.whl (73 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 73.5/73.5 kB 8.7 MB/s eta 0:00:00 Downloading httpcore-1.0.7-py3-none-any.whl (78 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 78.6/78.6 kB 8.9 MB/s eta 0:00:00 Downloading Jinja2-3.0.3-py3-none-any.whl (133 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 133.6/133.6 kB 14.5 MB/s eta 0:00:00 Downloading json_rpc-1.15.0-py2.py3-none-any.whl (39 kB) Downloading pytest-8.3.4-py3-none-any.whl (343 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 343.1/343.1 kB 29.3 MB/s eta 0:00:00 Downloading pytest_asyncio-0.25.1-py3-none-any.whl (19 kB) Downloading pytest_httpx-0.35.0-py3-none-any.whl (19 kB) Downloading quart-0.18.4-py3-none-any.whl (100 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100.2/100.2 kB 11.0 MB/s eta 0:00:00 Downloading structlog-22.3.0-py3-none-any.whl (61 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.7/61.7 kB 6.3 MB/s eta 0:00:00 Downloading websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl (107 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 107.4/107.4 kB 9.8 MB/s eta 0:00:00 Downloading werkzeug-2.3.8-py3-none-any.whl (242 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 242.3/242.3 kB 26.2 MB/s eta 0:00:00 Downloading xmltodict-0.14.2-py2.py3-none-any.whl (10.0 kB) Downloading rich-13.9.4-py3-none-any.whl (242 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 242.4/242.4 kB 23.6 MB/s eta 0:00:00 Downloading blinker-1.5-py2.py3-none-any.whl (12 kB) Downloading click-8.1.8-py3-none-any.whl (98 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 98.2/98.2 kB 9.5 MB/s eta 0:00:00 Downloading hypercorn-0.17.3-py3-none-any.whl (61 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.7/61.7 kB 7.1 MB/s eta 0:00:00 Downloading markdown_it_py-3.0.0-py3-none-any.whl (87 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 87.5/87.5 kB 11.9 MB/s eta 0:00:00 Downloading MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (23 kB) Downloading pluggy-1.5.0-py3-none-any.whl (20 kB) Downloading pygments-2.18.0-py3-none-any.whl (1.2 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 70.9 MB/s eta 0:00:00 Downloading anyio-4.7.0-py3-none-any.whl (93 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 93.1/93.1 kB 11.2 MB/s eta 0:00:00 Downloading idna-3.10-py3-none-any.whl (70 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 70.4/70.4 kB 8.9 MB/s eta 0:00:00 Downloading certifi-2024.12.14-py3-none-any.whl (164 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 164.9/164.9 kB 21.4 MB/s eta 0:00:00 Downloading iniconfig-2.0.0-py3-none-any.whl (5.9 kB) Downloading itsdangerous-2.2.0-py3-none-any.whl (16 kB) Downloading packaging-24.2-py3-none-any.whl (65 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 65.5/65.5 kB 8.1 MB/s eta 0:00:00 Downloading h11-0.14.0-py3-none-any.whl (58 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 58.3/58.3 kB 6.8 MB/s eta 0:00:00 Downloading h2-4.1.0-py3-none-any.whl (57 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 57.5/57.5 kB 5.8 MB/s eta 0:00:00 Downloading mdurl-0.1.2-py3-none-any.whl (10.0 kB) Downloading sniffio-1.3.1-py3-none-any.whl (10 kB) Downloading typing_extensions-4.12.2-py3-none-any.whl (37 kB) Downloading wsproto-1.2.0-py3-none-any.whl (24 kB) Downloading priority-2.0.0-py3-none-any.whl (8.9 kB) Downloading hpack-4.0.0-py3-none-any.whl (32 kB) Downloading hyperframe-6.0.1-py3-none-any.whl (12 kB) Building wheels for collected packages: obs-proxy Building wheel for obs-proxy (setup.py): started Building wheel for obs-proxy (setup.py): finished with status 'done' Created wheel for obs-proxy: filename=obs_proxy-0-py3-none-any.whl size=37783 sha256=a0cb87fd694ed16cb619e0914147e819c8c98d33c5b44373a272aa2321a94ed1 Stored in directory: /root/.cache/pip/wheels/1d/82/61/3a9e1003108301faa4e691a3ab5412452257429146cca0c47e Successfully built obs-proxy Installing collected packages: json-rpc, xmltodict, websockets, typing_extensions, structlog, sniffio, pygments, priority, pluggy, packaging, mdurl, MarkupSafe, itsdangerous, iniconfig, idna, hyperframe, hpack, h11, click, certifi, blinker, bidict, aiofiles, wsproto, Werkzeug, pytest, markdown-it-py, jinja2, httpcore, h2, anyio, rich, pytest-asyncio, hypercorn, httpx, Quart, pytest-httpx, obs-proxy Successfully installed MarkupSafe-3.0.2 Quart-0.18.4 Werkzeug-2.3.8 aiofiles-0.8.0 anyio-4.7.0 bidict-0.23.1 blinker-1.5 certifi-2024.12.14 click-8.1.8 h11-0.14.0 h2-4.1.0 hpack-4.0.0 httpcore-1.0.7 httpx-0.28.1 hypercorn-0.17.3 hyperframe-6.0.1 idna-3.10 iniconfig-2.0.0 itsdangerous-2.2.0 jinja2-3.0.3 json-rpc-1.15.0 markdown-it-py-3.0.0 mdurl-0.1.2 obs-proxy-0 packaging-24.2 pluggy-1.5.0 priority-2.0.0 pygments-2.18.0 pytest-8.3.4 pytest-asyncio-0.25.1 pytest-httpx-0.35.0 rich-13.9.4 sniffio-1.3.1 structlog-22.3.0 typing_extensions-4.12.2 websockets-10.4 wsproto-1.2.0 xmltodict-0.14.2 WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv [notice] A new release of pip is available: 24.0 -> 24.3.1 [notice] To update, run: pip install --upgrade pip [32;1m$ python setup.py build sdist bdist[0;m /usr/local/lib/python3.11/site-packages/setuptools/config/setupcfg.py:508: SetuptoolsDeprecationWarning: The license_file parameter is deprecated, use license_files instead. warnings.warn(msg, warning_class) running build running build_py running sdist running egg_info writing obs_proxy.egg-info/PKG-INFO writing dependency_links to obs_proxy.egg-info/dependency_links.txt writing entry points to obs_proxy.egg-info/entry_points.txt writing requirements to obs_proxy.egg-info/requires.txt writing top-level names to obs_proxy.egg-info/top_level.txt reading manifest file 'obs_proxy.egg-info/SOURCES.txt' adding license file 'COPYING.MPL' writing manifest file 'obs_proxy.egg-info/SOURCES.txt' running check creating obs-proxy-0 creating obs-proxy-0/obs_proxy creating obs-proxy-0/obs_proxy.egg-info creating obs-proxy-0/obs_proxy/chunked_uploads copying files to obs-proxy-0... copying COPYING.MPL -> obs-proxy-0 copying README.md -> obs-proxy-0 copying proxy.conf -> obs-proxy-0 copying setup.cfg -> obs-proxy-0 copying setup.py -> obs-proxy-0 copying obs_proxy/__init__.py -> obs-proxy-0/obs_proxy copying obs_proxy/async_jsonrpc.py -> obs-proxy-0/obs_proxy copying obs_proxy/client.py -> obs-proxy-0/obs_proxy copying obs_proxy/config.py -> obs-proxy-0/obs_proxy copying obs_proxy/repserver.py -> obs-proxy-0/obs_proxy copying obs_proxy/rpcqueue.py -> obs-proxy-0/obs_proxy copying obs_proxy/server.py -> obs-proxy-0/obs_proxy copying obs_proxy/utils.py -> obs-proxy-0/obs_proxy copying obs_proxy/worker.py -> obs-proxy-0/obs_proxy copying obs_proxy/wsclient.py -> obs-proxy-0/obs_proxy copying obs_proxy.egg-info/PKG-INFO -> obs-proxy-0/obs_proxy.egg-info copying obs_proxy.egg-info/SOURCES.txt -> obs-proxy-0/obs_proxy.egg-info copying obs_proxy.egg-info/dependency_links.txt -> obs-proxy-0/obs_proxy.egg-info copying obs_proxy.egg-info/entry_points.txt -> obs-proxy-0/obs_proxy.egg-info copying obs_proxy.egg-info/requires.txt -> obs-proxy-0/obs_proxy.egg-info copying obs_proxy.egg-info/top_level.txt -> obs-proxy-0/obs_proxy.egg-info copying obs_proxy/chunked_uploads/__init__.py -> obs-proxy-0/obs_proxy/chunked_uploads copying obs_proxy/chunked_uploads/client.py -> obs-proxy-0/obs_proxy/chunked_uploads copying obs_proxy/chunked_uploads/routes.py -> obs-proxy-0/obs_proxy/chunked_uploads copying obs_proxy/chunked_uploads/utils.py -> obs-proxy-0/obs_proxy/chunked_uploads Writing obs-proxy-0/setup.cfg creating dist Creating tar archive removing 'obs-proxy-0' (and everything under it) running bdist running bdist_dumb /usr/local/lib/python3.11/site-packages/setuptools/command/install.py:34: SetuptoolsDeprecationWarning: setup.py install is deprecated. Use build and pip and other standards-based tools. warnings.warn( installing to build/bdist.linux-x86_64/dumb running install running install_lib creating build/bdist.linux-x86_64/dumb creating build/bdist.linux-x86_64/dumb/usr creating build/bdist.linux-x86_64/dumb/usr/local creating build/bdist.linux-x86_64/dumb/usr/local/lib creating build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11 creating build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages creating build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy copying build/lib/obs_proxy/server.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy creating build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/chunked_uploads copying build/lib/obs_proxy/chunked_uploads/client.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/chunked_uploads copying build/lib/obs_proxy/chunked_uploads/utils.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/chunked_uploads copying build/lib/obs_proxy/chunked_uploads/__init__.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/chunked_uploads copying build/lib/obs_proxy/chunked_uploads/routes.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/chunked_uploads copying build/lib/obs_proxy/worker.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy copying build/lib/obs_proxy/rpcqueue.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy copying build/lib/obs_proxy/repserver.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy copying build/lib/obs_proxy/wsclient.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy copying build/lib/obs_proxy/config.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy copying build/lib/obs_proxy/async_jsonrpc.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy copying build/lib/obs_proxy/client.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy copying build/lib/obs_proxy/utils.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy copying build/lib/obs_proxy/__init__.py -> build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/server.py to server.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/chunked_uploads/client.py to client.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/chunked_uploads/utils.py to utils.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/chunked_uploads/__init__.py to __init__.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/chunked_uploads/routes.py to routes.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/worker.py to worker.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/rpcqueue.py to rpcqueue.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/repserver.py to repserver.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/wsclient.py to wsclient.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/config.py to config.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/async_jsonrpc.py to async_jsonrpc.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/client.py to client.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/utils.py to utils.cpython-311.pyc byte-compiling build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy/__init__.py to __init__.cpython-311.pyc running install_data creating build/bdist.linux-x86_64/dumb/usr/local/share creating build/bdist.linux-x86_64/dumb/usr/local/share/doc creating build/bdist.linux-x86_64/dumb/usr/local/share/doc/obs-proxy creating build/bdist.linux-x86_64/dumb/usr/local/share/doc/obs-proxy/examples copying proxy.conf -> build/bdist.linux-x86_64/dumb/usr/local/share/doc/obs-proxy/examples running install_egg_info Copying obs_proxy.egg-info to build/bdist.linux-x86_64/dumb/usr/local/lib/python3.11/site-packages/obs_proxy-0-py3.11.egg-info running install_scripts Installing obs-proxy-client script to build/bdist.linux-x86_64/dumb/usr/local/bin Installing obs-proxy-server script to build/bdist.linux-x86_64/dumb/usr/local/bin Creating tar archive removing 'build/bdist.linux-x86_64/dumb' (and everything under it) [32;1m$ pytest --junit-xml=test-results.xml -v[0;m /usr/local/lib/python3.11/site-packages/pytest_asyncio/plugin.py:207: PytestDeprecationWarning: The configuration option "asyncio_default_fixture_loop_scope" is unset. The event loop scope for asynchronous fixtures will default to the fixture caching scope. Future versions of pytest-asyncio will default the loop scope for asynchronous fixtures to function scope. Set the default fixture loop scope explicitly in order to avoid unexpected behavior in the future. Valid fixture loop scopes are: "function", "class", "module", "package", "session" warnings.warn(PytestDeprecationWarning(_DEFAULT_FIXTURE_LOOP_SCOPE_UNSET)) ============================= test session starts ============================== platform linux -- Python 3.11.11, pytest-8.3.4, pluggy-1.5.0 -- /usr/local/bin/python3.11 cachedir: .pytest_cache rootdir: /builds/infrastructure/obs-proxy configfile: setup.cfg plugins: httpx-0.35.0, asyncio-0.25.1, anyio-4.7.0 asyncio: mode=Mode.AUTO, asyncio_default_fixture_loop_scope=None collecting ... collected 30 items obs_proxy/server.py::obs_proxy.server.proxied_uri PASSED [ 3%] obs_proxy/utils.py::obs_proxy.utils.shorten PASSED [ 6%] obs_proxy/worker.py::obs_proxy.worker.Worker.fromxml PASSED [ 10%] tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_timeout FAILED [ 13%] tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_timeout ERROR [ 13%] tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_wrong_response FAILED [ 16%] tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_wrong_response ERROR [ 16%] tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_transient_server_error FAILED [ 20%] tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_transient_server_error ERROR [ 20%] tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_complete FAILED [ 23%] tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_complete ERROR [ 23%] tests/chunked_uploads/test_upload_client_server.py::test_client_uploading_to_server PASSED [ 26%] tests/chunked_uploads/test_upload_endpoint.py::test_smoke PASSED [ 30%] tests/chunked_uploads/test_upload_endpoint.py::test_invalid_jobid PASSED [ 33%] tests/chunked_uploads/test_upload_endpoint.py::test_missing_content_length PASSED [ 36%] tests/chunked_uploads/test_upload_endpoint.py::test_patch_range_parser[bytes 123-233/999-400-length must match] PASSED [ 40%] tests/chunked_uploads/test_upload_endpoint.py::test_patch_range_parser[furlongs 123-233/999-400-Unsupported unit] PASSED [ 43%] tests/chunked_uploads/test_upload_endpoint.py::test_patch_range_parser[*/0-400-A range is required] PASSED [ 46%] tests/chunked_uploads/test_upload_endpoint.py::test_patch_sequential_upload PASSED [ 50%] tests/chunked_uploads/test_upload_endpoint.py::test_patch_incomplete_upload PASSED [ 53%] tests/test_auth.py::test_userpass PASSED [ 56%] tests/test_auth.py::test_token PASSED [ 60%] tests/test_config.py::test_config_parser PASSED [ 63%] tests/test_config.py::test_config_parser_dict PASSED [ 66%] tests/test_config.py::test_mini_config PASSED [ 70%] tests/test_config.py::test_mini_config_update PASSED [ 73%] tests/test_rpcqueue.py::test_rpcqueue PASSED [ 76%] tests/upload/test_upload.py::test_upload_data_no_error PASSED [ 80%] tests/upload/test_upload.py::test_upload_data_req_error PASSED [ 83%] tests/upload/test_upload.py::test_upload_data_no_error_streaming PASSED [ 86%] tests/upload/test_upload_five_gigazeroes.py::test_getbinaries PASSED [ 90%] tests/upload/test_upload_five_gigazeroes.py::test_five_gigazero_upload PASSED [ 93%] tests/upload/test_upload_prefix.py::test_getbinaries PASSED [ 96%] tests/upload/test_upload_prefix.py::test_five_kilozero_upload PASSED [100%] ==================================== ERRORS ==================================== _______________ ERROR at teardown of test_upload_chunked_timeout _______________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f51bc38eb10> request = <SubRequest 'httpx_mock' for <Coroutine test_upload_chunked_timeout>> @pytest.fixture def httpx_mock( monkeypatch: MonkeyPatch, request: FixtureRequest, ) -> Generator[HTTPXMock, None, None]: options = {} for marker in request.node.iter_markers("httpx_mock"): options = marker.kwargs | options __tracebackhide__ = methodcaller("errisinstance", TypeError) options = _HTTPXMockOptions(**options) mock = HTTPXMock(options) # Mock synchronous requests real_handle_request = httpx.HTTPTransport.handle_request def mocked_handle_request( transport: httpx.HTTPTransport, request: httpx.Request ) -> httpx.Response: if options.should_mock(request): return mock._handle_request(transport, request) return real_handle_request(transport, request) monkeypatch.setattr( httpx.HTTPTransport, "handle_request", mocked_handle_request, ) # Mock asynchronous requests real_handle_async_request = httpx.AsyncHTTPTransport.handle_async_request async def mocked_handle_async_request( transport: httpx.AsyncHTTPTransport, request: httpx.Request ) -> httpx.Response: if options.should_mock(request): return await mock._handle_async_request(transport, request) return await real_handle_async_request(transport, request) monkeypatch.setattr( httpx.AsyncHTTPTransport, "handle_async_request", mocked_handle_async_request, ) yield mock try: > mock._assert_options() /usr/local/lib/python3.11/site-packages/pytest_httpx/__init__.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51bba1bf10> def _assert_options(self) -> None: callbacks_not_executed = [ matcher for matcher, _ in self._callbacks if matcher.should_have_matched() ] matchers_description = "\n".join( [f"- {matcher}" for matcher in callbacks_not_executed] ) > assert not callbacks_not_executed, ( "The following responses are mocked but not requested:\n" f"{matchers_description}\n" "\n" "If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested" ) E AssertionError: The following responses are mocked but not requested: E - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers E E If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested E assert not [<pytest_httpx._request_matcher._RequestMatcher object at 0x7f51bba1b950>] /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:319: AssertionError ----------------------------- Captured stdout call ----------------------------- 2025-01-02 09:54:35 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 0-524287/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:35 [debug ] patch result result=<Response [200 OK]> 2025-01-02 09:54:35 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:35 [error ] retrying attempt=0 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m0[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba1b0d0[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaadd10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bba1a2d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bba1a2d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bbb7e200[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m136.800514143[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1b790[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:36 [debug ] patching attempt=1 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:36 [error ] retrying attempt=1 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m1[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba1b0d0[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaadd10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb06ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb06ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38310[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m138.427616326[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1b790[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:38 [debug ] patching attempt=2 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:38 [error ] retrying attempt=2 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m2[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba1b0d0[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaadd10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbacb750[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbacb750[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba389a0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m139.984235736[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1b790[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:40 [debug ] patching attempt=3 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:40 [error ] retrying attempt=3 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m3[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba1b0d0[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaadd10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbcb2ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbcb2ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38d60[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m141.591669583[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1b790[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:41 [debug ] patching attempt=4 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:41 [error ] retrying attempt=4 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m4[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba1b0d0[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaadd10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbc978d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbc978d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38130[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m143.113264733[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1b790[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m ___________ ERROR at teardown of test_upload_chunked_wrong_response ____________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f51badf8150> request = <SubRequest 'httpx_mock' for <Coroutine test_upload_chunked_wrong_response>> @pytest.fixture def httpx_mock( monkeypatch: MonkeyPatch, request: FixtureRequest, ) -> Generator[HTTPXMock, None, None]: options = {} for marker in request.node.iter_markers("httpx_mock"): options = marker.kwargs | options __tracebackhide__ = methodcaller("errisinstance", TypeError) options = _HTTPXMockOptions(**options) mock = HTTPXMock(options) # Mock synchronous requests real_handle_request = httpx.HTTPTransport.handle_request def mocked_handle_request( transport: httpx.HTTPTransport, request: httpx.Request ) -> httpx.Response: if options.should_mock(request): return mock._handle_request(transport, request) return real_handle_request(transport, request) monkeypatch.setattr( httpx.HTTPTransport, "handle_request", mocked_handle_request, ) # Mock asynchronous requests real_handle_async_request = httpx.AsyncHTTPTransport.handle_async_request async def mocked_handle_async_request( transport: httpx.AsyncHTTPTransport, request: httpx.Request ) -> httpx.Response: if options.should_mock(request): return await mock._handle_async_request(transport, request) return await real_handle_async_request(transport, request) monkeypatch.setattr( httpx.AsyncHTTPTransport, "handle_async_request", mocked_handle_async_request, ) yield mock try: > mock._assert_options() /usr/local/lib/python3.11/site-packages/pytest_httpx/__init__.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51badf9f90> def _assert_options(self) -> None: callbacks_not_executed = [ matcher for matcher, _ in self._callbacks if matcher.should_have_matched() ] matchers_description = "\n".join( [f"- {matcher}" for matcher in callbacks_not_executed] ) > assert not callbacks_not_executed, ( "The following responses are mocked but not requested:\n" f"{matchers_description}\n" "\n" "If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested" ) E AssertionError: The following responses are mocked but not requested: E - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers E E If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested E assert not [<pytest_httpx._request_matcher._RequestMatcher object at 0x7f51badfa150>] /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:319: AssertionError ----------------------------- Captured stdout call ----------------------------- 2025-01-02 09:54:43 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 0-524287/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:43 [debug ] patch result result=<Response [200 OK]> 2025-01-02 09:54:43 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:43 [error ] retrying attempt=0 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m0[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51badf8c90[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaafd30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51badfbf90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51badfbf90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bb96d300[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m144.965858387[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badfb510[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:44 [debug ] patching attempt=1 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:44 [error ] retrying attempt=1 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m1[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51badf8c90[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaafd30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbdd33d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbdd33d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38c70[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m146.139331717[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badfb510[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:45 [debug ] patching attempt=2 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:45 [error ] retrying attempt=2 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m2[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51badf8c90[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaafd30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bae25750[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bae25750[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38220[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m147.262615907[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badfb510[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:46 [debug ] patching attempt=3 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:46 [error ] retrying attempt=3 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m3[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51badf8c90[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaafd30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbacac10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbacac10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bc2f6d40[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m148.349859744[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badfb510[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:47 [debug ] patching attempt=4 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:47 [error ] retrying attempt=4 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m4[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51badf8c90[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaafd30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbdd33d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbdd33d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38c70[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m149.368643594[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badfb510[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m _______ ERROR at teardown of test_upload_chunked_transient_server_error ________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f51bba09490> request = <SubRequest 'httpx_mock' for <Coroutine test_upload_chunked_transient_server_error>> @pytest.fixture def httpx_mock( monkeypatch: MonkeyPatch, request: FixtureRequest, ) -> Generator[HTTPXMock, None, None]: options = {} for marker in request.node.iter_markers("httpx_mock"): options = marker.kwargs | options __tracebackhide__ = methodcaller("errisinstance", TypeError) options = _HTTPXMockOptions(**options) mock = HTTPXMock(options) # Mock synchronous requests real_handle_request = httpx.HTTPTransport.handle_request def mocked_handle_request( transport: httpx.HTTPTransport, request: httpx.Request ) -> httpx.Response: if options.should_mock(request): return mock._handle_request(transport, request) return real_handle_request(transport, request) monkeypatch.setattr( httpx.HTTPTransport, "handle_request", mocked_handle_request, ) # Mock asynchronous requests real_handle_async_request = httpx.AsyncHTTPTransport.handle_async_request async def mocked_handle_async_request( transport: httpx.AsyncHTTPTransport, request: httpx.Request ) -> httpx.Response: if options.should_mock(request): return await mock._handle_async_request(transport, request) return await real_handle_async_request(transport, request) monkeypatch.setattr( httpx.AsyncHTTPTransport, "handle_async_request", mocked_handle_async_request, ) yield mock try: > mock._assert_options() /usr/local/lib/python3.11/site-packages/pytest_httpx/__init__.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51bba09fd0> def _assert_options(self) -> None: callbacks_not_executed = [ matcher for matcher, _ in self._callbacks if matcher.should_have_matched() ] matchers_description = "\n".join( [f"- {matcher}" for matcher in callbacks_not_executed] ) > assert not callbacks_not_executed, ( "The following responses are mocked but not requested:\n" f"{matchers_description}\n" "\n" "If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested" ) E AssertionError: The following responses are mocked but not requested: E - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers E E If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested E assert not [<pytest_httpx._request_matcher._RequestMatcher object at 0x7f51bba09e50>] /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:319: AssertionError ----------------------------- Captured stdout call ----------------------------- 2025-01-02 09:54:49 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 0-524287/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:49 [debug ] patch result result=<Response [200 OK]> 2025-01-02 09:54:49 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:49 [error ] retrying attempt=0 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m0[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba61e10[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bb902810[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bba621d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bba621d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bbb7fb50[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m150.656830374[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09090[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:50 [debug ] patching attempt=1 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:50 [error ] retrying attempt=1 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m1[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba61e10[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bb902810[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbc36ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbc36ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bc2f73d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m151.852035881[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09090[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:51 [debug ] patching attempt=2 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:51 [error ] retrying attempt=2 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m2[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba61e10[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bb902810[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bc4b0890[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bc4b0890[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bbb7f4c0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m153.118299928[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09090[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:52 [debug ] patching attempt=3 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:52 [error ] retrying attempt=3 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m3[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba61e10[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bb902810[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb079d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb079d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bbb7fb50[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m154.326372958[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09090[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:54 [debug ] patching attempt=4 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:54 [error ] retrying attempt=4 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m4[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba61e10[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bb902810[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbba81d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbba81d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bc2f73d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m155.505518671[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09090[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m ______________ ERROR at teardown of test_upload_chunked_complete _______________ monkeypatch = <_pytest.monkeypatch.MonkeyPatch object at 0x7f51bae125d0> request = <SubRequest 'httpx_mock' for <Coroutine test_upload_chunked_complete>> @pytest.fixture def httpx_mock( monkeypatch: MonkeyPatch, request: FixtureRequest, ) -> Generator[HTTPXMock, None, None]: options = {} for marker in request.node.iter_markers("httpx_mock"): options = marker.kwargs | options __tracebackhide__ = methodcaller("errisinstance", TypeError) options = _HTTPXMockOptions(**options) mock = HTTPXMock(options) # Mock synchronous requests real_handle_request = httpx.HTTPTransport.handle_request def mocked_handle_request( transport: httpx.HTTPTransport, request: httpx.Request ) -> httpx.Response: if options.should_mock(request): return mock._handle_request(transport, request) return real_handle_request(transport, request) monkeypatch.setattr( httpx.HTTPTransport, "handle_request", mocked_handle_request, ) # Mock asynchronous requests real_handle_async_request = httpx.AsyncHTTPTransport.handle_async_request async def mocked_handle_async_request( transport: httpx.AsyncHTTPTransport, request: httpx.Request ) -> httpx.Response: if options.should_mock(request): return await mock._handle_async_request(transport, request) return await real_handle_async_request(transport, request) monkeypatch.setattr( httpx.AsyncHTTPTransport, "handle_async_request", mocked_handle_async_request, ) yield mock try: > mock._assert_options() /usr/local/lib/python3.11/site-packages/pytest_httpx/__init__.py:67: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51bae10c10> def _assert_options(self) -> None: callbacks_not_executed = [ matcher for matcher, _ in self._callbacks if matcher.should_have_matched() ] matchers_description = "\n".join( [f"- {matcher}" for matcher in callbacks_not_executed] ) > assert not callbacks_not_executed, ( "The following responses are mocked but not requested:\n" f"{matchers_description}\n" "\n" "If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested" ) E AssertionError: The following responses are mocked but not requested: E - Match HEAD request E E If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested E assert not [<pytest_httpx._request_matcher._RequestMatcher object at 0x7f51bae13dd0>] /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:319: AssertionError ----------------------------- Captured stdout call ----------------------------- 2025-01-02 09:54:55 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 0-524287/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:55 [debug ] patch result result=<Response [200 OK]> 2025-01-02 09:54:55 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:55 [error ] retrying attempt=0 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m0[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bae11250[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51baa7aeb0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bae112d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bae112d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38040[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m156.62537686[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae11110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match HEAD request - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:56 [debug ] patching attempt=1 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:56 [error ] retrying attempt=1 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m1[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bae11250[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51baa7aeb0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bb9373d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bb9373d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bc2f73d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m157.768732116[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae11110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match HEAD request - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:57 [debug ] patching attempt=2 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:57 [error ] retrying attempt=2 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m2[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bae11250[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51baa7aeb0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bb937450[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bb937450[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bbb7df30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m159.003350649[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae11110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match HEAD request - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:58 [debug ] patching attempt=3 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:58 [error ] retrying attempt=3 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m3[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bae11250[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51baa7aeb0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bc2677d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bc2677d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38040[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m160.398138824[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae11110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match HEAD request - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:55:00 [debug ] patching attempt=4 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:55:00 [error ] retrying attempt=4 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m4[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bae11250[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51baa7aeb0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb15990[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb15990[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bc2f73d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m161.646384035[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae11110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match HEAD request - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m =================================== FAILURES =================================== _________________________ test_upload_chunked_timeout __________________________ client = <httpx.AsyncClient object at 0x7f51bba19110> uri = 'http://example.org/upload' data = <aiofiles.threadpool.binary.AsyncBufferedReader object at 0x7f51bba1b0d0> wrapping <_io.BufferedReader name='/tmp/pytest-of-root/pytest-0/test_upload_chunked_timeout0/tempfile'> size = 4194304, chunk_size = 524288, headers = {}, kv = {} content_range = <ContentRange 'bytes 524288-1048575/4194304'>, attempt = 4 file_hasher = <md5 _hashlib.HASH object @ 0x7f51bbaadd10> chunk_headers = {'Content-Length': '524288', 'Patch-Content-Range': 'bytes 524288-1048575/4194304'} offset = 524288 chunk = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' pos = 1048576 async def upload_chunked( client: httpx.AsyncClient, uri: str, data: AsyncFileIO, size: int, chunk_size: int = UPLOAD_CHUNK_SIZE, headers=None, **kv, ): if not headers: headers = {} content_range = None attempt = 0 file_hasher = hashlib.md5() try: chunk_headers = headers.copy() await data.seek(0) while True: offset = await data.tell() chunk = await data.read(chunk_size) if not chunk: break pos = await data.tell() file_hasher.update(chunk) content_range = ContentRange( start=offset, stop=pos, length=size, units="bytes", ) chunk_headers["Patch-Content-Range"] = content_range.to_header() chunk_headers["Content-Length"] = str(len(chunk)) exc = None for attempt in range(MAX_ATTEMPTS): try: logger.debug("patching", uri=uri, size=len(chunk), content_range=content_range, attempt=attempt) r = await client.patch( uri, content=chunk, headers=chunk_headers, **kv, ) logger.debug("patch result", result=r) if r.is_success: break else: r.raise_for_status() except httpx.HTTPStatusError as e: if not e.response.is_server_error: logger.debug("not server error, not retrying", resp=e.response) raise logger.exception("retrying", attempt=attempt) exc = e except httpx.HTTPError as e: logger.exception("retrying", attempt=attempt) exc = e else: > raise exc obs_proxy/chunked_uploads/client.py:105: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ obs_proxy/chunked_uploads/client.py:84: in upload_chunked r = await client.patch( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1933: in patch return await self.request( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1540: in request return await self.send(request, auth=auth, follow_redirects=follow_redirects) /usr/local/lib/python3.11/site-packages/httpx/_client.py:1629: in send response = await self._send_handling_auth( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1657: in _send_handling_auth response = await self._send_handling_redirects( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1694: in _send_handling_redirects response = await self._send_single_request(request) /usr/local/lib/python3.11/site-packages/httpx/_client.py:1730: in _send_single_request response = await transport.handle_async_request(request) /usr/local/lib/python3.11/site-packages/pytest_httpx/__init__.py:56: in mocked_handle_async_request return await mock._handle_async_request(transport, request) /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:183: in _handle_async_request self._request_not_matched(real_transport, request) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51bba1bf10> real_transport = <httpx.AsyncHTTPTransport object at 0x7f51bba18650> request = <Request('PATCH', 'http://example.org/upload')> def _request_not_matched( self, real_transport: Union[httpx.AsyncHTTPTransport, httpx.HTTPTransport], request: httpx.Request, ) -> NoReturn: self._requests_not_matched.append(request) > raise httpx.TimeoutException( self._explain_that_no_response_was_found(real_transport, request), request=request, ) E httpx.TimeoutException: No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst: E - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers E - Already matched any request with {'Content-Length': '524288'} headers E E If you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:191: TimeoutException The above exception was the direct cause of the following exception: tmp_path = PosixPath('/tmp/pytest-of-root/pytest-0/test_upload_chunked_timeout0') httpx_mock = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51bba1bf10> @pytest.mark.asyncio async def test_upload_chunked_timeout( tmp_path: Path, httpx_mock: HTTPXMock, ): """Verify that protocol errors are handled properly. Check that timeouts and other protocol errors cause the failed chunk to be repeatedly re-uploaded, and, failing that, ultimately raise an appropriate exception allowing the issue to be reported. """ httpx_mock.add_response( match_headers={ "Content-Length": str(CHUNK_SIZE), }, ) break_at_chunk = 5 break_at = "bytes %d-%d/%d" % ( break_at_chunk * CHUNK_SIZE, (break_at_chunk + 1) * CHUNK_SIZE - 1, SIZE, ) httpx_mock.add_exception( httpx.ReadTimeout("Simulated timeout"), match_headers={ "Patch-Content-Range": break_at, }, ) tmp_file = tmp_path / "tempfile" with tmp_file.open("wb") as f: f.truncate(SIZE) async with httpx.AsyncClient() as client: file = await aiofiles.open(tmp_file, 'rb') with pytest.raises( ChunkedUploadError, match=f"Upload error at range {break_at} .attempt 4.: Simulated timeout", ) as excinfo: > await upload_chunked( client, "http://example.org/upload", data=file, size=SIZE, chunk_size=CHUNK_SIZE, ) tests/chunked_uploads/test_upload_chunked.py:60: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ client = <httpx.AsyncClient object at 0x7f51bba19110> uri = 'http://example.org/upload' data = <aiofiles.threadpool.binary.AsyncBufferedReader object at 0x7f51bba1b0d0> wrapping <_io.BufferedReader name='/tmp/pytest-of-root/pytest-0/test_upload_chunked_timeout0/tempfile'> size = 4194304, chunk_size = 524288, headers = {}, kv = {} content_range = <ContentRange 'bytes 524288-1048575/4194304'>, attempt = 4 file_hasher = <md5 _hashlib.HASH object @ 0x7f51bbaadd10> chunk_headers = {'Content-Length': '524288', 'Patch-Content-Range': 'bytes 524288-1048575/4194304'} offset = 524288 chunk = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' pos = 1048576 async def upload_chunked( client: httpx.AsyncClient, uri: str, data: AsyncFileIO, size: int, chunk_size: int = UPLOAD_CHUNK_SIZE, headers=None, **kv, ): if not headers: headers = {} content_range = None attempt = 0 file_hasher = hashlib.md5() try: chunk_headers = headers.copy() await data.seek(0) while True: offset = await data.tell() chunk = await data.read(chunk_size) if not chunk: break pos = await data.tell() file_hasher.update(chunk) content_range = ContentRange( start=offset, stop=pos, length=size, units="bytes", ) chunk_headers["Patch-Content-Range"] = content_range.to_header() chunk_headers["Content-Length"] = str(len(chunk)) exc = None for attempt in range(MAX_ATTEMPTS): try: logger.debug("patching", uri=uri, size=len(chunk), content_range=content_range, attempt=attempt) r = await client.patch( uri, content=chunk, headers=chunk_headers, **kv, ) logger.debug("patch result", result=r) if r.is_success: break else: r.raise_for_status() except httpx.HTTPStatusError as e: if not e.response.is_server_error: logger.debug("not server error, not retrying", resp=e.response) raise logger.exception("retrying", attempt=attempt) exc = e except httpx.HTTPError as e: logger.exception("retrying", attempt=attempt) exc = e else: raise exc logger.debug("get etag", uri=uri) # now verify the hash r = await client.head( uri, headers=headers, ) calculated_hash = file_hasher.hexdigest() etag, _ = unquote_etag(r.headers.get("etag")) logger.debug("check upload", etag=etag, calculated_hash=calculated_hash) if etag != calculated_hash: raise ChunkedUploadVerificationError( expected=calculated_hash, actual=etag, ) except httpx.HTTPError as e: > raise ChunkedUploadError( content_range=content_range, attempt=attempt, ) from e E obs_proxy.chunked_uploads.client.ChunkedUploadError: Upload error at range bytes 524288-1048575/4194304 (attempt 4): No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst: E - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers E - Already matched any request with {'Content-Length': '524288'} headers E E If you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request obs_proxy/chunked_uploads/client.py:125: ChunkedUploadError During handling of the above exception, another exception occurred: tmp_path = PosixPath('/tmp/pytest-of-root/pytest-0/test_upload_chunked_timeout0') httpx_mock = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51bba1bf10> @pytest.mark.asyncio async def test_upload_chunked_timeout( tmp_path: Path, httpx_mock: HTTPXMock, ): """Verify that protocol errors are handled properly. Check that timeouts and other protocol errors cause the failed chunk to be repeatedly re-uploaded, and, failing that, ultimately raise an appropriate exception allowing the issue to be reported. """ httpx_mock.add_response( match_headers={ "Content-Length": str(CHUNK_SIZE), }, ) break_at_chunk = 5 break_at = "bytes %d-%d/%d" % ( break_at_chunk * CHUNK_SIZE, (break_at_chunk + 1) * CHUNK_SIZE - 1, SIZE, ) httpx_mock.add_exception( httpx.ReadTimeout("Simulated timeout"), match_headers={ "Patch-Content-Range": break_at, }, ) tmp_file = tmp_path / "tempfile" with tmp_file.open("wb") as f: f.truncate(SIZE) async with httpx.AsyncClient() as client: file = await aiofiles.open(tmp_file, 'rb') > with pytest.raises( ChunkedUploadError, match=f"Upload error at range {break_at} .attempt 4.: Simulated timeout", ) as excinfo: E AssertionError: Regex pattern did not match. E Regex: 'Upload error at range bytes 2621440-3145727/4194304 .attempt 4.: Simulated timeout' E Input: "Upload error at range bytes 524288-1048575/4194304 (attempt 4): No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst:\n- Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers\n- Already matched any request with {'Content-Length': '524288'} headers\n\nIf you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request" tests/chunked_uploads/test_upload_chunked.py:56: AssertionError ----------------------------- Captured stdout call ----------------------------- 2025-01-02 09:54:35 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 0-524287/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:35 [debug ] patch result result=<Response [200 OK]> 2025-01-02 09:54:35 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:35 [error ] retrying attempt=0 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m0[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba1b0d0[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaadd10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bba1a2d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bba1a2d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bbb7e200[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m136.800514143[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1b790[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:36 [debug ] patching attempt=1 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:36 [error ] retrying attempt=1 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m1[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba1b0d0[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaadd10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb06ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb06ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38310[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m138.427616326[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1b790[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:38 [debug ] patching attempt=2 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:38 [error ] retrying attempt=2 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m2[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba1b0d0[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaadd10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbacb750[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbacb750[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba389a0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m139.984235736[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1b790[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:40 [debug ] patching attempt=3 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:40 [error ] retrying attempt=3 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m3[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba1b0d0[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaadd10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbcb2ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbcb2ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38d60[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m141.591669583[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1b790[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:41 [debug ] patching attempt=4 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:41 [error ] retrying attempt=4 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m4[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba1b0d0[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaadd10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbc978d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbc978d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38130[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba19110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m143.113264733[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1b790[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba18650[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba1bf10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m ______________________ test_upload_chunked_wrong_response ______________________ client = <httpx.AsyncClient object at 0x7f51badfb6d0> uri = 'http://example.org/upload' data = <aiofiles.threadpool.binary.AsyncBufferedReader object at 0x7f51badf8c90> wrapping <_io.BufferedReader name='/tmp/pytest-of-root/pytest-0/test_upload_chunked_wrong_resp0/tempfile'> size = 4194304, chunk_size = 524288, headers = {}, kv = {} content_range = <ContentRange 'bytes 524288-1048575/4194304'>, attempt = 4 file_hasher = <md5 _hashlib.HASH object @ 0x7f51bbaafd30> chunk_headers = {'Content-Length': '524288', 'Patch-Content-Range': 'bytes 524288-1048575/4194304'} offset = 524288 chunk = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' pos = 1048576 async def upload_chunked( client: httpx.AsyncClient, uri: str, data: AsyncFileIO, size: int, chunk_size: int = UPLOAD_CHUNK_SIZE, headers=None, **kv, ): if not headers: headers = {} content_range = None attempt = 0 file_hasher = hashlib.md5() try: chunk_headers = headers.copy() await data.seek(0) while True: offset = await data.tell() chunk = await data.read(chunk_size) if not chunk: break pos = await data.tell() file_hasher.update(chunk) content_range = ContentRange( start=offset, stop=pos, length=size, units="bytes", ) chunk_headers["Patch-Content-Range"] = content_range.to_header() chunk_headers["Content-Length"] = str(len(chunk)) exc = None for attempt in range(MAX_ATTEMPTS): try: logger.debug("patching", uri=uri, size=len(chunk), content_range=content_range, attempt=attempt) r = await client.patch( uri, content=chunk, headers=chunk_headers, **kv, ) logger.debug("patch result", result=r) if r.is_success: break else: r.raise_for_status() except httpx.HTTPStatusError as e: if not e.response.is_server_error: logger.debug("not server error, not retrying", resp=e.response) raise logger.exception("retrying", attempt=attempt) exc = e except httpx.HTTPError as e: logger.exception("retrying", attempt=attempt) exc = e else: > raise exc obs_proxy/chunked_uploads/client.py:105: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ obs_proxy/chunked_uploads/client.py:84: in upload_chunked r = await client.patch( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1933: in patch return await self.request( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1540: in request return await self.send(request, auth=auth, follow_redirects=follow_redirects) /usr/local/lib/python3.11/site-packages/httpx/_client.py:1629: in send response = await self._send_handling_auth( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1657: in _send_handling_auth response = await self._send_handling_redirects( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1694: in _send_handling_redirects response = await self._send_single_request(request) /usr/local/lib/python3.11/site-packages/httpx/_client.py:1730: in _send_single_request response = await transport.handle_async_request(request) /usr/local/lib/python3.11/site-packages/pytest_httpx/__init__.py:56: in mocked_handle_async_request return await mock._handle_async_request(transport, request) /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:183: in _handle_async_request self._request_not_matched(real_transport, request) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51badf9f90> real_transport = <httpx.AsyncHTTPTransport object at 0x7f51badf9d90> request = <Request('PATCH', 'http://example.org/upload')> def _request_not_matched( self, real_transport: Union[httpx.AsyncHTTPTransport, httpx.HTTPTransport], request: httpx.Request, ) -> NoReturn: self._requests_not_matched.append(request) > raise httpx.TimeoutException( self._explain_that_no_response_was_found(real_transport, request), request=request, ) E httpx.TimeoutException: No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst: E - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers E - Already matched any request with {'Content-Length': '524288'} headers E E If you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:191: TimeoutException The above exception was the direct cause of the following exception: tmp_path = PosixPath('/tmp/pytest-of-root/pytest-0/test_upload_chunked_wrong_resp0') httpx_mock = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51badf9f90> @pytest.mark.asyncio async def test_upload_chunked_wrong_response( tmp_path: Path, httpx_mock: HTTPXMock, ): """Verify that unexpected HTTP responses interrupt the upload immediately and raise an exception""" httpx_mock.add_response( match_headers={ "Content-Length": str(CHUNK_SIZE), }, ) break_at_chunk = 5 break_at = "bytes %d-%d/%d" % ( break_at_chunk * CHUNK_SIZE, (break_at_chunk + 1) * CHUNK_SIZE - 1, SIZE, ) httpx_mock.add_response( status_code=418, match_headers={ "Patch-Content-Range": break_at, }, ) tmp_file = tmp_path / "tempfile" with tmp_file.open("wb") as f: f.truncate(SIZE) async with httpx.AsyncClient() as client: file = await aiofiles.open(tmp_file, 'rb') with pytest.raises( ChunkedUploadError, match=f"Upload error at range {break_at} .attempt 0.: .*418 I'm a teapot.*", ) as excinfo: > await upload_chunked( client, "http://example.org/upload", data=file, size=SIZE, chunk_size=CHUNK_SIZE, ) tests/chunked_uploads/test_upload_chunked.py:106: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ client = <httpx.AsyncClient object at 0x7f51badfb6d0> uri = 'http://example.org/upload' data = <aiofiles.threadpool.binary.AsyncBufferedReader object at 0x7f51badf8c90> wrapping <_io.BufferedReader name='/tmp/pytest-of-root/pytest-0/test_upload_chunked_wrong_resp0/tempfile'> size = 4194304, chunk_size = 524288, headers = {}, kv = {} content_range = <ContentRange 'bytes 524288-1048575/4194304'>, attempt = 4 file_hasher = <md5 _hashlib.HASH object @ 0x7f51bbaafd30> chunk_headers = {'Content-Length': '524288', 'Patch-Content-Range': 'bytes 524288-1048575/4194304'} offset = 524288 chunk = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' pos = 1048576 async def upload_chunked( client: httpx.AsyncClient, uri: str, data: AsyncFileIO, size: int, chunk_size: int = UPLOAD_CHUNK_SIZE, headers=None, **kv, ): if not headers: headers = {} content_range = None attempt = 0 file_hasher = hashlib.md5() try: chunk_headers = headers.copy() await data.seek(0) while True: offset = await data.tell() chunk = await data.read(chunk_size) if not chunk: break pos = await data.tell() file_hasher.update(chunk) content_range = ContentRange( start=offset, stop=pos, length=size, units="bytes", ) chunk_headers["Patch-Content-Range"] = content_range.to_header() chunk_headers["Content-Length"] = str(len(chunk)) exc = None for attempt in range(MAX_ATTEMPTS): try: logger.debug("patching", uri=uri, size=len(chunk), content_range=content_range, attempt=attempt) r = await client.patch( uri, content=chunk, headers=chunk_headers, **kv, ) logger.debug("patch result", result=r) if r.is_success: break else: r.raise_for_status() except httpx.HTTPStatusError as e: if not e.response.is_server_error: logger.debug("not server error, not retrying", resp=e.response) raise logger.exception("retrying", attempt=attempt) exc = e except httpx.HTTPError as e: logger.exception("retrying", attempt=attempt) exc = e else: raise exc logger.debug("get etag", uri=uri) # now verify the hash r = await client.head( uri, headers=headers, ) calculated_hash = file_hasher.hexdigest() etag, _ = unquote_etag(r.headers.get("etag")) logger.debug("check upload", etag=etag, calculated_hash=calculated_hash) if etag != calculated_hash: raise ChunkedUploadVerificationError( expected=calculated_hash, actual=etag, ) except httpx.HTTPError as e: > raise ChunkedUploadError( content_range=content_range, attempt=attempt, ) from e E obs_proxy.chunked_uploads.client.ChunkedUploadError: Upload error at range bytes 524288-1048575/4194304 (attempt 4): No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst: E - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers E - Already matched any request with {'Content-Length': '524288'} headers E E If you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request obs_proxy/chunked_uploads/client.py:125: ChunkedUploadError During handling of the above exception, another exception occurred: tmp_path = PosixPath('/tmp/pytest-of-root/pytest-0/test_upload_chunked_wrong_resp0') httpx_mock = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51badf9f90> @pytest.mark.asyncio async def test_upload_chunked_wrong_response( tmp_path: Path, httpx_mock: HTTPXMock, ): """Verify that unexpected HTTP responses interrupt the upload immediately and raise an exception""" httpx_mock.add_response( match_headers={ "Content-Length": str(CHUNK_SIZE), }, ) break_at_chunk = 5 break_at = "bytes %d-%d/%d" % ( break_at_chunk * CHUNK_SIZE, (break_at_chunk + 1) * CHUNK_SIZE - 1, SIZE, ) httpx_mock.add_response( status_code=418, match_headers={ "Patch-Content-Range": break_at, }, ) tmp_file = tmp_path / "tempfile" with tmp_file.open("wb") as f: f.truncate(SIZE) async with httpx.AsyncClient() as client: file = await aiofiles.open(tmp_file, 'rb') > with pytest.raises( ChunkedUploadError, match=f"Upload error at range {break_at} .attempt 0.: .*418 I'm a teapot.*", ) as excinfo: E AssertionError: Regex pattern did not match. E Regex: "Upload error at range bytes 2621440-3145727/4194304 .attempt 0.: .*418 I'm a teapot.*" E Input: "Upload error at range bytes 524288-1048575/4194304 (attempt 4): No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst:\n- Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers\n- Already matched any request with {'Content-Length': '524288'} headers\n\nIf you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request" tests/chunked_uploads/test_upload_chunked.py:102: AssertionError ----------------------------- Captured stdout call ----------------------------- 2025-01-02 09:54:43 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 0-524287/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:43 [debug ] patch result result=<Response [200 OK]> 2025-01-02 09:54:43 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:43 [error ] retrying attempt=0 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m0[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51badf8c90[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaafd30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51badfbf90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51badfbf90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bb96d300[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m144.965858387[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badfb510[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:44 [debug ] patching attempt=1 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:44 [error ] retrying attempt=1 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m1[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51badf8c90[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaafd30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbdd33d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbdd33d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38c70[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m146.139331717[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badfb510[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:45 [debug ] patching attempt=2 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:45 [error ] retrying attempt=2 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m2[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51badf8c90[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaafd30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bae25750[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bae25750[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38220[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m147.262615907[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badfb510[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:46 [debug ] patching attempt=3 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:46 [error ] retrying attempt=3 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m3[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51badf8c90[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaafd30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbacac10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbacac10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bc2f6d40[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m148.349859744[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badfb510[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:47 [debug ] patching attempt=4 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:47 [error ] retrying attempt=4 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m4[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51badf8c90[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bbaafd30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbdd33d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbdd33d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38c70[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51badfb6d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m149.368643594[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badfb510[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51badf9d90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51badf9f90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m __________________ test_upload_chunked_transient_server_error __________________ client = <httpx.AsyncClient object at 0x7f51bba09cd0> uri = 'http://example.org/upload' data = <aiofiles.threadpool.binary.AsyncBufferedReader object at 0x7f51bba61e10> wrapping <_io.BufferedReader name='/tmp/pytest-of-root/pytest-0/test_upload_chunked_transient_0/tempfile'> size = 4194304, chunk_size = 524288, headers = {}, kv = {} content_range = <ContentRange 'bytes 524288-1048575/4194304'>, attempt = 4 file_hasher = <md5 _hashlib.HASH object @ 0x7f51bb902810> chunk_headers = {'Content-Length': '524288', 'Patch-Content-Range': 'bytes 524288-1048575/4194304'} offset = 524288 chunk = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' pos = 1048576 async def upload_chunked( client: httpx.AsyncClient, uri: str, data: AsyncFileIO, size: int, chunk_size: int = UPLOAD_CHUNK_SIZE, headers=None, **kv, ): if not headers: headers = {} content_range = None attempt = 0 file_hasher = hashlib.md5() try: chunk_headers = headers.copy() await data.seek(0) while True: offset = await data.tell() chunk = await data.read(chunk_size) if not chunk: break pos = await data.tell() file_hasher.update(chunk) content_range = ContentRange( start=offset, stop=pos, length=size, units="bytes", ) chunk_headers["Patch-Content-Range"] = content_range.to_header() chunk_headers["Content-Length"] = str(len(chunk)) exc = None for attempt in range(MAX_ATTEMPTS): try: logger.debug("patching", uri=uri, size=len(chunk), content_range=content_range, attempt=attempt) r = await client.patch( uri, content=chunk, headers=chunk_headers, **kv, ) logger.debug("patch result", result=r) if r.is_success: break else: r.raise_for_status() except httpx.HTTPStatusError as e: if not e.response.is_server_error: logger.debug("not server error, not retrying", resp=e.response) raise logger.exception("retrying", attempt=attempt) exc = e except httpx.HTTPError as e: logger.exception("retrying", attempt=attempt) exc = e else: > raise exc obs_proxy/chunked_uploads/client.py:105: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ obs_proxy/chunked_uploads/client.py:84: in upload_chunked r = await client.patch( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1933: in patch return await self.request( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1540: in request return await self.send(request, auth=auth, follow_redirects=follow_redirects) /usr/local/lib/python3.11/site-packages/httpx/_client.py:1629: in send response = await self._send_handling_auth( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1657: in _send_handling_auth response = await self._send_handling_redirects( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1694: in _send_handling_redirects response = await self._send_single_request(request) /usr/local/lib/python3.11/site-packages/httpx/_client.py:1730: in _send_single_request response = await transport.handle_async_request(request) /usr/local/lib/python3.11/site-packages/pytest_httpx/__init__.py:56: in mocked_handle_async_request return await mock._handle_async_request(transport, request) /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:183: in _handle_async_request self._request_not_matched(real_transport, request) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51bba09fd0> real_transport = <httpx.AsyncHTTPTransport object at 0x7f51bba63a90> request = <Request('PATCH', 'http://example.org/upload')> def _request_not_matched( self, real_transport: Union[httpx.AsyncHTTPTransport, httpx.HTTPTransport], request: httpx.Request, ) -> NoReturn: self._requests_not_matched.append(request) > raise httpx.TimeoutException( self._explain_that_no_response_was_found(real_transport, request), request=request, ) E httpx.TimeoutException: No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst: E - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers E - Already matched any request with {'Content-Length': '524288'} headers E E If you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:191: TimeoutException The above exception was the direct cause of the following exception: tmp_path = PosixPath('/tmp/pytest-of-root/pytest-0/test_upload_chunked_transient_0') httpx_mock = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51bba09fd0> @pytest.mark.asyncio async def test_upload_chunked_transient_server_error( tmp_path: Path, httpx_mock: HTTPXMock, ): """Verify that unexpected HTTP responses in 5xx range cause a retry and raise an exception if persist""" httpx_mock.add_response( match_headers={ "Content-Length": str(CHUNK_SIZE), }, ) break_at_chunk = 5 break_at = "bytes %d-%d/%d" % ( break_at_chunk * CHUNK_SIZE, (break_at_chunk + 1) * CHUNK_SIZE - 1, SIZE, ) failed_once = False def fail_once(request: httpx.Request): if not failed_once: return httpx.Response( status_code=500, ) else: return httpx.Response( status_code=200, ) httpx_mock.add_callback( fail_once, match_headers={ "Patch-Content-Range": break_at, }, ) tmp_file = tmp_path / "tempfile" with tmp_file.open("wb") as f: f.truncate(SIZE) async with httpx.AsyncClient() as client: file = await aiofiles.open(tmp_file, 'rb') with pytest.raises( ChunkedUploadError, match=f"Upload error at range {break_at} .attempt 4.: .*500 Internal Server Error.*", ) as excinfo: > await upload_chunked( client, "http://example.org/upload", data=file, size=SIZE, chunk_size=CHUNK_SIZE, ) tests/chunked_uploads/test_upload_chunked.py:165: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ client = <httpx.AsyncClient object at 0x7f51bba09cd0> uri = 'http://example.org/upload' data = <aiofiles.threadpool.binary.AsyncBufferedReader object at 0x7f51bba61e10> wrapping <_io.BufferedReader name='/tmp/pytest-of-root/pytest-0/test_upload_chunked_transient_0/tempfile'> size = 4194304, chunk_size = 524288, headers = {}, kv = {} content_range = <ContentRange 'bytes 524288-1048575/4194304'>, attempt = 4 file_hasher = <md5 _hashlib.HASH object @ 0x7f51bb902810> chunk_headers = {'Content-Length': '524288', 'Patch-Content-Range': 'bytes 524288-1048575/4194304'} offset = 524288 chunk = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' pos = 1048576 async def upload_chunked( client: httpx.AsyncClient, uri: str, data: AsyncFileIO, size: int, chunk_size: int = UPLOAD_CHUNK_SIZE, headers=None, **kv, ): if not headers: headers = {} content_range = None attempt = 0 file_hasher = hashlib.md5() try: chunk_headers = headers.copy() await data.seek(0) while True: offset = await data.tell() chunk = await data.read(chunk_size) if not chunk: break pos = await data.tell() file_hasher.update(chunk) content_range = ContentRange( start=offset, stop=pos, length=size, units="bytes", ) chunk_headers["Patch-Content-Range"] = content_range.to_header() chunk_headers["Content-Length"] = str(len(chunk)) exc = None for attempt in range(MAX_ATTEMPTS): try: logger.debug("patching", uri=uri, size=len(chunk), content_range=content_range, attempt=attempt) r = await client.patch( uri, content=chunk, headers=chunk_headers, **kv, ) logger.debug("patch result", result=r) if r.is_success: break else: r.raise_for_status() except httpx.HTTPStatusError as e: if not e.response.is_server_error: logger.debug("not server error, not retrying", resp=e.response) raise logger.exception("retrying", attempt=attempt) exc = e except httpx.HTTPError as e: logger.exception("retrying", attempt=attempt) exc = e else: raise exc logger.debug("get etag", uri=uri) # now verify the hash r = await client.head( uri, headers=headers, ) calculated_hash = file_hasher.hexdigest() etag, _ = unquote_etag(r.headers.get("etag")) logger.debug("check upload", etag=etag, calculated_hash=calculated_hash) if etag != calculated_hash: raise ChunkedUploadVerificationError( expected=calculated_hash, actual=etag, ) except httpx.HTTPError as e: > raise ChunkedUploadError( content_range=content_range, attempt=attempt, ) from e E obs_proxy.chunked_uploads.client.ChunkedUploadError: Upload error at range bytes 524288-1048575/4194304 (attempt 4): No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst: E - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers E - Already matched any request with {'Content-Length': '524288'} headers E E If you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request obs_proxy/chunked_uploads/client.py:125: ChunkedUploadError During handling of the above exception, another exception occurred: tmp_path = PosixPath('/tmp/pytest-of-root/pytest-0/test_upload_chunked_transient_0') httpx_mock = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51bba09fd0> @pytest.mark.asyncio async def test_upload_chunked_transient_server_error( tmp_path: Path, httpx_mock: HTTPXMock, ): """Verify that unexpected HTTP responses in 5xx range cause a retry and raise an exception if persist""" httpx_mock.add_response( match_headers={ "Content-Length": str(CHUNK_SIZE), }, ) break_at_chunk = 5 break_at = "bytes %d-%d/%d" % ( break_at_chunk * CHUNK_SIZE, (break_at_chunk + 1) * CHUNK_SIZE - 1, SIZE, ) failed_once = False def fail_once(request: httpx.Request): if not failed_once: return httpx.Response( status_code=500, ) else: return httpx.Response( status_code=200, ) httpx_mock.add_callback( fail_once, match_headers={ "Patch-Content-Range": break_at, }, ) tmp_file = tmp_path / "tempfile" with tmp_file.open("wb") as f: f.truncate(SIZE) async with httpx.AsyncClient() as client: file = await aiofiles.open(tmp_file, 'rb') > with pytest.raises( ChunkedUploadError, match=f"Upload error at range {break_at} .attempt 4.: .*500 Internal Server Error.*", ) as excinfo: E AssertionError: Regex pattern did not match. E Regex: 'Upload error at range bytes 2621440-3145727/4194304 .attempt 4.: .*500 Internal Server Error.*' E Input: "Upload error at range bytes 524288-1048575/4194304 (attempt 4): No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst:\n- Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers\n- Already matched any request with {'Content-Length': '524288'} headers\n\nIf you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request" tests/chunked_uploads/test_upload_chunked.py:161: AssertionError ----------------------------- Captured stdout call ----------------------------- 2025-01-02 09:54:49 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 0-524287/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:49 [debug ] patch result result=<Response [200 OK]> 2025-01-02 09:54:49 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:49 [error ] retrying attempt=0 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m0[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba61e10[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bb902810[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bba621d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bba621d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bbb7fb50[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m150.656830374[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09090[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:50 [debug ] patching attempt=1 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:50 [error ] retrying attempt=1 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m1[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba61e10[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bb902810[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbc36ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbc36ad0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bc2f73d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m151.852035881[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09090[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:51 [debug ] patching attempt=2 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:51 [error ] retrying attempt=2 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m2[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba61e10[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bb902810[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bc4b0890[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bc4b0890[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bbb7f4c0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m153.118299928[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09090[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:52 [debug ] patching attempt=3 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:52 [error ] retrying attempt=3 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m3[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba61e10[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bb902810[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb079d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb079d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bbb7fb50[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m154.326372958[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09090[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:54 [debug ] patching attempt=4 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:54 [error ] retrying attempt=4 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m4[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bba61e10[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Patch-Content-Range': 'bytes 524288-1048575/4194304', [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33many request with [0m[1;33m{[0m[33m'Patch-Content-Range': 'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m2621440-3145727/4194304'[0m[1;33m}[0m[33m headers\n- Already matched any[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest with [0m[1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33myou wanted to reuse an already matched response instead [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mof registering it again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51bb902810[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbba81d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbba81d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bc2f73d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bba09cd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m155.505518671[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09090[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bba63a90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba09fd0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m524288-1048575/4194304'[0m, [32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match any request with [1m{[0m[32m'Patch-Content-Range'[0m: [32m'bytes [0m [32m2621440-3145727/4194304'[0m[1m}[0m headers - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m _________________________ test_upload_chunked_complete _________________________ client = <httpx.AsyncClient object at 0x7f51bae11390> uri = 'http://example.org/upload' data = <aiofiles.threadpool.binary.AsyncBufferedReader object at 0x7f51bae11250> wrapping <_io.BufferedReader name='/tmp/pytest-of-root/pytest-0/test_upload_chunked_complete0/tempfile'> size = 4194304, chunk_size = 524288, headers = {}, kv = {} content_range = <ContentRange 'bytes 524288-1048575/4194304'>, attempt = 4 file_hasher = <md5 _hashlib.HASH object @ 0x7f51baa7aeb0> chunk_headers = {'Content-Length': '524288', 'Patch-Content-Range': 'bytes 524288-1048575/4194304'} offset = 524288 chunk = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' pos = 1048576 async def upload_chunked( client: httpx.AsyncClient, uri: str, data: AsyncFileIO, size: int, chunk_size: int = UPLOAD_CHUNK_SIZE, headers=None, **kv, ): if not headers: headers = {} content_range = None attempt = 0 file_hasher = hashlib.md5() try: chunk_headers = headers.copy() await data.seek(0) while True: offset = await data.tell() chunk = await data.read(chunk_size) if not chunk: break pos = await data.tell() file_hasher.update(chunk) content_range = ContentRange( start=offset, stop=pos, length=size, units="bytes", ) chunk_headers["Patch-Content-Range"] = content_range.to_header() chunk_headers["Content-Length"] = str(len(chunk)) exc = None for attempt in range(MAX_ATTEMPTS): try: logger.debug("patching", uri=uri, size=len(chunk), content_range=content_range, attempt=attempt) r = await client.patch( uri, content=chunk, headers=chunk_headers, **kv, ) logger.debug("patch result", result=r) if r.is_success: break else: r.raise_for_status() except httpx.HTTPStatusError as e: if not e.response.is_server_error: logger.debug("not server error, not retrying", resp=e.response) raise logger.exception("retrying", attempt=attempt) exc = e except httpx.HTTPError as e: logger.exception("retrying", attempt=attempt) exc = e else: > raise exc obs_proxy/chunked_uploads/client.py:105: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ obs_proxy/chunked_uploads/client.py:84: in upload_chunked r = await client.patch( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1933: in patch return await self.request( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1540: in request return await self.send(request, auth=auth, follow_redirects=follow_redirects) /usr/local/lib/python3.11/site-packages/httpx/_client.py:1629: in send response = await self._send_handling_auth( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1657: in _send_handling_auth response = await self._send_handling_redirects( /usr/local/lib/python3.11/site-packages/httpx/_client.py:1694: in _send_handling_redirects response = await self._send_single_request(request) /usr/local/lib/python3.11/site-packages/httpx/_client.py:1730: in _send_single_request response = await transport.handle_async_request(request) /usr/local/lib/python3.11/site-packages/pytest_httpx/__init__.py:56: in mocked_handle_async_request return await mock._handle_async_request(transport, request) /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:183: in _handle_async_request self._request_not_matched(real_transport, request) _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ self = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51bae10c10> real_transport = <httpx.AsyncHTTPTransport object at 0x7f51bae12b10> request = <Request('PATCH', 'http://example.org/upload')> def _request_not_matched( self, real_transport: Union[httpx.AsyncHTTPTransport, httpx.HTTPTransport], request: httpx.Request, ) -> NoReturn: self._requests_not_matched.append(request) > raise httpx.TimeoutException( self._explain_that_no_response_was_found(real_transport, request), request=request, ) E httpx.TimeoutException: No response can be found for PATCH request on http://example.org/upload with {'Content-Length': '524288'} headers amongst: E - Match HEAD request E - Already matched any request with {'Content-Length': '524288'} headers E E If you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request /usr/local/lib/python3.11/site-packages/pytest_httpx/_httpx_mock.py:191: TimeoutException The above exception was the direct cause of the following exception: tmp_path = PosixPath('/tmp/pytest-of-root/pytest-0/test_upload_chunked_complete0') httpx_mock = <pytest_httpx._httpx_mock.HTTPXMock object at 0x7f51bae10c10> @pytest.mark.asyncio async def test_upload_chunked_complete( tmp_path: Path, httpx_mock: HTTPXMock, ): """Verify the complete upload is followed by a hashsum verification""" httpx_mock.add_response( match_headers={ "Content-Length": str(CHUNK_SIZE), }, ) # this is the MD5 of 4 MB zeroes expected_md5 = "b5cfa9d6c8febd618f91ac2843d50a1c" httpx_mock.add_response( method="HEAD", headers={ "ETag": quote_etag(expected_md5 + "foo"), }, ) tmp_file = tmp_path / "tempfile" with tmp_file.open("wb") as f: f.truncate(SIZE) async with httpx.AsyncClient() as client: file = await aiofiles.open(tmp_file, 'rb') with pytest.raises( ChunkedUploadVerificationError, ) as excinfo: > await upload_chunked( client, "http://example.org/upload", data=file, size=SIZE, chunk_size=CHUNK_SIZE, ) tests/chunked_uploads/test_upload_chunked.py:207: _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ client = <httpx.AsyncClient object at 0x7f51bae11390> uri = 'http://example.org/upload' data = <aiofiles.threadpool.binary.AsyncBufferedReader object at 0x7f51bae11250> wrapping <_io.BufferedReader name='/tmp/pytest-of-root/pytest-0/test_upload_chunked_complete0/tempfile'> size = 4194304, chunk_size = 524288, headers = {}, kv = {} content_range = <ContentRange 'bytes 524288-1048575/4194304'>, attempt = 4 file_hasher = <md5 _hashlib.HASH object @ 0x7f51baa7aeb0> chunk_headers = {'Content-Length': '524288', 'Patch-Content-Range': 'bytes 524288-1048575/4194304'} offset = 524288 chunk = b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00...00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' pos = 1048576 async def upload_chunked( client: httpx.AsyncClient, uri: str, data: AsyncFileIO, size: int, chunk_size: int = UPLOAD_CHUNK_SIZE, headers=None, **kv, ): if not headers: headers = {} content_range = None attempt = 0 file_hasher = hashlib.md5() try: chunk_headers = headers.copy() await data.seek(0) while True: offset = await data.tell() chunk = await data.read(chunk_size) if not chunk: break pos = await data.tell() file_hasher.update(chunk) content_range = ContentRange( start=offset, stop=pos, length=size, units="bytes", ) chunk_headers["Patch-Content-Range"] = content_range.to_header() chunk_headers["Content-Length"] = str(len(chunk)) exc = None for attempt in range(MAX_ATTEMPTS): try: logger.debug("patching", uri=uri, size=len(chunk), content_range=content_range, attempt=attempt) r = await client.patch( uri, content=chunk, headers=chunk_headers, **kv, ) logger.debug("patch result", result=r) if r.is_success: break else: r.raise_for_status() except httpx.HTTPStatusError as e: if not e.response.is_server_error: logger.debug("not server error, not retrying", resp=e.response) raise logger.exception("retrying", attempt=attempt) exc = e except httpx.HTTPError as e: logger.exception("retrying", attempt=attempt) exc = e else: raise exc logger.debug("get etag", uri=uri) # now verify the hash r = await client.head( uri, headers=headers, ) calculated_hash = file_hasher.hexdigest() etag, _ = unquote_etag(r.headers.get("etag")) logger.debug("check upload", etag=etag, calculated_hash=calculated_hash) if etag != calculated_hash: raise ChunkedUploadVerificationError( expected=calculated_hash, actual=etag, ) except httpx.HTTPError as e: > raise ChunkedUploadError( content_range=content_range, attempt=attempt, ) from e E obs_proxy.chunked_uploads.client.ChunkedUploadError: Upload error at range bytes 524288-1048575/4194304 (attempt 4): No response can be found for PATCH request on http://example.org/upload with {'Content-Length': '524288'} headers amongst: E - Match HEAD request E - Already matched any request with {'Content-Length': '524288'} headers E E If you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request obs_proxy/chunked_uploads/client.py:125: ChunkedUploadError During handling of the above exception, another exception occurred: self = <contextlib._GeneratorContextManager object at 0x7f51bae12790> typ = <class 'obs_proxy.chunked_uploads.client.ChunkedUploadError'> value = ChunkedUploadError(content_range=<ContentRange 'bytes 524288-1048575/4194304'>, attempt=4) traceback = <traceback object at 0x7f51bc4b67c0> def __exit__(self, typ, value, traceback): if typ is None: try: next(self.gen) except StopIteration: return False else: try: raise RuntimeError("generator didn't stop") finally: self.gen.close() else: if value is None: # Need to force instantiation so we can reliably # tell if we get the same exception back value = typ() try: self.gen.throw(typ, value, traceback) except StopIteration as exc: # Suppress StopIteration *unless* it's the same exception that # was passed to throw(). This prevents a StopIteration # raised inside the "with" statement from being suppressed. return exc is not value except RuntimeError as exc: # Don't re-raise the passed in exception. (issue27122) if exc is value: exc.__traceback__ = traceback return False # Avoid suppressing if a StopIteration exception # was passed to throw() and later wrapped into a RuntimeError # (see PEP 479 for sync generators; async generators also # have this behavior). But do this only if the exception wrapped # by the RuntimeError is actually Stop(Async)Iteration (see # issue29692). if ( isinstance(value, StopIteration) and exc.__cause__ is value ): value.__traceback__ = traceback return False raise except BaseException as exc: # only re-raise if it's *not* the exception that was # passed to throw(), because __exit__() must not raise # an exception unless __exit__() itself failed. But throw() # has to raise the exception to signal propagation, so this # fixes the impedance mismatch between the throw() protocol # and the __exit__() protocol. if exc is not value: raise > exc.__traceback__ = traceback E dataclasses.FrozenInstanceError: cannot assign to field '__traceback__' /usr/local/lib/python3.11/contextlib.py:191: FrozenInstanceError ----------------------------- Captured stdout call ----------------------------- 2025-01-02 09:54:55 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 0-524287/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:55 [debug ] patch result result=<Response [200 OK]> 2025-01-02 09:54:55 [debug ] patching attempt=0 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:55 [error ] retrying attempt=0 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m0[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bae11250[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51baa7aeb0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bae112d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bae112d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38040[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m156.62537686[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae11110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match HEAD request - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:56 [debug ] patching attempt=1 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:56 [error ] retrying attempt=1 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m1[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bae11250[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51baa7aeb0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bb9373d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bb9373d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bc2f73d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m157.768732116[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae11110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match HEAD request - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:57 [debug ] patching attempt=2 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:57 [error ] retrying attempt=2 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m2[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bae11250[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51baa7aeb0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bb937450[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bb937450[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bbb7df30[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m159.003350649[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae11110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match HEAD request - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:54:58 [debug ] patching attempt=3 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:54:58 [error ] retrying attempt=3 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m3[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bae11250[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51baa7aeb0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bc2677d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bc2677d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bba38040[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m160.398138824[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae11110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match HEAD request - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m 2025-01-02 09:55:00 [debug ] patching attempt=4 content_range=<ContentRange 'bytes 524288-1048575/4194304'> size=524288 uri=http://example.org/upload 2025-01-02 09:55:00 [error ] retrying attempt=4 [31m╭─[0m[31m────────────────────[0m[31m [0m[1;31mTraceback [0m[1;2;31m(most recent call last)[0m[31m [0m[31m─────────────────────[0m[31m─╮[0m [31m│[0m [2;33m/builds/infrastructure/obs-proxy/obs_proxy/chunked_uploads/[0m[1;33mclient.py[0m:[94m84[0m in [31m│[0m [31m│[0m [92mupload_chunked[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m 81 [0m[2m│ │ │ [0m[94mfor[0m attempt [95min[0m [96mrange[0m(MAX_ATTEMPTS): [31m│[0m [31m│[0m [2m 82 [0m[2m│ │ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m 83 [0m[2m│ │ │ │ │ [0mlogger.debug([33m"[0m[33mpatching[0m[33m"[0m, uri=uri, size=[96mlen[0m(chunk), [31m│[0m [31m│[0m [31m❱ [0m 84 [2m│ │ │ │ │ [0mr = [94mawait[0m client.patch( [31m│[0m [31m│[0m [2m 85 [0m[2m│ │ │ │ │ │ [0muri, [31m│[0m [31m│[0m [2m 86 [0m[2m│ │ │ │ │ │ [0mcontent=chunk, [31m│[0m [31m│[0m [2m 87 [0m[2m│ │ │ │ │ │ [0mheaders=chunk_headers, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m attempt = [94m4[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m chunk_size = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m client = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content_range = [1m<[0m[1;95mContentRange[0m[39m [0m[33m'bytes 524288-1048575/4194304'[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [1m<[0m[1;95maiofiles.threadpool.binary.AsyncBufferedReader[0m[39m object [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [39mat [0m[94m0x7f51bae11250[0m[39m> wrapping <_io.BufferedReader [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mname[0m[39m=[0m[33m'/tmp/pytest-of-root/pytest-0/test_upload_chunked_…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m e = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m exc = [1;35mTimeoutException[0m[1m([0m[33m"No response can be found for PATCH [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mrequest on http://example.org/upload with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers amongst:\n- Match [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mHEAD request\n- Already matched any request with [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1;33m{[0m[33m'Content-Length': '524288'[0m[1;33m}[0m[33m headers\n\nIf you wanted to[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mreuse an already matched response instead of registering[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mit again, refer to [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33mhttps://github.com/Colin-b/pytest_httpx/blob/master/REA…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m file_hasher = [1m<[0m[1;95mmd5[0m[39m _hashlib.HASH object @ [0m[94m0x7f51baa7aeb0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m kv = [1m{[0m[1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m offset = [94m524288[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m pos = [94m1048576[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m r = [1m<[0m[1;95mResponse[0m[39m [0m[1;39m[[0m[94m200[0m[39m OK[0m[1;39m][0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m size = [94m4194304[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m uri = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1933[0m in [92mpatch[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1930 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1931 [0m[2;33m│ │ [0m[33m**Parameters**: See `httpx.request`.[0m [31m│[0m [31m│[0m [2m1932 [0m[2;33m│ │ [0m[33m"""[0m [31m│[0m [31m│[0m [31m❱ [0m1933 [2m│ │ [0m[94mreturn[0m [94mawait[0m [96mself[0m.request( [31m│[0m [31m│[0m [2m1934 [0m[2m│ │ │ [0m[33m"[0m[33mPATCH[0m[33m"[0m, [31m│[0m [31m│[0m [2m1935 [0m[2m│ │ │ [0murl, [31m│[0m [31m│[0m [2m1936 [0m[2m│ │ │ [0mcontent=content, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1540[0m in [92mrequest[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1537 [0m[2m│ │ │ [0mtimeout=timeout, [31m│[0m [31m│[0m [2m1538 [0m[2m│ │ │ [0mextensions=extensions, [31m│[0m [31m│[0m [2m1539 [0m[2m│ │ [0m) [31m│[0m [31m│[0m [31m❱ [0m1540 [2m│ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m.send(request, auth=auth, follow_redirects=f[0m [31m│[0m [31m│[0m [2m1541 [0m[2m│ [0m [31m│[0m [31m│[0m [2m1542 [0m[2m│ [0m[1;95m@asynccontextmanager[0m [31m│[0m [31m│[0m [2m1543 [0m[2m│ [0m[94masync[0m [94mdef[0m [92mstream[0m( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m content = [33mb'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x…[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m cookies = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m data = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m extensions = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m files = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m headers = [1m{[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Patch-Content-Range'[0m: [33m'bytes [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [33m524288-1048575/4194304'[0m, [33m│[0m [31m│[0m [31m│[0m [33m│[0m [2m│ [0m[33m'Content-Length'[0m: [33m'524288'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [1m}[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m json = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m method = [33m'PATCH'[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m params = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m timeout = [1m<[0m[1;95mhttpx._client.UseClientDefault[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bcc38b90[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m url = [33m'http://example.org/upload'[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1629[0m in [92msend[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1626 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1627 [0m[2m│ │ [0mauth = [96mself[0m._build_request_auth(request, auth) [31m│[0m [31m│[0m [2m1628 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1629 [2m│ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_auth( [31m│[0m [31m│[0m [2m1630 [0m[2m│ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1631 [0m[2m│ │ │ [0mauth=auth, [31m│[0m [31m│[0m [2m1632 [0m[2m│ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb15990[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m stream = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1657[0m in [31m│[0m [31m│[0m [92m_send_handling_auth[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1654 [0m[2m│ │ │ [0mrequest = [94mawait[0m auth_flow.[92m__anext__[0m() [31m│[0m [31m│[0m [2m1655 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [2m1656 [0m[2m│ │ │ [0m[94mwhile[0m [94mTrue[0m: [31m│[0m [31m│[0m [31m❱ [0m1657 [2m│ │ │ │ [0mresponse = [94mawait[0m [96mself[0m._send_handling_redirects( [31m│[0m [31m│[0m [2m1658 [0m[2m│ │ │ │ │ [0mrequest, [31m│[0m [31m│[0m [2m1659 [0m[2m│ │ │ │ │ [0mfollow_redirects=follow_redirects, [31m│[0m [31m│[0m [2m1660 [0m[2m│ │ │ │ │ [0mhistory=history, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m auth = [1m<[0m[1;95mhttpx.Auth[0m[39m object at [0m[94m0x7f51bbb15990[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m auth_flow = [1m<[0m[1;95masync_generator[0m[39m object Auth.async_auth_flow at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bc2f73d0[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1694[0m in [31m│[0m [31m│[0m [92m_send_handling_redirects[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1691 [0m[2m│ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mrequest[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1692 [0m[2m│ │ │ │ [0m[94mawait[0m hook(request) [31m│[0m [31m│[0m [2m1693 [0m[2m│ │ │ [0m [31m│[0m [31m│[0m [31m❱ [0m1694 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m [0m[1;4;96mself[0m[1;4m._send_single_request(request)[0m [31m│[0m [31m│[0m [2m1695 [0m[2m│ │ │ [0m[94mtry[0m: [31m│[0m [31m│[0m [2m1696 [0m[2m│ │ │ │ [0m[94mfor[0m hook [95min[0m [96mself[0m._event_hooks[[33m"[0m[33mresponse[0m[33m"[0m]: [31m│[0m [31m│[0m [2m1697 [0m[2m│ │ │ │ │ [0m[94mawait[0m hook(response) [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m─────────────────────────────[0m[33m locals [0m[33m─────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m follow_redirects = [94mFalse[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m history = [1m[[0m[1m][0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/httpx/[0m[1;33m_client.py[0m:[94m1730[0m in [31m│[0m [31m│[0m [92m_send_single_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m1727 [0m[2m│ │ │ [0m) [31m│[0m [31m│[0m [2m1728 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1729 [0m[2m│ │ [0m[94mwith[0m request_context(request=request): [31m│[0m [31m│[0m [31m❱ [0m1730 [2m│ │ │ [0mresponse = [1;4;94mawait[0m[1;4m transport.handle_async_request(request)[0m [31m│[0m [31m│[0m [2m1731 [0m[2m│ │ [0m [31m│[0m [31m│[0m [2m1732 [0m[2m│ │ [0m[94massert[0m [96misinstance[0m(response.stream, AsyncByteStream) [31m│[0m [31m│[0m [2m1733 [0m[2m│ │ [0mresponse.request = request [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m───────────────────────────[0m[33m locals [0m[33m────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mhttpx.AsyncClient[0m[39m object at [0m[94m0x7f51bae11390[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m start = [94m161.646384035[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰─────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m__init__.py[0m:[94m56[0m in [31m│[0m [31m│[0m [92mmocked_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m53 [0m[2m│ │ [0mtransport: httpx.AsyncHTTPTransport, request: httpx.Request [31m│[0m [31m│[0m [2m54 [0m[2m│ [0m) -> httpx.Response: [31m│[0m [31m│[0m [2m55 [0m[2m│ │ [0m[94mif[0m options.should_mock(request): [31m│[0m [31m│[0m [31m❱ [0m56 [2m│ │ │ [0m[94mreturn[0m [1;4;94mawait[0m[1;4m mock._handle_async_request(transport, request)[0m [31m│[0m [31m│[0m [2m57 [0m[2m│ │ [0m[94mreturn[0m [94mawait[0m real_handle_async_request(transport, request) [31m│[0m [31m│[0m [2m58 [0m[2m│ [0m [31m│[0m [31m│[0m [2m59 [0m[2m│ [0mmonkeypatch.setattr( [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m mock = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m options = [1m<[0m[1;95mpytest_httpx._options._HTTPXMockOptions[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae11110[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m183[0m in [31m│[0m [31m│[0m [92m_handle_async_request[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m180 [0m[2m│ │ │ │ │ [0mresponse = [94mawait[0m response [31m│[0m [31m│[0m [2m181 [0m[2m│ │ │ │ [0m[94mreturn[0m _unread(response) [31m│[0m [31m│[0m [2m182 [0m[2m│ │ [0m [31m│[0m [31m│[0m [31m❱ [0m183 [2m│ │ [0m[1;4;96mself[0m[1;4m._request_not_matched(real_transport, request)[0m [31m│[0m [31m│[0m [2m184 [0m[2m│ [0m [31m│[0m [31m│[0m [2m185 [0m[2m│ [0m[94mdef[0m [92m_request_not_matched[0m( [31m│[0m [31m│[0m [2m186 [0m[2m│ │ [0m[96mself[0m, [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m callback = [94mNone[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2;33m/usr/local/lib/python3.11/site-packages/pytest_httpx/[0m[1;33m_httpx_mock.py[0m:[94m191[0m in [31m│[0m [31m│[0m [92m_request_not_matched[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [2m188 [0m[2m│ │ [0mrequest: httpx.Request, [31m│[0m [31m│[0m [2m189 [0m[2m│ [0m) -> NoReturn: [31m│[0m [31m│[0m [2m190 [0m[2m│ │ [0m[96mself[0m._requests_not_matched.append(request) [31m│[0m [31m│[0m [31m❱ [0m191 [2m│ │ [0m[1;4;94mraise[0m[1;4m httpx.TimeoutException([0m [31m│[0m [31m│[0m [2m192 [0m[1;2;4m│ │ │ [0m[1;4;96mself[0m[1;4m._explain_that_no_response_was_found(real_transport, r[0m [31m│[0m [31m│[0m [2m193 [0m[1;2;4m│ │ │ [0m[1;4mrequest=request,[0m [31m│[0m [31m│[0m [2m194 [0m[1;2;4m│ │ [0m[1;4m)[0m [31m│[0m [31m│[0m [31m│[0m [31m│[0m [33m╭─[0m[33m────────────────────────────────[0m[33m locals [0m[33m────────────────────────────────[0m[33m─╮[0m [31m│[0m [31m│[0m [33m│[0m real_transport = [1m<[0m[1;95mhttpx.AsyncHTTPTransport[0m[39m object at [0m[94m0x7f51bae12b10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m request = [1m<[0m[1;35mRequest[0m[1;39m([0m[33m'PATCH'[0m[39m, [0m[33m'http://example.org/upload'[0m[1;39m)[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m self = [1m<[0m[1;95mpytest_httpx._httpx_mock.HTTPXMock[0m[39m object at [0m [33m│[0m [31m│[0m [31m│[0m [33m│[0m [94m0x7f51bae10c10[0m[1m>[0m [33m│[0m [31m│[0m [31m│[0m [33m╰──────────────────────────────────────────────────────────────────────────╯[0m [31m│[0m [31m╰──────────────────────────────────────────────────────────────────────────────╯[0m [1;91mTimeoutException: [0mNo response can be found for PATCH request on [4;94mhttp://example.org/upload[0m with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers amongst: - Match HEAD request - Already matched any request with [1m{[0m[32m'Content-Length'[0m: [32m'524288'[0m[1m}[0m headers If you wanted to reuse an already matched response instead of registering it again, refer to [4;94mhttps://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-[0m [4;94ma-response-for-more-than-one-request[0m =============================== warnings summary =============================== tests/chunked_uploads/test_upload_client_server.py: 10 warnings tests/chunked_uploads/test_upload_endpoint.py: 8 warnings tests/test_auth.py: 4 warnings tests/upload/test_upload_five_gigazeroes.py: 4 warnings tests/upload/test_upload_prefix.py: 4 warnings /usr/local/lib/python3.11/site-packages/quart/wrappers/response.py:335: DeprecationWarning: The 'charset' attribute is deprecated and will not be used in Werkzeug 2.4. Text in body and cookie data will always use UTF-8. bytes_data = data.encode(self.charset) -- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html ---- generated xml file: /builds/infrastructure/obs-proxy/test-results.xml ----- =========================== short test summary info ============================ FAILED tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_timeout - AssertionError: Regex pattern did not match. Regex: 'Upload error at range bytes 2621440-3145727/4194304 .attempt 4.: Simulated timeout' Input: "Upload error at range bytes 524288-1048575/4194304 (attempt 4): No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst:\n- Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers\n- Already matched any request with {'Content-Length': '524288'} headers\n\nIf you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request" FAILED tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_wrong_response - AssertionError: Regex pattern did not match. Regex: "Upload error at range bytes 2621440-3145727/4194304 .attempt 0.: .*418 I'm a teapot.*" Input: "Upload error at range bytes 524288-1048575/4194304 (attempt 4): No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst:\n- Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers\n- Already matched any request with {'Content-Length': '524288'} headers\n\nIf you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request" FAILED tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_transient_server_error - AssertionError: Regex pattern did not match. Regex: 'Upload error at range bytes 2621440-3145727/4194304 .attempt 4.: .*500 Internal Server Error.*' Input: "Upload error at range bytes 524288-1048575/4194304 (attempt 4): No response can be found for PATCH request on http://example.org/upload with {'Patch-Content-Range': 'bytes 524288-1048575/4194304', 'Content-Length': '524288'} headers amongst:\n- Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers\n- Already matched any request with {'Content-Length': '524288'} headers\n\nIf you wanted to reuse an already matched response instead of registering it again, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-a-response-for-more-than-one-request" FAILED tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_complete - dataclasses.FrozenInstanceError: cannot assign to field '__traceback__' ERROR tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_timeout - AssertionError: The following responses are mocked but not requested: - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested assert not [<pytest_httpx._request_matcher._RequestMatcher object at 0x7f51bba1b950>] ERROR tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_wrong_response - AssertionError: The following responses are mocked but not requested: - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested assert not [<pytest_httpx._request_matcher._RequestMatcher object at 0x7f51badfa150>] ERROR tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_transient_server_error - AssertionError: The following responses are mocked but not requested: - Match any request with {'Patch-Content-Range': 'bytes 2621440-3145727/4194304'} headers If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested assert not [<pytest_httpx._request_matcher._RequestMatcher object at 0x7f51bba09e50>] ERROR tests/chunked_uploads/test_upload_chunked.py::test_upload_chunked_complete - AssertionError: The following responses are mocked but not requested: - Match HEAD request If this is on purpose, refer to https://github.com/Colin-b/pytest_httpx/blob/master/README.md#allow-to-register-more-responses-than-what-will-be-requested assert not [<pytest_httpx._request_matcher._RequestMatcher object at 0x7f51bae13dd0>] ======= 4 failed, 26 passed, 30 warnings, 4 errors in 142.40s (0:02:22) ======== section_end:1735811817:step_script [0Ksection_start:1735811817:upload_artifacts_on_failure [0K[0K[36;1mUploading artifacts for failed job[0;m[0;m [32;1mUploading artifacts...[0;m test-results.xml: found 1 matching artifact files and directories[0;m Uploading artifacts as "junit" to coordinator... 201 Created[0;m id[0;m=3636256 responseStatus[0;m=201 Created token[0;m=glcbt-64 section_end:1735811818:upload_artifacts_on_failure [0Ksection_start:1735811818:cleanup_file_variables [0K[0K[36;1mCleaning up project directory and file based variables[0;m[0;m section_end:1735811818:cleanup_file_variables [0K[31;1mERROR: Job failed: exit code 1 [0;m