)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"d26fca42d8400f66e178759eec3ebbc7e45606f7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Julien Danjou \u003cjulien@danjou.info\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-02-18 14:10:23 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"api: use a voluptuous type to pase ISO time"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Icb91f2a1e217dd420b43dbaf0d13928192cf740f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUX%2F%2B21s%3D","line":7,"updated":"2014-02-18 15:42:54.000000000","message":"s/pase/parse/","commit_id":"3defdbfe8c43595d7112c0ac79b7b535d0636985"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"bfa63ec1431e63aa8b23c6cf795678d8e391cd65","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Julien Danjou \u003cjulien@danjou.info\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-02-18 14:10:23 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"api: use a voluptuous type to pase ISO time"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: Icb91f2a1e217dd420b43dbaf0d13928192cf740f"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAAUX%2F%2B2us%3D","line":7,"in_reply_to":"AAAAUX%2F%2B21s%3D","updated":"2014-02-18 15:53:44.000000000","message":"Done","commit_id":"3defdbfe8c43595d7112c0ac79b7b535d0636985"}],"ceilometer/api/controllers/v2.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"af7c0e3b4cf051adcc131e983d6ad161b84d9aea","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"                    voluptuous.All({"},{"line_number":1011,"context_line":"                        voluptuous.Any(*six.string_types):"},{"line_number":1012,"context_line":"                        voluptuous.Any("},{"line_number":1013,"context_line":"                            *((ISOTime,)"},{"line_number":1014,"context_line":"                              + six.string_types"},{"line_number":1015,"context_line":"                              + six.integer_types))"},{"line_number":1016,"context_line":"                    }, voluptuous.Length(min\u003d1, max\u003d1)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2B4ag%3D","line":1013,"updated":"2014-02-18 13:04:08.000000000","message":"It is not equivalent with the previous validation as it does not enforce that every  timestamp field is in ISOTime format, it just allows that any field can be in ISOTime format.","commit_id":"777841a382709407be3cbef996af39517d8e0739"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1790e80377849dfb66438dc673445578b037d5bd","unresolved":false,"context_lines":[{"line_number":1010,"context_line":"                    voluptuous.All({"},{"line_number":1011,"context_line":"                        voluptuous.Any(*six.string_types):"},{"line_number":1012,"context_line":"                        voluptuous.Any("},{"line_number":1013,"context_line":"                            *((ISOTime,)"},{"line_number":1014,"context_line":"                              + six.string_types"},{"line_number":1015,"context_line":"                              + six.integer_types))"},{"line_number":1016,"context_line":"                    }, voluptuous.Length(min\u003d1, max\u003d1)),"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUX%2F%2B4SQ%3D","line":1013,"in_reply_to":"AAAAUX%2F%2B4ag%3D","updated":"2014-02-18 13:10:32.000000000","message":"Fair enough.","commit_id":"777841a382709407be3cbef996af39517d8e0739"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"a22413a03d38bc1fc76fa671c7aa28a2b3efe35a","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"                        voluptuous.Any(*six.string_types):"},{"line_number":1012,"context_line":"                        voluptuous.Any("},{"line_number":1013,"context_line":"                            *(six.string_types + six.integer_types)),"},{"line_number":1014,"context_line":"                        \"timestamp\": ISOTime,"},{"line_number":1015,"context_line":"                    }, voluptuous.Length(min\u003d1, max\u003d1)),"},{"line_number":1016,"context_line":"                },"},{"line_number":1017,"context_line":"                voluptuous.Length(min\u003d1, max\u003d1),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B37s%3D","line":1014,"updated":"2014-02-18 13:54:44.000000000","message":"I think it allows \n{\"\u003d\" : { \"some_field_name\" :  {\"timestamp\" : \"2014-02-10T13:07:07\"}}} \ninstead of \n{ \"\u003d\" : { \"timestamp\" : \"2014-02-10T13:07:07\"}}","commit_id":"3defdbfe8c43595d7112c0ac79b7b535d0636985"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"1c551a26911e5b44d2b07ca89d13605edca87132","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"                        voluptuous.Any(*six.string_types):"},{"line_number":1012,"context_line":"                        voluptuous.Any("},{"line_number":1013,"context_line":"                            *(six.string_types + six.integer_types)),"},{"line_number":1014,"context_line":"                        \"timestamp\": ISOTime,"},{"line_number":1015,"context_line":"                    }, voluptuous.Length(min\u003d1, max\u003d1)),"},{"line_number":1016,"context_line":"                },"},{"line_number":1017,"context_line":"                voluptuous.Length(min\u003d1, max\u003d1),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B2tQ%3D","line":1014,"in_reply_to":"AAAAUX%2F%2B2zw%3D","updated":"2014-02-18 15:55:19.000000000","message":"Good question.\n\nI think there\u0027s no precedence since it\u0027s a dict, I\u0027ll have to change it.","commit_id":"3defdbfe8c43595d7112c0ac79b7b535d0636985"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f5ce5fa63a0e4407c2dd689e103c89600efc1da7","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"                        voluptuous.Any(*six.string_types):"},{"line_number":1012,"context_line":"                        voluptuous.Any("},{"line_number":1013,"context_line":"                            *(six.string_types + six.integer_types)),"},{"line_number":1014,"context_line":"                        \"timestamp\": ISOTime,"},{"line_number":1015,"context_line":"                    }, voluptuous.Length(min\u003d1, max\u003d1)),"},{"line_number":1016,"context_line":"                },"},{"line_number":1017,"context_line":"                voluptuous.Length(min\u003d1, max\u003d1),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B3XU%3D","line":1014,"in_reply_to":"AAAAUX%2F%2B37s%3D","updated":"2014-02-18 14:42:07.000000000","message":"No:  \"some_field_name\" matches line 1011, then its key must match 1012/1013 which tels it\u0027s either a string or an integer.","commit_id":"3defdbfe8c43595d7112c0ac79b7b535d0636985"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eb4387a7b22ed656cbecdb49045fab0ab801e4d2","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"                        voluptuous.Any(*six.string_types):"},{"line_number":1012,"context_line":"                        voluptuous.Any("},{"line_number":1013,"context_line":"                            *(six.string_types + six.integer_types)),"},{"line_number":1014,"context_line":"                        \"timestamp\": ISOTime,"},{"line_number":1015,"context_line":"                    }, voluptuous.Length(min\u003d1, max\u003d1)),"},{"line_number":1016,"context_line":"                },"},{"line_number":1017,"context_line":"                voluptuous.Length(min\u003d1, max\u003d1),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B2zw%3D","line":1014,"in_reply_to":"AAAAUX%2F%2B3SQ%3D","updated":"2014-02-18 15:50:19.000000000","message":"One more thing. Is there any priority or precedence handling between the rule in line 1011-1012 and the rule in line 1014? I mean if the user gives {\"\u003d\": { \"timestamp\" : \"foobaar\"}} input which obviously doesn\u0027t match with rule 1014 will the lib match this input with the rule in 1011-1012 successfully?","commit_id":"3defdbfe8c43595d7112c0ac79b7b535d0636985"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2ef339056478a1b1f68a4311696540015bcb55d1","unresolved":false,"context_lines":[{"line_number":1011,"context_line":"                        voluptuous.Any(*six.string_types):"},{"line_number":1012,"context_line":"                        voluptuous.Any("},{"line_number":1013,"context_line":"                            *(six.string_types + six.integer_types)),"},{"line_number":1014,"context_line":"                        \"timestamp\": ISOTime,"},{"line_number":1015,"context_line":"                    }, voluptuous.Length(min\u003d1, max\u003d1)),"},{"line_number":1016,"context_line":"                },"},{"line_number":1017,"context_line":"                voluptuous.Length(min\u003d1, max\u003d1),"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2B3SQ%3D","line":1014,"in_reply_to":"AAAAUX%2F%2B3XU%3D","updated":"2014-02-18 14:54:49.000000000","message":"Sorry. Yes you are right, I missed one closing parenthesis.","commit_id":"3defdbfe8c43595d7112c0ac79b7b535d0636985"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"23bff717a149ff664b4c48e84a8e5e4556efba5c","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"                                   \"\u003c\u003d\", \"\u003d\u003c\", \"\u003e\u003d\", \"\u003d\u003e\"):"},{"line_number":1013,"context_line":"                    voluptuous.All("},{"line_number":1014,"context_line":"                        voluptuous.Any({"},{"line_number":1015,"context_line":"                            \"timestamp\": ISOTime,"},{"line_number":1016,"context_line":"                        }, {"},{"line_number":1017,"context_line":"                            voluptuous.Any(*six.string_types):"},{"line_number":1018,"context_line":"                            voluptuous.Any("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2BunY%3D","line":1015,"updated":"2014-02-19 14:44:52.000000000","message":"This test would still fail with the current schema definition as the rule in 1017 matches to the input successfully.\n\n    def test_invalid_isotime(self):\n        filter_expr \u003d {\"\u003d\": {\"timestamp\": \"2013-invalid-12-05T19:38:29Z\"}}\n        self.assertRaises(voluptuous.Invalid,\n                          self.query.schema,\n                          filter_expr)\n\nI think this case can only be solved effectively after the field name validation is added. Then the timestamp key would only be added to the rule in 1015 but not to the rule in 1017\n\n(As the field validation is the next patch to be merged from the complex query branch I hope you will be able to rebase your solution to that version soon)","commit_id":"ca197ab6451764cedc371c9892acfddf169e46a0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"63590805ac04265efcbca5265b8b0ae3bf9a7cf6","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"                                   \"\u003c\u003d\", \"\u003d\u003c\", \"\u003e\u003d\", \"\u003d\u003e\"):"},{"line_number":1013,"context_line":"                    voluptuous.All("},{"line_number":1014,"context_line":"                        voluptuous.Any({"},{"line_number":1015,"context_line":"                            \"timestamp\": ISOTime,"},{"line_number":1016,"context_line":"                        }, {"},{"line_number":1017,"context_line":"                            voluptuous.Any(*six.string_types):"},{"line_number":1018,"context_line":"                            voluptuous.Any("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2Bkvs%3D","line":1015,"in_reply_to":"AAAAUX%2F%2Bs5I%3D","updated":"2014-02-20 12:41:56.000000000","message":"Unfortunately the Mongo DB engine does not raise any exception if the timestamp is in a wrong format. It just simply returns an empty result for the query.\n\nSqlAlchemy raises an exception.","commit_id":"ca197ab6451764cedc371c9892acfddf169e46a0"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"58b7466a5378a5f61e732c9189396b6542fc2df6","unresolved":false,"context_lines":[{"line_number":1012,"context_line":"                                   \"\u003c\u003d\", \"\u003d\u003c\", \"\u003e\u003d\", \"\u003d\u003e\"):"},{"line_number":1013,"context_line":"                    voluptuous.All("},{"line_number":1014,"context_line":"                        voluptuous.Any({"},{"line_number":1015,"context_line":"                            \"timestamp\": ISOTime,"},{"line_number":1016,"context_line":"                        }, {"},{"line_number":1017,"context_line":"                            voluptuous.Any(*six.string_types):"},{"line_number":1018,"context_line":"                            voluptuous.Any("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAUX%2F%2Bs5I%3D","line":1015,"in_reply_to":"AAAAUX%2F%2BunY%3D","updated":"2014-02-19 17:53:19.000000000","message":"Agreed.\n\nHowever, I don\u0027t think it\u0027s a tremendous problem as long as the problem is catched later because timestamp hasn\u0027t the right type.","commit_id":"ca197ab6451764cedc371c9892acfddf169e46a0"}]}
