mirror of
https://github.com/python-kasa/python-kasa.git
synced 2024-12-22 19:23:34 +00:00
Fix P100 error getting conn closed when trying default login after login failure (#690)
This commit is contained in:
parent
e233e377ad
commit
f045696ebe
@ -180,19 +180,28 @@ class AesTransport(BaseTransport):
|
||||
"""Login to the device."""
|
||||
try:
|
||||
await self.try_login(self._login_params)
|
||||
except AuthenticationException as ex:
|
||||
if ex.error_code != SmartErrorCode.LOGIN_ERROR:
|
||||
raise ex
|
||||
if self._default_credentials is None:
|
||||
self._default_credentials = get_default_credentials(
|
||||
DEFAULT_CREDENTIALS["TAPO"]
|
||||
except AuthenticationException as aex:
|
||||
try:
|
||||
if aex.error_code != SmartErrorCode.LOGIN_ERROR:
|
||||
raise aex
|
||||
if self._default_credentials is None:
|
||||
self._default_credentials = get_default_credentials(
|
||||
DEFAULT_CREDENTIALS["TAPO"]
|
||||
)
|
||||
await self.perform_handshake()
|
||||
await self.try_login(self._get_login_params(self._default_credentials))
|
||||
_LOGGER.debug(
|
||||
"%s: logged in with default credentials",
|
||||
self._host,
|
||||
)
|
||||
await self.perform_handshake()
|
||||
await self.try_login(self._get_login_params(self._default_credentials))
|
||||
_LOGGER.debug(
|
||||
"%s: logged in with default credentials",
|
||||
self._host,
|
||||
)
|
||||
except AuthenticationException:
|
||||
raise
|
||||
except Exception as ex:
|
||||
raise AuthenticationException(
|
||||
"Unable to login and trying default "
|
||||
+ "login raised another exception: %s",
|
||||
ex,
|
||||
) from ex
|
||||
|
||||
async def try_login(self, login_params):
|
||||
"""Try to login with supplied login_params."""
|
||||
|
@ -106,8 +106,18 @@ async def test_login(mocker, status_code, error_code, inner_error_code, expectat
|
||||
pytest.raises(AuthenticationException),
|
||||
1,
|
||||
),
|
||||
(
|
||||
[SmartErrorCode.LOGIN_ERROR, SmartErrorCode.SESSION_TIMEOUT_ERROR],
|
||||
pytest.raises(SmartDeviceException),
|
||||
3,
|
||||
),
|
||||
],
|
||||
ids=("LOGIN_ERROR-success", "LOGIN_ERROR-LOGIN_ERROR", "LOGIN_FAILED_ERROR"),
|
||||
ids=(
|
||||
"LOGIN_ERROR-success",
|
||||
"LOGIN_ERROR-LOGIN_ERROR",
|
||||
"LOGIN_FAILED_ERROR",
|
||||
"LOGIN_ERROR-SESSION_TIMEOUT_ERROR",
|
||||
),
|
||||
)
|
||||
async def test_login_errors(mocker, inner_error_codes, expectation, call_count):
|
||||
host = "127.0.0.1"
|
||||
|
Loading…
Reference in New Issue
Block a user