From 759e1139e56ee33ba628e2f7dc70956c9defdb57 Mon Sep 17 00:00:00 2001 From: Olen Date: Mon, 7 Aug 2023 13:50:56 +0200 Subject: [PATCH 1/4] Try login again after 4xx-error Trying harder to log in on a 4xx Error code. --- verisure/session.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/verisure/session.py b/verisure/session.py index 91d19a8..67025e7 100644 --- a/verisure/session.py +++ b/verisure/session.py @@ -19,6 +19,9 @@ class RequestError(Error): class LoginError(Error): ''' Login failed ''' + def __init__(self, text, status_code = None): + super().__init__( + f'Login error, status code: {status_code} - Data: {text}') class LogoutError(Error): @@ -106,8 +109,9 @@ def wrapper(url, *args, **kwargs): self._base_urls.reverse() continue if response.status_code >= 400: - last_exception = LoginError(response.text) - break + last_exception = LoginError(response.text, response.status_code) + self._base_urls.reverse() + continue if response.status_code == 200: if "SYS_00004" in response.text: self._base_urls.reverse() From 8d291aac5f5633598524380f15a842e9ed11f864 Mon Sep 17 00:00:00 2001 From: Ola Thoresen Date: Tue, 8 Aug 2023 11:47:05 +0200 Subject: [PATCH 2/4] 2.6.5 --- README.md | 1 + setup.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1a11c3c..249ece7 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,7 @@ devices. ## Version History ```txt +2.6.5 Try again after 4xx error 2.6.4 Handle "SYS_00004" response again (was removed in 2.6.3) 2.6.3 Differentiate response errors 2.6.2 Fix request wrapper diff --git a/setup.py b/setup.py index 9799430..67dfe29 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setup( name='vsure', - version='2.6.4', + version='2.6.5', description='Read and change status of verisure devices through mypages.', long_description='A python3 module for reading and changing status of ' + 'verisure devices through mypages.', From e0c13a434839bb133d8b40bf24612b660431169f Mon Sep 17 00:00:00 2001 From: Ola Thoresen Date: Tue, 8 Aug 2023 13:56:24 +0200 Subject: [PATCH 3/4] Add logging --- verisure/session.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/verisure/session.py b/verisure/session.py index 67025e7..1acb470 100644 --- a/verisure/session.py +++ b/verisure/session.py @@ -3,11 +3,14 @@ ''' import json +import logging import os import pickle import requests +_LOGGER = logging.getLogger(__name__) + class Error(Exception): ''' Verisure session error ''' @@ -105,14 +108,17 @@ def wrapper(url, *args, **kwargs): try: response = function(base_url+url, *args, **kwargs) if response.status_code >= 500: + _LOGGER.warning(f'Error from {base_url}: {response.status_code} - {response.text}') last_exception = ResponseError(response.status_code, response.text) self._base_urls.reverse() continue if response.status_code >= 400: + _LOGGER.warning(f'Error from {base_url}: {response.status_code} - {response.text}') last_exception = LoginError(response.text, response.status_code) self._base_urls.reverse() continue if response.status_code == 200: + _LOGGER.debug(f'OK from {base_url}: {response.status_code}') if "SYS_00004" in response.text: self._base_urls.reverse() continue From 0462a77c6fd147a9a57f2035330c4b2941eca9cb Mon Sep 17 00:00:00 2001 From: Ola Thoresen Date: Wed, 9 Aug 2023 18:28:57 +0200 Subject: [PATCH 4/4] Differentiate between changed password and expired token --- verisure/session.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/verisure/session.py b/verisure/session.py index 1acb470..3fab4db 100644 --- a/verisure/session.py +++ b/verisure/session.py @@ -114,6 +114,11 @@ def wrapper(url, *args, **kwargs): continue if response.status_code >= 400: _LOGGER.warning(f'Error from {base_url}: {response.status_code} - {response.text}') + if "Session has expired" in response.text: + raise LoginError(response.text, response.status_code) + elif "Username/password does not match any valid login" in response.text: + raise ResponseError(response.status_code, response.text) + last_exception = LoginError(response.text, response.status_code) self._base_urls.reverse() continue @@ -123,9 +128,12 @@ def wrapper(url, *args, **kwargs): self._base_urls.reverse() continue return response + _LOGGER.debug(f'Unknown status from {base_url}: {response.status_code} - {response.text}') except requests.exceptions.RequestException as ex: + _LOGGER.debug(f'Exception from {base_url}: {ex}') last_exception = RequestError(str(ex)) + _LOGGER.debug(f'Switching active base_url') self._base_urls.reverse() raise last_exception return wrapper