diff --git a/homeassistant/components/withings/common.py b/homeassistant/components/withings/common.py index 9acca6f0cd6..f2be849cbc7 100644 --- a/homeassistant/components/withings/common.py +++ b/homeassistant/components/withings/common.py @@ -4,7 +4,7 @@ import logging import re import time -import withings_api as withings +import nokia from oauthlib.oauth2.rfc6749.errors import MissingTokenError from requests_oauthlib import TokenUpdated @@ -68,9 +68,7 @@ class WithingsDataManager: service_available = None - def __init__( - self, hass: HomeAssistantType, profile: str, api: withings.WithingsApi - ): + def __init__(self, hass: HomeAssistantType, profile: str, api: nokia.NokiaApi): """Constructor.""" self._hass = hass self._api = api @@ -255,7 +253,7 @@ def create_withings_data_manager( """Set up the sensor config entry.""" entry_creds = entry.data.get(const.CREDENTIALS) or {} profile = entry.data[const.PROFILE] - credentials = withings.WithingsCredentials( + credentials = nokia.NokiaCredentials( entry_creds.get("access_token"), entry_creds.get("token_expiry"), entry_creds.get("token_type"), @@ -268,7 +266,7 @@ def create_withings_data_manager( def credentials_saver(credentials_param): _LOGGER.debug("Saving updated credentials of type %s", type(credentials_param)) - # Sanitizing the data as sometimes a WithingsCredentials object + # Sanitizing the data as sometimes a NokiaCredentials object # is passed through from the API. cred_data = credentials_param if not isinstance(credentials_param, dict): @@ -277,8 +275,8 @@ def create_withings_data_manager( entry.data[const.CREDENTIALS] = cred_data hass.config_entries.async_update_entry(entry, data={**entry.data}) - _LOGGER.debug("Creating withings api instance") - api = withings.WithingsApi( + _LOGGER.debug("Creating nokia api instance") + api = nokia.NokiaApi( credentials, refresh_cb=(lambda token: credentials_saver(api.credentials)) ) diff --git a/homeassistant/components/withings/config_flow.py b/homeassistant/components/withings/config_flow.py index c781e785f5e..f28a4f59d80 100644 --- a/homeassistant/components/withings/config_flow.py +++ b/homeassistant/components/withings/config_flow.py @@ -4,7 +4,7 @@ import logging from typing import Optional import aiohttp -import withings_api as withings +import nokia import voluptuous as vol from homeassistant import config_entries, data_entry_flow @@ -75,7 +75,7 @@ class WithingsFlowHandler(config_entries.ConfigFlow): profile, ) - return withings.WithingsAuth( + return nokia.NokiaAuth( client_id, client_secret, callback_uri, diff --git a/homeassistant/components/withings/manifest.json b/homeassistant/components/withings/manifest.json index ae5cd4bcdd9..d38b69f2248 100644 --- a/homeassistant/components/withings/manifest.json +++ b/homeassistant/components/withings/manifest.json @@ -4,7 +4,7 @@ "config_flow": true, "documentation": "https://www.home-assistant.io/integrations/withings", "requirements": [ - "withings-api==2.0.0b7" + "nokia==1.2.0" ], "dependencies": [ "api", diff --git a/requirements_all.txt b/requirements_all.txt index 44c10f8ff29..e085782b178 100644 --- a/requirements_all.txt +++ b/requirements_all.txt @@ -865,6 +865,9 @@ niko-home-control==0.2.1 # homeassistant.components.nilu niluclient==0.1.2 +# homeassistant.components.withings +nokia==1.2.0 + # homeassistant.components.nederlandse_spoorwegen nsapi==2.7.4 @@ -1970,9 +1973,6 @@ websockets==6.0 # homeassistant.components.wirelesstag wirelesstagpy==0.4.0 -# homeassistant.components.withings -withings-api==2.0.0b7 - # homeassistant.components.wunderlist wunderpy2==0.1.6 diff --git a/requirements_test_all.txt b/requirements_test_all.txt index 2a8f51cd195..f5d7301b0ed 100644 --- a/requirements_test_all.txt +++ b/requirements_test_all.txt @@ -445,9 +445,6 @@ vultr==0.1.2 # homeassistant.components.wake_on_lan wakeonlan==1.1.6 -# homeassistant.components.withings -withings-api==2.0.0b7 - # homeassistant.components.zeroconf zeroconf==0.23.0 diff --git a/tests/components/withings/common.py b/tests/components/withings/common.py index f3839a1be55..b8406c39711 100644 --- a/tests/components/withings/common.py +++ b/tests/components/withings/common.py @@ -1,7 +1,7 @@ """Common data for for the withings component tests.""" import time -import withings_api as withings +import nokia import homeassistant.components.withings.const as const @@ -92,7 +92,7 @@ def new_measure(type_str, value, unit): } -def withings_sleep_response(states): +def nokia_sleep_response(states): """Create a sleep response based on states.""" data = [] for state in states: @@ -104,10 +104,10 @@ def withings_sleep_response(states): ) ) - return withings.WithingsSleep(new_sleep_data("aa", data)) + return nokia.NokiaSleep(new_sleep_data("aa", data)) -WITHINGS_MEASURES_RESPONSE = withings.WithingsMeasures( +NOKIA_MEASURES_RESPONSE = nokia.NokiaMeasures( { "updatetime": "", "timezone": "", @@ -174,7 +174,7 @@ WITHINGS_MEASURES_RESPONSE = withings.WithingsMeasures( ) -WITHINGS_SLEEP_RESPONSE = withings_sleep_response( +NOKIA_SLEEP_RESPONSE = nokia_sleep_response( [ const.MEASURE_TYPE_SLEEP_STATE_AWAKE, const.MEASURE_TYPE_SLEEP_STATE_LIGHT, @@ -183,7 +183,7 @@ WITHINGS_SLEEP_RESPONSE = withings_sleep_response( ] ) -WITHINGS_SLEEP_SUMMARY_RESPONSE = withings.WithingsSleepSummary( +NOKIA_SLEEP_SUMMARY_RESPONSE = nokia.NokiaSleepSummary( { "series": [ new_sleep_summary( diff --git a/tests/components/withings/conftest.py b/tests/components/withings/conftest.py index 0aa6af0d7c0..7cbe3dc1cd4 100644 --- a/tests/components/withings/conftest.py +++ b/tests/components/withings/conftest.py @@ -3,7 +3,7 @@ import time from typing import Awaitable, Callable, List import asynctest -import withings_api as withings +import nokia import pytest import homeassistant.components.api as api @@ -15,9 +15,9 @@ from homeassistant.const import CONF_UNIT_SYSTEM, CONF_UNIT_SYSTEM_METRIC from homeassistant.setup import async_setup_component from .common import ( - WITHINGS_MEASURES_RESPONSE, - WITHINGS_SLEEP_RESPONSE, - WITHINGS_SLEEP_SUMMARY_RESPONSE, + NOKIA_MEASURES_RESPONSE, + NOKIA_SLEEP_RESPONSE, + NOKIA_SLEEP_SUMMARY_RESPONSE, ) @@ -34,17 +34,17 @@ class WithingsFactoryConfig: measures: List[str] = None, unit_system: str = None, throttle_interval: int = const.THROTTLE_INTERVAL, - withings_request_response="DATA", - withings_measures_response: withings.WithingsMeasures = WITHINGS_MEASURES_RESPONSE, - withings_sleep_response: withings.WithingsSleep = WITHINGS_SLEEP_RESPONSE, - withings_sleep_summary_response: withings.WithingsSleepSummary = WITHINGS_SLEEP_SUMMARY_RESPONSE, + nokia_request_response="DATA", + nokia_measures_response: nokia.NokiaMeasures = NOKIA_MEASURES_RESPONSE, + nokia_sleep_response: nokia.NokiaSleep = NOKIA_SLEEP_RESPONSE, + nokia_sleep_summary_response: nokia.NokiaSleepSummary = NOKIA_SLEEP_SUMMARY_RESPONSE, ) -> None: """Constructor.""" self._throttle_interval = throttle_interval - self._withings_request_response = withings_request_response - self._withings_measures_response = withings_measures_response - self._withings_sleep_response = withings_sleep_response - self._withings_sleep_summary_response = withings_sleep_summary_response + self._nokia_request_response = nokia_request_response + self._nokia_measures_response = nokia_measures_response + self._nokia_sleep_response = nokia_sleep_response + self._nokia_sleep_summary_response = nokia_sleep_summary_response self._withings_config = { const.CLIENT_ID: "my_client_id", const.CLIENT_SECRET: "my_client_secret", @@ -103,24 +103,24 @@ class WithingsFactoryConfig: return self._throttle_interval @property - def withings_request_response(self): + def nokia_request_response(self): """Request response.""" - return self._withings_request_response + return self._nokia_request_response @property - def withings_measures_response(self) -> withings.WithingsMeasures: + def nokia_measures_response(self) -> nokia.NokiaMeasures: """Measures response.""" - return self._withings_measures_response + return self._nokia_measures_response @property - def withings_sleep_response(self) -> withings.WithingsSleep: + def nokia_sleep_response(self) -> nokia.NokiaSleep: """Sleep response.""" - return self._withings_sleep_response + return self._nokia_sleep_response @property - def withings_sleep_summary_response(self) -> withings.WithingsSleepSummary: + def nokia_sleep_summary_response(self) -> nokia.NokiaSleepSummary: """Sleep summary response.""" - return self._withings_sleep_summary_response + return self._nokia_sleep_summary_response class WithingsFactoryData: @@ -130,21 +130,21 @@ class WithingsFactoryData: self, hass, flow_id, - withings_auth_get_credentials_mock, - withings_api_request_mock, - withings_api_get_measures_mock, - withings_api_get_sleep_mock, - withings_api_get_sleep_summary_mock, + nokia_auth_get_credentials_mock, + nokia_api_request_mock, + nokia_api_get_measures_mock, + nokia_api_get_sleep_mock, + nokia_api_get_sleep_summary_mock, data_manager_get_throttle_interval_mock, ): """Constructor.""" self._hass = hass self._flow_id = flow_id - self._withings_auth_get_credentials_mock = withings_auth_get_credentials_mock - self._withings_api_request_mock = withings_api_request_mock - self._withings_api_get_measures_mock = withings_api_get_measures_mock - self._withings_api_get_sleep_mock = withings_api_get_sleep_mock - self._withings_api_get_sleep_summary_mock = withings_api_get_sleep_summary_mock + self._nokia_auth_get_credentials_mock = nokia_auth_get_credentials_mock + self._nokia_api_request_mock = nokia_api_request_mock + self._nokia_api_get_measures_mock = nokia_api_get_measures_mock + self._nokia_api_get_sleep_mock = nokia_api_get_sleep_mock + self._nokia_api_get_sleep_summary_mock = nokia_api_get_sleep_summary_mock self._data_manager_get_throttle_interval_mock = ( data_manager_get_throttle_interval_mock ) @@ -160,29 +160,29 @@ class WithingsFactoryData: return self._flow_id @property - def withings_auth_get_credentials_mock(self): + def nokia_auth_get_credentials_mock(self): """Get auth credentials mock.""" - return self._withings_auth_get_credentials_mock + return self._nokia_auth_get_credentials_mock @property - def withings_api_request_mock(self): + def nokia_api_request_mock(self): """Get request mock.""" - return self._withings_api_request_mock + return self._nokia_api_request_mock @property - def withings_api_get_measures_mock(self): + def nokia_api_get_measures_mock(self): """Get measures mock.""" - return self._withings_api_get_measures_mock + return self._nokia_api_get_measures_mock @property - def withings_api_get_sleep_mock(self): + def nokia_api_get_sleep_mock(self): """Get sleep mock.""" - return self._withings_api_get_sleep_mock + return self._nokia_api_get_sleep_mock @property - def withings_api_get_sleep_summary_mock(self): + def nokia_api_get_sleep_summary_mock(self): """Get sleep summary mock.""" - return self._withings_api_get_sleep_summary_mock + return self._nokia_api_get_sleep_summary_mock @property def data_manager_get_throttle_interval_mock(self): @@ -243,9 +243,9 @@ def withings_factory_fixture(request, hass) -> WithingsFactory: assert await async_setup_component(hass, http.DOMAIN, config.hass_config) assert await async_setup_component(hass, api.DOMAIN, config.hass_config) - withings_auth_get_credentials_patch = asynctest.patch( - "withings_api.WithingsAuth.get_credentials", - return_value=withings.WithingsCredentials( + nokia_auth_get_credentials_patch = asynctest.patch( + "nokia.NokiaAuth.get_credentials", + return_value=nokia.NokiaCredentials( access_token="my_access_token", token_expiry=time.time() + 600, token_type="my_token_type", @@ -255,33 +255,28 @@ def withings_factory_fixture(request, hass) -> WithingsFactory: consumer_secret=config.withings_config.get(const.CLIENT_SECRET), ), ) - withings_auth_get_credentials_mock = withings_auth_get_credentials_patch.start() + nokia_auth_get_credentials_mock = nokia_auth_get_credentials_patch.start() - withings_api_request_patch = asynctest.patch( - "withings_api.WithingsApi.request", - return_value=config.withings_request_response, + nokia_api_request_patch = asynctest.patch( + "nokia.NokiaApi.request", return_value=config.nokia_request_response ) - withings_api_request_mock = withings_api_request_patch.start() + nokia_api_request_mock = nokia_api_request_patch.start() - withings_api_get_measures_patch = asynctest.patch( - "withings_api.WithingsApi.get_measures", - return_value=config.withings_measures_response, + nokia_api_get_measures_patch = asynctest.patch( + "nokia.NokiaApi.get_measures", return_value=config.nokia_measures_response ) - withings_api_get_measures_mock = withings_api_get_measures_patch.start() + nokia_api_get_measures_mock = nokia_api_get_measures_patch.start() - withings_api_get_sleep_patch = asynctest.patch( - "withings_api.WithingsApi.get_sleep", - return_value=config.withings_sleep_response, + nokia_api_get_sleep_patch = asynctest.patch( + "nokia.NokiaApi.get_sleep", return_value=config.nokia_sleep_response ) - withings_api_get_sleep_mock = withings_api_get_sleep_patch.start() + nokia_api_get_sleep_mock = nokia_api_get_sleep_patch.start() - withings_api_get_sleep_summary_patch = asynctest.patch( - "withings_api.WithingsApi.get_sleep_summary", - return_value=config.withings_sleep_summary_response, - ) - withings_api_get_sleep_summary_mock = ( - withings_api_get_sleep_summary_patch.start() + nokia_api_get_sleep_summary_patch = asynctest.patch( + "nokia.NokiaApi.get_sleep_summary", + return_value=config.nokia_sleep_summary_response, ) + nokia_api_get_sleep_summary_mock = nokia_api_get_sleep_summary_patch.start() data_manager_get_throttle_interval_patch = asynctest.patch( "homeassistant.components.withings.common.WithingsDataManager" @@ -300,11 +295,11 @@ def withings_factory_fixture(request, hass) -> WithingsFactory: patches.extend( [ - withings_auth_get_credentials_patch, - withings_api_request_patch, - withings_api_get_measures_patch, - withings_api_get_sleep_patch, - withings_api_get_sleep_summary_patch, + nokia_auth_get_credentials_patch, + nokia_api_request_patch, + nokia_api_get_measures_patch, + nokia_api_get_sleep_patch, + nokia_api_get_sleep_summary_patch, data_manager_get_throttle_interval_patch, get_measures_patch, ] @@ -333,11 +328,11 @@ def withings_factory_fixture(request, hass) -> WithingsFactory: return WithingsFactoryData( hass, flow_id, - withings_auth_get_credentials_mock, - withings_api_request_mock, - withings_api_get_measures_mock, - withings_api_get_sleep_mock, - withings_api_get_sleep_summary_mock, + nokia_auth_get_credentials_mock, + nokia_api_request_mock, + nokia_api_get_measures_mock, + nokia_api_get_sleep_mock, + nokia_api_get_sleep_summary_mock, data_manager_get_throttle_interval_mock, ) diff --git a/tests/components/withings/test_common.py b/tests/components/withings/test_common.py index 9f2480f9094..a22689f92bb 100644 --- a/tests/components/withings/test_common.py +++ b/tests/components/withings/test_common.py @@ -1,6 +1,6 @@ """Tests for the Withings component.""" from asynctest import MagicMock -import withings_api as withings +import nokia from oauthlib.oauth2.rfc6749.errors import MissingTokenError import pytest from requests_oauthlib import TokenUpdated @@ -13,19 +13,19 @@ from homeassistant.components.withings.common import ( from homeassistant.exceptions import PlatformNotReady -@pytest.fixture(name="withings_api") -def withings_api_fixture(): - """Provide withings api.""" - withings_api = withings.WithingsApi.__new__(withings.WithingsApi) - withings_api.get_measures = MagicMock() - withings_api.get_sleep = MagicMock() - return withings_api +@pytest.fixture(name="nokia_api") +def nokia_api_fixture(): + """Provide nokia api.""" + nokia_api = nokia.NokiaApi.__new__(nokia.NokiaApi) + nokia_api.get_measures = MagicMock() + nokia_api.get_sleep = MagicMock() + return nokia_api @pytest.fixture(name="data_manager") -def data_manager_fixture(hass, withings_api: withings.WithingsApi): +def data_manager_fixture(hass, nokia_api: nokia.NokiaApi): """Provide data manager.""" - return WithingsDataManager(hass, "My Profile", withings_api) + return WithingsDataManager(hass, "My Profile", nokia_api) def test_print_service(): diff --git a/tests/components/withings/test_sensor.py b/tests/components/withings/test_sensor.py index 697d0a8b864..da77910097b 100644 --- a/tests/components/withings/test_sensor.py +++ b/tests/components/withings/test_sensor.py @@ -2,12 +2,7 @@ from unittest.mock import MagicMock, patch import asynctest -from withings_api import ( - WithingsApi, - WithingsMeasures, - WithingsSleep, - WithingsSleepSummary, -) +from nokia import NokiaApi, NokiaMeasures, NokiaSleep, NokiaSleepSummary import pytest from homeassistant.components.withings import DOMAIN @@ -20,7 +15,7 @@ from homeassistant.helpers.entity_component import async_update_entity from homeassistant.helpers.typing import HomeAssistantType from homeassistant.util import slugify -from .common import withings_sleep_response +from .common import nokia_sleep_response from .conftest import WithingsFactory, WithingsFactoryConfig @@ -125,9 +120,9 @@ async def test_health_sensor_state_none( data = await withings_factory( WithingsFactoryConfig( measures=measure, - withings_measures_response=None, - withings_sleep_response=None, - withings_sleep_summary_response=None, + nokia_measures_response=None, + nokia_sleep_response=None, + nokia_sleep_summary_response=None, ) ) @@ -158,9 +153,9 @@ async def test_health_sensor_state_empty( data = await withings_factory( WithingsFactoryConfig( measures=measure, - withings_measures_response=WithingsMeasures({"measuregrps": []}), - withings_sleep_response=WithingsSleep({"series": []}), - withings_sleep_summary_response=WithingsSleepSummary({"series": []}), + nokia_measures_response=NokiaMeasures({"measuregrps": []}), + nokia_sleep_response=NokiaSleep({"series": []}), + nokia_sleep_summary_response=NokiaSleepSummary({"series": []}), ) ) @@ -206,8 +201,7 @@ async def test_sleep_state_throttled( data = await withings_factory( WithingsFactoryConfig( - measures=[measure], - withings_sleep_response=withings_sleep_response(sleep_states), + measures=[measure], nokia_sleep_response=nokia_sleep_response(sleep_states) ) ) @@ -263,16 +257,16 @@ async def test_async_setup_entry_credentials_saver(hass: HomeAssistantType): "expires_in": "2", } - original_withings_api = WithingsApi - withings_api_instance = None + original_nokia_api = NokiaApi + nokia_api_instance = None - def new_withings_api(*args, **kwargs): - nonlocal withings_api_instance - withings_api_instance = original_withings_api(*args, **kwargs) - withings_api_instance.request = MagicMock() - return withings_api_instance + def new_nokia_api(*args, **kwargs): + nonlocal nokia_api_instance + nokia_api_instance = original_nokia_api(*args, **kwargs) + nokia_api_instance.request = MagicMock() + return nokia_api_instance - withings_api_patch = patch("withings_api.WithingsApi", side_effect=new_withings_api) + nokia_api_patch = patch("nokia.NokiaApi", side_effect=new_nokia_api) session_patch = patch("requests_oauthlib.OAuth2Session") client_patch = patch("oauthlib.oauth2.WebApplicationClient") update_entry_patch = patch.object( @@ -281,7 +275,7 @@ async def test_async_setup_entry_credentials_saver(hass: HomeAssistantType): wraps=hass.config_entries.async_update_entry, ) - with session_patch, client_patch, withings_api_patch, update_entry_patch: + with session_patch, client_patch, nokia_api_patch, update_entry_patch: async_add_entities = MagicMock() hass.config_entries.async_update_entry = MagicMock() config_entry = ConfigEntry( @@ -304,7 +298,7 @@ async def test_async_setup_entry_credentials_saver(hass: HomeAssistantType): await async_setup_entry(hass, config_entry, async_add_entities) - withings_api_instance.set_token(expected_creds) + nokia_api_instance.set_token(expected_creds) new_creds = config_entry.data[const.CREDENTIALS] assert new_creds["access_token"] == "my_access_token2"