Colin Watson has proposed merging ~cjwatson/launchpad:open-for-writing-errors 
into launchpad:master.

Commit message:
Re-raise unexpected I/O errors from open_for_writing

Requested reviews:
  Launchpad code reviewers (launchpad-reviewers)

For more details, see:
https://code.launchpad.net/~cjwatson/launchpad/+git/launchpad/+merge/399285

I don't think it can have been the intended behaviour for this to return None 
rather than raising an exception for errors other than the directory not 
existing.  Any such case would almost certainly fail shortly afterwards anyway 
due to trying to treat None as a file object, but the resulting exception would 
be much less clear.
-- 
Your team Launchpad code reviewers is requested to review the proposed merge of 
~cjwatson/launchpad:open-for-writing-errors into launchpad:master.
diff --git a/lib/lp/services/osutils.py b/lib/lp/services/osutils.py
index c670e62..38c8783 100644
--- a/lib/lp/services/osutils.py
+++ b/lib/lp/services/osutils.py
@@ -98,6 +98,7 @@ def open_for_writing(filename, mode, dirmode=0o777):
         if e.errno == errno.ENOENT:
             os.makedirs(os.path.dirname(filename), mode=dirmode)
             return open(filename, mode)
+        raise
 
 
 def _kill_may_race(pid, signal_number):
diff --git a/lib/lp/services/tests/test_osutils.py b/lib/lp/services/tests/test_osutils.py
index bbf4300..73359a6 100644
--- a/lib/lp/services/tests/test_osutils.py
+++ b/lib/lp/services/tests/test_osutils.py
@@ -100,6 +100,14 @@ class TestOpenForWriting(TestCase):
         with open(filename) as fp:
             self.assertEqual("Hello world!\n", fp.read())
 
+    def test_error(self):
+        # open_for_writing passes through errors other than the directory
+        # not existing.
+        directory = self.makeTemporaryDirectory()
+        os.chmod(directory, 0)
+        filename = os.path.join(directory, 'foo')
+        self.assertRaises(IOError, open_for_writing, filename, 'w')
+
 
 class TestWriteFile(TestCase):
 
_______________________________________________
Mailing list: https://launchpad.net/~launchpad-reviewers
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~launchpad-reviewers
More help   : https://help.launchpad.net/ListHelp

Reply via email to