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.', diff --git a/verisure/session.py b/verisure/session.py index 91d19a8..3fab4db 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 ''' @@ -19,6 +22,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): @@ -102,20 +108,32 @@ 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: - last_exception = LoginError(response.text) - break + _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 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 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