Skip to content

Commit

Permalink
Update to latest Somfy changes (home-assistant#28207)
Browse files Browse the repository at this point in the history
* Update to latest Somfy changes

* Update api.py

* Update api.py
  • Loading branch information
balloob authored Nov 6, 2019
1 parent 9a0a889 commit d9edd42
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 45 deletions.
10 changes: 3 additions & 7 deletions homeassistant/components/somfy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
from datetime import timedelta

import voluptuous as vol
from requests import HTTPError

from homeassistant.helpers import config_validation as cv, config_entry_oauth2_flow
from homeassistant.components.somfy import config_flow
Expand Down Expand Up @@ -156,13 +157,8 @@ def has_capability(self, capability):
@Throttle(SCAN_INTERVAL)
async def update_all_devices(hass):
"""Update all the devices."""
from requests import HTTPError
from oauthlib.oauth2 import TokenExpiredError

try:
data = hass.data[DOMAIN]
data[DEVICES] = await hass.async_add_executor_job(data[API].get_devices)
except TokenExpiredError:
_LOGGER.warning("Cannot update devices due to expired token")
except HTTPError:
_LOGGER.warning("Cannot update devices")
except HTTPError as err:
_LOGGER.warning("Cannot update devices: %s", err.response.status_code)
37 changes: 8 additions & 29 deletions homeassistant/components/somfy/api.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
"""API for Somfy bound to HASS OAuth."""
from asyncio import run_coroutine_threadsafe
from functools import partial
from typing import Dict, Union

import requests
from pymfy.api import somfy_api

from homeassistant import core, config_entries
from homeassistant.helpers import config_entry_oauth2_flow


class ConfigEntrySomfyApi(somfy_api.AbstractSomfyApi):
class ConfigEntrySomfyApi(somfy_api.SomfyApi):
"""Provide a Somfy API tied into an OAuth2 based config entry."""

def __init__(
Expand All @@ -24,32 +23,12 @@ def __init__(
self.session = config_entry_oauth2_flow.OAuth2Session(
hass, config_entry, implementation
)
super().__init__(None, None, token=self.session.token)

def get(self, path):
"""Fetch a URL from the Somfy API."""
return run_coroutine_threadsafe(
self._request("get", path), self.hass.loop
def refresh_tokens(self,) -> Dict[str, Union[str, int]]:
"""Refresh and return new Somfy tokens using Home Assistant OAuth2 session."""
run_coroutine_threadsafe(
self.session.async_ensure_token_valid(), self.hass.loop
).result()

def post(self, path, *, json):
"""Post data to the Somfy API."""
return run_coroutine_threadsafe(
self._request("post", path, json=json), self.hass.loop
).result()

async def _request(self, method, path, **kwargs):
"""Make a request."""
await self.session.async_ensure_token_valid()

return await self.hass.async_add_executor_job(
partial(
requests.request,
method,
f"{self.base_url}{path}",
**kwargs,
headers={
**kwargs.get("headers", {}),
"authorization": f"Bearer {self.config_entry.data['token']['access_token']}",
},
)
)
return self.session.token
8 changes: 2 additions & 6 deletions homeassistant/components/somfy/cover.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
For more details about this platform, please refer to the documentation at
https://home-assistant.io/components/cover.somfy/
"""
from pymfy.api.devices.category import Category
from pymfy.api.devices.blind import Blind

from homeassistant.components.cover import (
CoverDevice,
Expand All @@ -18,8 +20,6 @@ async def async_setup_entry(hass, config_entry, async_add_entities):

def get_covers():
"""Retrieve covers."""
from pymfy.api.devices.category import Category

categories = {
Category.ROLLER_SHUTTER.value,
Category.INTERIOR_BLIND.value,
Expand Down Expand Up @@ -51,15 +51,11 @@ class SomfyCover(SomfyEntity, CoverDevice):

def __init__(self, device, api):
"""Initialize the Somfy device."""
from pymfy.api.devices.blind import Blind

super().__init__(device, api)
self.cover = Blind(self.device, self.api)

async def async_update(self):
"""Update the device with the latest data."""
from pymfy.api.devices.blind import Blind

await super().async_update()
self.cover = Blind(self.device, self.api)

Expand Down
2 changes: 1 addition & 1 deletion homeassistant/components/somfy/manifest.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@
"documentation": "https://www.home-assistant.io/integrations/somfy",
"dependencies": ["http"],
"codeowners": ["@tetienne"],
"requirements": ["pymfy==0.6.0"]
"requirements": ["pymfy==0.6.1"]
}
2 changes: 1 addition & 1 deletion requirements_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1313,7 +1313,7 @@ pymailgunner==1.4
pymediaroom==0.6.4

# homeassistant.components.somfy
pymfy==0.6.0
pymfy==0.6.1

# homeassistant.components.xiaomi_tv
pymitv==1.4.3
Expand Down
2 changes: 1 addition & 1 deletion requirements_test_all.txt
Original file line number Diff line number Diff line change
Expand Up @@ -439,7 +439,7 @@ pylitejet==0.1
pymailgunner==1.4

# homeassistant.components.somfy
pymfy==0.6.0
pymfy==0.6.1

# homeassistant.components.mochad
pymochad==0.2.0
Expand Down

0 comments on commit d9edd42

Please sign in to comment.