From d0a7be6e66dbd835a5d586d8b742df6cc453f913 Mon Sep 17 00:00:00 2001 From: Radek Novacek Date: Thu, 23 Jun 2016 16:25:49 +0200 Subject: [PATCH] Allow quoted config values --- tests/test_config.py | 32 +++++++++++++++++++++++++++----- virtwho/config.py | 12 +++++++++++- 2 files changed, 38 insertions(+), 6 deletions(-) diff --git a/tests/test_config.py b/tests/test_config.py index c84bc4ca..86a1e19d 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -465,8 +465,8 @@ def testFilterHostOld(self): self.assertEqual(manager.configs[0].filter_hosts, ['12345']) def testFilterHostNew(self): - with open(os.path.join(self.config_dir, "test1.conf"), "w") as f: - f.write(""" + with open(os.path.join(self.config_dir, "test1.conf"), "w") as f: + f.write(""" [test1] type=esx server=1.2.3.4 @@ -476,9 +476,31 @@ def testFilterHostNew(self): env=staging filter_hosts=12345 """) - manager = ConfigManager(self.logger, self.config_dir) - self.assertEqual(len(manager.configs), 1) - self.assertEqual(manager.configs[0].filter_hosts, ['12345']) + manager = ConfigManager(self.logger, self.config_dir) + self.assertEqual(len(manager.configs), 1) + self.assertEqual(manager.configs[0].filter_hosts, ['12345']) + + def testQuotesInConfig(self): + with open(os.path.join(self.config_dir, "test1.conf"), "w") as f: + f.write(""" +[test1] +type=esx +server="1.2.3.4" +username='admin' +password=p"asswor'd +owner=" root " +env='"staging"' +""") + manager = ConfigManager(self.logger, self.config_dir) + self.assertEqual(len(manager.configs), 1) + config = manager.configs[0] + self.assertEqual(config.name, "test1") + self.assertEqual(config.type, "esx") + self.assertEqual(config.server, "1.2.3.4") + self.assertEqual(config.username, "admin") + self.assertEqual(config.password, "p\"asswor'd") + self.assertEqual(config.owner, " root ") + self.assertEqual(config.env, '"staging"') class TestGeneralConfig(TestBase): diff --git a/virtwho/config.py b/virtwho/config.py index 14b29be2..13951cc7 100644 --- a/virtwho/config.py +++ b/virtwho/config.py @@ -341,6 +341,16 @@ def type(self): return self._type +class StripQuotesConfigParser(SafeConfigParser): + def get(self, section, option): + # Don't call super, SafeConfigParser is not inherited from object + value = SafeConfigParser.get(self, section, option) + for quote in ('"', "'"): + if value.startswith(quote) and value.endswith(quote): + return value.strip(quote) + return value + + class ConfigManager(object): def __init__(self, logger, config_dir=None, defaults=None): if not defaults: @@ -353,7 +363,7 @@ def __init__(self, logger, config_dir=None, defaults=None): self._defaults = defaults if config_dir is None: config_dir = VIRTWHO_CONF_DIR - parser = SafeConfigParser() + parser = StripQuotesConfigParser() self._configs = [] self.logger = logger try: