Mark Bergsma has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/405295 )

Change subject: Fix RuntimeError in Server.merge
......................................................................

Fix RuntimeError in Server.merge

If a disallowed config key/type was present in configuration,
it would be deleted from the dict while looping over it.

Change-Id: I5f1027c7695e4ade48333abcc65a14d0cecc4a45
---
M pybal/server.py
M pybal/test/test_server.py
2 files changed, 9 insertions(+), 8 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/operations/debs/pybal 
refs/changes/95/405295/1

diff --git a/pybal/server.py b/pybal/server.py
index f1ba983..38a9224 100644
--- a/pybal/server.py
+++ b/pybal/server.py
@@ -28,7 +28,7 @@
     DEF_WEIGHT = 10
 
     # Set of attributes allowed to be overridden in a server list
-    allowedConfigKeys = [ ('host', str), ('weight', int), ('enabled', bool) ]
+    allowedConfigKeys = { ('host', str), ('weight', int), ('enabled', bool) }
 
     def __init__(self, host, lvsservice, addressFamily=None):
         """Constructor"""
@@ -243,12 +243,12 @@
     def merge(self, configuration):
         """Merges in configuration from a dictionary of (allowed) attributes"""
 
-        for key, value in configuration.iteritems():
-            if (key, type(value)) not in self.allowedConfigKeys:
-                del configuration[key]
-
+        filteredConfig = {k:v
+            for (k,v)
+            in configuration.iteritems()
+            if (k, type(v)) in self.allowedConfigKeys}
         # Overwrite configuration
-        self.__dict__.update(configuration)
+        self.__dict__.update(filteredConfig)
         self.maintainState()
         self.modified = True    # Indicate that this instance previously 
existed
 
diff --git a/pybal/test/test_server.py b/pybal/test/test_server.py
index 7ff0a31..ec6cedd 100644
--- a/pybal/test/test_server.py
+++ b/pybal/test/test_server.py
@@ -33,8 +33,7 @@
             'host': "example1.example.com",
             'weight': 66,
             'enabled': True,
-            # FIXME: bug in Server.merge
-            #'rogue': "this attribute should not be merged"
+            'rogue': "this attribute should not be merged"
         }
 
     def tearDown(self):
@@ -170,6 +169,8 @@
         self.assertEquals(self.server.host, self.exampleConfigDict['host'])
         self.assertEquals(self.server.weight, self.exampleConfigDict['weight'])
         self.assertEquals(self.server.enabled, 
self.exampleConfigDict['enabled'])
+        self.assertNotIn(self.exampleConfigDict['rogue'], self.server.__dict__)
+        del self.exampleConfigDict['rogue']
         self.assertDictContainsSubset(self.exampleConfigDict, 
self.server.__dict__)
 
     def testDumpState(self):

-- 
To view, visit https://gerrit.wikimedia.org/r/405295
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5f1027c7695e4ade48333abcc65a14d0cecc4a45
Gerrit-PatchSet: 1
Gerrit-Project: operations/debs/pybal
Gerrit-Branch: master
Gerrit-Owner: Mark Bergsma <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to