Skip to content

Commit 4535bcc

Browse files
committed
Allow using custom config parser
Instead of using ConfigParser.ConfigParser, let the user pass in a parser.
1 parent 38edc22 commit 4535bcc

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

conf_d/__init__.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
class Configuration():
99

10-
def __init__(self, name, path, parse=True, confd_path=None, conf_ext=None, main_defaults={}, section_defaults={}, main_parser=None, section_parser=None, path_from_main=None):
10+
def __init__(self, name, path, parse=True, confd_path=None, conf_ext=None, main_defaults={}, section_defaults={}, main_parser=None, section_parser=None, path_from_main=None, config_parser=ConfigParser.ConfigParser):
1111
self._conf_ext = conf_ext
1212
self._config_sections = {}
1313
self._confd_path = confd_path
@@ -19,6 +19,7 @@ def __init__(self, name, path, parse=True, confd_path=None, conf_ext=None, main_
1919
self._path = path
2020
self._section_defaults = section_defaults
2121
self._section_parser = section_parser
22+
self._config_parser = config_parser
2223

2324
if self._conf_ext:
2425
self._conf_ext = '.' + conf_ext.strip(".")
@@ -99,7 +100,7 @@ def parse(self):
99100
self._config_sections.update(configs)
100101

101102
def _parse_section(self, path, defaults={}, parser=None, only_section=None, remove_section=None):
102-
config_parser = ConfigParser.ConfigParser(defaults)
103+
config_parser = self._config_parser(defaults)
103104

104105
if not path:
105106
raise IOError('No path specified: "%s"' % path)

conf_d/tests/test_configuration.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
# -*- coding: utf-8 -*-
2+
import ConfigParser
23
import unittest
34

45
from conf_d import Configuration
56

7+
class TestConfigParser(ConfigParser.ConfigParser):
8+
def read(self, path):
9+
raise NotImplementedError('Catch this')
610

711
class ConfigurationTests(unittest.TestCase):
812

@@ -359,6 +363,16 @@ def all_as_int(config):
359363
self.assertEqual(None, conf.get('derp', 'missing_key'))
360364
self.assertEqual(1, conf.get('another/conf', 'sleep'))
361365

366+
def test_custom_config_parser(self):
367+
conf = Configuration(
368+
name='multiple_sections',
369+
path='./data/multiple_sections.ini',
370+
config_parser=TestConfigParser,
371+
parse=False
372+
)
373+
374+
self.assertRaises(NotImplementedError, lambda: conf._parse_section(path='./data/multiple_sections.ini'))
375+
362376
def test_readme(self):
363377
def digitize(config):
364378
for key in config:

0 commit comments

Comments
 (0)