summaryrefslogtreecommitdiff
path: root/kvmd/aioregion.py
diff options
context:
space:
mode:
authorDevaev Maxim <[email protected]>2018-09-26 02:57:24 +0300
committerDevaev Maxim <[email protected]>2018-09-26 02:57:24 +0300
commit81a5311349564a1016c4af2bf18ae872b650e85b (patch)
treed01fd027948494e22ae2c14334b98c1515e5e8a4 /kvmd/aioregion.py
parentf3946f102fc167efdc53c73412b2c0d6ac6c72c5 (diff)
moved kvmd to the root
Diffstat (limited to 'kvmd/aioregion.py')
-rw-r--r--kvmd/aioregion.py38
1 files changed, 38 insertions, 0 deletions
diff --git a/kvmd/aioregion.py b/kvmd/aioregion.py
new file mode 100644
index 00000000..c2b335f4
--- /dev/null
+++ b/kvmd/aioregion.py
@@ -0,0 +1,38 @@
+import types
+
+from typing import Type
+
+
+# =====
+class RegionIsBusyError(Exception):
+ def __init__(self) -> None:
+ super().__init__("Performing another operation, please try again later")
+
+
+class AioExclusiveRegion:
+ def __init__(self, exc_type: Type[RegionIsBusyError]) -> None:
+ self.__exc_type = exc_type
+ self.__busy = False
+
+ def is_busy(self) -> bool:
+ return self.__busy
+
+ def enter(self) -> None:
+ if not self.__busy:
+ self.__busy = True
+ return
+ raise self.__exc_type()
+
+ def exit(self) -> None:
+ self.__busy = False
+
+ def __enter__(self) -> None:
+ self.enter()
+
+ def __exit__(
+ self,
+ _exc_type: Type[BaseException],
+ _exc: BaseException,
+ _tb: types.TracebackType,
+ ) -> None:
+ self.exit()