Skip to content

Commit

Permalink
Remove usage of self.__dict__ for message var replacement
Browse files Browse the repository at this point in the history
This is the same as using locals() for variable replacement in a log
message which violates hacking rule H501.  On Cinder this actually
caused the cinder-api process to hang on python 2.6.

Nova has the same code so this fixes the hacking violation.

Note that the H501 rule was updated in commit 55e96ee but it's not in a
released version of hacking yet (and won't be in time for Juno).

Closes-Bug: #1365901

Change-Id: I1be0db327a2fa1e866328eecd2e7c3dd3ee3cc93
  • Loading branch information
Matt Riedemann committed Sep 25, 2014
1 parent f2d486d commit 59576bc
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 15 deletions.
8 changes: 5 additions & 3 deletions nova/api/openstack/compute/limits.py
Expand Up @@ -159,9 +159,11 @@ def __init__(self, verb, uri, regex, value, unit):
self.water_level = 0
self.capacity = self.unit
self.request_value = float(self.capacity) / float(self.value)
msg = _("Only %(value)s %(verb)s request(s) can be "
"made to %(uri)s every %(unit_string)s.")
self.error_message = msg % self.__dict__
msg = (_("Only %(value)s %(verb)s request(s) can be "
"made to %(uri)s every %(unit_string)s.") %
{'value': self.value, 'verb': self.verb, 'uri': self.uri,
'unit_string': self.unit_string})
self.error_message = msg

def __call__(self, verb, url):
"""Represents a call to this limit from a relevant request.
Expand Down
35 changes: 25 additions & 10 deletions nova/tests/matchers.py
Expand Up @@ -29,7 +29,8 @@ def __init__(self, d1only, d2only):

def describe(self):
return ('Keys in d1 and not d2: %(d1only)s.'
' Keys in d2 and not d1: %(d2only)s' % self.__dict__)
' Keys in d2 and not d1: %(d2only)s' %
{'d1only': self.d1only, 'd2only': self.d2only})

def get_details(self):
return {}
Expand All @@ -43,7 +44,9 @@ def __init__(self, key, d1_value, d2_value):

def describe(self):
return ("Dictionaries do not match at %(key)s."
" d1: %(d1_value)s d2: %(d2_value)s" % self.__dict__)
" d1: %(d1_value)s d2: %(d2_value)s" %
{'key': self.key, 'd1_value': self.d1_value,
'd2_value': self.d2_value})

def get_details(self):
return {}
Expand Down Expand Up @@ -113,7 +116,7 @@ def __init__(self, len1, len2):

def describe(self):
return ('Length mismatch: len(L1)=%(len1)d != '
'len(L2)=%(len2)d' % self.__dict__)
'len(L2)=%(len2)d' % {'len1': self.len1, 'len2': self.len2})

def get_details(self):
return {}
Expand Down Expand Up @@ -221,7 +224,7 @@ def __init__(self, state):
self.actual = state.actual

def describe(self):
return "%(path)s: XML does not match" % self.__dict__
return "%(path)s: XML does not match" % self.path

def get_details(self):
return {
Expand All @@ -242,7 +245,10 @@ def __init__(self, state, idx, expected_tag, actual_tag):
def describe(self):
return ("%(path)s: XML tag mismatch at index %(idx)d: "
"expected tag <%(expected_tag)s>; "
"actual tag <%(actual_tag)s>" % self.__dict__)
"actual tag <%(actual_tag)s>" %
{'path': self.path, 'idx': self.idx,
'expected_tag': self.expected_tag,
'actual_tag': self.actual_tag})


class XMLAttrKeysMismatch(XMLMismatch):
Expand All @@ -256,7 +262,9 @@ def __init__(self, state, expected_only, actual_only):
def describe(self):
return ("%(path)s: XML attributes mismatch: "
"keys only in expected: %(expected_only)s; "
"keys only in actual: %(actual_only)s" % self.__dict__)
"keys only in actual: %(actual_only)s" %
{'path': self.path, 'expected_only': self.expected_only,
'actual_only': self.actual_only})


class XMLAttrValueMismatch(XMLMismatch):
Expand All @@ -271,7 +279,10 @@ def __init__(self, state, key, expected_value, actual_value):
def describe(self):
return ("%(path)s: XML attribute value mismatch: "
"expected value of attribute %(key)s: %(expected_value)r; "
"actual value: %(actual_value)r" % self.__dict__)
"actual value: %(actual_value)r" %
{'path': self.path, 'key': self.key,
'expected_value': self.expected_value,
'actual_value': self.actual_value})


class XMLTextValueMismatch(XMLMismatch):
Expand All @@ -285,7 +296,9 @@ def __init__(self, state, expected_text, actual_text):
def describe(self):
return ("%(path)s: XML text value mismatch: "
"expected text value: %(expected_text)r; "
"actual value: %(actual_text)r" % self.__dict__)
"actual value: %(actual_text)r" %
{'path': self.path, 'expected_text': self.expected_text,
'actual_text': self.actual_text})


class XMLUnexpectedChild(XMLMismatch):
Expand All @@ -298,7 +311,8 @@ def __init__(self, state, tag, idx):

def describe(self):
return ("%(path)s: XML unexpected child element <%(tag)s> "
"present at index %(idx)d" % self.__dict__)
"present at index %(idx)d" %
{'path': self.path, 'tag': self.tag, 'idx': self.idx})


class XMLExpectedChild(XMLMismatch):
Expand All @@ -311,7 +325,8 @@ def __init__(self, state, tag, idx):

def describe(self):
return ("%(path)s: XML expected child element <%(tag)s> "
"not present at index %(idx)d" % self.__dict__)
"not present at index %(idx)d" %
{'path': self.path, 'tag': self.tag, 'idx': self.idx})


class XMLMatchState(object):
Expand Down
7 changes: 5 additions & 2 deletions nova/wsgi.py
Expand Up @@ -135,7 +135,8 @@ def __init__(self, name, app, host='0.0.0.0', port=0, pool_size=None,
raise

(self.host, self.port) = self._socket.getsockname()[0:2]
LOG.info(_("%(name)s listening on %(host)s:%(port)s") % self.__dict__)
LOG.info(_("%(name)s listening on %(host)s:%(port)s"),
{'name': self.name, 'host': self.host, 'port': self.port})

def start(self):
"""Start serving a WSGI application.
Expand Down Expand Up @@ -200,7 +201,9 @@ def start(self):
except Exception:
with excutils.save_and_reraise_exception():
LOG.error(_("Failed to start %(name)s on %(host)s"
":%(port)s with SSL support") % self.__dict__)
":%(port)s with SSL support"),
{'name': self.name, 'host': self.host,
'port': self.port})

wsgi_kwargs = {
'func': eventlet.wsgi.server,
Expand Down

0 comments on commit 59576bc

Please sign in to comment.