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