Refactored the code to remove confusing hyphens
diff --git a/lavapdu/apcdrivers.py b/lavapdu/apcdrivers.py
new file mode 100644
index 0000000..c840ba6
--- /dev/null
+++ b/lavapdu/apcdrivers.py
@@ -0,0 +1,152 @@
+#! /usr/bin/python
+
+# Copyright 2013 Linaro Limited
+# Author Matt Hart <matthew.hart@linaro.org>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+
+import logging
+
+from driver import PDUDriver
+
+
+class apc7952(PDUDriver):
+ def _pdu_logout(self):
+ self._back_to_main()
+ logging.debug("Logging out")
+ self.connection.send("4\r")
+
+ def _back_to_main(self):
+ logging.debug("Returning to main menu")
+ self.connection.expect('>')
+ for i in range(1,20):
+ #print("Sending escape character")
+ self.connection.send("\x1B")
+ self.connection.send("\r")
+ res = self.connection.expect(["4- Logout","> "])
+ if res == 0:
+ logging.debug("Back at main menu")
+ break
+ #self.connection.send("\r")
+ #self.connection.expect("4- Logout")
+ #self.connection.expect("> ")
+
+ def _enter_outlet(self, outlet):
+ self.connection.expect("Press <ENTER> to continue...")
+ self.connection.send("\r")
+ self.connection.expect("> ")
+ self.connection.send(outlet)
+ self.connection.send("\r")
+
+ def _port_interaction(self, command, port_number):
+ print("Attempting command: %s port: %i" % (command, port_number))
+ ### make sure in main menu here
+ self._back_to_main()
+ self.connection.send("\r")
+ self.connection.expect("1- Device Manager")
+ self.connection.expect("> ")
+ self.connection.send("1\r")
+ res = self.connection.expect(["3- Outlet Control/Configuration","2- Outlet Control","2- Outlet Management"])
+ if res == 0:
+ self.connection.send("3\r")
+ self._enter_outlet(port_number)
+ elif res == 1:
+ self.connection.send("2\r")
+ self._enter_outlet(port_number)
+ elif res == 2:
+ self.connection.send("2\r")
+ res = self.connection.expect(["1- Control Outlet", "1- Outlet Control/Configuration"])
+ self.connection.expect("> ")
+ self.connection.send("1\r")
+ res = self.connection.expect(["> ","Press <ENTER> to continue..."])
+ if res == 1:
+ logging.debug("Stupid paging thingmy detected, pressing enter")
+ self.connection.send("\r")
+ logging.debug("We should now be at the outlet list")
+ self.connection.send("%s\r" % port_number)
+ self.connection.send("1\r")
+ self.connection.expect("3- Immediate Reboot")
+ self.connection.expect("> ")
+ if command == "reboot":
+ self.connection.send("3\r")
+ self.connection.expect("Immediate Reboot")
+ self._do_it()
+ elif command == "delayed":
+ self.connection.send("6\r")
+ self.connection.expect("Delayed Reboot")
+ self._do_it()
+ elif command == "on":
+ self.connection.send("1\r")
+ self.connection.expect("Immediate On")
+ self._do_it()
+ elif command == "off":
+ self.connection.send("2\r")
+ self.connection.expect("Immediate Off")
+ self._do_it()
+ else:
+ logging.debug("Unknown command!")
+
+ def _do_it(self):
+ self.connection.expect("Enter 'YES' to continue or <ENTER> to cancel :")
+ self.connection.send("YES\r")
+ self.connection.expect("Press <ENTER> to continue...")
+ self.connection.send("\r")
+
+ def port_delayed(self, port_number):
+ self._port_interaction("delayed", port_number)
+
+ def port_on(self, port_number):
+ self._port_interaction("on", port_number)
+
+ def port_off(self, port_number):
+ self._port_interaction("off", port_number)
+
+ def port_reboot(self, port_number):
+ self._port_interaction("reboot", port_number)
+
+class apc8959(PDUDriver):
+ connection = None
+ pdu_commands = {"off":"olOff","on":"olOn","reboot":"olReboot","delayed":"olDlyReboot"}
+
+ def _pdu_logout(self):
+ logging.debug("logging out")
+ self.connection.send("\r")
+ self.connection.send("exit")
+ self.connection.send("\r")
+ logging.debug("done")
+
+ def _pdu_get_to_prompt(self):
+ self.connection.send("\r")
+ self.connection.expect ('apc>')
+
+ def _port_interaction(self, command, port_number):
+ logging.debug("Attempting %s on port %i" % (command, port_number))
+ self._pdu_get_to_prompt()
+ self.connection.sendline(self.pdu_commands[command] + (" %i" % port_number))
+ self.connection.expect("E000: Success")
+ logging.debug("done")
+
+ def port_delayed(self, port_number):
+ self._port_interaction("delayed", port_number)
+
+ def port_on(self, port_number):
+ self._port_interaction("on", port_number)
+
+ def port_off(self, port_number):
+ self._port_interaction("off", port_number)
+
+ def port_reboot(self, port_number):
+ self._port_interaction("reboot", port_number)
\ No newline at end of file