Merge "Fix DriverFilter string evaluations"
This commit is contained in:
commit
c29285e7dc
@ -45,21 +45,21 @@ class EvalConstant(object):
|
|||||||
(which_dict, entry) = result.split('.')
|
(which_dict, entry) = result.split('.')
|
||||||
try:
|
try:
|
||||||
result = _vars[which_dict][entry]
|
result = _vars[which_dict][entry]
|
||||||
except KeyError as e:
|
except KeyError:
|
||||||
raise exception.EvaluatorParseException(
|
raise exception.EvaluatorParseException(
|
||||||
_("KeyError: %s") % e)
|
_("KeyError evaluating string"))
|
||||||
except TypeError as e:
|
except TypeError:
|
||||||
raise exception.EvaluatorParseException(
|
raise exception.EvaluatorParseException(
|
||||||
_("TypeError: %s") % e)
|
_("TypeError evaluating string"))
|
||||||
|
|
||||||
try:
|
try:
|
||||||
result = int(result)
|
result = int(result)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
try:
|
try:
|
||||||
result = float(result)
|
result = float(result)
|
||||||
except ValueError as e:
|
except ValueError:
|
||||||
raise exception.EvaluatorParseException(
|
if isinstance(result, str):
|
||||||
_("ValueError: %s") % e)
|
result = result.replace('"', '').replace('\'', '')
|
||||||
|
|
||||||
return result
|
return result
|
||||||
|
|
||||||
@ -232,8 +232,9 @@ def _def_parser():
|
|||||||
|
|
||||||
alphas = pyparsing.alphas
|
alphas = pyparsing.alphas
|
||||||
Combine = pyparsing.Combine
|
Combine = pyparsing.Combine
|
||||||
Forward = pyparsing.Forward
|
|
||||||
nums = pyparsing.nums
|
nums = pyparsing.nums
|
||||||
|
quoted_string = pyparsing.quotedString
|
||||||
|
|
||||||
oneOf = pyparsing.oneOf
|
oneOf = pyparsing.oneOf
|
||||||
opAssoc = pyparsing.opAssoc
|
opAssoc = pyparsing.opAssoc
|
||||||
operatorPrecedence = pyparsing.operatorPrecedence
|
operatorPrecedence = pyparsing.operatorPrecedence
|
||||||
@ -243,9 +244,8 @@ def _def_parser():
|
|||||||
real = Combine(Word(nums) + '.' + Word(nums))
|
real = Combine(Word(nums) + '.' + Word(nums))
|
||||||
variable = Word(alphas + '_' + '.')
|
variable = Word(alphas + '_' + '.')
|
||||||
number = real | integer
|
number = real | integer
|
||||||
expr = Forward()
|
|
||||||
fn = Word(alphas + '_' + '.')
|
fn = Word(alphas + '_' + '.')
|
||||||
operand = number | variable | fn
|
operand = number | variable | fn | quoted_string
|
||||||
|
|
||||||
signop = oneOf('+ -')
|
signop = oneOf('+ -')
|
||||||
addop = oneOf('+ -')
|
addop = oneOf('+ -')
|
||||||
|
@ -127,11 +127,12 @@ class EvaluatorTestCase(test.TestCase):
|
|||||||
def test_nonnumber_comparison(self):
|
def test_nonnumber_comparison(self):
|
||||||
nonnumber = {'test': 'foo'}
|
nonnumber = {'test': 'foo'}
|
||||||
request = {'test': 'bar'}
|
request = {'test': 'bar'}
|
||||||
self.assertRaises(
|
self.assertTrue(
|
||||||
exception.EvaluatorParseException,
|
evaluator.evaluate("nonnumber.test != request.test",
|
||||||
evaluator.evaluate,
|
nonnumber=nonnumber, request=request))
|
||||||
"nonnumber.test != request.test",
|
self.assertFalse(
|
||||||
nonnumber=nonnumber, request=request)
|
evaluator.evaluate("nonnumber.test == request.test",
|
||||||
|
nonnumber=nonnumber, request=request))
|
||||||
|
|
||||||
def test_div_zero(self):
|
def test_div_zero(self):
|
||||||
self.assertRaises(exception.EvaluatorParseException,
|
self.assertRaises(exception.EvaluatorParseException,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user