Only plain literals should be parsed

@dbieber correctly pointed out in #95 that there is a more general problem with the parsing code. This is a follow up issue to that issue which only dealt with the most common case of a single argument.

Here are some cases demonstrating

$ python3 -c "import fire.parser as p; v = p.DefaultParseValue('[1+1]'); print(type(v), v)"
<class 'list'> [2]
$ python3 -c "import fire.parser as p; v = p.DefaultParseValue('{key: 1+1}'); print(type(v), v)"
<class 'dict'> {'key': 2} 

Some options are:

  1. Accept the existing behaviour.
  2. Always parse the whole argument as a string by doing raise ValueError in ``fire.parser._LiteralEval`
  3. Parse only the sub expressions as strings

For 2. and 3. I think these would be the valid types from the ast module.

  • Str
  • Name (converted to Str)
  • Num
  • List
  • Tuple
  • Dict
  • Set
  • UnaryOp