diff --git a/setup.py b/setup.py index 9f15d2e..75daea0 100644 --- a/setup.py +++ b/setup.py @@ -4,7 +4,7 @@ setup( name="total_connect_client", py_modules=["total_connect_client"], - version="0.57", + version="0.58", description="Interact with Total Connect 2 alarm systems", author="Craig J. Midwinter", author_email="craig.j.midwinter@gmail.com", diff --git a/tests/common.py b/tests/common.py index 6ba2506..e172e42 100644 --- a/tests/common.py +++ b/tests/common.py @@ -17,7 +17,7 @@ def create_client(): RESPONSE_DISARMED, ] - with patch("zeep.Client", autospec=True), patch( + with patch( "TotalConnectClient.TotalConnectClient.request", side_effect=responses ) as mock_request: client = TotalConnectClient.TotalConnectClient( diff --git a/tests/test_client_init.py b/tests/test_client_init.py index 3b2d2ea..b129a24 100644 --- a/tests/test_client_init.py +++ b/tests/test_client_init.py @@ -34,7 +34,7 @@ def tests_init_usercodes_none(self): RESPONSE_DISARMED, ] - with patch("zeep.Client", autospec=True), patch( + with patch( "TotalConnectClient.TotalConnectClient.request", side_effect=responses ) as mock_request: client = TotalConnectClient.TotalConnectClient( @@ -50,7 +50,7 @@ def tests_init_locations_empty(self): RESPONSE_AUTHENTICATE_EMPTY, ] - with patch("zeep.Client", autospec=True), patch( + with patch( "TotalConnectClient.TotalConnectClient.request", side_effect=responses ) as mock_request, pytest.raises(Exception): @@ -68,7 +68,7 @@ def tests_init_usercodes_string(self): RESPONSE_DISARMED, ] - with patch("zeep.Client", autospec=True), patch( + with patch( "TotalConnectClient.TotalConnectClient.request", side_effect=responses ) as mock_request: client = TotalConnectClient.TotalConnectClient( diff --git a/tests/test_client_request.py b/tests/test_client_request.py index 908eb27..1b6fa54 100644 --- a/tests/test_client_request.py +++ b/tests/test_client_request.py @@ -58,9 +58,11 @@ def tests_request_init(self): RESPONSE_DISARMED, ] - with patch("zeep.Client", autospec=True), patch( + with patch( "zeep.helpers.serialize_object", side_effect=serialize_responses - ), patch("builtins.eval", side_effect=eval_responses) as mock_request: + ), patch("TotalConnectClient.TotalConnectClient.setup_soap"), patch( + "builtins.eval", side_effect=eval_responses + ) as mock_request: client = TotalConnectClient.TotalConnectClient( "username", "password", usercodes=None ) @@ -79,9 +81,11 @@ def tests_request_init_bad_user_or_password(self): RESPONSE_BAD_USER_OR_PASSWORD, ] - with patch("zeep.Client", autospec=True), patch( + with patch( "zeep.helpers.serialize_object", side_effect=serialize_responses - ), patch("builtins.eval", side_effect=eval_responses) as mock_request: + ), patch("TotalConnectClient.TotalConnectClient.setup_soap"), patch( + "builtins.eval", side_effect=eval_responses + ) as mock_request: client = TotalConnectClient.TotalConnectClient( "username", "password", usercodes=None ) @@ -101,9 +105,11 @@ def tests_request_init_failed_to_connect(self): ) serialize_responses.append(RESPONSE_FAILED_TO_CONNECT) - with patch("zeep.Client", autospec=True), patch( + with patch( "zeep.helpers.serialize_object", side_effect=serialize_responses - ), patch("time.sleep", autospec=True), patch( + ), patch("TotalConnectClient.TotalConnectClient.setup_soap"), patch( + "time.sleep", autospec=True + ), patch( "builtins.eval", side_effect=eval_responses ) as mock_request, pytest.raises( Exception @@ -134,9 +140,11 @@ def tests_request_connection_error(self): ) serialize_responses.append(RESPONSE_CONNECTION_ERROR) - with patch("zeep.Client", autospec=True), patch( + with patch( "zeep.helpers.serialize_object", side_effect=serialize_responses - ), patch("time.sleep", autospec=True), patch( + ), patch("TotalConnectClient.TotalConnectClient.setup_soap"), patch( + "time.sleep", autospec=True + ), patch( "builtins.eval", side_effect=eval_responses ) as mock_request, pytest.raises( Exception @@ -185,9 +193,11 @@ def tests_request_invalid_session(self): RESPONSE_ARMED_AWAY, ] - with patch("zeep.Client", autospec=True), patch( + with patch( "zeep.helpers.serialize_object", side_effect=serialize_responses - ), patch("builtins.eval", side_effect=eval_responses) as mock_request: + ), patch("TotalConnectClient.TotalConnectClient.setup_soap"), patch( + "builtins.eval", side_effect=eval_responses + ) as mock_request: client = TotalConnectClient.TotalConnectClient( "username", "password", usercodes=None ) @@ -208,9 +218,11 @@ def tests_request_unknown_result_code(self): RESPONSE_UNKNOWN, ] - with patch("zeep.Client", autospec=True), patch( + with patch( "zeep.helpers.serialize_object", side_effect=serialize_responses - ), patch("builtins.eval", side_effect=eval_responses) as mock_request: + ), patch("TotalConnectClient.TotalConnectClient.setup_soap"), patch( + "builtins.eval", side_effect=eval_responses + ) as mock_request: client = TotalConnectClient.TotalConnectClient( "username", "password", usercodes=None ) diff --git a/total_connect_client/TotalConnectClient.py b/total_connect_client/TotalConnectClient.py index d2c55ca..384d3df 100644 --- a/total_connect_client/TotalConnectClient.py +++ b/total_connect_client/TotalConnectClient.py @@ -70,8 +70,9 @@ def __init__( """Initialize.""" self.times = {} self.time_start = time.time() - self.soapClient = zeep.Client("https://rs.alarmnet.com/TC21api/tc2.asmx?WSDL") + self.soapClient = None self.soap_base = "self.soapClient.service." + self.soap_ready = False self.applicationId = "14588" self.applicationVersion = "1.0.34" @@ -127,8 +128,16 @@ def get_times(self): return msg + def setup_soap(self): + """Set up soap for use.""" + self.soapClient = zeep.Client("https://rs.alarmnet.com/TC21api/tc2.asmx?WSDL") + self.soap_ready = True + def request(self, request, attempts=0): """Send a SOAP request.""" + if self.soap_ready is False: + self.setup_soap() + if attempts < self.MAX_REQUEST_ATTEMPTS: attempts += 1 response = eval(self.soap_base + request)