[tor-commits] [ooni-probe/master] Make settings parsing more robust

art at torproject.org art at torproject.org
Mon Sep 19 12:14:24 UTC 2016


commit b334679f58c835b7a93b6f93662b7cf7aab80240
Author: Arturo Filastò <arturo at filasto.net>
Date:   Fri Sep 2 17:35:36 2016 +0200

    Make settings parsing more robust
    
    * Expand test case to cover more edge cases
---
 ooni/settings.py            | 10 +++++++---
 ooni/tests/test_settings.py | 12 +++++++++---
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/ooni/settings.py b/ooni/settings.py
index 66bd212..9f24f9b 100644
--- a/ooni/settings.py
+++ b/ooni/settings.py
@@ -89,7 +89,7 @@ tor:
     # This is the timeout after which we consider to to not have
     # bootstrapped properly.
     #timeout: 200
-    torrc:
+    #torrc:
         #HTTPProxy: host:port
         #HTTPProxyAuthenticator: user:password
         #HTTPSProxy: host:port
@@ -213,14 +213,18 @@ def _load_config_files_with_defaults(config_files, defaults):
             continue
         with open(config_file_path) as in_file:
             c = yaml.safe_load(in_file)
-        config_from_files.update(c)
+        for category in c.keys():
+            if c[category] is None:
+                continue
+            config_from_files[category] = config_from_files.get(category, {})
+            config_from_files[category].update(c[category])
 
     for category in defaults.keys():
         configuration[category] = {}
         for k, v in defaults[category].items():
             try:
                 configuration[category][k] = config_from_files[category][k]
-            except KeyError:
+            except (KeyError, TypeError):
                 configuration[category][k] = defaults[category][k]
     return configuration
 
diff --git a/ooni/tests/test_settings.py b/ooni/tests/test_settings.py
index 30d9e19..b88aa68 100644
--- a/ooni/tests/test_settings.py
+++ b/ooni/tests/test_settings.py
@@ -146,7 +146,8 @@ class TestSettings(ConfigTestCase):
                 'key': 'value'
             },
             'cat2': {
-                'key': 'value'
+                'key': 'value',
+                'key2': 'value2'
             },
             'cat3': {
                 'key': 'value'
@@ -162,11 +163,15 @@ class TestSettings(ConfigTestCase):
             },
             'invalid_category': {
                 'ignored': 'ignored'
-            }
+            },
+            'cat3': None
         }
         config_file_B = {
             'cat1': {
                 'key': 'valueB'
+            },
+            'cat2': {
+                'key2': 'value2B'
             }
         }
         temp_dir = tempfile.mkdtemp()
@@ -188,7 +193,8 @@ class TestSettings(ConfigTestCase):
                 'key': 'valueB'
             },
             'cat2': {
-                'key': 'valueA'
+                'key': 'valueA',
+                'key2': 'value2B'
             },
             'cat3': {
                 'key': 'value'





More information about the tor-commits mailing list