)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"d9e37aef9d8cb7583501ac93c3388c2d7b255edf","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"According to the change set: https://review.openstack.org/#/c/281190/"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"The MeterDefinitionException has the similar problems."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Ia3a41769d0daac84ad5738dc75a6900d1a691420"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"5aef4532_4625c8c0","line":11,"range":{"start_line":11,"start_character":4,"end_line":11,"end_character":28},"updated":"2016-03-07 10:09:33.000000000","message":"I think it actually doesn\u0027t have such problem because it defines the message attribute.\n\nChange to another reason if you do want this change","commit_id":"f5cdec5a446279e4d19112aa88ee82c2c176bad5"}],"ceilometer/hardware/pollsters/generic.py":[{"author":{"_account_id":7729,"name":"Ilya Tyaptin","email":"ityaptin@mirantis.com","username":"ityaptin"},"change_message_id":"d5c059bf9cc8eda662fa3d01145da4062bf2a0c7","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def __init__(self, message, definition_cfg):"},{"line_number":45,"context_line":"        msg \u003d \u0027%s %s: %s\u0027 % (self.__class__.__name__,"},{"line_number":46,"context_line":"                             definition_cfg, message)"},{"line_number":47,"context_line":"        super(MeterDefinitionException, self).__init__(msg)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class MeterDefinition(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_37df676a","line":47,"updated":"2016-02-29 16:54:50.000000000","message":"For the python 2.7 if we raise this exception we have next output: \nMeterDefinitionException: MeterDefinitionException b: a\n\nI think it\u0027s not clear and has a redundant class mention. It\u0027s better to replace message to:\nmsg \u003d \"Definition: %s. Error: %s\" % (definition_cfg, message)","commit_id":"fe3794965bd4d04a9bcf794f681086e8cbd22139"},{"author":{"_account_id":9526,"name":"Zi Lian Ji","email":"jizilian@cn.ibm.com","username":"jizilian"},"change_message_id":"31fdf0bdd35804e36d8d45efeaf5f70095a09c8e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"    def __init__(self, message, definition_cfg):"},{"line_number":45,"context_line":"        msg \u003d \u0027%s %s: %s\u0027 % (self.__class__.__name__,"},{"line_number":46,"context_line":"                             definition_cfg, message)"},{"line_number":47,"context_line":"        super(MeterDefinitionException, self).__init__(msg)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"class MeterDefinition(object):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_843d3f91","line":47,"in_reply_to":"9aed3d3a_37df676a","updated":"2016-03-01 06:47:09.000000000","message":"Hi llya\n\nI have tried your suggestion. It looks fine to me.\n\n\"Definition:{\u0027name\u0027: \u0027test\u0027, \u0027snmp_inspector\u0027: {}, \u0027unit\u0027: \u0027B\u0027, \u0027type\u0027: \u0027invalid\u0027}. Error: Unrecognized type value invalid\n\nThanks","commit_id":"fe3794965bd4d04a9bcf794f681086e8cbd22139"},{"author":{"_account_id":10987,"name":"Igor Degtiarov","username":"tovstun","inactive":true},"change_message_id":"b0700dad2b0163cb68653b628ae8ac7d497186a8","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class MeterDefinitionException(Exception):"},{"line_number":44,"context_line":"    def __init__(self, message, definition_cfg):"},{"line_number":45,"context_line":"        msg \u003d \u0027Definition:%s, Error: %s\u0027 % (definition_cfg,"},{"line_number":46,"context_line":"                                            message)"},{"line_number":47,"context_line":"        super(MeterDefinitionException, self).__init__(msg)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_b2c8a123","line":45,"range":{"start_line":45,"start_character":25,"end_line":45,"end_character":27},"updated":"2016-03-03 13:02:13.000000000","message":"it seems that space is missed here","commit_id":"016464ffeeffba67d615dd805a4fb4327d451d94"},{"author":{"_account_id":9526,"name":"Zi Lian Ji","email":"jizilian@cn.ibm.com","username":"jizilian"},"change_message_id":"0dd166a9b0b52e5bc139265d9826b200e95611dd","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class MeterDefinitionException(Exception):"},{"line_number":44,"context_line":"    def __init__(self, message, definition_cfg):"},{"line_number":45,"context_line":"        msg \u003d \u0027Definition:%s, Error: %s\u0027 % (definition_cfg,"},{"line_number":46,"context_line":"                                            message)"},{"line_number":47,"context_line":"        super(MeterDefinitionException, self).__init__(msg)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_1df673d7","line":45,"range":{"start_line":45,"start_character":25,"end_line":45,"end_character":27},"in_reply_to":"7af24918_b2c8a123","updated":"2016-03-07 07:26:34.000000000","message":"Hello lgor\n\nThanks for your review. I will modify it.\n\nThanks","commit_id":"016464ffeeffba67d615dd805a4fb4327d451d94"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"d9e37aef9d8cb7583501ac93c3388c2d7b255edf","unresolved":false,"context_lines":[{"line_number":43,"context_line":"class MeterDefinitionException(Exception):"},{"line_number":44,"context_line":"    def __init__(self, message, definition_cfg):"},{"line_number":45,"context_line":"        msg \u003d \u0027Definition: %s, Error: %s\u0027 % (definition_cfg,"},{"line_number":46,"context_line":"                                            message)"},{"line_number":47,"context_line":"        super(MeterDefinitionException, self).__init__(msg)"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_d1feb404","line":46,"range":{"start_line":46,"start_character":44,"end_line":46,"end_character":51},"updated":"2016-03-07 10:09:33.000000000","message":"it can be merged to one line","commit_id":"f5cdec5a446279e4d19112aa88ee82c2c176bad5"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"d9e37aef9d8cb7583501ac93c3388c2d7b255edf","unresolved":false,"context_lines":[{"line_number":220,"context_line":"            meter \u003d MeterDefinition(meter_def)"},{"line_number":221,"context_line":"            mappings[meter.name] \u003d meter"},{"line_number":222,"context_line":"        except MeterDefinitionException as me:"},{"line_number":223,"context_line":"            errmsg \u003d (_LE(\"Error loading meter definition : %(err)s\")"},{"line_number":224,"context_line":"                      % dict(err\u003dme))"},{"line_number":225,"context_line":"            LOG.error(errmsg)"},{"line_number":226,"context_line":"    return mappings"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_d14cf478","line":223,"range":{"start_line":223,"start_character":22,"end_line":223,"end_character":25},"updated":"2016-03-07 10:09:33.000000000","message":"since you are modifying it, can you change this to:\n\nLOG.error(_LE(\"xxx %s\"), me)\n\nit helps a bit.","commit_id":"f5cdec5a446279e4d19112aa88ee82c2c176bad5"}],"ceilometer/tests/unit/hardware/pollsters/test_generic.py":[{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"92f08376059a303c3d4fe6dcc16a5680780d3519","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        except generic.MeterDefinitionException as e:"},{"line_number":49,"context_line":"            err_buff \u003d str(e)"},{"line_number":50,"context_line":"            self.assertRegexpMatches(err_buff,"},{"line_number":51,"context_line":"                                     \"\\D*Missing field unit\")"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_config_invalid_field(self):"},{"line_number":54,"context_line":"        cfg \u003d dict(name\u003d\u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_3b576527","line":51,"updated":"2016-02-29 12:42:05.000000000","message":"can we just change this to use endswith rather than all this Regex stuff.","commit_id":"fe3794965bd4d04a9bcf794f681086e8cbd22139"},{"author":{"_account_id":9526,"name":"Zi Lian Ji","email":"jizilian@cn.ibm.com","username":"jizilian"},"change_message_id":"31fdf0bdd35804e36d8d45efeaf5f70095a09c8e","unresolved":false,"context_lines":[{"line_number":48,"context_line":"        except generic.MeterDefinitionException as e:"},{"line_number":49,"context_line":"            err_buff \u003d str(e)"},{"line_number":50,"context_line":"            self.assertRegexpMatches(err_buff,"},{"line_number":51,"context_line":"                                     \"\\D*Missing field unit\")"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    def test_config_invalid_field(self):"},{"line_number":54,"context_line":"        cfg \u003d dict(name\u003d\u0027test\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_840b7fd5","line":51,"in_reply_to":"9aed3d3a_3b576527","updated":"2016-03-01 06:47:09.000000000","message":"Hi Gordon\n\nThanks for your review.\nSure. I will do it.","commit_id":"fe3794965bd4d04a9bcf794f681086e8cbd22139"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"92f08376059a303c3d4fe6dcc16a5680780d3519","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            generic.MeterDefinition(cfg)"},{"line_number":68,"context_line":"        except generic.MeterDefinitionException as e:"},{"line_number":69,"context_line":"            err_buff \u003d str(e)"},{"line_number":70,"context_line":"            self.assertRegexpMatches(err_buff,"},{"line_number":71,"context_line":"                                     \"\\D*Unrecognized type value invalid\")"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @mock.patch(\u0027ceilometer.hardware.pollsters.generic.LOG\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_3b2e45a5","line":70,"updated":"2016-02-29 12:42:05.000000000","message":"same","commit_id":"fe3794965bd4d04a9bcf794f681086e8cbd22139"},{"author":{"_account_id":9526,"name":"Zi Lian Ji","email":"jizilian@cn.ibm.com","username":"jizilian"},"change_message_id":"31fdf0bdd35804e36d8d45efeaf5f70095a09c8e","unresolved":false,"context_lines":[{"line_number":67,"context_line":"            generic.MeterDefinition(cfg)"},{"line_number":68,"context_line":"        except generic.MeterDefinitionException as e:"},{"line_number":69,"context_line":"            err_buff \u003d str(e)"},{"line_number":70,"context_line":"            self.assertRegexpMatches(err_buff,"},{"line_number":71,"context_line":"                                     \"\\D*Unrecognized type value invalid\")"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @mock.patch(\u0027ceilometer.hardware.pollsters.generic.LOG\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_e4252b5c","line":70,"in_reply_to":"9aed3d3a_3b2e45a5","updated":"2016-03-01 06:47:09.000000000","message":"Hi Gordon\n\nThanks for your review.\nSure. I will do it.","commit_id":"fe3794965bd4d04a9bcf794f681086e8cbd22139"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"92f08376059a303c3d4fe6dcc16a5680780d3519","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                               snmp_inspector\u003d{})]}"},{"line_number":87,"context_line":"        data \u003d generic.load_definition(cfg)"},{"line_number":88,"context_line":"        self.assertEqual(2, len(data))"},{"line_number":89,"context_line":"        self.assertTrue(LOG.error.called)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class FakeInspector(inspector_base.Inspector):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_9623e8a6","line":89,"updated":"2016-02-29 12:42:05.000000000","message":"this change seems completely unrelated","commit_id":"fe3794965bd4d04a9bcf794f681086e8cbd22139"},{"author":{"_account_id":9526,"name":"Zi Lian Ji","email":"jizilian@cn.ibm.com","username":"jizilian"},"change_message_id":"31fdf0bdd35804e36d8d45efeaf5f70095a09c8e","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                               snmp_inspector\u003d{})]}"},{"line_number":87,"context_line":"        data \u003d generic.load_definition(cfg)"},{"line_number":88,"context_line":"        self.assertEqual(2, len(data))"},{"line_number":89,"context_line":"        self.assertTrue(LOG.error.called)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class FakeInspector(inspector_base.Inspector):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9aed3d3a_444977b6","line":89,"in_reply_to":"9aed3d3a_9623e8a6","updated":"2016-03-01 06:47:09.000000000","message":"Hi Gordon\n\nAfter changing the MeterDefinitionException, one of the method LOG.error parameters is dictionary type. The output of the dictionary is random.\n\nSo I used another test case to replace the original one.\n\nThanks","commit_id":"fe3794965bd4d04a9bcf794f681086e8cbd22139"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"d9e37aef9d8cb7583501ac93c3388c2d7b255edf","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                               snmp_inspector\u003d{})]}"},{"line_number":87,"context_line":"        data \u003d generic.load_definition(cfg)"},{"line_number":88,"context_line":"        self.assertEqual(2, len(data))"},{"line_number":89,"context_line":"        self.assertTrue(LOG.error.called)"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"class FakeInspector(inspector_base.Inspector):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_d11194b1","line":89,"range":{"start_line":89,"start_character":13,"end_line":89,"end_character":23},"updated":"2016-03-07 10:09:33.000000000","message":"nit: it seems weaker, mock can get the calling args, like this?\n\n        arg, kwargs \u003d LOG.error.call_args\n        self.assertTrue(arg[0].startswith(\u0027Error loading meter definition\u0027))\n        self.assertTrue(arg[0].endswith(\u0027Unrecognized type value invalid\u0027))","commit_id":"f5cdec5a446279e4d19112aa88ee82c2c176bad5"}]}
