Skip to content

Commit

Permalink
Use json_loads by default for the aiohttp helper (#75214)
Browse files Browse the repository at this point in the history
  • Loading branch information
bdraco committed Jul 14, 2022
1 parent 61cc9f5 commit 03e3ebb
Showing 1 changed file with 20 additions and 2 deletions.
22 changes: 20 additions & 2 deletions homeassistant/helpers/aiohttp_client.py
Expand Up @@ -7,7 +7,7 @@
from ssl import SSLContext
import sys
from types import MappingProxyType
from typing import Any, cast
from typing import TYPE_CHECKING, Any, cast

import aiohttp
from aiohttp import web
Expand All @@ -22,7 +22,11 @@
from homeassistant.util import ssl as ssl_util

from .frame import warn_use
from .json import json_dumps
from .json import json_dumps, json_loads

if TYPE_CHECKING:
from aiohttp.typedefs import JSONDecoder


DATA_CONNECTOR = "aiohttp_connector"
DATA_CONNECTOR_NOTVERIFY = "aiohttp_connector_notverify"
Expand All @@ -35,6 +39,19 @@
WARN_CLOSE_MSG = "closes the Home Assistant aiohttp session"


class HassClientResponse(aiohttp.ClientResponse):
"""aiohttp.ClientResponse with a json method that uses json_loads by default."""

async def json(
self,
*args: Any,
loads: JSONDecoder = json_loads,
**kwargs: Any,
) -> Any:
"""Send a json request and parse the json response."""
return await super().json(*args, loads=loads, **kwargs)


@callback
@bind_hass
def async_get_clientsession(
Expand Down Expand Up @@ -99,6 +116,7 @@ def _async_create_clientsession(
clientsession = aiohttp.ClientSession(
connector=_async_get_connector(hass, verify_ssl),
json_serialize=json_dumps,
response_class=HassClientResponse,
**kwargs,
)
# Prevent packages accidentally overriding our default headers
Expand Down

0 comments on commit 03e3ebb

Please sign in to comment.