← Back to team overview

configglue team mailing list archive

[Merge] lp:~ricardokirkner/configglue/warn-if-error-while-reading into lp:configglue

 

Ricardo Kirkner has proposed merging lp:~ricardokirkner/configglue/warn-if-error-while-reading into lp:configglue.

Requested reviews:
  Configglue developers (configglue)

For more details, see:
https://code.launchpad.net/~ricardokirkner/configglue/warn-if-error-while-reading/+merge/69728

When reading config files, log a WARNING when a file could not be read.
-- 
https://code.launchpad.net/~ricardokirkner/configglue/warn-if-error-while-reading/+merge/69728
Your team Configglue developers is requested to review the proposed merge of lp:~ricardokirkner/configglue/warn-if-error-while-reading into lp:configglue.
=== modified file 'configglue/parser.py'
--- configglue/parser.py	2011-07-28 01:30:57 +0000
+++ configglue/parser.py	2011-07-28 23:13:23 +0000
@@ -17,6 +17,7 @@
 import codecs
 import collections
 import copy
+import logging
 import os
 import re
 import string
@@ -254,6 +255,8 @@
             try:
                 fp = codecs.open(path, 'r', CONFIG_FILE_ENCODING)
             except IOError:
+                logging.warn(
+                    'File {0} could not be read. Skipping.'.format(path))
                 continue
             self._read(fp, path, already_read=already_read)
             fp.close()

=== modified file 'configglue/tests/test_parser.py'
--- configglue/tests/test_parser.py	2011-07-28 01:31:18 +0000
+++ configglue/tests/test_parser.py	2011-07-28 23:13:23 +0000
@@ -15,6 +15,7 @@
 #
 ###############################################################################
 
+import logging
 import os
 import shutil
 import tempfile
@@ -68,9 +69,16 @@
         os.write(fd, '[__main__]\nfoo=bar\n')
         os.close(fd)
 
+        # disable logging output during test
+        self.level = logging.getLogger().level
+        logging.disable('ERROR')
+
     def tearDown(self):
         os.remove(self.name)
 
+        # re-enable original logging level
+        logging.getLogger().setLevel(self.level)
+
     def test_basic_include(self):
         config = StringIO('[__main__]\nincludes=%s' % self.name)
         parser = SchemaConfigParser(self.schema)
@@ -86,17 +94,18 @@
         expected_location = self.name
         self.assertEqual(expected_location, location)
 
-    def test_read_ioerror(self):
-        def mock_open(filename, mode='r', encoding='ascii'):
-            raise IOError
-        _open = __builtins__['open']
-        __builtins__['open'] = mock_open
+    @patch('configglue.parser.logging.warn')
+    @patch('configglue.parser.codecs.open')
+    def test_read_ioerror(self, mock_open, mock_warn):
+        mock_open.side_effect = IOError
 
         parser = SchemaConfigParser(self.schema)
         read_ok = parser.read(self.name)
+
         self.assertEqual(read_ok, [])
-
-        __builtins__['open'] = _open
+        self.assertEqual(mock_warn.call_args_list,
+            [(("File {0} could not be read. Skipping.".format(self.name),),
+              {})])
 
     def test_relative_include(self):
         """Test parser include files using relative paths."""


Follow ups