From 6d76722afedfb843a91a89a5ebcdaf005f9943f7 Mon Sep 17 00:00:00 2001 From: Sven Augustin Date: Wed, 21 Sep 2022 11:33:11 +0200 Subject: [PATCH] added shutter opened/closed contexts --- slic/devices/general/shutter.py | 4 ++- slic/devices/general/shutterctx.py | 42 ++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 slic/devices/general/shutterctx.py diff --git a/slic/devices/general/shutter.py b/slic/devices/general/shutter.py index 51e422d0..bc1e89b4 100644 --- a/slic/devices/general/shutter.py +++ b/slic/devices/general/shutter.py @@ -1,6 +1,8 @@ from slic.core.adjustable import PVAdjustable from slic.utils import typename +from .shutterctx import ShutterContextMixin + #REQUEST # 0: close @@ -15,7 +17,7 @@ from slic.utils import typename # 1: TRUE -class Shutter: +class Shutter(ShutterContextMixin): def __init__(self, ID): self.ID = ID diff --git a/slic/devices/general/shutterctx.py b/slic/devices/general/shutterctx.py new file mode 100644 index 00000000..814c58a8 --- /dev/null +++ b/slic/devices/general/shutterctx.py @@ -0,0 +1,42 @@ +class ShutterContextMixin: + + def opened(self): + """ + Returns a context manager that opens the shutter on enter and closes on exit + """ + return ShutterCloser(self.open, self.close) + + def closed(self): + """ + Returns a context manager that closes the shutter on enter and opens on exit + """ + return ShutterOpener(self.close, self.open) + + + +class Context: + + def __init__(self, on_enter, on_exit): + self.on_enter = on_enter + self.on_exit = on_exit + + def __enter__(self): + self.on_enter() + return self + + def __exit__(self, exc_type, exc_val, exc_tb): + self.on_exit() + + + +# subclasses such that returned objects have meaningful names +# if opened/closed are called directly, i.e., outside with + +class ShutterCloser(Context): + pass + +class ShutterOpener(Context): + pass + + +