)]}'
{"quantum/api/v2/attributes.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"aec9392b57e171594ce6c436046ec5c9bfaaac36","unresolved":false,"context_lines":[{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def _validate_values(data, valid_values\u003dNone):"},{"line_number":45,"context_line":"    msg \u003d None"},{"line_number":46,"context_line":"    if not isinstance(valid_values, (list, tuple)):"},{"line_number":47,"context_line":"        msg \u003d _(\"\u0027%s\u0027 is of invalid type\") % valid_values"},{"line_number":48,"context_line":"    elif data in valid_values:"},{"line_number":49,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAALn%2F%2FvOs%3D","line":46,"updated":"2012-11-09 03:31:15.000000000","message":"This also can use assert.","commit_id":"a1bf111cc0ba7ecb03a2213aa2503da72b04ac80"},{"author":{"_account_id":2592,"name":"Mark McClain","email":"mark@mcclain.xyz","username":"markmcclain"},"unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def _validate_values(data, valid_values\u003dNone):"},{"line_number":45,"context_line":"    assert isinstance(valid_values, (list, tuple)), \"valid_values type invalid\""},{"line_number":46,"context_line":"    if data not in valid_values:"},{"line_number":47,"context_line":"        msg \u003d _(\"\u0027%(data)s\u0027 is not in %(valid_values)s\") % locals()"},{"line_number":48,"context_line":"        LOG.debug(\"validate_values: %s\", msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2FvJ4%3D","line":45,"updated":"2012-11-09 04:59:03.000000000","message":"valid_values is a developer supplied value.  dicts, sets, and other collections are valid datatypes.","commit_id":"abcc8633a68b5eb85dc182757ec96b8ba853f37b"},{"author":{"_account_id":1994,"name":"Zhongyue Luo","email":"zhongyue.luo@gmail.com","username":"zyluo"},"unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"def _validate_values(data, valid_values\u003dNone):"},{"line_number":45,"context_line":"    assert isinstance(valid_values, (list, tuple)), \"valid_values type invalid\""},{"line_number":46,"context_line":"    if data not in valid_values:"},{"line_number":47,"context_line":"        msg \u003d _(\"\u0027%(data)s\u0027 is not in %(valid_values)s\") % locals()"},{"line_number":48,"context_line":"        LOG.debug(\"validate_values: %s\", msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAALn%2F%2FvJo%3D","line":45,"in_reply_to":"AAAALn%2F%2FvJ4%3D","updated":"2012-11-09 05:03:32.000000000","message":"That is the reason for this patch. I can\u0027t find unittests or any mention about what valid_values should be. Therefore I wanted to let developers know what the type should be by writing this contract. Are you suggesting that this should be described in the doc string?","commit_id":"abcc8633a68b5eb85dc182757ec96b8ba853f37b"}]}
