)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11224,"name":"Swami Reddy","email":"swamireddy@gmail.com","username":"swamireddy"},"change_message_id":"8883f06a61bd9769742c13618cdbc7e4443923c0","unresolved":false,"context_lines":[{"line_number":9,"context_line":"    - Adding basic alarm-api function wrappers"},{"line_number":10,"context_line":"    - Adding Alarm class wrapper"},{"line_number":11,"context_line":"    - Added Test Cases for the wrapper"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Implements: blueprint ceilometer-alarm-api"},{"line_number":14,"context_line":"Change-Id: I569b461e86197b77d13e7cbef27b0ac4bea03b82"},{"line_number":15,"context_line":"Co-Authored-By: Sanjana Pai \u003csanjana@hitachi.co.in\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"ba63e191_557e59e5","line":12,"updated":"2016-01-19 05:13:32.000000000","message":"Add here \"DocImpact\" flag, if any documentation changes required.","commit_id":"fb614d5f26e19c7004da7353c2a144b8c00d4556"}],"openstack_dashboard/api/ceilometer.py":[{"author":{"_account_id":9647,"name":"Justin Pomeroy","email":"jpomero@linux.vnet.ibm.com","username":"jpomero"},"change_message_id":"b8e894fa96f2e84e81a016b1216a80ff00375d25","unresolved":false,"context_lines":[{"line_number":281,"context_line":"              \u0027type\u0027, \u0027severity\u0027, \u0027combination_rule\u0027,"},{"line_number":282,"context_line":"              \u0027threshold_rule\u0027]"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def __init__(self, apiresouce, ceilometer_usage\u003dNone):"},{"line_number":285,"context_line":"        super(Alarm, self).__init__(apiresouce)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        if ceilometer_usage and self.project_id:"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_a673014d","line":284,"updated":"2015-08-27 02:32:23.000000000","message":"I assume this is meant to be \"apiresource\" and is just a typo.","commit_id":"a38bf16a68e206456d35a9c9329ee6f882598027"},{"author":{"_account_id":9647,"name":"Justin Pomeroy","email":"jpomero@linux.vnet.ibm.com","username":"jpomero"},"change_message_id":"b8e894fa96f2e84e81a016b1216a80ff00375d25","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":"def alarm_list(request, query\u003dNone, ceilometer_usage\u003dNone):"},{"line_number":324,"context_line":"    \"\"\"List of Alarms\"\"\""},{"line_number":325,"context_line":"    alarms \u003d ceilometerclient(request).\\"},{"line_number":326,"context_line":"        alarms.list(q\u003dquery)"},{"line_number":327,"context_line":"    return [Alarm(alarm, ceilometer_usage) for alarm in alarms]"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_4604657d","line":325,"updated":"2015-08-27 02:32:23.000000000","message":"This technically works and pep8 doesn\u0027t yell at you but I think it\u0027s preferred to wrap long lines with parenthesis and not a backslash.  There are several occurrences of this.\n\nhttp://docs.openstack.org/developer/hacking/","commit_id":"a38bf16a68e206456d35a9c9329ee6f882598027"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"d62f47bd693499c8f23d95c15a492efbd2cc7b3f","unresolved":false,"context_lines":[{"line_number":292,"context_line":"        if ceilometer_usage and self.user_id:"},{"line_number":293,"context_line":"            self._user \u003d ceilometer_usage.get_user(self.user_id)"},{"line_number":294,"context_line":"        else:"},{"line_number":295,"context_line":"            self._user \u003d None"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"    @property"},{"line_number":298,"context_line":"    def id(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_b28f5a22","line":295,"updated":"2015-12-01 23:05:49.000000000","message":"nit: can we set\n\nself._tenant \u003d None\nself._user \u003d None \n\nabove the if statements, and then we don\u0027t need the elses :)","commit_id":"ab878a9ac9c7c3de0a77768b45336090235e66fd"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"d62f47bd693499c8f23d95c15a492efbd2cc7b3f","unresolved":false,"context_lines":[{"line_number":323,"context_line":"def alarm_list(request, query\u003dNone, ceilometer_usage\u003dNone):"},{"line_number":324,"context_line":"    \"\"\"List of Alarms\"\"\""},{"line_number":325,"context_line":"    alarms \u003d (ceilometerclient(request)."},{"line_number":326,"context_line":"              alarms.list(q\u003dquery))"},{"line_number":327,"context_line":"    return [Alarm(alarm, ceilometer_usage) for alarm in alarms]"},{"line_number":328,"context_line":""},{"line_number":329,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_52694e24","line":326,"updated":"2015-12-01 23:05:49.000000000","message":"this does not need to spread across 2 lines","commit_id":"ab878a9ac9c7c3de0a77768b45336090235e66fd"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"d62f47bd693499c8f23d95c15a492efbd2cc7b3f","unresolved":false,"context_lines":[{"line_number":330,"context_line":"def alarm_get(request, alarm_id, ceilometer_usage\u003dNone):"},{"line_number":331,"context_line":"    \"\"\"Get an Alarm.\"\"\""},{"line_number":332,"context_line":"    alarm \u003d (ceilometerclient(request)."},{"line_number":333,"context_line":"             alarms.get(alarm_id))"},{"line_number":334,"context_line":"    return Alarm(alarm, ceilometer_usage)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_b260ba36","line":333,"updated":"2015-12-01 23:05:49.000000000","message":"ditto","commit_id":"ab878a9ac9c7c3de0a77768b45336090235e66fd"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"d62f47bd693499c8f23d95c15a492efbd2cc7b3f","unresolved":false,"context_lines":[{"line_number":337,"context_line":"def alarm_update(request, alarm_id, ceilometer_usage\u003dNone, **kwargs):"},{"line_number":338,"context_line":"    \"\"\"Update an Alarm.\"\"\""},{"line_number":339,"context_line":"    alarm \u003d (ceilometerclient(request)."},{"line_number":340,"context_line":"             alarms.update(alarm_id, **kwargs))"},{"line_number":341,"context_line":"    return Alarm(alarm, ceilometer_usage)"},{"line_number":342,"context_line":""},{"line_number":343,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_d263fe3f","line":340,"updated":"2015-12-01 23:05:49.000000000","message":"ditto","commit_id":"ab878a9ac9c7c3de0a77768b45336090235e66fd"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"d62f47bd693499c8f23d95c15a492efbd2cc7b3f","unresolved":false,"context_lines":[{"line_number":344,"context_line":"def alarm_delete(request, alarm_id):"},{"line_number":345,"context_line":"    \"\"\"Delete an Alarm.\"\"\""},{"line_number":346,"context_line":"    (ceilometerclient(request)."},{"line_number":347,"context_line":"        alarms.delete(alarm_id))"},{"line_number":348,"context_line":""},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"def create_combination_alarm(request, combination_rule,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_725a5285","line":347,"updated":"2015-12-01 23:05:49.000000000","message":"ditto","commit_id":"ab878a9ac9c7c3de0a77768b45336090235e66fd"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"d62f47bd693499c8f23d95c15a492efbd2cc7b3f","unresolved":false,"context_lines":[{"line_number":360,"context_line":"def create_threshold_alarm(request, ceilometer_usage\u003dNone, **kwargs):"},{"line_number":361,"context_line":"    \"\"\"Create Threshold Alarm.\"\"\""},{"line_number":362,"context_line":"    alarm \u003d (ceilometerclient(request)."},{"line_number":363,"context_line":"             alarms.create(**kwargs))"},{"line_number":364,"context_line":"    return Alarm(alarm, ceilometer_usage)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"9a8ffd7b_52506e5e","line":363,"updated":"2015-12-01 23:05:49.000000000","message":"ditto","commit_id":"ab878a9ac9c7c3de0a77768b45336090235e66fd"},{"author":{"_account_id":10442,"name":"Masco Kaliyamoorthy","email":"mkaliyam@redhat.com","username":"masco"},"change_message_id":"29283a5b8148e7f64a566d12de11db27c0ef2ee3","unresolved":false,"context_lines":[{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def __init__(self, apiresource, ceilometer_usage\u003dNone):"},{"line_number":281,"context_line":"        super(Alarm, self).__init__(apiresource)"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        if ceilometer_usage and self.project_id:"},{"line_number":284,"context_line":"            self._tenant \u003d ceilometer_usage.get_tenant(self.project_id)"},{"line_number":285,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_ffe6a042","line":282,"updated":"2016-01-06 10:04:03.000000000","message":"define the the _user and _tenant here. so we can avoid the else case at line #285 and 290.","commit_id":"311b9402a7d8106ca27a806fd26db280e5d45020"},{"author":{"_account_id":10442,"name":"Masco Kaliyamoorthy","email":"mkaliyam@redhat.com","username":"masco"},"change_message_id":"29283a5b8148e7f64a566d12de11db27c0ef2ee3","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"def alarm_list(request, query\u003dNone, ceilometer_usage\u003dNone):"},{"line_number":320,"context_line":"    \"\"\"List of Alarms\"\"\""},{"line_number":321,"context_line":"    alarms \u003d (ceilometerclient(request).alarms.list(q\u003dquery))"},{"line_number":322,"context_line":"    return [Alarm(alarm, ceilometer_usage) for alarm in alarms]"},{"line_number":323,"context_line":""},{"line_number":324,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_bf77c89e","line":321,"range":{"start_line":321,"start_character":13,"end_line":321,"end_character":61},"updated":"2016-01-06 10:04:03.000000000","message":"nit: why this line covered by brackets \"()\"?","commit_id":"311b9402a7d8106ca27a806fd26db280e5d45020"},{"author":{"_account_id":10442,"name":"Masco Kaliyamoorthy","email":"mkaliyam@redhat.com","username":"masco"},"change_message_id":"29283a5b8148e7f64a566d12de11db27c0ef2ee3","unresolved":false,"context_lines":[{"line_number":324,"context_line":""},{"line_number":325,"context_line":"def alarm_get(request, alarm_id, ceilometer_usage\u003dNone):"},{"line_number":326,"context_line":"    \"\"\"Get an Alarm.\"\"\""},{"line_number":327,"context_line":"    alarm \u003d (ceilometerclient(request).alarms.get(alarm_id))"},{"line_number":328,"context_line":"    return Alarm(alarm, ceilometer_usage)"},{"line_number":329,"context_line":""},{"line_number":330,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_df7abc87","line":327,"range":{"start_line":327,"start_character":12,"end_line":327,"end_character":60},"updated":"2016-01-06 10:04:03.000000000","message":"nit: why this line covered by brackets \"()\"?","commit_id":"311b9402a7d8106ca27a806fd26db280e5d45020"},{"author":{"_account_id":10442,"name":"Masco Kaliyamoorthy","email":"mkaliyam@redhat.com","username":"masco"},"change_message_id":"29283a5b8148e7f64a566d12de11db27c0ef2ee3","unresolved":false,"context_lines":[{"line_number":330,"context_line":""},{"line_number":331,"context_line":"def alarm_update(request, alarm_id, ceilometer_usage\u003dNone, **kwargs):"},{"line_number":332,"context_line":"    \"\"\"Update an Alarm.\"\"\""},{"line_number":333,"context_line":"    alarm \u003d (ceilometerclient(request).alarms.update(alarm_id, **kwargs))"},{"line_number":334,"context_line":"    return Alarm(alarm, ceilometer_usage)"},{"line_number":335,"context_line":""},{"line_number":336,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_5f124c58","line":333,"range":{"start_line":333,"start_character":12,"end_line":333,"end_character":73},"updated":"2016-01-06 10:04:03.000000000","message":"nit: why this line covered by brackets \"()\"?","commit_id":"311b9402a7d8106ca27a806fd26db280e5d45020"},{"author":{"_account_id":10442,"name":"Masco Kaliyamoorthy","email":"mkaliyam@redhat.com","username":"masco"},"change_message_id":"29283a5b8148e7f64a566d12de11db27c0ef2ee3","unresolved":false,"context_lines":[{"line_number":336,"context_line":""},{"line_number":337,"context_line":"def alarm_delete(request, alarm_id):"},{"line_number":338,"context_line":"    \"\"\"Delete an Alarm.\"\"\""},{"line_number":339,"context_line":"    (ceilometerclient(request).alarms.delete(alarm_id))"},{"line_number":340,"context_line":""},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"def create_combination_alarm(request, combination_rule,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_df05dc10","line":339,"updated":"2016-01-06 10:04:03.000000000","message":"nit: why this line covered by brackets \"()\"?","commit_id":"311b9402a7d8106ca27a806fd26db280e5d45020"},{"author":{"_account_id":10442,"name":"Masco Kaliyamoorthy","email":"mkaliyam@redhat.com","username":"masco"},"change_message_id":"29283a5b8148e7f64a566d12de11db27c0ef2ee3","unresolved":false,"context_lines":[{"line_number":351,"context_line":""},{"line_number":352,"context_line":"def create_threshold_alarm(request, ceilometer_usage\u003dNone, **kwargs):"},{"line_number":353,"context_line":"    \"\"\"Create Threshold Alarm.\"\"\""},{"line_number":354,"context_line":"    alarm \u003d (ceilometerclient(request).alarms.create(**kwargs))"},{"line_number":355,"context_line":"    return Alarm(alarm, ceilometer_usage)"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa69d971_7f6dd0ca","line":354,"range":{"start_line":354,"start_character":12,"end_line":354,"end_character":63},"updated":"2016-01-06 10:04:03.000000000","message":"nit: why this line covered by brackets \"()\"?","commit_id":"311b9402a7d8106ca27a806fd26db280e5d45020"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"982178633468f4dbd42df1ebc2a9c96f8de10df7","unresolved":false,"context_lines":[{"line_number":275,"context_line":"              \u0027state\u0027, \u0027insufficient_data_actions\u0027,"},{"line_number":276,"context_line":"              \u0027repeat_actions\u0027, \u0027user_id\u0027, \u0027project_id\u0027,"},{"line_number":277,"context_line":"              \u0027type\u0027, \u0027severity\u0027, \u0027combination_rule\u0027,"},{"line_number":278,"context_line":"              \u0027threshold_rule\u0027]"},{"line_number":279,"context_line":""},{"line_number":280,"context_line":"    def __init__(self, apiresource, ceilometer_usage\u003dNone):"},{"line_number":281,"context_line":"        super(Alarm, self).__init__(apiresource)"}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_121d7266","line":278,"updated":"2016-01-11 23:18:21.000000000","message":"threshold_rule and combination_rule are mutually exclusive. i don\u0027t know if that matters here.\n\nthere are other attributes like threshold, query, period, statistic, etc...\n\nhttps://review.openstack.org/#/c/263887/5/aodhclient/v2/alarm_cli.py","commit_id":"6a6c14074d673823bc87742b45ef51ccc369ab8b"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"982178633468f4dbd42df1ebc2a9c96f8de10df7","unresolved":false,"context_lines":[{"line_number":337,"context_line":"    ceilometerclient(request).alarms.delete(alarm_id)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":""},{"line_number":340,"context_line":"def create_combination_alarm(request, combination_rule,"},{"line_number":341,"context_line":"                             ceilometer_usage\u003dNone, **kwargs):"},{"line_number":342,"context_line":"    \"\"\"Create Combination Alarm.\"\"\""},{"line_number":343,"context_line":"    alarm \u003d ceilometerclient(request).alarms.create("}],"source_content_type":"text/x-python","patch_set":8,"id":"da6ed579_ef3555f7","line":340,"updated":"2016-01-11 23:18:21.000000000","message":"this most likely is going to be deprecated this cycle[1]. something to consider\n\n[1] http://specs.openstack.org/openstack/ceilometer-specs/specs/mitaka/composite-threshold-rule-alarm.html","commit_id":"6a6c14074d673823bc87742b45ef51ccc369ab8b"},{"author":{"_account_id":9622,"name":"Cindy Lu","email":"clu@us.ibm.com","username":"clu14"},"change_message_id":"7f18a720cc5fe6ca2588ce33774cb2382af78257","unresolved":false,"context_lines":[{"line_number":275,"context_line":"              \u0027state\u0027, \u0027insufficient_data_actions\u0027,"},{"line_number":276,"context_line":"              \u0027repeat_actions\u0027, \u0027user_id\u0027, \u0027project_id\u0027,"},{"line_number":277,"context_line":"              \u0027type\u0027, \u0027severity\u0027, \u0027threshold_rule\u0027, \u0027period\u0027, \u0027query\u0027,"},{"line_number":278,"context_line":"              \u0027evaluation_periods\u0027, \u0027statistics\u0027, \u0027meter_name\u0027,"},{"line_number":279,"context_line":"              \u0027threshold\u0027, \u0027comparison_operator\u0027]"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def __init__(self, apiresource, ceilometer_usage\u003dNone):"}],"source_content_type":"text/x-python","patch_set":9,"id":"da6ed579_c8f410f2","line":278,"updated":"2016-01-15 18:15:05.000000000","message":"statistic?","commit_id":"3d1b06262df1b260d8484f5e9b66435502459519"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c36f114332fb11852d92217ab9b997f1236e7cea","unresolved":false,"context_lines":[{"line_number":268,"context_line":""},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"class Alarm(base.APIResourceWrapper):"},{"line_number":271,"context_line":"    \"\"\"Represents one Ceilometer Alarm.\"\"\""},{"line_number":272,"context_line":"    _attrs \u003d [\u0027alarm_actions\u0027, \u0027ok_actions\u0027, \u0027name\u0027,"},{"line_number":273,"context_line":"              \u0027timestamp\u0027, \u0027description\u0027, \u0027time_constraints\u0027,"},{"line_number":274,"context_line":"              \u0027enabled\u0027, \u0027state_timestamp\u0027, \u0027alarm_id\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_dec80e77","line":271,"range":{"start_line":271,"start_character":33,"end_line":271,"end_character":38},"updated":"2016-01-21 10:20:50.000000000","message":"there is no need to use a capitalized version.","commit_id":"d3dae29a8f6d0e77faddf4657e1fba155b4f22f1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c36f114332fb11852d92217ab9b997f1236e7cea","unresolved":false,"context_lines":[{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def __init__(self, apiresource, ceilometer_usage\u003dNone):"},{"line_number":282,"context_line":"        super(Alarm, self).__init__(apiresource)"},{"line_number":283,"context_line":"        self._tenant \u003d None"},{"line_number":284,"context_line":"        self._user \u003d None"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        if ceilometer_usage and self.project_id:"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_feaab26f","line":283,"range":{"start_line":283,"start_character":8,"end_line":283,"end_character":21},"updated":"2016-01-21 10:20:50.000000000","message":"self._project","commit_id":"d3dae29a8f6d0e77faddf4657e1fba155b4f22f1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c36f114332fb11852d92217ab9b997f1236e7cea","unresolved":false,"context_lines":[{"line_number":294,"context_line":"        return self.alarm_id"},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"    @property"},{"line_number":297,"context_line":"    def tenant(self):"},{"line_number":298,"context_line":"        return self._tenant"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    @property"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_1e21c64d","line":297,"range":{"start_line":297,"start_character":8,"end_line":297,"end_character":14},"updated":"2016-01-21 10:20:50.000000000","message":"In Horizon, we use \u0027project\u0027 rather than \u0027tenant\u0027.\nIt is better to use \u0027project\u0027 in api/ceilometer.py.","commit_id":"d3dae29a8f6d0e77faddf4657e1fba155b4f22f1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c36f114332fb11852d92217ab9b997f1236e7cea","unresolved":false,"context_lines":[{"line_number":316,"context_line":""},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"def alarm_list(request, query\u003dNone, ceilometer_usage\u003dNone):"},{"line_number":319,"context_line":"    \"\"\"List of Alarms\"\"\""},{"line_number":320,"context_line":"    alarms \u003d ceilometerclient(request).alarms.list(q\u003dquery)"},{"line_number":321,"context_line":"    return [Alarm(alarm, ceilometer_usage) for alarm in alarms]"},{"line_number":322,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_dec48e41","line":319,"range":{"start_line":319,"start_character":7,"end_line":319,"end_character":21},"updated":"2016-01-21 10:20:50.000000000","message":"List alarms","commit_id":"d3dae29a8f6d0e77faddf4657e1fba155b4f22f1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c36f114332fb11852d92217ab9b997f1236e7cea","unresolved":false,"context_lines":[{"line_number":322,"context_line":""},{"line_number":323,"context_line":""},{"line_number":324,"context_line":"def alarm_get(request, alarm_id, ceilometer_usage\u003dNone):"},{"line_number":325,"context_line":"    \"\"\"Get an Alarm.\"\"\""},{"line_number":326,"context_line":"    alarm \u003d ceilometerclient(request).alarms.get(alarm_id)"},{"line_number":327,"context_line":"    return Alarm(alarm, ceilometer_usage)"},{"line_number":328,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_3ecfea57","line":325,"range":{"start_line":325,"start_character":14,"end_line":325,"end_character":19},"updated":"2016-01-21 10:20:50.000000000","message":"-\u003e alarm","commit_id":"d3dae29a8f6d0e77faddf4657e1fba155b4f22f1"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c36f114332fb11852d92217ab9b997f1236e7cea","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    ceilometerclient(request).alarms.delete(alarm_id)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"def create_threshold_alarm(request, ceilometer_usage\u003dNone, **kwargs):"},{"line_number":342,"context_line":"    \"\"\"Create Threshold Alarm.\"\"\""},{"line_number":343,"context_line":"    alarm \u003d ceilometerclient(request).alarms.create(**kwargs)"},{"line_number":344,"context_line":"    return Alarm(alarm, ceilometer_usage)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_feef12ae","line":341,"range":{"start_line":341,"start_character":4,"end_line":341,"end_character":26},"updated":"2016-01-21 10:20:50.000000000","message":"Why not alarm_create?\n\nThe corresponding API of ceilometerclient is alarms.create().","commit_id":"d3dae29a8f6d0e77faddf4657e1fba155b4f22f1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"cdf0060e378df6ef2bb875b745d0c707d8812965","unresolved":false,"context_lines":[{"line_number":338,"context_line":"    ceilometerclient(request).alarms.delete(alarm_id)"},{"line_number":339,"context_line":""},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"def create_threshold_alarm(request, ceilometer_usage\u003dNone, **kwargs):"},{"line_number":342,"context_line":"    \"\"\"Create Threshold Alarm.\"\"\""},{"line_number":343,"context_line":"    alarm \u003d ceilometerclient(request).alarms.create(**kwargs)"},{"line_number":344,"context_line":"    return Alarm(alarm, ceilometer_usage)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_63e36b34","line":341,"range":{"start_line":341,"start_character":4,"end_line":341,"end_character":26},"in_reply_to":"9a68dd71_feef12ae","updated":"2016-01-21 18:56:36.000000000","message":"good catch! I agree alarm_create is more consistent.","commit_id":"d3dae29a8f6d0e77faddf4657e1fba155b4f22f1"}],"openstack_dashboard/test/api_tests/ceilometer_tests.py":[{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"29acffdaf8e3e1715d93273e901ba7aaa878e674","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from django import http"},{"line_number":16,"context_line":"from mox3.mox import IsA  # noqa"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from ceilometerclient.v2.alarms import Alarm"},{"line_number":19,"context_line":"from openstack_dashboard import api"},{"line_number":20,"context_line":"from openstack_dashboard.test import helpers as test"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"fa69d971_3302fa0c","line":18,"updated":"2016-01-07 11:30:47.000000000","message":"move this import in the same group as mox3 (third party libs)","commit_id":"6a6c14074d673823bc87742b45ef51ccc369ab8b"},{"author":{"_account_id":15425,"name":"Pranay","email":"pranayverma0485@gmail.com","username":"Pranay"},"change_message_id":"b9b663613341dac992315e549bdcff622f1ffa07","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                                      limit\u003dNone).AndReturn(samples)"},{"line_number":32,"context_line":"        self.mox.ReplayAll()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        ret_list \u003d api.ceilometer.sample_list(self.request,"},{"line_number":35,"context_line":"                                              meter_name,"},{"line_number":36,"context_line":"                                              query\u003d[])"},{"line_number":37,"context_line":"        for c in ret_list:"},{"line_number":38,"context_line":"            self.assertIsInstance(c, api.ceilometer.Sample)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba63e191_35b11e48","line":36,"range":{"start_line":34,"start_character":7,"end_line":36,"end_character":55},"updated":"2016-01-20 05:26:01.000000000","message":"Rob\u0027s comment on handling errors for an API call is valid here as well, it will be great if you can take care of making the changes together.","commit_id":"85ff572f918c510817d987256ab314db82b9ed84"},{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"75c76df21203f46d6f748ff804f62b1afd9188f3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"                                      limit\u003dNone).AndReturn(samples)"},{"line_number":32,"context_line":"        self.mox.ReplayAll()"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"        ret_list \u003d api.ceilometer.sample_list(self.request,"},{"line_number":35,"context_line":"                                              meter_name,"},{"line_number":36,"context_line":"                                              query\u003d[])"},{"line_number":37,"context_line":"        for c in ret_list:"},{"line_number":38,"context_line":"            self.assertIsInstance(c, api.ceilometer.Sample)"},{"line_number":39,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba63e191_98b7d6d7","line":36,"range":{"start_line":34,"start_character":7,"end_line":36,"end_character":55},"in_reply_to":"ba63e191_35b11e48","updated":"2016-01-20 10:44:05.000000000","message":"This should be done in a separate patch, not wrapping them together.","commit_id":"85ff572f918c510817d987256ab314db82b9ed84"},{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"0f902b1bbf6e8522495abbaf6ead5c126c5058f0","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.mox.ReplayAll()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        ret_list \u003d api.ceilometer.alarm_list(self.request, query\u003d[])"},{"line_number":48,"context_line":"        for c in ret_list:"},{"line_number":49,"context_line":"            self.assertIsInstance(c, api.ceilometer.Alarm)"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def test_alarm_get(self):"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba63e191_aee2dc9d","line":48,"updated":"2016-01-19 10:26:56.000000000","message":"if ret_list is empty, wouldn\u0027t this pass anyway? It verifies the API call, but the API could fail completely and an empty list would pass your assertion.","commit_id":"85ff572f918c510817d987256ab314db82b9ed84"},{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"0f902b1bbf6e8522495abbaf6ead5c126c5058f0","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        alarm \u003d self.alarms.get(alarm_id\u003d\u0027fake_alarm_id\u0027)"},{"line_number":53,"context_line":"        ceilometerclient \u003d self.stub_ceilometerclient()"},{"line_number":54,"context_line":"        ceilometerclient.alarms \u003d self.mox.CreateMockAnything()"},{"line_number":55,"context_line":"        ceilometerclient.alarms.get(\u0027fake_alarm_id\u0027).AndReturn(alarm)"},{"line_number":56,"context_line":"        self.mox.ReplayAll()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        ret_alarm \u003d api.ceilometer.alarm_get(self.request,"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba63e191_c14b612a","line":55,"updated":"2016-01-19 10:26:56.000000000","message":"This should be mocked out with the proper patterns. Have a look at the vpnaas API tests.","commit_id":"85ff572f918c510817d987256ab314db82b9ed84"},{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"0f902b1bbf6e8522495abbaf6ead5c126c5058f0","unresolved":false,"context_lines":[{"line_number":84,"context_line":"                 \u0027type\u0027: \u0027threshold\u0027,"},{"line_number":85,"context_line":"                 \u0027severity\u0027: \u0027low\u0027}"},{"line_number":86,"context_line":"        new_alarm \u003d Alarm(self, alarm)"},{"line_number":87,"context_line":"        self.alarms.create(**alarm)"},{"line_number":88,"context_line":"        ceilometerclient \u003d self.stub_ceilometerclient()"},{"line_number":89,"context_line":"        ceilometerclient.alarms \u003d self.mox.CreateMockAnything()"},{"line_number":90,"context_line":"        ceilometerclient.alarms.create(**alarm).AndReturn(new_alarm)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba63e191_01f3b90b","line":87,"updated":"2016-01-19 10:26:56.000000000","message":"I\u0027m confused by this. Why do we need to create a new alarm in the test data? You can just check that the returned alarm from the API call matches values/ types that you would expect.","commit_id":"85ff572f918c510817d987256ab314db82b9ed84"},{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"0f902b1bbf6e8522495abbaf6ead5c126c5058f0","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        ceilometerclient \u003d self.stub_ceilometerclient()"},{"line_number":114,"context_line":"        ceilometerclient.alarms \u003d self.mox.CreateMockAnything()"},{"line_number":115,"context_line":"        self.mox.ReplayAll()"},{"line_number":116,"context_line":"        update_alarm \u003d self.alarms.get(alarm_id\u003d\"fake_alarm_id\")"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        self.assertEqual(alarm, update_alarm)"},{"line_number":119,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba63e191_aeee5cea","line":116,"range":{"start_line":116,"start_character":8,"end_line":116,"end_character":64},"updated":"2016-01-19 10:26:56.000000000","message":"Aren\u0027t alarm and update_alarm the same initial object? This seems like even if the updates all failed, the assertion would still pass.","commit_id":"85ff572f918c510817d987256ab314db82b9ed84"},{"author":{"_account_id":15425,"name":"Pranay","email":"pranayverma0485@gmail.com","username":"Pranay"},"change_message_id":"b9b663613341dac992315e549bdcff622f1ffa07","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        ceilometerclient.meters.list([]).AndReturn(meters)"},{"line_number":131,"context_line":"        self.mox.ReplayAll()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        ret_list \u003d api.ceilometer.meter_list(self.request, [])"},{"line_number":134,"context_line":"        for m in ret_list:"},{"line_number":135,"context_line":"            self.assertIsInstance(m, api.ceilometer.Meter)"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba63e191_b5eaee0d","line":133,"range":{"start_line":133,"start_character":8,"end_line":133,"end_character":62},"updated":"2016-01-20 05:26:01.000000000","message":"ditto: Need to handle API errors","commit_id":"85ff572f918c510817d987256ab314db82b9ed84"},{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"75c76df21203f46d6f748ff804f62b1afd9188f3","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        ceilometerclient.meters.list([]).AndReturn(meters)"},{"line_number":131,"context_line":"        self.mox.ReplayAll()"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        ret_list \u003d api.ceilometer.meter_list(self.request, [])"},{"line_number":134,"context_line":"        for m in ret_list:"},{"line_number":135,"context_line":"            self.assertIsInstance(m, api.ceilometer.Meter)"},{"line_number":136,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"ba63e191_d8c54e3c","line":133,"range":{"start_line":133,"start_character":8,"end_line":133,"end_character":62},"in_reply_to":"ba63e191_b5eaee0d","updated":"2016-01-20 10:44:05.000000000","message":"This should be done separately","commit_id":"85ff572f918c510817d987256ab314db82b9ed84"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"f216d963bf8e17127b24aef5439eccc7c7940785","unresolved":false,"context_lines":[{"line_number":61,"context_line":"        self.assertEqual(ret_alarm.alarm_id, alarm.alarm_id)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def test_alarm_threshold_create(self):"},{"line_number":64,"context_line":"        alarm \u003d {\u0027alarm_actions\u0027: [\u0027alarm_action1\u0027, \u0027alarm_action2\u0027],"},{"line_number":65,"context_line":"                 \u0027ok_actions\u0027: [\u0027ok_action_1\u0027, \u0027ok_action_2\u0027],"},{"line_number":66,"context_line":"                 \u0027name\u0027: \u0027fake_alarm_name4\u0027,"},{"line_number":67,"context_line":"                 \u0027timestamp\u0027: \u00272015-08-07T05:32:20.970341\u0027,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a68dd71_5bd995f2","line":64,"updated":"2016-01-21 05:51:41.000000000","message":"looks pretty similar to the data in ceilometer_data.py,  re-use that instead?","commit_id":"990b49177733583e423768a9df023f890179b040"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"c36f114332fb11852d92217ab9b997f1236e7cea","unresolved":false,"context_lines":[{"line_number":45,"context_line":"        self.mox.ReplayAll()"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        ret_list \u003d api.ceilometer.alarm_list(self.request, query\u003d[])"},{"line_number":48,"context_line":"        self.assertIsNotNone(ret_list)"},{"line_number":49,"context_line":"        for c in ret_list:"},{"line_number":50,"context_line":"            self.assertIsInstance(c, api.ceilometer.Alarm)"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_fe4b92ae","line":48,"range":{"start_line":48,"start_character":13,"end_line":48,"end_character":28},"updated":"2016-01-21 10:20:50.000000000","message":"Why is asseertIsNotNone used?\napi.ceilometer.alarm_list always returns a list.\nInstead I would suggest to check the length is okay.\n\n  self.assertEqual(len(alarms), len(ret_list))","commit_id":"d3dae29a8f6d0e77faddf4657e1fba155b4f22f1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"cdf0060e378df6ef2bb875b745d0c707d8812965","unresolved":false,"context_lines":[{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        ret_alarm \u003d api.ceilometer.alarm_get(self.request,"},{"line_number":60,"context_line":"                                             alarm_id\u003d\u0027fake_alarm_id\u0027)"},{"line_number":61,"context_line":"        self.assertEqual(ret_alarm.alarm_id, alarm.alarm_id)"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def test_alarm_threshold_create(self):"},{"line_number":64,"context_line":"        alarm \u003d self.alarms.first()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_c341f70c","line":61,"updated":"2016-01-21 18:56:36.000000000","message":"first argument is the expected value, switch this two","commit_id":"d3dae29a8f6d0e77faddf4657e1fba155b4f22f1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"cdf0060e378df6ef2bb875b745d0c707d8812965","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.mox.ReplayAll()"},{"line_number":70,"context_line":"        test_alarm \u003d api.ceilometer.create_threshold_alarm(self.request,"},{"line_number":71,"context_line":"                                                           **new_alarm)"},{"line_number":72,"context_line":"        self.assertEqual(test_alarm.alarm_id, alarm.alarm_id)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def test_alarm_update(self):"},{"line_number":75,"context_line":"        \"\"\"test update parameters\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_035f0fe6","line":72,"updated":"2016-01-21 18:56:36.000000000","message":"first argument is the expected value","commit_id":"d3dae29a8f6d0e77faddf4657e1fba155b4f22f1"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"cdf0060e378df6ef2bb875b745d0c707d8812965","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        test_alarm \u003d api.ceilometer.alarm_update(self.request,"},{"line_number":85,"context_line":"                                                 alarm1.id,"},{"line_number":86,"context_line":"                                                 description\u003d\u0027New\u0027)"},{"line_number":87,"context_line":"        self.assertEqual(test_alarm.description, alarm2.description)"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"    def test_meter_list(self):"},{"line_number":90,"context_line":"        meters \u003d self.meters.list()"}],"source_content_type":"text/x-python","patch_set":14,"id":"9a68dd71_8373ff7f","line":87,"updated":"2016-01-21 18:56:36.000000000","message":"first argument is the expected value","commit_id":"d3dae29a8f6d0e77faddf4657e1fba155b4f22f1"}],"openstack_dashboard/test/test_data/utils.py":[{"author":{"_account_id":9647,"name":"Justin Pomeroy","email":"jpomero@linux.vnet.ibm.com","username":"jpomero"},"change_message_id":"b8e894fa96f2e84e81a016b1216a80ff00375d25","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                self._objects.append(obj)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def delete(self, **kwargs):"},{"line_number":97,"context_line":"        \"\"\"First Gets the alarm and then removes it from List.\"\"\""},{"line_number":98,"context_line":"        obj \u003d self.get(**kwargs)"},{"line_number":99,"context_line":"        self._objects.remove(obj)"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_46eea58c","line":97,"updated":"2015-08-27 02:32:23.000000000","message":"This is generic to any object right, not just alarms?","commit_id":"a38bf16a68e206456d35a9c9329ee6f882598027"},{"author":{"_account_id":9647,"name":"Justin Pomeroy","email":"jpomero@linux.vnet.ibm.com","username":"jpomero"},"change_message_id":"b8e894fa96f2e84e81a016b1216a80ff00375d25","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        return self._objects"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def update(self, alarm, **kwargs):"},{"line_number":106,"context_line":"        \"\"\"Updates the parametes of the alarm and Returns.\"\"\""},{"line_number":107,"context_line":"        for key, value in kwargs.iteritems():"},{"line_number":108,"context_line":"            if hasattr(alarm, key):"},{"line_number":109,"context_line":"                setattr(alarm, key, value)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da20952f_669ac916","line":106,"updated":"2015-08-27 02:32:23.000000000","message":"Like above, this is a general utils class for working with the test data and this method should not be specific to alarms.","commit_id":"a38bf16a68e206456d35a9c9329ee6f882598027"},{"author":{"_account_id":12826,"name":"Rob Cresswell","display_name":"robcresswell","email":"robert.cresswell@outlook.com","username":"rob-cresswell"},"change_message_id":"0f902b1bbf6e8522495abbaf6ead5c126c5058f0","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        for key, value in six.iteritems(kwargs):"},{"line_number":113,"context_line":"            if hasattr(obj, key):"},{"line_number":114,"context_line":"                setattr(obj, key, value)"},{"line_number":115,"context_line":"        return obj"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    def filter(self, filtered\u003dNone, **kwargs):"},{"line_number":118,"context_line":"        \"\"\"Returns objects in this container whose attributes match the given"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba63e191_610ab5d4","line":115,"updated":"2016-01-19 10:26:56.000000000","message":"I don\u0027t think most of this file is really necessary. There are multiple others API test files, and we should just use the existing patterns rather than establishing new ones.","commit_id":"85ff572f918c510817d987256ab314db82b9ed84"}]}
