--- /dev/null
+import functools
+
+class ArvadosFileBase(object):
+ def __init__(self, name, mode):
+ self.name = name
+ self.mode = mode
+ self.closed = False
+
+ @staticmethod
+ def _before_close(orig_func):
+ @functools.wraps(orig_func)
+ def wrapper(self, *args, **kwargs):
+ if self.closed:
+ raise ValueError("I/O operation on closed stream file")
+ return orig_func(self, *args, **kwargs)
+ return wrapper
+
+ def __enter__(self):
+ return self
+
+ def __exit__(self, exc_type, exc_value, traceback):
+ try:
+ self.close()
+ except Exception:
+ if exc_type is None:
+ raise
+
+ def close(self):
+ self.closed = True