Skip to content

Commit

Permalink
Merge pull request #10 from erickwilder/skip-invalid-inifiles
Browse files Browse the repository at this point in the history
Handle MissingSectionHeaderError and ignore them when loading Ini Files
  • Loading branch information
osantana committed Aug 13, 2015
2 parents c5651c7 + 7b1d18b commit f714793
Show file tree
Hide file tree
Showing 4 changed files with 43 additions and 4 deletions.
1 change: 0 additions & 1 deletion prettyconf/configuration.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,6 @@ def __init__(self, starting_path, filetypes=None, root_path="/"):
self.filetypes = filetypes
self._config_files = None


def _scan_path(self, path):
config_files = []

Expand Down
6 changes: 3 additions & 3 deletions prettyconf/loaders.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@
from glob import glob

try:
from ConfigParser import SafeConfigParser as ConfigParser, NoOptionError
from ConfigParser import SafeConfigParser as ConfigParser, NoOptionError, MissingSectionHeaderError
except ImportError:
from configparser import ConfigParser, NoOptionError
from configparser import ConfigParser, NoOptionError, MissingSectionHeaderError

from .exceptions import InvalidConfigurationFile

Expand Down Expand Up @@ -160,7 +160,7 @@ def __init__(self, filename, section=None):
self.parser.readfp(inifile)
else:
self.parser.read_file(inifile)
except UnicodeDecodeError:
except (UnicodeDecodeError, MissingSectionHeaderError):
raise InvalidConfigurationFile()

if not self.parser.has_section(self.section):
Expand Down
14 changes: 14 additions & 0 deletions tests/test_filediscover.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# coding: utf-8
from __future__ import unicode_literals

import os

Expand All @@ -7,6 +8,7 @@
from .base import BaseTestCase
from prettyconf.configuration import ConfigurationDiscovery
from prettyconf.exceptions import InvalidPath
from prettyconf.loaders import IniFileConfigurationLoader


# noinspection PyStatementEffect
Expand Down Expand Up @@ -100,3 +102,15 @@ def test_lookup_should_stop_at_root_path(self):

discovery = ConfigurationDiscovery(start_path, root_path=root_dir)
self.assertEqual(discovery.config_files, [])

def test_inifile_discovery_should_ignore_invalid_files_without_raising_exception(self):
root_dir = TempDirectory()
self.tmpdirs.append(root_dir)

cfg_file = root_dir.write(('some', 'strange', 'config.cfg'), '&ˆ%$#$%ˆ&*()(*&ˆ'.encode('utf8'))
root_dir.write(('some', 'config.ini'), '$#%ˆ&*((*&ˆ%'.encode('utf8'))

discovery = ConfigurationDiscovery(
os.path.realpath(os.path.dirname(cfg_file)), filetypes=(IniFileConfigurationLoader, ))

self.assertEqual(discovery.config_files, [])
26 changes: 26 additions & 0 deletions tests/test_loaders.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# coding: utf-8
from __future__ import unicode_literals

from testfixtures import TempDirectory

from prettyconf.exceptions import InvalidConfigurationFile

from .base import BaseTestCase


class IniFileConfigurationLoaderTestCase(BaseTestCase):

def setUp(self):
super(IniFileConfigurationLoaderTestCase, self).setUp()
self.tmp_dir = TempDirectory()

def tearDown(self):
super(IniFileConfigurationLoaderTestCase, self).tearDown()
self.tmp_dir.cleanup_all()

def test_skip_invalid_ini_file(self):
from prettyconf.loaders import IniFileConfigurationLoader

test_file = self.tmp_dir.write('some/strange/config.cfg', '*&ˆ%$#$%ˆ&*('.encode('utf8'))
with self.assertRaises(InvalidConfigurationFile):
IniFileConfigurationLoader(test_file)

0 comments on commit f714793

Please sign in to comment.