From: Josh Durgin Date: Wed, 21 Sep 2011 22:44:04 +0000 (-0700) Subject: rados.py: make Rados and Ioctx objects context managers X-Git-Tag: v0.37~147 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=c34e87d098d5565884d9c5142600b33a2f9e7be0;p=ceph.git rados.py: make Rados and Ioctx objects context managers Signed-off-by: Josh Durgin --- diff --git a/src/pybind/rados.py b/src/pybind/rados.py index bc2ce185252d3..9356f754be8cc 100755 --- a/src/pybind/rados.py +++ b/src/pybind/rados.py @@ -112,6 +112,14 @@ Rados object in state %s." % (self.state)) self.librados.rados_shutdown(self.cluster) self.state = "shutdown" + def __enter__(self): + self.connect() + return self + + def __exit__(self, type_, value, traceback): + self.shutdown() + return False + def __del__(self): self.shutdown() @@ -321,9 +329,15 @@ class Ioctx(object): self.io = io self.state = "open" + def __enter__(self): + return self + + def __exit__(self, type_, value, traceback): + self.close() + return False + def __del__(self): - if (self.state == "open"): - self.close() + self.close() def require_ioctx_open(self): if self.state != "open": @@ -346,9 +360,10 @@ class Ioctx(object): (self.name, loc_key)) def close(self): - self.require_ioctx_open() - self.librados.rados_ioctx_destroy(self.io) - self.state = "closed" + if self.state == "open": + self.require_ioctx_open() + self.librados.rados_ioctx_destroy(self.io) + self.state = "closed" def write(self, key, data, offset = 0): self.require_ioctx_open()