From 54200e33d261b89da3472aba35ca8f598ce9a696 Mon Sep 17 00:00:00 2001
From: Ellis Percival <flyte@failcode.co.uk>
Date: Wed, 26 Jul 2017 14:25:12 +0100
Subject: [PATCH] Add cleanup function to modules, called upon exit. #16

---
 pi_mqtt_gpio/modules/__init__.py    | 6 ++++++
 pi_mqtt_gpio/modules/raspberrypi.py | 3 +++
 pi_mqtt_gpio/server.py              | 6 ++++++
 3 files changed, 15 insertions(+)

diff --git a/pi_mqtt_gpio/modules/__init__.py b/pi_mqtt_gpio/modules/__init__.py
index 6f2892f..2e82893 100644
--- a/pi_mqtt_gpio/modules/__init__.py
+++ b/pi_mqtt_gpio/modules/__init__.py
@@ -44,3 +44,9 @@ class GenericGPIO(object):
     @abc.abstractmethod
     def get_pin(self, pin):
         pass
+
+    def cleanup(self):
+        """
+        Called when closing the program to handle any cleanup operations.
+        """
+        pass
diff --git a/pi_mqtt_gpio/modules/raspberrypi.py b/pi_mqtt_gpio/modules/raspberrypi.py
index a1b4174..8f505c9 100644
--- a/pi_mqtt_gpio/modules/raspberrypi.py
+++ b/pi_mqtt_gpio/modules/raspberrypi.py
@@ -43,3 +43,6 @@ class GPIO(GenericGPIO):
 
     def get_pin(self, pin):
         return self.io.input(pin)
+
+    def cleanup(self):
+        self.io.cleanup()
diff --git a/pi_mqtt_gpio/server.py b/pi_mqtt_gpio/server.py
index f16c68a..1a2ab6c 100644
--- a/pi_mqtt_gpio/server.py
+++ b/pi_mqtt_gpio/server.py
@@ -488,3 +488,9 @@ if __name__ == "__main__":
     finally:
         client.disconnect()
         client.loop_stop()
+        for name, gpio in GPIO_MODULES.items():
+            try:
+                gpio.cleanup()
+            except Exception:
+                _LOG.exception(
+                    "Unable to execute cleanup routine for module %r:", name)
-- 
GitLab