diff options
Diffstat (limited to 'kvmd/aioregion.py')
-rw-r--r-- | kvmd/aioregion.py | 38 |
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() |