##// END OF EJS Templates
atomictempfile: add context manager support...
Martijn Pieters -
r29394:6d96658a default
parent child Browse files
Show More
@@ -1516,6 +1516,15 b' class atomictempfile(object):'
1516 if safehasattr(self, '_fp'): # constructor actually did something
1516 if safehasattr(self, '_fp'): # constructor actually did something
1517 self.discard()
1517 self.discard()
1518
1518
1519 def __enter__(self):
1520 return self
1521
1522 def __exit__(self, exctype, excvalue, traceback):
1523 if exctype is not None:
1524 self.discard()
1525 else:
1526 self.close()
1527
1519 def makedirs(name, mode=None, notindexed=False):
1528 def makedirs(name, mode=None, notindexed=False):
1520 """recursive directory creation with parent mode inheritance
1529 """recursive directory creation with parent mode inheritance
1521
1530
@@ -96,6 +96,24 b' class testatomictempfile(unittest.TestCa'
96 self.assertTrue(file.read(), b'foobar\n')
96 self.assertTrue(file.read(), b'foobar\n')
97 file.discard()
97 file.discard()
98
98
99 def testcontextmanagersuccess(self):
100 """When the context closes, the file is closed"""
101 with atomictempfile('foo') as f:
102 self.assertFalse(os.path.isfile('foo'))
103 f.write(b'argh\n')
104 self.assertTrue(os.path.isfile('foo'))
105
106 def testcontextmanagerfailure(self):
107 """On exception, the file is discarded"""
108 try:
109 with atomictempfile('foo') as f:
110 self.assertFalse(os.path.isfile('foo'))
111 f.write(b'argh\n')
112 raise ValueError
113 except ValueError:
114 pass
115 self.assertFalse(os.path.isfile('foo'))
116
99 if __name__ == '__main__':
117 if __name__ == '__main__':
100 import silenttestrunner
118 import silenttestrunner
101 silenttestrunner.main(__name__)
119 silenttestrunner.main(__name__)
General Comments 0
You need to be logged in to leave comments. Login now