)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"7735028ad1e93cdf7ba2682776a772fa3b2322d6","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Adding comparison operators in query for event traits"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In EventFilter we have an optional parameter \u0027op\u0027 in traits_filter part. But up"},{"line_number":10,"context_line":"to date using of this param has been implemented only in Hbase and"},{"line_number":11,"context_line":"Mongodb  backends. However in API we can use only \u0027op\u0027\u003d\u0027eq\u0027."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This change improves using of parameter \u0027op\u0027 in query for events in api, and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_10071c71","line":10,"range":{"start_line":10,"start_character":8,"end_line":10,"end_character":13},"updated":"2014-08-12 10:51:44.000000000","message":"usage","commit_id":"35dc4da8cb96745524ea2884806499785e1e88e7"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"d041f456ec5b48e4da91cf470b9783c112f92b84","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Adding comparison operators in query for event traits"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In EventFilter we have an optional parameter \u0027op\u0027 in traits_filter part. But up"},{"line_number":10,"context_line":"to date using of this param has been implemented only in Hbase and"},{"line_number":11,"context_line":"Mongodb  backends. However in API we can use only \u0027op\u0027\u003d\u0027eq\u0027."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This change improves using of parameter \u0027op\u0027 in query for events in api, and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_e74c7ecb","line":10,"in_reply_to":"baada198_10071c71","updated":"2014-08-12 13:33:58.000000000","message":"Done","commit_id":"35dc4da8cb96745524ea2884806499785e1e88e7"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"7735028ad1e93cdf7ba2682776a772fa3b2322d6","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In EventFilter we have an optional parameter \u0027op\u0027 in traits_filter part. But up"},{"line_number":10,"context_line":"to date using of this param has been implemented only in Hbase and"},{"line_number":11,"context_line":"Mongodb  backends. However in API we can use only \u0027op\u0027\u003d\u0027eq\u0027."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This change improves using of parameter \u0027op\u0027 in query for events in api, and"},{"line_number":14,"context_line":"adds possibility to use comparison in query with SQL backend."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_300a6078","line":11,"range":{"start_line":11,"start_character":7,"end_line":11,"end_character":9},"updated":"2014-08-12 10:51:44.000000000","message":"double space?","commit_id":"35dc4da8cb96745524ea2884806499785e1e88e7"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"d041f456ec5b48e4da91cf470b9783c112f92b84","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In EventFilter we have an optional parameter \u0027op\u0027 in traits_filter part. But up"},{"line_number":10,"context_line":"to date using of this param has been implemented only in Hbase and"},{"line_number":11,"context_line":"Mongodb  backends. However in API we can use only \u0027op\u0027\u003d\u0027eq\u0027."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This change improves using of parameter \u0027op\u0027 in query for events in api, and"},{"line_number":14,"context_line":"adds possibility to use comparison in query with SQL backend."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_074892b2","line":11,"in_reply_to":"baada198_300a6078","updated":"2014-08-12 13:33:58.000000000","message":"Done","commit_id":"35dc4da8cb96745524ea2884806499785e1e88e7"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"7735028ad1e93cdf7ba2682776a772fa3b2322d6","unresolved":false,"context_lines":[{"line_number":10,"context_line":"to date using of this param has been implemented only in Hbase and"},{"line_number":11,"context_line":"Mongodb  backends. However in API we can use only \u0027op\u0027\u003d\u0027eq\u0027."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This change improves using of parameter \u0027op\u0027 in query for events in api, and"},{"line_number":14,"context_line":"adds possibility to use comparison in query with SQL backend."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Some tests  are also added to cover using of this new feature."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_70669856","line":13,"range":{"start_line":13,"start_character":21,"end_line":13,"end_character":26},"updated":"2014-08-12 10:51:44.000000000","message":"usage","commit_id":"35dc4da8cb96745524ea2884806499785e1e88e7"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"d041f456ec5b48e4da91cf470b9783c112f92b84","unresolved":false,"context_lines":[{"line_number":10,"context_line":"to date using of this param has been implemented only in Hbase and"},{"line_number":11,"context_line":"Mongodb  backends. However in API we can use only \u0027op\u0027\u003d\u0027eq\u0027."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This change improves using of parameter \u0027op\u0027 in query for events in api, and"},{"line_number":14,"context_line":"adds possibility to use comparison in query with SQL backend."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Some tests  are also added to cover using of this new feature."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_2743d697","line":13,"in_reply_to":"baada198_70669856","updated":"2014-08-12 13:33:58.000000000","message":"Done","commit_id":"35dc4da8cb96745524ea2884806499785e1e88e7"},{"author":{"_account_id":3012,"name":"Dina Belova","email":"dbelova@mirantis.com","username":"dbelova"},"change_message_id":"7735028ad1e93cdf7ba2682776a772fa3b2322d6","unresolved":false,"context_lines":[{"line_number":13,"context_line":"This change improves using of parameter \u0027op\u0027 in query for events in api, and"},{"line_number":14,"context_line":"adds possibility to use comparison in query with SQL backend."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Some tests  are also added to cover using of this new feature."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-bug: #1354009"},{"line_number":19,"context_line":"Change-Id: I4824800eac7270bcfa10882a735e48d80bf32712"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_d0776406","line":16,"range":{"start_line":16,"start_character":10,"end_line":16,"end_character":12},"updated":"2014-08-12 10:51:44.000000000","message":"double space?","commit_id":"35dc4da8cb96745524ea2884806499785e1e88e7"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"d041f456ec5b48e4da91cf470b9783c112f92b84","unresolved":false,"context_lines":[{"line_number":13,"context_line":"This change improves using of parameter \u0027op\u0027 in query for events in api, and"},{"line_number":14,"context_line":"adds possibility to use comparison in query with SQL backend."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Some tests  are also added to cover using of this new feature."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Closes-bug: #1354009"},{"line_number":19,"context_line":"Change-Id: I4824800eac7270bcfa10882a735e48d80bf32712"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"baada198_47c52a08","line":16,"in_reply_to":"baada198_d0776406","updated":"2014-08-12 13:33:58.000000000","message":"Done","commit_id":"35dc4da8cb96745524ea2884806499785e1e88e7"}],"ceilometer/api/controllers/v2.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"72f3bcaf3285b3df019ebf6b3f569cfb2d1194a0","unresolved":false,"context_lines":[{"line_number":2273,"context_line":""},{"line_number":2274,"context_line":"    for i in q:"},{"line_number":2275,"context_line":"        if not i.op:"},{"line_number":2276,"context_line":"            i.op \u003d \u0027eq\u0027"},{"line_number":2277,"context_line":"        if i.field in evt_model_filter:"},{"line_number":2278,"context_line":"            evt_model_filter[i.field] \u003d i.value"},{"line_number":2279,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_9d8f10cc","line":2276,"updated":"2014-08-20 11:33:01.000000000","message":"I would prefer to add validation to check if the provided operator is in the list of supported ones and not mistyped, etc.","commit_id":"6c68cd20a95528bb393b34807690d2e4c34702aa"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"83675814e3d34210a5fe24ad6d4be2281d4280e5","unresolved":false,"context_lines":[{"line_number":2273,"context_line":""},{"line_number":2274,"context_line":"    for i in q:"},{"line_number":2275,"context_line":"        if not i.op:"},{"line_number":2276,"context_line":"            i.op \u003d \u0027eq\u0027"},{"line_number":2277,"context_line":"        if i.field in evt_model_filter:"},{"line_number":2278,"context_line":"            evt_model_filter[i.field] \u003d i.value"},{"line_number":2279,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_c48c5138","line":2276,"in_reply_to":"1abeadc6_9d8f10cc","updated":"2014-08-20 15:48:42.000000000","message":"Done","commit_id":"6c68cd20a95528bb393b34807690d2e4c34702aa"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ef8739bedff9eb9fe883fee1d0a95a8d3025e243","unresolved":false,"context_lines":[{"line_number":2279,"context_line":"            raise ClientSideError(error)"},{"line_number":2280,"context_line":"        elif i.field in evt_model_filter:"},{"line_number":2281,"context_line":"            evt_model_filter[i.field] \u003d i.value"},{"line_number":2282,"context_line":"        else:"},{"line_number":2283,"context_line":"            traits_filter.append({\"key\": i.field,"},{"line_number":2284,"context_line":"                                  i.type: i._get_value_as_type(),"},{"line_number":2285,"context_line":"                                  \"op\": i.op})"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_2b9fd604","line":2282,"updated":"2014-08-26 10:59:27.000000000","message":"is it ok if i.field is None?","commit_id":"c0ab8d4b0713c53b8e27e73283297d1ae87d5fee"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"849a1a51ba64c8cb8191973580d593f7972f12a4","unresolved":false,"context_lines":[{"line_number":2279,"context_line":"            raise ClientSideError(error)"},{"line_number":2280,"context_line":"        elif i.field in evt_model_filter:"},{"line_number":2281,"context_line":"            evt_model_filter[i.field] \u003d i.value"},{"line_number":2282,"context_line":"        else:"},{"line_number":2283,"context_line":"            traits_filter.append({\"key\": i.field,"},{"line_number":2284,"context_line":"                                  i.type: i._get_value_as_type(),"},{"line_number":2285,"context_line":"                                  \"op\": i.op})"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_fe583559","line":2282,"in_reply_to":"1abeadc6_2b9fd604","updated":"2014-08-27 05:40:38.000000000","message":"Actually, it is hard to imagine that we get query with i.field \u003d\u003d None, but if it would happened we just construct a filter that wouldn\u0027t find any events or traits.","commit_id":"c0ab8d4b0713c53b8e27e73283297d1ae87d5fee"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"7adc19d91ae22eddd3f8370b098a39ca75db741a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"cfg.CONF.register_opts(ALARM_API_OPTS, group\u003d\u0027alarm\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"state_kind \u003d [\"ok\", \"alarm\", \"insufficient data\"]"},{"line_number":73,"context_line":"state_kind_enum \u003d wtypes.Enum(str, *state_kind)"},{"line_number":74,"context_line":"operation_kind \u003d wtypes.Enum(str, \u0027lt\u0027, \u0027le\u0027, \u0027eq\u0027, \u0027ne\u0027, \u0027ge\u0027, \u0027gt\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_174e8b96","line":73,"updated":"2014-08-27 10:07:52.000000000","message":"Can you make the operation_kind the same as state_kind? E.g. have a list in operation_kind and an Enum in operation_kind_enum. Then you can use operation_kind in the code below, instead of instantizing a new list every time.","commit_id":"30d7653dc642caae125b20835f703cf9d5b9eab4"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"f3f52648cab51aa4cd8813dda851dca79b87160f","unresolved":false,"context_lines":[{"line_number":70,"context_line":"cfg.CONF.register_opts(ALARM_API_OPTS, group\u003d\u0027alarm\u0027)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"state_kind \u003d [\"ok\", \"alarm\", \"insufficient data\"]"},{"line_number":73,"context_line":"state_kind_enum \u003d wtypes.Enum(str, *state_kind)"},{"line_number":74,"context_line":"operation_kind \u003d wtypes.Enum(str, \u0027lt\u0027, \u0027le\u0027, \u0027eq\u0027, \u0027ne\u0027, \u0027ge\u0027, \u0027gt\u0027)"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_110db690","line":73,"in_reply_to":"1abeadc6_174e8b96","updated":"2014-08-28 07:24:02.000000000","message":"Yep, done.","commit_id":"30d7653dc642caae125b20835f703cf9d5b9eab4"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5bc3626457388997d7cc5529df4f2fe68627fb4d","unresolved":false,"context_lines":[{"line_number":2275,"context_line":"        if not i.op:"},{"line_number":2276,"context_line":"            i.op \u003d \u0027eq\u0027"},{"line_number":2277,"context_line":"        elif i.op not in (\u0027eq\u0027, \u0027ne\u0027, \u0027lt\u0027, \u0027le\u0027, \u0027gt\u0027, \u0027ge\u0027):"},{"line_number":2278,"context_line":"            error \u003d _(\"operator {} is incorrect\").format(i.op)"},{"line_number":2279,"context_line":"            raise ClientSideError(error)"},{"line_number":2280,"context_line":"        elif i.field in evt_model_filter:"},{"line_number":2281,"context_line":"            evt_model_filter[i.field] \u003d i.value"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_110a1621","line":2278,"updated":"2014-08-27 10:46:50.000000000","message":"Could you please add a test case to the api scenario tests, which checks that this error is raised?","commit_id":"30d7653dc642caae125b20835f703cf9d5b9eab4"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"f3f52648cab51aa4cd8813dda851dca79b87160f","unresolved":false,"context_lines":[{"line_number":2275,"context_line":"        if not i.op:"},{"line_number":2276,"context_line":"            i.op \u003d \u0027eq\u0027"},{"line_number":2277,"context_line":"        elif i.op not in (\u0027eq\u0027, \u0027ne\u0027, \u0027lt\u0027, \u0027le\u0027, \u0027gt\u0027, \u0027ge\u0027):"},{"line_number":2278,"context_line":"            error \u003d _(\"operator {} is incorrect\").format(i.op)"},{"line_number":2279,"context_line":"            raise ClientSideError(error)"},{"line_number":2280,"context_line":"        elif i.field in evt_model_filter:"},{"line_number":2281,"context_line":"            evt_model_filter[i.field] \u003d i.value"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_d1125eb3","line":2278,"in_reply_to":"1abeadc6_110a1621","updated":"2014-08-28 07:24:02.000000000","message":"Done","commit_id":"30d7653dc642caae125b20835f703cf9d5b9eab4"},{"author":{"_account_id":8052,"name":"Nejc Saje","email":"nejc@saje.info","username":"nsaje"},"change_message_id":"7adc19d91ae22eddd3f8370b098a39ca75db741a","unresolved":false,"context_lines":[{"line_number":2277,"context_line":"        elif i.op not in (\u0027eq\u0027, \u0027ne\u0027, \u0027lt\u0027, \u0027le\u0027, \u0027gt\u0027, \u0027ge\u0027):"},{"line_number":2278,"context_line":"            error \u003d _(\"operator {} is incorrect\").format(i.op)"},{"line_number":2279,"context_line":"            raise ClientSideError(error)"},{"line_number":2280,"context_line":"        elif i.field in evt_model_filter:"},{"line_number":2281,"context_line":"            evt_model_filter[i.field] \u003d i.value"},{"line_number":2282,"context_line":"        else:"},{"line_number":2283,"context_line":"            traits_filter.append({\"key\": i.field,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_d2b42137","line":2280,"updated":"2014-08-27 10:07:52.000000000","message":"Are you sure these branches should be \u0027elif\u0027? They look more like separate if-branches to me.","commit_id":"30d7653dc642caae125b20835f703cf9d5b9eab4"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"f3f52648cab51aa4cd8813dda851dca79b87160f","unresolved":false,"context_lines":[{"line_number":2277,"context_line":"        elif i.op not in (\u0027eq\u0027, \u0027ne\u0027, \u0027lt\u0027, \u0027le\u0027, \u0027gt\u0027, \u0027ge\u0027):"},{"line_number":2278,"context_line":"            error \u003d _(\"operator {} is incorrect\").format(i.op)"},{"line_number":2279,"context_line":"            raise ClientSideError(error)"},{"line_number":2280,"context_line":"        elif i.field in evt_model_filter:"},{"line_number":2281,"context_line":"            evt_model_filter[i.field] \u003d i.value"},{"line_number":2282,"context_line":"        else:"},{"line_number":2283,"context_line":"            traits_filter.append({\"key\": i.field,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_713a6a35","line":2280,"in_reply_to":"1abeadc6_8d59ac5d","updated":"2014-08-28 07:24:02.000000000","message":"Yep! really, it is the separate branch. Thank you both.","commit_id":"30d7653dc642caae125b20835f703cf9d5b9eab4"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5bc3626457388997d7cc5529df4f2fe68627fb4d","unresolved":false,"context_lines":[{"line_number":2277,"context_line":"        elif i.op not in (\u0027eq\u0027, \u0027ne\u0027, \u0027lt\u0027, \u0027le\u0027, \u0027gt\u0027, \u0027ge\u0027):"},{"line_number":2278,"context_line":"            error \u003d _(\"operator {} is incorrect\").format(i.op)"},{"line_number":2279,"context_line":"            raise ClientSideError(error)"},{"line_number":2280,"context_line":"        elif i.field in evt_model_filter:"},{"line_number":2281,"context_line":"            evt_model_filter[i.field] \u003d i.value"},{"line_number":2282,"context_line":"        else:"},{"line_number":2283,"context_line":"            traits_filter.append({\"key\": i.field,"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_8d59ac5d","line":2280,"in_reply_to":"1abeadc6_d2b42137","updated":"2014-08-27 10:46:50.000000000","message":"I\u0027ve just wanted to ask the same question. :)","commit_id":"30d7653dc642caae125b20835f703cf9d5b9eab4"}],"ceilometer/storage/hbase/inmemory.py":[{"author":{"_account_id":10106,"name":"Piyush Masrani","email":"pmasrani@vmware.com","username":"piyushmasrani"},"change_message_id":"61b37d776c8ff507fc63bbd16e1241532b959be8","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        r \u003d {}"},{"line_number":132,"context_line":"        for row in rows:"},{"line_number":133,"context_line":"            data \u003d rows[row]"},{"line_number":134,"context_line":"            if op \u003d\u003d \u0027\u003d\u0027:"},{"line_number":135,"context_line":"                if column in data and data[column] \u003d\u003d value:"},{"line_number":136,"context_line":"                    r[row] \u003d data"},{"line_number":137,"context_line":"            elif op \u003d\u003d \u0027\u003c\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_100275b4","line":134,"updated":"2014-08-25 08:42:23.000000000","message":"Do you think it will be better to use \u0027\u003d\u003d\u0027 as an operator, to have a consistency?","commit_id":"c1c0bb6c0381f647b014a5c2fbdb458379e066a6"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"105126369e787bc8c0f6b86fe8e23a36a0ee602d","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        r \u003d {}"},{"line_number":132,"context_line":"        for row in rows:"},{"line_number":133,"context_line":"            data \u003d rows[row]"},{"line_number":134,"context_line":"            if op \u003d\u003d \u0027\u003d\u0027:"},{"line_number":135,"context_line":"                if column in data and data[column] \u003d\u003d value:"},{"line_number":136,"context_line":"                    r[row] \u003d data"},{"line_number":137,"context_line":"            elif op \u003d\u003d \u0027\u003c\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_2bac5f8c","line":134,"in_reply_to":"1abeadc6_100275b4","updated":"2014-08-25 12:25:16.000000000","message":"Actually now we already have consistency with HBase, because in Hbase eq operator is \u0027\u003d\u0027 not \u0027\u003d\u003d\u0027. And here we parsing filters that is used in HBase.","commit_id":"c1c0bb6c0381f647b014a5c2fbdb458379e066a6"},{"author":{"_account_id":10106,"name":"Piyush Masrani","email":"pmasrani@vmware.com","username":"piyushmasrani"},"change_message_id":"d75824f62378ac1fd2117b0c67beba2a70a998af","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        r \u003d {}"},{"line_number":132,"context_line":"        for row in rows:"},{"line_number":133,"context_line":"            data \u003d rows[row]"},{"line_number":134,"context_line":"            if op \u003d\u003d \u0027\u003d\u0027:"},{"line_number":135,"context_line":"                if column in data and data[column] \u003d\u003d value:"},{"line_number":136,"context_line":"                    r[row] \u003d data"},{"line_number":137,"context_line":"            elif op \u003d\u003d \u0027\u003c\u0027:"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_f4f3249d","line":134,"in_reply_to":"1abeadc6_2bac5f8c","updated":"2014-08-25 13:47:54.000000000","message":"That explains, thanks!","commit_id":"c1c0bb6c0381f647b014a5c2fbdb458379e066a6"},{"author":{"_account_id":10106,"name":"Piyush Masrani","email":"pmasrani@vmware.com","username":"piyushmasrani"},"change_message_id":"61b37d776c8ff507fc63bbd16e1241532b959be8","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            elif op \u003d\u003d \u0027\u003e\u003d\u0027:"},{"line_number":147,"context_line":"                if column in data and data[column] \u003e\u003d value:"},{"line_number":148,"context_line":"                    r[row] \u003d data"},{"line_number":149,"context_line":"            elif op \u003d\u003d \u0027!\u003d\u0027:"},{"line_number":150,"context_line":"                if column in data and data[column] !\u003d value:"},{"line_number":151,"context_line":"                    r[row] \u003d data"},{"line_number":152,"context_line":"        return r"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_10f0b5c8","line":149,"updated":"2014-08-25 08:42:23.000000000","message":"Any particular reason why we don\u0027t need else part anymore? I believe it is still better to have it as a safety net, just in case additional operators get implemented.","commit_id":"c1c0bb6c0381f647b014a5c2fbdb458379e066a6"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"105126369e787bc8c0f6b86fe8e23a36a0ee602d","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            elif op \u003d\u003d \u0027\u003e\u003d\u0027:"},{"line_number":147,"context_line":"                if column in data and data[column] \u003e\u003d value:"},{"line_number":148,"context_line":"                    r[row] \u003d data"},{"line_number":149,"context_line":"            elif op \u003d\u003d \u0027!\u003d\u0027:"},{"line_number":150,"context_line":"                if column in data and data[column] !\u003d value:"},{"line_number":151,"context_line":"                    r[row] \u003d data"},{"line_number":152,"context_line":"        return r"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_eb242710","line":149,"in_reply_to":"1abeadc6_10f0b5c8","updated":"2014-08-25 12:25:16.000000000","message":"We really don\u0027t need \"else\" here because we have implemented all operators that could be used in filters in Hbase.\n\nFrom other side may be it could be useful to set notification that operator is invalid, but i don\u0027t think that we could have such operators in our mock HBase part.","commit_id":"c1c0bb6c0381f647b014a5c2fbdb458379e066a6"},{"author":{"_account_id":10106,"name":"Piyush Masrani","email":"pmasrani@vmware.com","username":"piyushmasrani"},"change_message_id":"d75824f62378ac1fd2117b0c67beba2a70a998af","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            elif op \u003d\u003d \u0027\u003e\u003d\u0027:"},{"line_number":147,"context_line":"                if column in data and data[column] \u003e\u003d value:"},{"line_number":148,"context_line":"                    r[row] \u003d data"},{"line_number":149,"context_line":"            elif op \u003d\u003d \u0027!\u003d\u0027:"},{"line_number":150,"context_line":"                if column in data and data[column] !\u003d value:"},{"line_number":151,"context_line":"                    r[row] \u003d data"},{"line_number":152,"context_line":"        return r"}],"source_content_type":"text/x-python","patch_set":5,"id":"1abeadc6_1476e006","line":149,"in_reply_to":"1abeadc6_eb242710","updated":"2014-08-25 13:47:54.000000000","message":"Ok, that makes sense. I will leave up to you then, to have the else part for extra safety or not. Will not block the review for it.","commit_id":"c1c0bb6c0381f647b014a5c2fbdb458379e066a6"}],"ceilometer/storage/sqlalchemy/utils.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"72f3bcaf3285b3df019ebf6b3f569cfb2d1194a0","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"def trait_op_condition(conditions, trait_type, value, op\u003d\u0027eq\u0027):"},{"line_number":128,"context_line":"    if trait_type \u003d\u003d \u0027string\u0027:"},{"line_number":129,"context_line":"        prepare_cond(conditions, op, value, trait_model\u003dmodels.Trait.t_string)"},{"line_number":130,"context_line":"    elif trait_type \u003d\u003d \u0027integer\u0027:"},{"line_number":131,"context_line":"        prepare_cond(conditions, op, value, trait_model\u003dmodels.Trait.t_int)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_5d69f823","line":128,"updated":"2014-08-20 11:33:01.000000000","message":"I think it would be easier to have a dict for mapping to avoid this big elif chain and also maybe these two new functions could be implemented in one.","commit_id":"6c68cd20a95528bb393b34807690d2e4c34702aa"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"83675814e3d34210a5fe24ad6d4be2281d4280e5","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"def trait_op_condition(conditions, trait_type, value, op\u003d\u0027eq\u0027):"},{"line_number":128,"context_line":"    if trait_type \u003d\u003d \u0027string\u0027:"},{"line_number":129,"context_line":"        prepare_cond(conditions, op, value, trait_model\u003dmodels.Trait.t_string)"},{"line_number":130,"context_line":"    elif trait_type \u003d\u003d \u0027integer\u0027:"},{"line_number":131,"context_line":"        prepare_cond(conditions, op, value, trait_model\u003dmodels.Trait.t_int)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_23f89ac2","line":128,"in_reply_to":"1abeadc6_5d69f823","updated":"2014-08-20 15:48:42.000000000","message":"Yes sure, I thought about it, but have done in simplest way. Will improve.","commit_id":"6c68cd20a95528bb393b34807690d2e4c34702aa"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"72f3bcaf3285b3df019ebf6b3f569cfb2d1194a0","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        prepare_cond(conditions, op, value, trait_model\u003dmodels.Trait.t_float)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"def prepare_cond(conditions, op, value, trait_model):"},{"line_number":140,"context_line":"    if op \u003d\u003d \u0027eq\u0027:"},{"line_number":141,"context_line":"        conditions.append(trait_model \u003d\u003d value)"},{"line_number":142,"context_line":"    elif op \u003d\u003d \u0027lt\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_1d3a2036","line":139,"updated":"2014-08-20 11:33:01.000000000","message":"Does it make sense to have other ops than \u0027eq\u0027 and \u0027ne\u0027 for string type?","commit_id":"6c68cd20a95528bb393b34807690d2e4c34702aa"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"83675814e3d34210a5fe24ad6d4be2281d4280e5","unresolved":false,"context_lines":[{"line_number":136,"context_line":"        prepare_cond(conditions, op, value, trait_model\u003dmodels.Trait.t_float)"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"def prepare_cond(conditions, op, value, trait_model):"},{"line_number":140,"context_line":"    if op \u003d\u003d \u0027eq\u0027:"},{"line_number":141,"context_line":"        conditions.append(trait_model \u003d\u003d value)"},{"line_number":142,"context_line":"    elif op \u003d\u003d \u0027lt\u0027:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_a3daea49","line":139,"in_reply_to":"1abeadc6_1d3a2036","updated":"2014-08-20 15:48:42.000000000","message":"Actually yes, we may compare strings lexicographically so we need \u0027\u003e\u0027 \u0027\u003c\u0027 and other ops.","commit_id":"6c68cd20a95528bb393b34807690d2e4c34702aa"}],"ceilometer/tests/api/v2/test_event_scenarios.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"72f3bcaf3285b3df019ebf6b3f569cfb2d1194a0","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        data \u003d self.get_json(self.PATH, headers\u003dheaders,"},{"line_number":254,"context_line":"                             q\u003d[{\u0027field\u0027: \u0027trait_B\u0027,"},{"line_number":255,"context_line":"                                 \u0027value\u0027: \u0027101\u0027,"},{"line_number":256,"context_line":"                                 \u0027type\u0027: \u0027integer\u0027,"},{"line_number":257,"context_line":"                                 \u0027op\u0027: \u0027lt\u0027}])"},{"line_number":258,"context_line":"        self.assertEqual(1, len(data))"},{"line_number":259,"context_line":"        data \u003d self.get_json(self.PATH, headers\u003dheaders,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_3dd27c00","line":256,"updated":"2014-08-20 11:33:01.000000000","message":"It would be good to add tests for other types too to have better coverage.","commit_id":"6c68cd20a95528bb393b34807690d2e4c34702aa"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"83675814e3d34210a5fe24ad6d4be2281d4280e5","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        data \u003d self.get_json(self.PATH, headers\u003dheaders,"},{"line_number":254,"context_line":"                             q\u003d[{\u0027field\u0027: \u0027trait_B\u0027,"},{"line_number":255,"context_line":"                                 \u0027value\u0027: \u0027101\u0027,"},{"line_number":256,"context_line":"                                 \u0027type\u0027: \u0027integer\u0027,"},{"line_number":257,"context_line":"                                 \u0027op\u0027: \u0027lt\u0027}])"},{"line_number":258,"context_line":"        self.assertEqual(1, len(data))"},{"line_number":259,"context_line":"        data \u003d self.get_json(self.PATH, headers\u003dheaders,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_43ef56e9","line":256,"in_reply_to":"1abeadc6_3dd27c00","updated":"2014-08-20 15:48:42.000000000","message":"Done","commit_id":"6c68cd20a95528bb393b34807690d2e4c34702aa"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ef8739bedff9eb9fe883fee1d0a95a8d3025e243","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                    float(base) + 0.123456),"},{"line_number":47,"context_line":"                                (\u0027trait_D\u0027, models.Trait.DATETIME_TYPE,"},{"line_number":48,"context_line":"                                    self.trait_time)]]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"            # Message ID for test will be \u0027base\u0027. So, message ID for the first"},{"line_number":51,"context_line":"            # event will be \u00270\u0027, the second \u0027100\u0027, and so on."},{"line_number":52,"context_line":"            event_models.append("}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_267c6d72","line":49,"updated":"2014-08-26 10:59:27.000000000","message":"Could you please add here a phrase about trait_time?","commit_id":"c0ab8d4b0713c53b8e27e73283297d1ae87d5fee"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"849a1a51ba64c8cb8191973580d593f7972f12a4","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                                    float(base) + 0.123456),"},{"line_number":47,"context_line":"                                (\u0027trait_D\u0027, models.Trait.DATETIME_TYPE,"},{"line_number":48,"context_line":"                                    self.trait_time)]]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"            # Message ID for test will be \u0027base\u0027. So, message ID for the first"},{"line_number":51,"context_line":"            # event will be \u00270\u0027, the second \u0027100\u0027, and so on."},{"line_number":52,"context_line":"            event_models.append("}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_013596da","line":49,"in_reply_to":"1abeadc6_267c6d72","updated":"2014-08-27 05:40:38.000000000","message":"Done","commit_id":"c0ab8d4b0713c53b8e27e73283297d1ae87d5fee"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ef8739bedff9eb9fe883fee1d0a95a8d3025e243","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def test_get_events(self):"},{"line_number":130,"context_line":"        data \u003d self.get_json(self.PATH, headers\u003dheaders)"},{"line_number":131,"context_line":"        self.assertEqual(3, len(data))"},{"line_number":132,"context_line":"        # We expect to get native UTC generated time back"},{"line_number":133,"context_line":"        self.trait_time -\u003d datetime.timedelta(days\u003d3)"},{"line_number":134,"context_line":"        for event in data:"},{"line_number":135,"context_line":"            expected_generated \u003d timeutils.strtime("}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_c6ee59b4","line":132,"updated":"2014-08-26 10:59:27.000000000","message":"Maybe it\u0027s better to have a constant value START_TRAIT_TIME\u003ddatetime.datetime(2013, 12, 31, 5, 0)? Subtraction of 3 days looks mysterious","commit_id":"c0ab8d4b0713c53b8e27e73283297d1ae87d5fee"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"849a1a51ba64c8cb8191973580d593f7972f12a4","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def test_get_events(self):"},{"line_number":130,"context_line":"        data \u003d self.get_json(self.PATH, headers\u003dheaders)"},{"line_number":131,"context_line":"        self.assertEqual(3, len(data))"},{"line_number":132,"context_line":"        # We expect to get native UTC generated time back"},{"line_number":133,"context_line":"        self.trait_time -\u003d datetime.timedelta(days\u003d3)"},{"line_number":134,"context_line":"        for event in data:"},{"line_number":135,"context_line":"            expected_generated \u003d timeutils.strtime("}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_c1d47ebf","line":132,"in_reply_to":"1abeadc6_c6ee59b4","updated":"2014-08-27 05:40:38.000000000","message":"Done","commit_id":"c0ab8d4b0713c53b8e27e73283297d1ae87d5fee"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ef8739bedff9eb9fe883fee1d0a95a8d3025e243","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                             q\u003d[{\u0027field\u0027: \u0027trait_A\u0027,"},{"line_number":252,"context_line":"                                 \u0027value\u0027: \u0027my_Foo_text\u0027,"},{"line_number":253,"context_line":"                                 \u0027type\u0027: \u0027string\u0027,"},{"line_number":254,"context_line":"                                 \u0027op\u0027: \u0027eq\u0027}])"},{"line_number":255,"context_line":"        self.assertEqual(1, len(data))"},{"line_number":256,"context_line":"        data \u003d self.get_json(self.PATH, headers\u003dheaders,"},{"line_number":257,"context_line":"                             q\u003d[{\u0027field\u0027: \u0027trait_A\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_a176a704","line":254,"updated":"2014-08-26 10:59:27.000000000","message":"Could you please add more asserts here? As I understand an event with value my_Boo_text will be returned? Is it possible to check?\nThis comment is for all the following tests","commit_id":"c0ab8d4b0713c53b8e27e73283297d1ae87d5fee"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"849a1a51ba64c8cb8191973580d593f7972f12a4","unresolved":false,"context_lines":[{"line_number":251,"context_line":"                             q\u003d[{\u0027field\u0027: \u0027trait_A\u0027,"},{"line_number":252,"context_line":"                                 \u0027value\u0027: \u0027my_Foo_text\u0027,"},{"line_number":253,"context_line":"                                 \u0027type\u0027: \u0027string\u0027,"},{"line_number":254,"context_line":"                                 \u0027op\u0027: \u0027eq\u0027}])"},{"line_number":255,"context_line":"        self.assertEqual(1, len(data))"},{"line_number":256,"context_line":"        data \u003d self.get_json(self.PATH, headers\u003dheaders,"},{"line_number":257,"context_line":"                             q\u003d[{\u0027field\u0027: \u0027trait_A\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_2181b28f","line":254,"in_reply_to":"1abeadc6_a176a704","updated":"2014-08-27 05:40:38.000000000","message":"Of course any event could be returned, but here operator for traits is tested, so I took middle trait to compare with. Never the lees I\u0027ve improved tests.","commit_id":"c0ab8d4b0713c53b8e27e73283297d1ae87d5fee"},{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"5bc3626457388997d7cc5529df4f2fe68627fb4d","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            # Message ID for test will be \u0027base\u0027. So, message ID for the first"},{"line_number":52,"context_line":"            # event will be \u00270\u0027, the second \u0027100\u0027, and so on."},{"line_number":53,"context_line":"            # trait_time in first event will be equal to self.trait_time"},{"line_number":54,"context_line":"            # (datetime.datetime(2013, 12, 31, 5, 0)), nest will add 1 day, so"},{"line_number":55,"context_line":"            # second will be (datetime.datetime(2014, 01, 01, 5, 0)) and so on."},{"line_number":56,"context_line":"            event_models.append("},{"line_number":57,"context_line":"                models.Event(message_id\u003dstr(base),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_6d77f0d4","line":54,"updated":"2014-08-27 10:46:50.000000000","message":"s/nest/next/","commit_id":"30d7653dc642caae125b20835f703cf9d5b9eab4"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"f3f52648cab51aa4cd8813dda851dca79b87160f","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            # Message ID for test will be \u0027base\u0027. So, message ID for the first"},{"line_number":52,"context_line":"            # event will be \u00270\u0027, the second \u0027100\u0027, and so on."},{"line_number":53,"context_line":"            # trait_time in first event will be equal to self.trait_time"},{"line_number":54,"context_line":"            # (datetime.datetime(2013, 12, 31, 5, 0)), nest will add 1 day, so"},{"line_number":55,"context_line":"            # second will be (datetime.datetime(2014, 01, 01, 5, 0)) and so on."},{"line_number":56,"context_line":"            event_models.append("},{"line_number":57,"context_line":"                models.Event(message_id\u003dstr(base),"}],"source_content_type":"text/x-python","patch_set":8,"id":"1abeadc6_2901476a","line":54,"in_reply_to":"1abeadc6_6d77f0d4","updated":"2014-08-28 07:24:02.000000000","message":"Done","commit_id":"30d7653dc642caae125b20835f703cf9d5b9eab4"}],"ceilometer/tests/storage/test_storage_scenarios.py":[{"author":{"_account_id":9562,"name":"Ildiko Vancsa","email":"ildiko.vancsa@gmail.com","username":"ildikov"},"change_message_id":"72f3bcaf3285b3df019ebf6b3f569cfb2d1194a0","unresolved":false,"context_lines":[{"line_number":2825,"context_line":"        self.assertEqual(events[0].event_type, \"Bar\")"},{"line_number":2826,"context_line":"        self.assertEqual(4, len(events[0].traits))"},{"line_number":2827,"context_line":""},{"line_number":2828,"context_line":"    def test_get_event_trait_filter_op(self):"},{"line_number":2829,"context_line":"        trait_filters \u003d [{\u0027key\u0027: \u0027trait_B\u0027, \u0027integer\u0027: 101, \u0027op\u0027: \u0027eq\u0027}]"},{"line_number":2830,"context_line":"        event_filter \u003d storage.EventFilter(self.start, self.end,"},{"line_number":2831,"context_line":"                                           traits_filter\u003dtrait_filters)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_ae32d40d","line":2828,"updated":"2014-08-20 11:33:01.000000000","message":"Checks for other types would be good here too, it can be mixed in the two test files to achieve a good coverage.","commit_id":"6c68cd20a95528bb393b34807690d2e4c34702aa"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"83675814e3d34210a5fe24ad6d4be2281d4280e5","unresolved":false,"context_lines":[{"line_number":2825,"context_line":"        self.assertEqual(events[0].event_type, \"Bar\")"},{"line_number":2826,"context_line":"        self.assertEqual(4, len(events[0].traits))"},{"line_number":2827,"context_line":""},{"line_number":2828,"context_line":"    def test_get_event_trait_filter_op(self):"},{"line_number":2829,"context_line":"        trait_filters \u003d [{\u0027key\u0027: \u0027trait_B\u0027, \u0027integer\u0027: 101, \u0027op\u0027: \u0027eq\u0027}]"},{"line_number":2830,"context_line":"        event_filter \u003d storage.EventFilter(self.start, self.end,"},{"line_number":2831,"context_line":"                                           traits_filter\u003dtrait_filters)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1abeadc6_728ed6d1","line":2828,"in_reply_to":"1abeadc6_ae32d40d","updated":"2014-08-20 15:48:42.000000000","message":"Done","commit_id":"6c68cd20a95528bb393b34807690d2e4c34702aa"},{"author":{"_account_id":7478,"name":"Nadya Shakhat","email":"nadmi4@gmail.com","username":"nprivalova"},"change_message_id":"ef8739bedff9eb9fe883fee1d0a95a8d3025e243","unresolved":false,"context_lines":[{"line_number":2831,"context_line":"        event_filter \u003d storage.EventFilter(self.start, self.end,"},{"line_number":2832,"context_line":"                                           traits_filter\u003dtrait_filters)"},{"line_number":2833,"context_line":"        events \u003d [event for event in self.conn.get_events(event_filter)]"},{"line_number":2834,"context_line":"        self.assertEqual(2, len(events))"},{"line_number":2835,"context_line":"        self.assertEqual(events[0].event_type, \"Foo\")"},{"line_number":2836,"context_line":"        self.assertEqual(4, len(events[0].traits))"},{"line_number":2837,"context_line":"        trait_filters[0].update({\u0027key\u0027: \u0027trait_A\u0027, \u0027op\u0027: \u0027lt\u0027})"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_fc3be299","line":2834,"updated":"2014-08-26 10:59:27.000000000","message":"Please follow the method signature (expected, actual) in the whole file","commit_id":"c0ab8d4b0713c53b8e27e73283297d1ae87d5fee"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"849a1a51ba64c8cb8191973580d593f7972f12a4","unresolved":false,"context_lines":[{"line_number":2831,"context_line":"        event_filter \u003d storage.EventFilter(self.start, self.end,"},{"line_number":2832,"context_line":"                                           traits_filter\u003dtrait_filters)"},{"line_number":2833,"context_line":"        events \u003d [event for event in self.conn.get_events(event_filter)]"},{"line_number":2834,"context_line":"        self.assertEqual(2, len(events))"},{"line_number":2835,"context_line":"        self.assertEqual(events[0].event_type, \"Foo\")"},{"line_number":2836,"context_line":"        self.assertEqual(4, len(events[0].traits))"},{"line_number":2837,"context_line":"        trait_filters[0].update({\u0027key\u0027: \u0027trait_A\u0027, \u0027op\u0027: \u0027lt\u0027})"}],"source_content_type":"text/x-python","patch_set":6,"id":"1abeadc6_01467621","line":2834,"in_reply_to":"1abeadc6_fc3be299","updated":"2014-08-27 05:40:38.000000000","message":"Done","commit_id":"c0ab8d4b0713c53b8e27e73283297d1ae87d5fee"}]}
