]> Repositories - hackapet/Adafruit_Blinka.git/blobdiff - python/mcp/__init__.py
Top level package now defines only uart and spi ports. pin submodule handles pins
[hackapet/Adafruit_Blinka.git] / python / mcp / __init__.py
index a8c4a84f5146dac324115ba420d9e55958ec7aba..0e52a3cf9a2b10317ca204d582d21b32541c40aa 100644 (file)
@@ -6,6 +6,18 @@ class Enum(object):
         as seen with Direction.OUTPUT, Pull.UP
     """
 
         as seen with Direction.OUTPUT, Pull.UP
     """
 
+    def __repr__(self):
+        """
+        Assumes instance will be found as attribute of own class.
+        Returns dot-subscripted path to instance
+        (assuming absolute import of containing package)
+        """
+        cls = type(self)
+        for key in dir(cls):
+            if getattr(cls, key) is self:
+                return "{}.{}.{}".format(cls.__module__, cls.__qualname__, key)
+        return repr(self)
+
     @classmethod
     def iteritems(cls):
         """
     @classmethod
     def iteritems(cls):
         """
@@ -18,20 +30,25 @@ class Enum(object):
                 yield (key, val)
 
 
                 yield (key, val)
 
 
-    def __repr__(self):
-        """
-        Assumes instance will be found as attribute of own class.
-        Returns dot-subscripted path to instance
-        (assuming absolute import of containing package)
-        """
-        cls = type(self)
-        for key in dir(cls):
-            if getattr(cls, key) is self:
-                return "{}.{}.{}".format(cls.__module__, cls.__qualname__, key)
-        return repr(self)
+class ContextManaged:
+    def __enter__(self):
+        return self
+
+    def __exit__(self, exc_type, exc_value, traceback):
+        self.deinit()
+
+def Lockable(ContextManaged):
+    _locked = False
+
+    def try_lock(self):
+        if self._locked:
+            return False
+        else:
+            self._locked=True
+            return True
 
 
-class Pin(Enum):
-    def __init__(self, id):
-        """ id type is likely platform-specific"""
-        self.id = id
-    pass
+    def unlock(self):
+        if self._locked:
+            self._locked = False
+        else:
+            raise ValueError("Not locked")