Fix google_mail doing blocking i/o in the event loop (take 2) (#118441)
parent
27cc97bbeb
commit
5d5210b47d
|
@ -32,7 +32,7 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
|
||||||
"""Set up Google Mail from a config entry."""
|
"""Set up Google Mail from a config entry."""
|
||||||
implementation = await async_get_config_entry_implementation(hass, entry)
|
implementation = await async_get_config_entry_implementation(hass, entry)
|
||||||
session = OAuth2Session(hass, entry, implementation)
|
session = OAuth2Session(hass, entry, implementation)
|
||||||
auth = AsyncConfigEntryAuth(session)
|
auth = AsyncConfigEntryAuth(hass, session)
|
||||||
await auth.check_and_refresh_token()
|
await auth.check_and_refresh_token()
|
||||||
hass.data[DOMAIN][entry.entry_id] = auth
|
hass.data[DOMAIN][entry.entry_id] = auth
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
"""API for Google Mail bound to Home Assistant OAuth."""
|
"""API for Google Mail bound to Home Assistant OAuth."""
|
||||||
|
|
||||||
|
from functools import partial
|
||||||
|
|
||||||
from aiohttp.client_exceptions import ClientError, ClientResponseError
|
from aiohttp.client_exceptions import ClientError, ClientResponseError
|
||||||
from google.auth.exceptions import RefreshError
|
from google.auth.exceptions import RefreshError
|
||||||
from google.oauth2.credentials import Credentials
|
from google.oauth2.credentials import Credentials
|
||||||
|
@ -7,6 +9,7 @@ from googleapiclient.discovery import Resource, build
|
||||||
|
|
||||||
from homeassistant.config_entries import ConfigEntryState
|
from homeassistant.config_entries import ConfigEntryState
|
||||||
from homeassistant.const import CONF_ACCESS_TOKEN
|
from homeassistant.const import CONF_ACCESS_TOKEN
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
from homeassistant.exceptions import (
|
from homeassistant.exceptions import (
|
||||||
ConfigEntryAuthFailed,
|
ConfigEntryAuthFailed,
|
||||||
ConfigEntryNotReady,
|
ConfigEntryNotReady,
|
||||||
|
@ -20,9 +23,11 @@ class AsyncConfigEntryAuth:
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
hass: HomeAssistant,
|
||||||
oauth2_session: config_entry_oauth2_flow.OAuth2Session,
|
oauth2_session: config_entry_oauth2_flow.OAuth2Session,
|
||||||
) -> None:
|
) -> None:
|
||||||
"""Initialize Google Mail Auth."""
|
"""Initialize Google Mail Auth."""
|
||||||
|
self._hass = hass
|
||||||
self.oauth_session = oauth2_session
|
self.oauth_session = oauth2_session
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -58,4 +63,6 @@ class AsyncConfigEntryAuth:
|
||||||
async def get_resource(self) -> Resource:
|
async def get_resource(self) -> Resource:
|
||||||
"""Get current resource."""
|
"""Get current resource."""
|
||||||
credentials = Credentials(await self.check_and_refresh_token())
|
credentials = Credentials(await self.check_and_refresh_token())
|
||||||
return build("gmail", "v1", credentials=credentials)
|
return await self._hass.async_add_executor_job(
|
||||||
|
partial(build, "gmail", "v1", credentials=credentials)
|
||||||
|
)
|
||||||
|
|
Loading…
Reference in New Issue