Skip to content

Commit 7400ca8

Browse files
mbarkhaudbieber
authored andcommitted
Fix for BinOp in args (google#96)
* Always treat binary op args as string literals * add test for binop * add test for negative numbers * raise ValueError for BinOp expressions Fixes google#95
1 parent e76a10c commit 7400ca8

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

fire/parser.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,9 @@ def _LiteralEval(value):
9494
SyntaxError: If the value string has a syntax error.
9595
"""
9696
root = ast.parse(value, mode='eval')
97+
if isinstance(root.body, ast.BinOp):
98+
raise ValueError(value)
99+
97100
for node in ast.walk(root):
98101
for field, child in ast.iter_fields(node):
99102
if isinstance(child, list):

fire/parser_test.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,10 +69,12 @@ def testDefaultParseValueSpecialStrings(self):
6969

7070
def testDefaultParseValueNumbers(self):
7171
self.assertEqual(parser.DefaultParseValue('23'), 23)
72+
self.assertEqual(parser.DefaultParseValue('-23'), -23)
7273
self.assertEqual(parser.DefaultParseValue('23.0'), 23.0)
7374
self.assertIsInstance(parser.DefaultParseValue('23'), int)
7475
self.assertIsInstance(parser.DefaultParseValue('23.0'), float)
7576
self.assertEqual(parser.DefaultParseValue('23.5'), 23.5)
77+
self.assertEqual(parser.DefaultParseValue('-23.5'), -23.5)
7678

7779
def testDefaultParseValueStringNumbers(self):
7880
self.assertEqual(parser.DefaultParseValue("'23'"), '23')
@@ -127,13 +129,15 @@ def testDefaultParseValueBadLiteral(self):
127129
# If it can't be parsed, we treat it as a string. This behavior may change.
128130
self.assertEqual(
129131
parser.DefaultParseValue('[(A, 2, "3"), 5'), '[(A, 2, "3"), 5')
130-
131132
self.assertEqual(parser.DefaultParseValue('x=10'), 'x=10')
132133

133134
def testDefaultParseValueSyntaxError(self):
134135
# If it can't be parsed, we treat it as a string.
135136
self.assertEqual(parser.DefaultParseValue('"'), '"')
136137

138+
def testDefaultParseValueIgnoreBinOp(self):
139+
self.assertEqual(parser.DefaultParseValue('2017-10-10'), '2017-10-10')
140+
self.assertEqual(parser.DefaultParseValue('1+1'), '1+1')
137141

138142
if __name__ == '__main__':
139143
testutils.main()

0 commit comments

Comments
 (0)