diff --git a/lmwsip/__init__.py b/lmwsip/__init__.py index 56e636d..8814f48 100644 --- a/lmwsip/__init__.py +++ b/lmwsip/__init__.py @@ -239,12 +239,38 @@ Login lmw using the object creation user, password. Raises a LmwLoginFailure exception on failure """ li="LI " + self.user + "," + self.password + "\r" + # + # TODO: Check connect + # self.send(li) d = self.recv() if (d[0] != '!'): self.closesocket() raise LmwLoginFailure(self.user, d) + def sendrecv(self, cmd): + """sendrecv(cmd) + +send the command and recieve the answer. +retry on socket failure. +""" + c = 0 + ret = "" + while (ret == "") and (c < 3): + try: + self.send(cmd) + ret = self.recv() + except LmwSipConnectError as e: + if (self.user != None): + self.connect() + self.login() + c+=1 + ret="" + else: + c=3 + raise(e) + return(ret) + def ti(self): """ti() @@ -253,8 +279,7 @@ Request the time from lmw and returns the string. Raises a LmwCmdWarn of failure """ ti="TI " + self.meetnet + "\r" - self.send(ti) - d = self.recv() + d = self.sendrecv(ti) return (d[2:-1]) def cmd(self, process, location, parameter, time_delta, day, @@ -286,8 +311,7 @@ Returns: parameter + "," + time_delta + "," + day + "," + \ time_of_day + data + "\r" - self.send(cmdstr) - d = self.recv() + d = self.sendrecv(cmdstr) if (d[0] != '!'): raise LmwCmdWarn(cmdstr, d) return (d[2:-1]) diff --git a/lmwsip/tests/__init__.py b/lmwsip/tests/__init__.py index 15f4eda..4188199 100755 --- a/lmwsip/tests/__init__.py +++ b/lmwsip/tests/__init__.py @@ -49,6 +49,11 @@ class lmwsipTest(unittest.TestCase): self.login() self.assertEqual(type(self.sip.cmd("WN", "DUMMY", "D10", "+00:59", "2020-01-01", "00:00")), str) + def test_cmderr(self): + self.login() + with self.assertRaises(lmwsip.LmwCmdWarn): + self.assertEqual(type(self.sip.cmd("NOP", "DUMMY", "D10", "+00:59", "2020-01-01", "00:00")), str) + def test_value(self): self.login() self.assertEqual(type(self.sip.value("WN", "DUMMY", "D10")), str) @@ -81,6 +86,16 @@ class lmwsipTest(unittest.TestCase): with self.assertRaises(lmwsip.LmwSipConnectError): self.sip.recv() + def test_closeti(self): + self.login() + self.sip.send("CLOSE") + self.assertEqual(type(self.sip.ti()), str) + + def test_closecmd(self): + self.login() + self.sip.send("CLOSE") + self.assertEqual(type(self.sip.cmd("WN", "DUMMY", "D10", "+00:59", "2020-01-01", "00:00")), str) + def test_run(self): capturedOutput = io.StringIO() sys.stdout = capturedOutput