Skip to content

Bump aiohttp from 3.13.5 to 3.14.1#164

Open
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/aiohttp-3.14.1
Open

Bump aiohttp from 3.13.5 to 3.14.1#164
dependabot[bot] wants to merge 1 commit into
mainfrom
dependabot/uv/aiohttp-3.14.1

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Jun 17, 2026

Copy link
Copy Markdown
Contributor

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    You can disable automated security fix PRs for this repo from the Security Alerts page.

---
updated-dependencies:
- dependency-name: aiohttp
  dependency-version: 3.14.1
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot dependabot Bot added dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code labels Jun 17, 2026
@codecov

codecov Bot commented Jun 17, 2026

Copy link
Copy Markdown

❌ 31 Tests Failed:

Tests completed Failed Passed Skipped
571 31 540 5
View the top 3 failed test(s) by shortest run time
tests.apps.animal_test::test_get_dog_image_url_empty_url
Stack Traces | 0.004s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec4ed250>

    @pytest.mark.anyio
    async def test_get_dog_image_url_empty_url(response_mock):
        response_mock.get(
            DOG_API_URL,
            payload={"status": "success", "message": ""},
        )
        with pytest.raises(APIServerError):
>           await get_dog_image_url(1.0)

tests/apps/animal_test.py:213: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:67: in get_dog_image_url
    async with session.get(DOG_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://dog..../breeds/image/random')
url = URL('https://dog..../breeds/image/random'), method = 'get'
request_headers = {}, status = 200
body = b'{"status": "success", "message": ""}'
content_type = 'application/json'
payload = {'message': '', 'status': 'success'}, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_dog_image_url_no_url
Stack Traces | 0.004s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec6abce0>

    @pytest.mark.anyio
    async def test_get_dog_image_url_no_url(response_mock):
        response_mock.get(
            DOG_API_URL,
            payload={"status": "success"},
        )
        with pytest.raises(APIServerError):
>           await get_dog_image_url(1.0)

tests/apps/animal_test.py:203: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:67: in get_dog_image_url
    async with session.get(DOG_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://dog..../breeds/image/random')
url = URL('https://dog..../breeds/image/random'), method = 'get'
request_headers = {}, status = 200, body = b'{"status": "success"}'
content_type = 'application/json', payload = {'status': 'success'}
headers = None, response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_dog_image_url_server_error
Stack Traces | 0.004s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec4de8d0>

    @pytest.mark.anyio
    async def test_get_dog_image_url_server_error(response_mock):
        response_mock.get(
            DOG_API_URL,
            status=500,
        )
        with pytest.raises(APIServerError):
>           await get_dog_image_url(1.0)

tests/apps/animal_test.py:178: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:67: in get_dog_image_url
    async with session.get(DOG_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://dog..../breeds/image/random')
url = URL('https://dog..../breeds/image/random'), method = 'get'
request_headers = {}, status = 500, body = b''
content_type = 'application/json', payload = None, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'Internal Server Error'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_dog_image_url_timeout
Stack Traces | 0.004s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec6aa140>

    @pytest.mark.anyio
    async def test_get_dog_image_url_timeout(response_mock):
        URL_TIMEOUT = "http://dog.com/timeout.jpg"
        response_mock.get(
            DOG_API_URL,
            payload={"status": "success", "message": URL_TIMEOUT},
        )
        response_mock.get(
            URL_TIMEOUT,
            exception=TimeoutError(),
        )
        with pytest.raises(TimeoutError):
>           await get_dog_image_url(10.0)

tests/apps/animal_test.py:193: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:67: in get_dog_image_url
    async with session.get(DOG_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://dog..../breeds/image/random')
url = URL('https://dog..../breeds/image/random'), method = 'get'
request_headers = {}, status = 200
body = b'{"status": "success", "message": "http://dog.com/timeout.jpg"}'
content_type = 'application/json'
payload = {'message': 'http://dog.com/timeout.jpg', 'status': 'success'}
headers = None, response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_fox_image_url
Stack Traces | 0.004s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec4ff230>

    @pytest.mark.anyio
    async def test_get_fox_image_url(response_mock):
        IMAGE_URL = "http://fox.com/img1.png"
        response_mock.get(
            FOX_GALLERY_URL,
            body=(
                '<div id="gallery-0">'
                '<img src="http://fox.com/not-gallery-0.png" class="attachment-thumbnail">'
                "</div>"
                '<div id="gallery-1">'
                '<img src="http://fox.com/not-thumbnail.png">'
                f'<img src="{IMAGE_URL}" class="attachment-thumbnail">'
                '<img src="http://fox.com/img2.png" class="attachment-thumbnail">'
                '<img src="http://fox.com/img3.png" class="attachment-thumbnail">'
                "</div>"
            ),
            headers={"Content-Type": "text/html"},
        )
>       url = await get_fox_image_url(0.001)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/apps/animal_test.py:291: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:91: in get_fox_image_url
    session.get(FOX_GALLERY_URL) as resp,
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('http://fox-info.net/fox-gallery')
url = URL('http://fox-info.net/fox-gallery'), method = 'get'
request_headers = {}, status = 200
body = b'<div id="gallery-0"><img src="http://fox.com/not-gallery-0.png" class="attachment-thumbnail"></div><div id="gallery-.../fox.com/img2.png" class="attachment-thumbnail"><img src="http://fox.com/img3.png" class="attachment-thumbnail"></div>'
content_type = 'application/json', payload = None
headers = {'Content-Type': 'text/html'}
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_fox_image_url_server_error
Stack Traces | 0.004s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec6a28a0>

    @pytest.mark.anyio
    async def test_get_fox_image_url_server_error(response_mock):
        response_mock.get(
            FOX_GALLERY_URL,
            status=500,
        )
        with pytest.raises(APIServerError):
>           await get_fox_image_url(1.0)

tests/apps/animal_test.py:259: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:91: in get_fox_image_url
    session.get(FOX_GALLERY_URL) as resp,
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('http://fox-info.net/fox-gallery')
url = URL('http://fox-info.net/fox-gallery'), method = 'get'
request_headers = {}, status = 500, body = b''
content_type = 'application/json', payload = None, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'Internal Server Error'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.info.packtpub_test::test_auto_packtpub_dotd
Stack Traces | 0.004s run time
bot_config = Config(DEBUG=True, RECEIVE_TIMEOUT=300, REGISTER_CRONTAB=False, PREFIX='', APPS=(), DATABASE_URL='postgresql+psycopg:/..._TOKEN', BOT_TOKEN='TEST_BOT_TOKEN', CHANNELS={'general': 'C0FFEE'}, USERS={'owner': 'U0000'}, WEBSOCKETDEBUGGERURL='')
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec206710>
channel_id = 'C0FFEE'

    @pytest.mark.anyio
    @travel(datetime(2018, 10, 7), tick=False)
    async def test_auto_packtpub_dotd(bot_config, response_mock, channel_id):
        title = "test book"
        image_url = "test url"
        response_mock.get(
            "https://www.packtpub.com/free-learning",
            body=MOCK_BODY.format(title=title, image_url=image_url),
            headers={"Content-Type": "text/html"},
        )
    
        bot_config.CHANNELS = {
            "general": channel_id,
        }
        bot = FakeBot(bot_config)
    
>       await auto_packtpub_dotd(bot)

.../apps/info/packtpub_test.py:123: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../info/packtpub/tasks.py:7: in auto_packtpub_dotd
    await say_packtpub_dotd(bot, bot.config.CHANNELS["general"])
.../info/packtpub/commons.py:19: in say_packtpub_dotd
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://www.packtpub.com/free-learning')
url = URL('https://www.packtpub.com/free-learning'), method = 'get'
request_headers = <CIMultiDict('User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36')>
status = 200
body = b'<!doctype html>\n<html>\n<main class="product">\n<h3 class="product-info__title">Free eBook - test book</h3>\n<img class="product-image" src="test url" alt="">\n</main>\n</html>\n'
content_type = 'application/json', payload = None
headers = {'Content-Type': 'text/html'}
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.search.subway_test::test_get_shortest_route_fail
Stack Traces | 0.004s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec2dd550>
time = datetime.datetime(2026, 6, 18, 9, 0, tzinfo=zoneinfo.ZoneInfo(key='Asia/Seoul'))
start_id = '133', goal_id = '1914'

    @pytest.mark.anyio
    async def test_get_shortest_route_fail(response_mock, time, start_id, goal_id):
        url = URL(
            "https://map.naver..../api/pubtrans/subway-directions",
        ).with_query(
            start=start_id,
            goal=goal_id,
            departureTime=time.strftime("%Y-%m-%dT%H:%M:%S") + "+09:00",
        )
        response_mock.get(
            url,
            payload={"error": "error"},
        )
        response_mock.get(
            url,
            payload={"paths": []},
        )
        with pytest.raises(ValueError):
>           await get_shortest_route(
                REGION_TABLE["수도권"][0],
                start_id,
                goal_id,
                time,
            )

.../apps/search/subway_test.py:278: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../apps/search/subway.py:138: in get_shortest_route
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://map.naver..../api/pubtrans/subway-directions?departureTime=2026-06-18T09%253A00%253A00%252B09%253A00&goal=1914&start=133')
url = URL('https://map.naver..../api/pubtrans/subway-directions?departureTime=2026-06-18T09%253A00%253A00%252B09%253A00&goal=1914&start=133')
method = 'get'
request_headers = <CIMultiDict('User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36', 'Referer': 'https://map.naver..../p/subway/1000/-/-/-')>
status = 200, body = b'{"error": "error"}', content_type = 'application/json'
payload = {'error': 'error'}, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.weather.geo_test::test_get_weather_google_427
Stack Traces | 0.004s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec2797d0>
unavailable_address = 'WRONG'

    @pytest.mark.anyio
    async def test_get_weather_google_427(
        response_mock,
        unavailable_address,
    ):
        key = "XXX"
        response_mock.get(
            URL("https://maps.googleapis..../api/geocode/json").with_query(
                region="kr",
                address=unavailable_address,
                key=key,
            ),
            payload={
                "results": [],
            },
            status=427,
        )
        with pytest.raises(WeatherResponseError):
>           await get_geometric_info_by_address(
                unavailable_address,
                key,
            )

.../apps/weather/geo_test.py:75: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../apps/weather/geo.py:21: in get_geometric_info_by_address
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://maps.googleapis..../api/geocode/json?address=WRONG&key=XXX&region=kr')
url = URL('https://maps.googleapis..../api/geocode/json?address=WRONG&key=XXX&region=kr')
method = 'get', request_headers = <CIMultiDict('Accept-Language': 'ko-KR')>
status = 427, body = b'{"results": []}', content_type = 'application/json'
payload = {'results': []}, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = ''

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.weather.geo_test::test_get_weather_wrong_geometric_info
Stack Traces | 0.004s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec3fd3d0>
unavailable_address = 'WRONG'

    @pytest.mark.anyio
    async def test_get_weather_wrong_geometric_info(
        response_mock,
        unavailable_address,
    ):
        key = "XXX"
        response_mock.get(
            URL("https://maps.googleapis..../api/geocode/json").with_query(
                region="kr",
                address=unavailable_address,
                key=key,
            ),
            payload={
                "results": [],
            },
        )
        with pytest.raises(IndexError):
>           await get_geometric_info_by_address(
                unavailable_address,
                key,
            )

.../apps/weather/geo_test.py:51: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../apps/weather/geo.py:21: in get_geometric_info_by_address
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://maps.googleapis..../api/geocode/json?address=WRONG&key=XXX&region=kr')
url = URL('https://maps.googleapis..../api/geocode/json?address=WRONG&key=XXX&region=kr')
method = 'get', request_headers = <CIMultiDict('Accept-Language': 'ko-KR')>
status = 200, body = b'{"results": []}', content_type = 'application/json'
payload = {'results': []}, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.weather.weather_test::test_get_weather_with_bad_json
Stack Traces | 0.004s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec3ac5d0>
address = '부천'

    @pytest.mark.anyio
    async def test_get_weather_with_bad_json(response_mock, address):
        response_mock.get(
            "https://item4.net/api/weather/",
            body="[}",
            status=200,
        )
    
        with pytest.raises(WeatherResponseError, match="JSON 파싱 실패"):
>           await get_weather_by_keyword(address)

.../apps/weather/weather_test.py:43: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../apps/weather/weather.py:114: in get_weather_by_keyword
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://item4.net/api/weather/')
url = URL('https://item4.net/api/weather/'), method = 'get'
request_headers = {}, status = 200, body = b'[}'
content_type = 'application/json', payload = None, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.weather.weather_test::test_get_weather_with_bad_response
Stack Traces | 0.004s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fed438cd0>
address = '부천'

    @pytest.mark.anyio
    async def test_get_weather_with_bad_response(response_mock, address):
        response_mock.get(
            "https://item4.net/api/weather/",
            payload={},
            status=400,
        )
    
        with pytest.raises(WeatherResponseError, match="Bad HTTP Response"):
>           await get_weather_by_keyword(address)

.../apps/weather/weather_test.py:31: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../apps/weather/weather.py:114: in get_weather_by_keyword
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://item4.net/api/weather/')
url = URL('https://item4.net/api/weather/'), method = 'get'
request_headers = {}, status = 400, body = b'{}'
content_type = 'application/json', payload = {}, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'Bad Request'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_cat_image_url_server_error
Stack Traces | 0.005s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec63dfd0>

    @pytest.mark.anyio
    async def test_get_cat_image_url_server_error(response_mock):
        response_mock.get(
            CAT_API_URL,
            status=500,
        )
        with pytest.raises(APIServerError):
>           await get_cat_image_url(1.0)

tests/apps/animal_test.py:41: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:40: in get_cat_image_url
    async with session.get(CAT_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
url = URL('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
method = 'get', request_headers = {}, status = 500, body = b''
content_type = 'application/json', payload = None, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'Internal Server Error'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_fox_image_url_no_image
Stack Traces | 0.005s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec4d32f0>

    @pytest.mark.anyio
    async def test_get_fox_image_url_no_image(response_mock):
        response_mock.get(
            FOX_GALLERY_URL,
            body="<!doctype html><html></html>",
            headers={"Content-Type": "text/html"},
        )
        with pytest.raises(APIServerError):
>           await get_fox_image_url(0.001)

tests/apps/animal_test.py:270: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:91: in get_fox_image_url
    session.get(FOX_GALLERY_URL) as resp,
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('http://fox-info.net/fox-gallery')
url = URL('http://fox-info.net/fox-gallery'), method = 'get'
request_headers = {}, status = 200, body = b'<!doctype html><html></html>'
content_type = 'application/json', payload = None
headers = {'Content-Type': 'text/html'}
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.info.packtpub_test::test_no_packtpub_dotd
Stack Traces | 0.005s run time
bot = <tests.util.FakeBot object at 0x7f2febf03c50>
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec200e10>

    @pytest.mark.anyio
    @travel(datetime(2018, 10, 7), tick=False)
    async def test_no_packtpub_dotd(bot, response_mock):
        response_mock.get(
            "https://www.packtpub.com/free-learning",
            body="""\
    <!doctype html>
    <html>
    <main class="product">
    <p>Something else</p>
    </main>
    </html>
    """,
            headers={"Content-Type": "text/html"},
        )
    
        event = bot.create_message()
    
>       await packtpub_dotd(bot, event)

.../apps/info/packtpub_test.py:45: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../info/packtpub/commands.py:17: in packtpub_dotd
    await say_packtpub_dotd(bot, event.channel)
.../info/packtpub/commons.py:19: in say_packtpub_dotd
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://www.packtpub.com/free-learning')
url = URL('https://www.packtpub.com/free-learning'), method = 'get'
request_headers = <CIMultiDict('User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36')>
status = 200
body = b'<!doctype html>\n<html>\n<main class="product">\n<p>Something else</p>\n</main>\n</html>\n'
content_type = 'application/json', payload = None
headers = {'Content-Type': 'text/html'}
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.info.packtpub_test::test_packtpub_dotd
Stack Traces | 0.005s run time
bot = <tests.util.FakeBot object at 0x7f300fa0da50>
response_mock = <aioresponses.core.aioresponses object at 0x7f2febd9bc50>

    @pytest.mark.anyio
    @travel(datetime(2018, 10, 7), tick=False)
    async def test_packtpub_dotd(bot, response_mock):
        title = "test book"
        image_url = "test url"
        response_mock.get(
            "https://www.packtpub.com/free-learning",
            body=MOCK_BODY.format(title=title, image_url=image_url),
            headers={"Content-Type": "text/html"},
        )
    
        event = bot.create_message()
    
>       await packtpub_dotd(bot, event)

.../apps/info/packtpub_test.py:66: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../info/packtpub/commands.py:17: in packtpub_dotd
    await say_packtpub_dotd(bot, event.channel)
.../info/packtpub/commons.py:19: in say_packtpub_dotd
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://www.packtpub.com/free-learning')
url = URL('https://www.packtpub.com/free-learning'), method = 'get'
request_headers = <CIMultiDict('User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0 Safari/537.36')>
status = 200
body = b'<!doctype html>\n<html>\n<main class="product">\n<h3 class="product-info__title">Free eBook - test book</h3>\n<img class="product-image" src="test url" alt="">\n</main>\n</html>\n'
content_type = 'application/json', payload = None
headers = {'Content-Type': 'text/html'}
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.bot_test::test_call
Stack Traces | 0.006s run time
bot_config = Config(DEBUG=True, RECEIVE_TIMEOUT=300, REGISTER_CRONTAB=False, PREFIX='', APPS=(), DATABASE_URL='postgresql+psycopg:/...APP_TOKEN='TEST_APP_TOKEN', BOT_TOKEN='TEST_BOT_TOKEN', CHANNELS={}, USERS={'owner': 'U0000'}, WEBSOCKETDEBUGGERURL='')
response_mock = <aioresponses.core.aioresponses object at 0x7f2fe879d350>

    @pytest.mark.anyio
    async def test_call(bot_config, response_mock):
        token = "asdf1234"  # noqa: S105
    
        response_mock.post(
            "https://slack.com/api/test11",
            payload={"res": "hello world!"},
        )
        response_mock.post(
            "https://slack.com/api/test12",
            payload={"res": "hello world!", "data": {"extra": "wow"}},
        )
    
        response_mock.post(
            "https://slack.com/api/test21",
            payload={"error": "aaa"},
            status=404,
        )
        response_mock.post(
            "https://slack.com/api/test22",
            payload={"error": "aaa"},
            status=404,
        )
        response_mock.post(
            "https://slack.com/api/test3",
            payload={"res": "hello world!"},
        )
        response_mock.post(
            "https://slack.com/api/test4",
            body="error",
            content_type="text/plain",
        )
    
        box = Box()
        async with Bot(bot_config, using_box=box) as bot:
            bot.api.throttle_interval = defaultdict(lambda: timedelta(0))
    
>           resp = await bot.call("test11")
                   ^^^^^^^^^^^^^^^^^^^^^^^^

tests/bot_test.py:74: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/bot.py:362: in call
    session.post(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://slack.com/api/test11')
url = URL('https://slack.com/api/test11'), method = 'post'
request_headers = <CIMultiDict('Content-Type': 'application/x-www-form-urlencoded')>
status = 200, body = b'{"res": "hello world!"}'
content_type = 'application/json', payload = {'res': 'hello world!'}
headers = None, response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.bot_test::test_call_json
Stack Traces | 0.006s run time
bot_config = Config(DEBUG=True, RECEIVE_TIMEOUT=300, REGISTER_CRONTAB=False, PREFIX='', APPS=(), DATABASE_URL='postgresql+psycopg:/...APP_TOKEN='TEST_APP_TOKEN', BOT_TOKEN='TEST_BOT_TOKEN', CHANNELS={}, USERS={'owner': 'U0000'}, WEBSOCKETDEBUGGERURL='')
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec358ed0>
channel_id = 'C0FFEE'

    @pytest.mark.anyio
    async def test_call_json(bot_config, response_mock, channel_id):
        response_mock.post(
            "https://slack.com/api/chat.postMessage",
            payload={"ok": True},
        )
    
        box = Box()
        async with Bot(bot_config, using_box=box) as bot:
            bot.api.throttle_interval = defaultdict(lambda: timedelta(0))
    
>           resp = await bot.api.chat.postMessage(channel_id, "hello world!")
                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/bot_test.py:122: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/api/chat.py:160: in postMessage
    return await self._call(
yui/api/endpoint.py:49: in _call
    return await self.bot.call(
yui/bot.py:362: in call
    session.post(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://slack.com/api/chat.postMessage')
url = URL('https://slack.com/api/chat.postMessage'), method = 'post'
request_headers = <CIMultiDict('Content-Type': 'application/json; charset=utf-8', 'Authorization': 'Bearer TEST_BOT_TOKEN')>
status = 200, body = b'{"ok": true}', content_type = 'application/json'
payload = {'ok': True}, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.compute.exchange_test::test_exchange_error
Stack Traces | 0.007s run time
bot = <tests.util.FakeBot object at 0x7f300f675b50>
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec502690>

    @pytest.mark.anyio
    async def test_exchange_error(bot, response_mock):
        response_mock.get(
            URL("https://api.manana.kr/exchange/rate.json").with_query(
                base="KRW",
                code="JPY",
            ),
            payload=[False],
        )
        event = bot.create_message()
    
>       await exchange(bot, event, "100엔")

.../apps/compute/exchange_test.py:81: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../apps/compute/exchange.py:100: in exchange
    data = await get_exchange_rate(base, to, timeout=timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../apps/compute/exchange.py:62: in get_exchange_rate
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://api.manana.kr/exchange/rate.json?base=KRW&code=JPY')
url = URL('https://api.manana.kr/exchange/rate.json?base=KRW&code=JPY')
method = 'get', request_headers = {}, status = 200, body = b'[false]'
content_type = 'application/json', payload = [False], headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_dog_command
Stack Traces | 0.01s run time
bot = <tests.util.FakeBot object at 0x7f2fec4743d0>
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec5aac30>

    @pytest.mark.anyio
    async def test_dog_command(bot, response_mock):
        response_mock.get(
            DOG_API_URL,
            status=500,
        )
        response_mock.get(
            DOG_API_URL,
            payload={"status": "success", "message": "http://dog.com/200.jpg"},
        )
        response_mock.get(
            DOG_API_URL,
            status=500,
        )
        response_mock.get(
            DOG_API_URL,
            payload={"status": "success", "message": "http://dog.com/200.jpg"},
        )
        response_mock.get("http://dog.com/200.jpg")
        response_mock.get("http://dog.com/200.jpg")
    
        event = bot.create_message()
    
        last_call = await bot.cache.get(f"YUI_APPS_ANIMAL_DOG_{event.channel}")
        assert last_call is None
    
>       await dog(bot, event)

tests/apps/animal_test.py:441: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:184: in dog
    url = await get_dog_image_url(timeout)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
yui/apps/animal.py:67: in get_dog_image_url
    async with session.get(DOG_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://dog..../breeds/image/random')
url = URL('https://dog..../breeds/image/random'), method = 'get'
request_headers = {}, status = 500, body = b''
content_type = 'application/json', payload = None, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'Internal Server Error'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_fox_command
Stack Traces | 0.01s run time
bot = <tests.util.FakeBot object at 0x7f2fec476a50>
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec500d10>

    @pytest.mark.anyio
    async def test_fox_command(bot, response_mock):
        response_mock.get(
            FOX_GALLERY_URL,
            body="<!doctype html><html></html>",
            headers={"Content-Type": "text/html"},
        )
        response_mock.get(
            FOX_GALLERY_URL,
            body=(
                '<div id="gallery-1">'
                '<img src="http://fox.com/img1.png" class="attachment-thumbnail">'
                '<img src="http://fox.com/img2.png" class="attachment-thumbnail">'
                '<img src="http://fox.com/img3.png" class="attachment-thumbnail">'
                "</div>"
            ),
            headers={"Content-Type": "text/html"},
        )
        response_mock.get(
            FOX_GALLERY_URL,
            body="<!doctype html><html></html>",
            headers={"Content-Type": "text/html"},
        )
        response_mock.get(
            FOX_GALLERY_URL,
            body=(
                '<div id="gallery-1">'
                '<img src="http://fox.com/img1.png" class="attachment-thumbnail">'
                '<img src="http://fox.com/img2.png" class="attachment-thumbnail">'
                '<img src="http://fox.com/img3.png" class="attachment-thumbnail">'
                "</div>"
            ),
            headers={"Content-Type": "text/html"},
        )
        event = bot.create_message()
    
        last_call = await bot.cache.get(f"YUI_APPS_ANIMAL_FOX_{event.channel}")
        assert last_call is None
    
>       await fox(bot, event)

tests/apps/animal_test.py:558: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:231: in fox
    url = await get_fox_image_url(timeout)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
yui/apps/animal.py:91: in get_fox_image_url
    session.get(FOX_GALLERY_URL) as resp,
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('http://fox-info.net/fox-gallery')
url = URL('http://fox-info.net/fox-gallery'), method = 'get'
request_headers = {}, status = 200, body = b'<!doctype html><html></html>'
content_type = 'application/json', payload = None
headers = {'Content-Type': 'text/html'}
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.weather.commands_test::test_weather_command_server_error
Stack Traces | 0.01s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2febe3ec50>
bot = <tests.util.FakeBot object at 0x7f2febe3f250>, address = '부천'

    @pytest.mark.anyio
    async def test_weather_command_server_error(
        response_mock,
        bot,
        address,
    ):
        response_mock.get(
            "https://item4.net/api/weather/",
            body="[}",
        )
        event = bot.create_message()
    
>       await weather(bot, event, address)

.../apps/weather/commands_test.py:85: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../apps/weather/commands.py:32: in weather
    result = await get_weather_by_keyword(keyword)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.../apps/weather/weather.py:114: in get_weather_by_keyword
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://item4.net/api/weather/')
url = URL('https://item4.net/api/weather/'), method = 'get'
request_headers = {}, status = 200, body = b'[}'
content_type = 'application/json', payload = None, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.info.rss_test::test_add_wrong_body
Stack Traces | 0.045s run time
bot = <tests.util.FakeBot object at 0x7f2fec2d0050>
fx_sess = <sqlalchemy.orm.session.AsyncSession object at 0x7f2fec294830>
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec358a50>

    @pytest.mark.anyio
    async def test_add_wrong_body(bot, fx_sess, response_mock):
        response_mock.get(
            URL("https://test.dev/rss.xml"),
            body=b"wrong body",
        )
        r = RSS()
    
        event = bot.create_message()
    
>       await r.add(bot, event, fx_sess, "https://test.dev/rss.xml")

.../apps/info/rss_test.py:115: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../info/rss/commands.py:67: in add
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://test.dev/rss.xml')
url = URL('https://test.dev/rss.xml'), method = 'get', request_headers = {}
status = 200, body = b'wrong body', content_type = 'application/json'
payload = None, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.info.rss_test::test_add_empty_body
Stack Traces | 0.049s run time
bot = <tests.util.FakeBot object at 0x7f2febe2ee50>
fx_sess = <sqlalchemy.orm.session.AsyncSession object at 0x7f2febd73380>
response_mock = <aioresponses.core.aioresponses object at 0x7f2febe2e1d0>

    @pytest.mark.anyio
    async def test_add_empty_body(bot, fx_sess, response_mock):
        response_mock.get(
            URL("https://test.dev/rss.xml"),
            body=b"",
        )
        r = RSS()
    
        event = bot.create_message()
    
>       await r.add(bot, event, fx_sess, "https://test.dev/rss.xml")

.../apps/info/rss_test.py:97: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../info/rss/commands.py:67: in add
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://test.dev/rss.xml')
url = URL('https://test.dev/rss.xml'), method = 'get', request_headers = {}
status = 200, body = b'', content_type = 'application/json', payload = None
headers = None, response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.info.rss_test::test_add_success
Stack Traces | 0.05s run time
bot = <tests.util.FakeBot object at 0x7f2febeed050>
fx_sess = <sqlalchemy.orm.session.AsyncSession object at 0x7f2fec294ec0>
response_mock = <aioresponses.core.aioresponses object at 0x7f2febeed350>

    @pytest.mark.anyio
    async def test_add_success(bot, fx_sess, response_mock):
        response_mock.get(
            URL("https://test.dev/rss.xml"),
            body="""\
    <rss xmlns:c="http://purl.org/rss/1.0/modules/content/" version="2.0">
    <channel>
    <title>item4 dev story</title>
    <link>https://item4.blog</link>
    <description>한국인 소프트웨어 엔지니어 item4의 기술 블로그</description>
    <lastBuildDate>Sun, 22 Mar 2020 09:09:00 GMT</lastBuildDate>
    <docs>https://validator.w3..../feed/docs/rss2.html</docs>
    <generator>item4 Next.js blog Powered by Feed for nodejs</generator>
    <language>ko-KR</language>
    <image>
    <title>item4 dev story</title>
    <url>https://item4.blog/item4.png</url>
    <link>https://item4.blog</link>
    </image>
    <copyright>CCL 4.0 BY-SA</copyright>
    <item>
    <title>
    <![CDATA[ drf-yasg-examples ]]>
    </title>
    <link>https://item4.blog/2020-03-22/drf-yasg-examples/</link>
    <guid>https://item4.blog/2020-03-22/drf-yasg-examples/</guid>
    <pubDate>Sun, 22 Mar 2020 09:09:00 GMT</pubDate>
    <description>
    <![CDATA[ Introduce drf-yasg-examples Package ]]>
    </description>
    <c:encoded>
    <![CDATA[ Introduce drf-yasg-examples Package ]]>
    </c:encoded>
    <category domain="https://item4.blog/tags/Python/">Python</category>
    <category domain="https://item4.blog/tags/Django/">Django</category>
    <category domain="https://item4.blog/tags/django-rest-framework/">django-rest-framework</category>
    <category domain="https://item4.blog/tags/drf-yasg/">drf-yasg</category>
    <category domain="https://item4.blog/tags/Swagger/">Swagger</category>
    <category domain="https://item4.blog/tags/openapi/">openapi</category>
    <category domain="https://item4.blog/tags/API/">API</category>
    <category domain="https://item4.blog/tags/Documentation/">Documentation</category>
    <category domain="https://item4.blog/tags/drf-yasg-examples/">drf-yasg-examples</category>
    </item>
    </channel>
    </rss>
    """,
        )
        r = RSS()
    
        event = bot.create_message()
    
>       await r.add(bot, event, fx_sess, "https://test.dev/rss.xml")

.../apps/info/rss_test.py:177: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
.../info/rss/commands.py:67: in add
    session.get(
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://test.dev/rss.xml')
url = URL('https://test.dev/rss.xml'), method = 'get', request_headers = {}
status = 200
body = b'<rss xmlns:c="http://purl.org/rss/1.0/modules/content/" version="2.0">\n<channel>\n<title>item4 dev story</title>\n<...tegory domain="https://item4.blog/tags/drf-yasg-examples/">drf-yasg-examples</category>\n</item>\n</channel>\n</rss>\n'
content_type = 'application/json', payload = None, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_cat_command
Stack Traces | 0.077s run time
bot = <tests.util.FakeBot object at 0x7f2fec6a0e60>
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec496b30>

    @pytest.mark.anyio
    async def test_cat_command(bot, response_mock):
        response_mock.get(
            CAT_API_URL,
            status=500,
        )
        response_mock.get(
            CAT_API_URL,
            body=(
                '<?xml version="1.0"?>'
                "<response><data><images><image>"
                "<url>http://cat.com/200.jpg</url>"
                "<id>cdu</id>"
                "<source_url>http://thecatapi.com/?id=cdu</source_url>"
                "</image></images></data></response>"
            ),
            headers={"Content-Type": "text/xml"},
        )
        response_mock.get(
            CAT_API_URL,
            status=500,
        )
        response_mock.get(
            CAT_API_URL,
            body=(
                '<?xml version="1.0"?>'
                "<response><data><images><image>"
                "<url>http://cat.com/200.jpg</url>"
                "<id>cdu</id>"
                "<source_url>http://thecatapi.com/?id=cdu</source_url>"
                "</image></images></data></response>"
            ),
            headers={"Content-Type": "text/xml"},
        )
        response_mock.get("http://cat.com/200.jpg")
        response_mock.get("http://cat.com/200.jpg")
    
        event = bot.create_message()
    
        last_call = await bot.cache.get(f"YUI_APPS_ANIMAL_CAT_{event.channel}")
        assert last_call is None
    
>       await cat(bot, event)

tests/apps/animal_test.py:337: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:137: in cat
    url = await get_cat_image_url(timeout)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
yui/apps/animal.py:40: in get_cat_image_url
    async with session.get(CAT_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
url = URL('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
method = 'get', request_headers = {}, status = 500, body = b''
content_type = 'application/json', payload = None, headers = None
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'Internal Server Error'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_cat_image_url
Stack Traces | 0.205s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec69f820>

    @pytest.mark.anyio
    async def test_get_cat_image_url(response_mock):
        URL_200 = "http://cat.com/200.jpg"
        URL_404 = "http://cat.com/404.jpg"
        URL_CLIENT_ERROR = "http://cat.com/err.jpg"
        response_mock.get(
            CAT_API_URL,
            exception=ClientConnectionError(),
        )
        response_mock.get(
            CAT_API_URL,
            body=(
                '<?xml version="1.0"?>'
                "<response><data><images><image>"
                f"<url>{URL_404}</url>"
                "<id>cdu</id>"
                "<source_url>http://thecatapi.com/?id=cdu</source_url>"
                "</image></images></data></response>"
            ),
            headers={"Content-Type": "text/xml"},
        )
        response_mock.get(URL_404, status=404)
        response_mock.get(
            CAT_API_URL,
            body=(
                '<?xml version="1.0"?>'
                "<response><data><images><image>"
                f"<url>{URL_CLIENT_ERROR}</url>"
                "<id>cdu</id>"
                "<source_url>http://thecatapi.com/?id=cdu</source_url>"
                "</image></images></data></response>"
            ),
            headers={"Content-Type": "text/xml"},
        )
        response_mock.get(
            URL_CLIENT_ERROR,
            exception=ClientConnectionError(),
        )
        response_mock.get(
            CAT_API_URL,
            body=(
                '<?xml version="1.0"?>'
                "<response><data><images><image>"
                f"<url>{URL_200}</url>"
                "<id>cdu</id>"
                "<source_url>http://thecatapi.com/?id=cdu</source_url>"
                "</image></images></data></response>"
            ),
            headers={"Content-Type": "text/xml"},
        )
        response_mock.get(URL_200)
    
>       url = await get_cat_image_url(0.001)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/apps/animal_test.py:167: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:40: in get_cat_image_url
    async with session.get(CAT_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
url = URL('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
method = 'get', request_headers = {}, status = 200
body = b'<?xml version="1.0"?><response><data><images><image><url>http://cat.com/404.jpg</url><id>cdu</id><source_url>http://thecatapi.com/?id=cdu</source_url></image></images></data></response>'
content_type = 'application/json', payload = None
headers = {'Content-Type': 'text/xml'}
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_cat_image_url_empty_url
Stack Traces | 0.205s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec69e8b0>

    @pytest.mark.anyio
    async def test_get_cat_image_url_empty_url(response_mock):
        response_mock.get(
            CAT_API_URL,
            exception=ClientConnectionError(),
        )
        response_mock.get(
            CAT_API_URL,
            body=(
                '<?xml version="1.0"?>'
                "<response><data><images><image>"
                "<url></url>"
                "<id>cdu</id>"
                "<source_url>http://thecatapi.com/?id=cdu</source_url>"
                "</image></images></data></response>"
            ),
            headers={"Content-Type": "text/xml"},
        )
        with pytest.raises(APIServerError):
>           await get_cat_image_url(0.001)

tests/apps/animal_test.py:112: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:40: in get_cat_image_url
    async with session.get(CAT_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
url = URL('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
method = 'get', request_headers = {}, status = 200
body = b'<?xml version="1.0"?><response><data><images><image><url></url><id>cdu</id><source_url>http://thecatapi.com/?id=cdu</source_url></image></images></data></response>'
content_type = 'application/json', payload = None
headers = {'Content-Type': 'text/xml'}
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_cat_image_url_no_url
Stack Traces | 0.205s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec69ae90>

    @pytest.mark.anyio
    async def test_get_cat_image_url_no_url(response_mock):
        response_mock.get(
            CAT_API_URL,
            exception=ClientConnectionError(),
        )
        response_mock.get(
            CAT_API_URL,
            body=(
                '<?xml version="1.0"?>'
                "<response><data><images><image>"
                "<id>cdu</id>"
                "<source_url>http://thecatapi.com/?id=cdu</source_url>"
                "</image></images></data></response>"
            ),
            headers={"Content-Type": "text/xml"},
        )
    
        with pytest.raises(APIServerError):
>           await get_cat_image_url(0.001)

tests/apps/animal_test.py:90: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:40: in get_cat_image_url
    async with session.get(CAT_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
url = URL('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
method = 'get', request_headers = {}, status = 200
body = b'<?xml version="1.0"?><response><data><images><image><id>cdu</id><source_url>http://thecatapi.com/?id=cdu</source_url></image></images></data></response>'
content_type = 'application/json', payload = None
headers = {'Content-Type': 'text/xml'}
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_cat_image_url_timeout
Stack Traces | 0.205s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec69b4d0>

    @pytest.mark.anyio
    async def test_get_cat_image_url_timeout(response_mock):
        URL_TIMEOUT = "http://cat.com/timeout.jpg"
        response_mock.get(
            CAT_API_URL,
            exception=ClientConnectionError(),
        )
        response_mock.get(
            CAT_API_URL,
            body=(
                '<?xml version="1.0"?>'
                "<response><data><images><image>"
                f"<url>{URL_TIMEOUT}</url>"
                "<id>cdu</id>"
                "<source_url>http://thecatapi.com/?id=cdu</source_url>"
                "</image></images></data></response>"
            ),
            headers={"Content-Type": "text/xml"},
        )
        response_mock.get(
            URL_TIMEOUT,
            exception=TimeoutError(),
        )
        with pytest.raises(TimeoutError):
>           await get_cat_image_url(10.0)

tests/apps/animal_test.py:68: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:40: in get_cat_image_url
    async with session.get(CAT_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
url = URL('https://thecatapi..../api/images/get?format=xml&type=jpg%252Cpng')
method = 'get', request_headers = {}, status = 200
body = b'<?xml version="1.0"?><response><data><images><image><url>http://cat.com/timeout.jpg</url><id>cdu</id><source_url>http://thecatapi.com/?id=cdu</source_url></image></images></data></response>'
content_type = 'application/json', payload = None
headers = {'Content-Type': 'text/xml'}
response_class = <class 'aiohttp.client_reqrep.ClientResponse'>, reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError
tests.apps.animal_test::test_get_dog_image_url
Stack Traces | 0.205s run time
response_mock = <aioresponses.core.aioresponses object at 0x7f2fec4ee750>

    @pytest.mark.anyio
    async def test_get_dog_image_url(response_mock):
        URL_200 = "http://dog.com/200.jpg"
        URL_404 = "http://dog.com/404.jpg"
        URL_CLIENT_ERROR = "http://dog.com/err.jpg"
        response_mock.get(
            DOG_API_URL,
            exception=ClientConnectionError(),
        )
        response_mock.get(
            DOG_API_URL,
            payload={"status": "success", "message": URL_404},
        )
        response_mock.get(URL_404, status=404)
        response_mock.get(
            DOG_API_URL,
            payload={
                "status": "success",
                "message": URL_CLIENT_ERROR,
            },
        )
        response_mock.get(
            URL_CLIENT_ERROR,
            exception=ClientConnectionError(),
        )
        response_mock.get(
            DOG_API_URL,
            payload={"status": "success", "message": URL_200},
        )
    
        response_mock.get(URL_200)
    
>       url = await get_dog_image_url(1.0)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^

tests/apps/animal_test.py:248: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
yui/apps/animal.py:67: in get_dog_image_url
    async with session.get(DOG_API_URL) as resp:
               ^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13.../site-packages/aiohttp/client.py:1683: in __aenter__
    self._resp: _RetType_co = await self._coro
                              ^^^^^^^^^^^^^^^^
<string>:3: in _request
    ???
../...../_temp/uv-python-dir/cpython-3.13.14-linux-x86_64-gnu/lib/python3.13/unittest/mock.py:2338: in _execute_mock_call
    result = await effect(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:531: in _request_mock
    response = await self.match(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.venv/lib/python3.13............/site-packages/aioresponses/core.py:461: in match
    response_or_exc = await matcher.build_response(
.venv/lib/python3.13............/site-packages/aioresponses/core.py:203: in build_response
    resp = self._build_response(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = RequestMatch('https://dog..../breeds/image/random')
url = URL('https://dog..../breeds/image/random'), method = 'get'
request_headers = {}, status = 200
body = b'{"status": "success", "message": "http://dog.com/404.jpg"}'
content_type = 'application/json'
payload = {'message': 'http://dog.com/404.jpg', 'status': 'success'}
headers = None, response_class = <class 'aiohttp.client_reqrep.ClientResponse'>
reason = 'OK'

    def _build_response(self, url: 'Union[URL, str]',
                        method: str = hdrs.METH_GET,
                        request_headers: Optional[Dict] = None,
                        status: int = 200,
                        body: Union[str, bytes] = '',
                        content_type: str = 'application/json',
                        payload: Optional[Dict] = None,
                        headers: Optional[Dict] = None,
                        response_class: Optional[Type[ClientResponse]] = None,
                        reason: Optional[str] = None) -> ClientResponse:
        if response_class is None:
            response_class = ClientResponse
        if payload is not None:
            body = json.dumps(payload)
        if not isinstance(body, bytes):
            body = str.encode(body)
        if request_headers is None:
            request_headers = {}
        loop = Mock()
        loop.get_debug = Mock()
        loop.get_debug.return_value = True
        kwargs = {}  # type: Dict[str, Any]
        kwargs['request_info'] = RequestInfo(
            url=url,
            method=method,
            headers=CIMultiDictProxy(CIMultiDict(**request_headers)),
            real_url=url
        )
        kwargs['writer'] = None
        kwargs['continue100'] = None
        kwargs['timer'] = TimerNoop()
        kwargs['traces'] = []
        kwargs['loop'] = loop
        kwargs['session'] = None
    
        # We need to initialize headers manually
        _headers = CIMultiDict({hdrs.CONTENT_TYPE: content_type})
        if headers:
            _headers.update(headers)
        raw_headers = self._build_raw_headers(_headers)
>       resp = response_class(method, url, **kwargs)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E       TypeError: ClientResponse.__init__() missing 1 required keyword-only argument: 'stream_writer'

.venv/lib/python3.13............/site-packages/aioresponses/core.py:172: TypeError

To view more test analytics, go to the Test Analytics Dashboard
📋 Got 3 mins? Take this short survey to help us improve Test Analytics.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file python:uv Pull requests that update python:uv code

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants