)]}'
{"ceilometer/api/controllers/v2/utils.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"4d710de05835e241a76e8438cc4d9f5b52121184","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            elif i.op in (\u0027gt\u0027, \u0027ge\u0027):"},{"line_number":234,"context_line":"                stamp[\u0027start_timestamp\u0027] \u003d i.value"},{"line_number":235,"context_line":"                stamp[\u0027start_timestamp_op\u0027] \u003d i.op"},{"line_number":236,"context_line":"        elif i.field \u003d\u003d \u0027metaquery\u0027:"},{"line_number":237,"context_line":"            raise wsme.exc.InvalidInput(\u0027q.field\u0027, \u0027metaquery\u0027,"},{"line_number":238,"context_line":"                                        \"Use metadata.foo instead to filter \""},{"line_number":239,"context_line":"                                        \"foo field in metadata\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_4f016603","line":236,"updated":"2015-03-18 10:07:20.000000000","message":"I would prefer to add \u0027metaquery\u0027 to the internal_keys in validate_query above. As this check belongs to the query validation.","commit_id":"6695f28cc11e6fd746cb7e88fede52a6ce7a540d"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"351441c06b22cf37ad89d099e004540236100baa","unresolved":false,"context_lines":[{"line_number":233,"context_line":"            elif i.op in (\u0027gt\u0027, \u0027ge\u0027):"},{"line_number":234,"context_line":"                stamp[\u0027start_timestamp\u0027] \u003d i.value"},{"line_number":235,"context_line":"                stamp[\u0027start_timestamp_op\u0027] \u003d i.op"},{"line_number":236,"context_line":"        elif i.field \u003d\u003d \u0027metaquery\u0027:"},{"line_number":237,"context_line":"            raise wsme.exc.InvalidInput(\u0027q.field\u0027, \u0027metaquery\u0027,"},{"line_number":238,"context_line":"                                        \"Use metadata.foo instead to filter \""},{"line_number":239,"context_line":"                                        \"foo field in metadata\")"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_e98f4721","line":236,"in_reply_to":"9a80dd14_4f016603","updated":"2015-03-19 07:09:29.000000000","message":"metaquery is an internal_keys in logic, but it should appear in valid_keys, otherwise L254 cannot work\n\nit is that we prints metaquery as a valid key in error messages, which will mislead end user to use it instead of the right metadata.xxx","commit_id":"6695f28cc11e6fd746cb7e88fede52a6ce7a540d"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"db2c33c8398e3faaaaebbb68b721b2a99b0e84f2","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    if \u0027start_timestamp\u0027 in valid_keys:"},{"line_number":128,"context_line":"        internal_keys +\u003d internal_timestamp_keys"},{"line_number":129,"context_line":"        valid_keys +\u003d [\u0027timestamp\u0027, \u0027search_offset\u0027]"},{"line_number":130,"context_line":"    internal_keys.append(\u0027self\u0027)"},{"line_number":131,"context_line":"    valid_keys \u003d set(valid_keys) - set(internal_keys)"},{"line_number":132,"context_line":"    translation \u003d {\u0027user_id\u0027: \u0027user\u0027,"},{"line_number":133,"context_line":"                   \u0027project_id\u0027: \u0027project\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_feee1321","line":130,"updated":"2015-03-19 10:02:45.000000000","message":"I would prefer to define a \u0027keys_for_validation\u0027 set here and remove \u0027metaquery\u0027 from that and use it here for pure validation purposes. Then use \u0027valid_keys\u0027 to pass to query_to_kwargs as we do it now. Or maybe it could also be renamed to something like \u0027valid_keys_for_generate_query\u0027 or something shorter but informative. The problem here in my understanding is that we use valid_keys for two different purposes. So I think we should remove this root cause as opposed to make workarounds inside the validation mechanism.","commit_id":"8de38ee5c18beed5c2f00f3b1b123be8ac283f71"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"846b6f497d60d93e70846658543cb254cca78c03","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    if \u0027start_timestamp\u0027 in valid_keys:"},{"line_number":128,"context_line":"        internal_keys +\u003d internal_timestamp_keys"},{"line_number":129,"context_line":"        valid_keys +\u003d [\u0027timestamp\u0027, \u0027search_offset\u0027]"},{"line_number":130,"context_line":"    internal_keys.append(\u0027self\u0027)"},{"line_number":131,"context_line":"    valid_keys \u003d set(valid_keys) - set(internal_keys)"},{"line_number":132,"context_line":"    translation \u003d {\u0027user_id\u0027: \u0027user\u0027,"},{"line_number":133,"context_line":"                   \u0027project_id\u0027: \u0027project\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_c12b2f93","line":130,"in_reply_to":"9a80dd14_520f1339","updated":"2015-03-19 12:25:28.000000000","message":"I checked your next patch, it\u0027s ok for me to do it in that way. Thanks for the refactor.","commit_id":"8de38ee5c18beed5c2f00f3b1b123be8ac283f71"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"f8f1910386882ef577f73ca3f9623390cf5c2563","unresolved":false,"context_lines":[{"line_number":127,"context_line":"    if \u0027start_timestamp\u0027 in valid_keys:"},{"line_number":128,"context_line":"        internal_keys +\u003d internal_timestamp_keys"},{"line_number":129,"context_line":"        valid_keys +\u003d [\u0027timestamp\u0027, \u0027search_offset\u0027]"},{"line_number":130,"context_line":"    internal_keys.append(\u0027self\u0027)"},{"line_number":131,"context_line":"    valid_keys \u003d set(valid_keys) - set(internal_keys)"},{"line_number":132,"context_line":"    translation \u003d {\u0027user_id\u0027: \u0027user\u0027,"},{"line_number":133,"context_line":"                   \u0027project_id\u0027: \u0027project\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_520f1339","line":130,"in_reply_to":"9a80dd14_feee1321","updated":"2015-03-19 11:36:26.000000000","message":"I checked that only query_to_kwargs uses the return value, and it only uses it to check if metaquery is supported by db_func or not, so I think maybe directly check the metaquery in query_to_kwargs is better\n\nwhat\u0027s your opinion?","commit_id":"8de38ee5c18beed5c2f00f3b1b123be8ac283f71"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"db2c33c8398e3faaaaebbb68b721b2a99b0e84f2","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            key \u003d translation.get(i.field, i.field)"},{"line_number":157,"context_line":"            if key \u003d\u003d \u0027metaquery\u0027:"},{"line_number":158,"context_line":"                raise wsme.exc.InvalidInput(\u0027q.field\u0027, \u0027metaquery\u0027,"},{"line_number":159,"context_line":"                                            \"Use \u0027metadata.foo\u0027 to filter \""},{"line_number":160,"context_line":"                                            \"\u0027foo\u0027 field in metadata\")"},{"line_number":161,"context_line":"            operator \u003d i.op"},{"line_number":162,"context_line":"            if key in valid_keys or _is_field_metadata(i.field):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_beb73b20","line":159,"updated":"2015-03-19 10:02:45.000000000","message":"I would prefer to keep the current way of validation and error message but with updated valid keys for query. Please see my corresponding comment above.","commit_id":"8de38ee5c18beed5c2f00f3b1b123be8ac283f71"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"caff94a52938bf68ca5a8c485c43e7c098d1a962","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            key \u003d translation.get(i.field, i.field)"},{"line_number":157,"context_line":"            if key \u003d\u003d \u0027metaquery\u0027:"},{"line_number":158,"context_line":"                raise wsme.exc.InvalidInput(\u0027q.field\u0027, \u0027metaquery\u0027,"},{"line_number":159,"context_line":"                                            \"Use \u0027metadata.foo\u0027 to filter \""},{"line_number":160,"context_line":"                                            \"\u0027foo\u0027 field in metadata\")"},{"line_number":161,"context_line":"            operator \u003d i.op"},{"line_number":162,"context_line":"            if key in valid_keys or _is_field_metadata(i.field):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_dc6f925e","line":159,"in_reply_to":"9a80dd14_3ca26efc","updated":"2015-03-19 12:32:52.000000000","message":"The API doc has mentioned it, see http://docs.openstack.org/developer/ceilometer/webapi/v2.html#filtering-queries\n\nand there is an example, see http://docs.openstack.org/developer/ceilometer/webapi/v2.html#api-queries","commit_id":"8de38ee5c18beed5c2f00f3b1b123be8ac283f71"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"846b6f497d60d93e70846658543cb254cca78c03","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            key \u003d translation.get(i.field, i.field)"},{"line_number":157,"context_line":"            if key \u003d\u003d \u0027metaquery\u0027:"},{"line_number":158,"context_line":"                raise wsme.exc.InvalidInput(\u0027q.field\u0027, \u0027metaquery\u0027,"},{"line_number":159,"context_line":"                                            \"Use \u0027metadata.foo\u0027 to filter \""},{"line_number":160,"context_line":"                                            \"\u0027foo\u0027 field in metadata\")"},{"line_number":161,"context_line":"            operator \u003d i.op"},{"line_number":162,"context_line":"            if key in valid_keys or _is_field_metadata(i.field):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_3ca26efc","line":159,"in_reply_to":"9a80dd14_7214174d","updated":"2015-03-19 12:25:28.000000000","message":"In my opinion we should document our API better as opposed to describe how queries work in error messages. So currently I think it is fine to remove \u0027me\u0027taquery\u0027 from the list of valid keys displayed in the error message. Also we can check our API doc in order to ensure we have some description about how metadata can be queried with some examples.","commit_id":"8de38ee5c18beed5c2f00f3b1b123be8ac283f71"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"f8f1910386882ef577f73ca3f9623390cf5c2563","unresolved":false,"context_lines":[{"line_number":156,"context_line":"            key \u003d translation.get(i.field, i.field)"},{"line_number":157,"context_line":"            if key \u003d\u003d \u0027metaquery\u0027:"},{"line_number":158,"context_line":"                raise wsme.exc.InvalidInput(\u0027q.field\u0027, \u0027metaquery\u0027,"},{"line_number":159,"context_line":"                                            \"Use \u0027metadata.foo\u0027 to filter \""},{"line_number":160,"context_line":"                                            \"\u0027foo\u0027 field in metadata\")"},{"line_number":161,"context_line":"            operator \u003d i.op"},{"line_number":162,"context_line":"            if key in valid_keys or _is_field_metadata(i.field):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_7214174d","line":159,"in_reply_to":"9a80dd14_beb73b20","updated":"2015-03-19 11:36:26.000000000","message":"Done\n\nI think we should have some ways to prompt end user to use the metaquery in the right way, the error message is the best place, document second. If error message keep as previous, the metaquery will gone too, user may think only something like start, end are valid. \n\nCurrently, I will take your advice","commit_id":"8de38ee5c18beed5c2f00f3b1b123be8ac283f71"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"0a99625c783b8cc8c448eb907f1b3048a1ee9841","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        used for querying"},{"line_number":104,"context_line":"    :param allow_timestamps: defines whether the timestamp-based constraint is"},{"line_number":105,"context_line":"        applicable for this query or not"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    :returns: valid query keys the db_func supported"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    :raises InvalidInput: if an operator is not supported for a given field"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_817777d3","line":106,"updated":"2015-03-19 12:31:05.000000000","message":"Please remove this line too.","commit_id":"723dd1eb6709fc7747ab6d49dd668a0ffef58bcf"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"e5afa8d1b756fdfb391ce05dec847fca196db2e9","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        used for querying"},{"line_number":104,"context_line":"    :param allow_timestamps: defines whether the timestamp-based constraint is"},{"line_number":105,"context_line":"        applicable for this query or not"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    :returns: valid query keys the db_func supported"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    :raises InvalidInput: if an operator is not supported for a given field"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a80dd14_1cbccaba","line":106,"in_reply_to":"9a80dd14_817777d3","updated":"2015-03-19 12:33:44.000000000","message":"Done","commit_id":"723dd1eb6709fc7747ab6d49dd668a0ffef58bcf"}],"ceilometer/tests/gabbi/gabbits/samples.yaml":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"ce28ef30adee5be9804797d79564762cfd71bd39","unresolved":false,"context_lines":[{"line_number":74,"context_line":"      url: /v2/samples?q.field\u003dharpoon\u0026q.value\u003dcow\u0026q.op\u003deq"},{"line_number":75,"context_line":"      status: 400"},{"line_number":76,"context_line":"      response_strings:"},{"line_number":77,"context_line":"          - metaquery"},{"line_number":78,"context_line":"          - unrecognized field in query"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    - name: list samples with metaquery field"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9a80dd14_76088280","side":"PARENT","line":77,"updated":"2015-03-19 13:28:14.000000000","message":"I wonder if it wouldn\u0027t be better to change this to a valid field name instead of deleting?","commit_id":"348ecb0861637da5575b094f8fa3fab1e3770928"}]}
