Skip to content

Commit 88c7c6f

Browse files
authored
Update pynintendoparental to 2.0.0 (home-assistant#158285)
1 parent d691862 commit 88c7c6f

File tree

10 files changed

+33
-76
lines changed

10 files changed

+33
-76
lines changed

homeassistant/components/nintendo_parental_controls/__init__.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
from __future__ import annotations
44

5-
from pynintendoparental import Authenticator
6-
from pynintendoparental.exceptions import (
5+
from pynintendoauth.exceptions import (
76
InvalidOAuthConfigurationException,
87
InvalidSessionTokenException,
98
)
9+
from pynintendoparental import Authenticator
1010

1111
from homeassistant.const import Platform
1212
from homeassistant.core import HomeAssistant
@@ -39,13 +39,12 @@ async def async_setup_entry(
3939
hass: HomeAssistant, entry: NintendoParentalControlsConfigEntry
4040
) -> bool:
4141
"""Set up Nintendo Switch parental controls from a config entry."""
42+
nintendo_auth = Authenticator(
43+
session_token=entry.data[CONF_SESSION_TOKEN],
44+
client_session=async_get_clientsession(hass),
45+
)
4246
try:
43-
nintendo_auth = await Authenticator.complete_login(
44-
auth=None,
45-
response_token=entry.data[CONF_SESSION_TOKEN],
46-
is_session_token=True,
47-
client_session=async_get_clientsession(hass),
48-
)
47+
await nintendo_auth.async_complete_login(use_session_token=True)
4948
except (InvalidSessionTokenException, InvalidOAuthConfigurationException) as err:
5049
raise ConfigEntryAuthFailed(
5150
translation_domain=DOMAIN,

homeassistant/components/nintendo_parental_controls/config_flow.py

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@
66
import logging
77
from typing import TYPE_CHECKING, Any
88

9+
from pynintendoauth.exceptions import HttpException, InvalidSessionTokenException
910
from pynintendoparental import Authenticator
1011
from pynintendoparental.api import Api
11-
from pynintendoparental.exceptions import HttpException, InvalidSessionTokenException
1212
import voluptuous as vol
1313

1414
from homeassistant.config_entries import ConfigFlow, ConfigFlowResult
@@ -33,18 +33,14 @@ async def async_step_user(
3333
"""Handle the initial step."""
3434
errors = {}
3535
if self.auth is None:
36-
self.auth = Authenticator.generate_login(
37-
client_session=async_get_clientsession(self.hass)
38-
)
36+
self.auth = Authenticator(client_session=async_get_clientsession(self.hass))
3937

4038
if user_input is not None:
4139
nintendo_api = Api(
4240
self.auth, self.hass.config.time_zone, self.hass.config.language
4341
)
4442
try:
45-
await self.auth.complete_login(
46-
self.auth, user_input[CONF_API_TOKEN], False
47-
)
43+
await self.auth.async_complete_login(user_input[CONF_API_TOKEN])
4844
except (ValueError, InvalidSessionTokenException, HttpException):
4945
errors["base"] = "invalid_auth"
5046
else:
@@ -67,7 +63,7 @@ async def async_step_user(
6763
return self.async_create_entry(
6864
title=self.auth.account_id,
6965
data={
70-
CONF_SESSION_TOKEN: self.auth.get_session_token,
66+
CONF_SESSION_TOKEN: self.auth.session_token,
7167
},
7268
)
7369
return self.async_show_form(
@@ -90,22 +86,18 @@ async def async_step_reauth_confirm(
9086
errors: dict[str, str] = {}
9187
reauth_entry = self._get_reauth_entry()
9288
if self.auth is None:
93-
self.auth = Authenticator.generate_login(
94-
client_session=async_get_clientsession(self.hass)
95-
)
89+
self.auth = Authenticator(client_session=async_get_clientsession(self.hass))
9690
if user_input is not None:
9791
try:
98-
await self.auth.complete_login(
99-
self.auth, user_input[CONF_API_TOKEN], False
100-
)
92+
await self.auth.async_complete_login(user_input[CONF_API_TOKEN])
10193
except (ValueError, InvalidSessionTokenException, HttpException):
10294
errors["base"] = "invalid_auth"
10395
else:
10496
return self.async_update_reload_and_abort(
10597
reauth_entry,
10698
data={
10799
**reauth_entry.data,
108-
CONF_SESSION_TOKEN: self.auth.get_session_token,
100+
CONF_SESSION_TOKEN: self.auth.session_token,
109101
},
110102
)
111103
return self.async_show_form(

homeassistant/components/nintendo_parental_controls/coordinator.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,9 @@
55
from datetime import timedelta
66
import logging
77

8+
from pynintendoauth.exceptions import InvalidOAuthConfigurationException
89
from pynintendoparental import Authenticator, NintendoParental
9-
from pynintendoparental.exceptions import (
10-
InvalidOAuthConfigurationException,
11-
NoDevicesFoundException,
12-
)
10+
from pynintendoparental.exceptions import NoDevicesFoundException
1311

1412
from homeassistant.config_entries import ConfigEntry
1513
from homeassistant.core import HomeAssistant

homeassistant/components/nintendo_parental_controls/manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,5 +7,5 @@
77
"iot_class": "cloud_polling",
88
"loggers": ["pynintendoparental"],
99
"quality_scale": "bronze",
10-
"requirements": ["pynintendoparental==1.1.3"]
10+
"requirements": ["pynintendoparental==2.0.0"]
1111
}

requirements_all.txt

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

requirements_test_all.txt

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/components/nintendo_parental_controls/conftest.py

Lines changed: 3 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@
66

77
from pynintendoparental import NintendoParental
88
from pynintendoparental.device import Device
9-
from pynintendoparental.exceptions import InvalidOAuthConfigurationException
109
import pytest
1110

1211
from homeassistant.components.nintendo_parental_controls.const import DOMAIN
@@ -71,11 +70,9 @@ def mock_nintendo_authenticator() -> Generator[MagicMock]:
7170
mock_auth._at_expiry = datetime(2099, 12, 31, 23, 59, 59)
7271
mock_auth.account_id = ACCOUNT_ID
7372
mock_auth.login_url = LOGIN_URL
74-
mock_auth.get_session_token = API_TOKEN
75-
# Patch complete_login as an AsyncMock on both instance and class as this is a class method
76-
mock_auth.complete_login = AsyncMock()
77-
type(mock_auth).complete_login = mock_auth.complete_login
78-
mock_auth_class.generate_login.return_value = mock_auth
73+
mock_auth.session_token = API_TOKEN
74+
mock_auth.async_complete_login = AsyncMock()
75+
mock_auth_class.return_value = mock_auth
7976
yield mock_auth
8077

8178

@@ -93,34 +90,6 @@ def mock_nintendo_api() -> Generator[AsyncMock]:
9390
yield mock_api_instance
9491

9592

96-
@pytest.fixture
97-
def mock_failed_nintendo_authenticator() -> Generator[MagicMock]:
98-
"""Mock a failed Nintendo Authenticator."""
99-
with (
100-
patch(
101-
"homeassistant.components.nintendo_parental_controls.Authenticator",
102-
autospec=True,
103-
) as mock_auth_class,
104-
patch(
105-
"homeassistant.components.nintendo_parental_controls.config_flow.Authenticator",
106-
new=mock_auth_class,
107-
),
108-
patch(
109-
"homeassistant.components.nintendo_parental_controls.coordinator.NintendoParental.update",
110-
return_value=None,
111-
),
112-
):
113-
mock_auth = MagicMock()
114-
mock_auth.complete_login = AsyncMock(
115-
side_effect=InvalidOAuthConfigurationException(
116-
status_code=401,
117-
message="Authentication failed",
118-
)
119-
)
120-
mock_auth_class.complete_login = mock_auth.complete_login
121-
yield mock_auth
122-
123-
12493
@pytest.fixture
12594
def mock_nintendo_client(
12695
mock_nintendo_device: Device, mock_nintendo_authenticator: MagicMock

tests/components/nintendo_parental_controls/test_config_flow.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
from unittest.mock import AsyncMock
44

5-
from pynintendoparental.exceptions import HttpException, InvalidSessionTokenException
5+
from pynintendoauth.exceptions import HttpException, InvalidSessionTokenException
66

77
from homeassistant import config_entries
88
from homeassistant.components.nintendo_parental_controls.const import (
@@ -82,7 +82,7 @@ async def test_invalid_auth(
8282
assert "link" in result["description_placeholders"]
8383

8484
# Simulate invalid authentication by raising an exception
85-
mock_nintendo_authenticator.complete_login.side_effect = (
85+
mock_nintendo_authenticator.async_complete_login.side_effect = (
8686
InvalidSessionTokenException(status_code=401, message="Test")
8787
)
8888

@@ -95,7 +95,7 @@ async def test_invalid_auth(
9595
assert result["errors"] == {"base": "invalid_auth"}
9696

9797
# Now ensure that the flow can be recovered
98-
mock_nintendo_authenticator.complete_login.side_effect = None
98+
mock_nintendo_authenticator.async_complete_login.side_effect = None
9999

100100
result = await hass.config_entries.flow.async_configure(
101101
result["flow_id"], user_input={CONF_API_TOKEN: API_TOKEN}
@@ -121,7 +121,7 @@ async def test_missing_devices(
121121
assert result["step_id"] == "user"
122122
assert "link" in result["description_placeholders"]
123123

124-
mock_nintendo_authenticator.complete_login.side_effect = None
124+
mock_nintendo_authenticator.async_complete_login.side_effect = None
125125

126126
mock_nintendo_api.async_get_account_devices.side_effect = HttpException(
127127
status_code=404, message="TEST"
@@ -149,7 +149,7 @@ async def test_cannot_connect(
149149
assert result["step_id"] == "user"
150150
assert "link" in result["description_placeholders"]
151151

152-
mock_nintendo_authenticator.complete_login.side_effect = None
152+
mock_nintendo_authenticator.async_complete_login.side_effect = None
153153

154154
mock_nintendo_api.async_get_account_devices.side_effect = HttpException(
155155
status_code=500, message="TEST"
@@ -209,7 +209,7 @@ async def test_reauthentication_fail(
209209
assert result["errors"] == {}
210210

211211
# Simulate invalid authentication by raising an exception
212-
mock_nintendo_authenticator.complete_login.side_effect = (
212+
mock_nintendo_authenticator.async_complete_login.side_effect = (
213213
InvalidSessionTokenException(status_code=401, message="Test")
214214
)
215215

@@ -222,7 +222,7 @@ async def test_reauthentication_fail(
222222
assert result["errors"] == {"base": "invalid_auth"}
223223

224224
# Now ensure that the flow can be recovered
225-
mock_nintendo_authenticator.complete_login.side_effect = None
225+
mock_nintendo_authenticator.async_complete_login.side_effect = None
226226

227227
result = await hass.config_entries.flow.async_configure(
228228
result["flow_id"], user_input={CONF_API_TOKEN: API_TOKEN}

tests/components/nintendo_parental_controls/test_coordinator.py

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,8 @@
22

33
from unittest.mock import AsyncMock
44

5-
from pynintendoparental.exceptions import (
6-
InvalidOAuthConfigurationException,
7-
NoDevicesFoundException,
8-
)
5+
from pynintendoauth.exceptions import InvalidOAuthConfigurationException
6+
from pynintendoparental.exceptions import NoDevicesFoundException
97

108
from homeassistant.config_entries import ConfigEntryState
119
from homeassistant.core import HomeAssistant

tests/components/nintendo_parental_controls/test_init.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,11 @@
1414
async def test_invalid_authentication(
1515
hass: HomeAssistant,
1616
mock_config_entry: MockConfigEntry,
17-
mock_failed_nintendo_authenticator: AsyncMock,
17+
mock_nintendo_authenticator: AsyncMock,
1818
entity_registry: er.EntityRegistry,
1919
) -> None:
2020
"""Test handling of invalid authentication."""
21+
mock_nintendo_authenticator.async_complete_login.side_effect = ValueError
2122
await setup_integration(hass, mock_config_entry)
2223

2324
# Ensure no entities are created

0 commit comments

Comments
 (0)