Merge "Fix DriverFilter/GoodnessWeigher string evaluations"
This commit is contained in:
commit
3f431ef9eb
@ -56,9 +56,9 @@ class EvalConstant(object):
|
||||
except ValueError:
|
||||
try:
|
||||
result = float(result)
|
||||
except ValueError as e:
|
||||
msg = _("ValueError: %s") % e
|
||||
raise exception.EvaluatorParseException(reason=msg)
|
||||
except ValueError:
|
||||
if isinstance(result, str):
|
||||
result = result.replace('"', '').replace('\'', '')
|
||||
|
||||
return result
|
||||
|
||||
@ -233,6 +233,7 @@ def _def_parser():
|
||||
Combine = pyparsing.Combine
|
||||
Forward = pyparsing.Forward
|
||||
nums = pyparsing.nums
|
||||
quoted_string = pyparsing.quotedString
|
||||
oneOf = pyparsing.oneOf
|
||||
opAssoc = pyparsing.opAssoc
|
||||
infixNotation = pyparsing.infixNotation
|
||||
@ -244,7 +245,7 @@ def _def_parser():
|
||||
number = real | integer
|
||||
expr = Forward()
|
||||
fn = Word(alphas + '_' + '.')
|
||||
operand = number | variable | fn
|
||||
operand = number | variable | fn | quoted_string
|
||||
|
||||
signop = oneOf('+ -')
|
||||
addop = oneOf('+ -')
|
||||
|
@ -128,11 +128,12 @@ class EvaluatorTestCase(test.TestCase):
|
||||
def test_nonnumber_comparison(self):
|
||||
nonnumber = {'test': 'foo'}
|
||||
request = {'test': 'bar'}
|
||||
self.assertRaises(
|
||||
exception.EvaluatorParseException,
|
||||
evaluator.evaluate,
|
||||
"nonnumber.test != request.test",
|
||||
nonnumber=nonnumber, request=request)
|
||||
self.assertTrue(
|
||||
evaluator.evaluate("nonnumber.test != request.test",
|
||||
nonnumber=nonnumber, request=request))
|
||||
self.assertFalse(
|
||||
evaluator.evaluate("nonnumber.test == request.test",
|
||||
nonnumber=nonnumber, request=request))
|
||||
|
||||
def test_div_zero(self):
|
||||
self.assertRaises(exception.EvaluatorParseException,
|
||||
|
@ -0,0 +1,6 @@
|
||||
---
|
||||
fixes:
|
||||
- |
|
||||
Goodness_function expects integer or float else raise parseException. This
|
||||
causes example such as "(share.share_proto == 'CIFS') ? 100 : 50" to fail
|
||||
during evaluation. Fix it by adding support of string evalution.
|
Loading…
x
Reference in New Issue
Block a user