)]}'
{"monasca/common/repositories/mysql/alarms_repository.py":[{"author":{"_account_id":12512,"name":"Deklan Dieterly","email":"deklan.dieterly@hpe.com","username":"deklan"},"change_message_id":"c2cf3e98030579858d2260e06e157e5de54e56af","unresolved":false,"context_lines":[{"line_number":253,"context_line":"        if \u0027link\u0027 in query_parms:"},{"line_number":254,"context_line":"            parms.append(query_parms[\u0027link\u0027].encode(\u0027utf8\u0027))"},{"line_number":255,"context_line":"            where_clause +\u003d \" and a.link \u003d %s\""},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        if \u0027metric_dimensions\u0027 in query_parms:"},{"line_number":258,"context_line":"            sub_select_clause \u003d \"\"\""},{"line_number":259,"context_line":"                and a.id in (select distinct a.id from alarm as a"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_18239c57","line":256,"updated":"2015-06-01 14:54:34.000000000","message":"need the stateupdatedstart stuff.","commit_id":"e1110dddae28fc4e1a36f8b1c2cab9330aeb63d6"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"e1816df1505c022d8692566b4038908b4c2f031e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    @mysql_repository.mysql_try_catch_block"},{"line_number":113,"context_line":"    def update_alarm(self, tenant_id, id, state, lifecycle_state, link):"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        cnxn, cursor \u003d self._get_cnxn_cursor_tuple()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        with cnxn:"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_0befa1b1","line":115,"updated":"2015-06-01 16:28:52.000000000","message":"It looks like it\u0027s possible for state, lifecycle_state, and link to be None here.  Is that a problem for the query?","commit_id":"0047c5e6e8098a0573e0658a00fd9afbd00fdc32"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"e38eff7ad25e38193da5b04677523c01b4457388","unresolved":false,"context_lines":[{"line_number":112,"context_line":"    @mysql_repository.mysql_try_catch_block"},{"line_number":113,"context_line":"    def update_alarm(self, tenant_id, id, state, lifecycle_state, link):"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":"        cnxn, cursor \u003d self._get_cnxn_cursor_tuple()"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        with cnxn:"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_9f806b48","line":115,"in_reply_to":"5afe65bd_0befa1b1","updated":"2015-06-01 20:39:51.000000000","message":"This is intentional, if an alarm patch request contains no values, we still want to update the timestamp.","commit_id":"0047c5e6e8098a0573e0658a00fd9afbd00fdc32"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"e1816df1505c022d8692566b4038908b4c2f031e","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"            if state !\u003d prev_alarm[\u0027state\u0027]:"},{"line_number":151,"context_line":"                parms.append(state)"},{"line_number":152,"context_line":"                set_str +\u003d \",state \u003d %s, state_updated_at \u003d NOW()\""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"            parms.extend([tenant_id, id])"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_88ecb790","line":152,"updated":"2015-06-01 16:28:52.000000000","message":"Why not have this above the update_query so that we can do the format immediately rather than deferring it until the execute?","commit_id":"0047c5e6e8098a0573e0658a00fd9afbd00fdc32"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"e38eff7ad25e38193da5b04677523c01b4457388","unresolved":false,"context_lines":[{"line_number":149,"context_line":""},{"line_number":150,"context_line":"            if state !\u003d prev_alarm[\u0027state\u0027]:"},{"line_number":151,"context_line":"                parms.append(state)"},{"line_number":152,"context_line":"                set_str +\u003d \",state \u003d %s, state_updated_at \u003d NOW()\""},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"            parms.extend([tenant_id, id])"},{"line_number":155,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_c7e735ab","line":152,"in_reply_to":"5afe65bd_88ecb790","updated":"2015-06-01 20:39:51.000000000","message":"Done","commit_id":"0047c5e6e8098a0573e0658a00fd9afbd00fdc32"}],"monasca/v2/reference/alarms.py":[{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"e1816df1505c022d8692566b4038908b4c2f031e","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        helpers.validate_authorization(req, self._default_authorized_roles)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        tenant_id \u003d helpers.get_tenant_id(req)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        state, lifecycle_state, link \u003d \\"},{"line_number":68,"context_line":"            self._get_alarm_update_info(req, state_required\u003dTrue)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_abdc0d47","line":66,"updated":"2015-06-01 16:28:52.000000000","message":"Do we need any input validation here?","commit_id":"0047c5e6e8098a0573e0658a00fd9afbd00fdc32"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"5bad9268bd07fe2413f68d35668edb65d0a156da","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        helpers.validate_authorization(req, self._default_authorized_roles)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        tenant_id \u003d helpers.get_tenant_id(req)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        state, lifecycle_state, link \u003d \\"},{"line_number":68,"context_line":"            self._get_alarm_update_info(req, state_required\u003dTrue)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_e72fd1f4","line":66,"in_reply_to":"5afe65bd_71516362","updated":"2015-06-01 20:34:04.000000000","message":"After we get through the authentication filter I was under the impression that this is the first time the request is really seen by our code.  The other parts of the API that deal with input do the validation at this point.","commit_id":"0047c5e6e8098a0573e0658a00fd9afbd00fdc32"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"57c9a17cbb75abf2e7614f1152ba2904829b610f","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        helpers.validate_authorization(req, self._default_authorized_roles)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"        tenant_id \u003d helpers.get_tenant_id(req)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        state, lifecycle_state, link \u003d \\"},{"line_number":68,"context_line":"            self._get_alarm_update_info(req, state_required\u003dTrue)"},{"line_number":69,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_71516362","line":66,"in_reply_to":"5afe65bd_abdc0d47","updated":"2015-06-01 19:31:12.000000000","message":"The validation should be done at the resource level that calls this level","commit_id":"0047c5e6e8098a0573e0658a00fd9afbd00fdc32"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"e1816df1505c022d8692566b4038908b4c2f031e","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def do_patch_alarms(self, req, res, id):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        helpers.validate_authorization(req, self._default_authorized_roles)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        tenant_id \u003d helpers.get_tenant_id(req)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        state, lifecycle_state, link \u003d self._get_alarm_update_info(req)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_6be73513","line":81,"updated":"2015-06-01 16:28:52.000000000","message":"Do we need any input validation here?","commit_id":"0047c5e6e8098a0573e0658a00fd9afbd00fdc32"},{"author":{"_account_id":11809,"name":"Craig Bryant","email":"craig.bryant@hpe.com","username":"craig-bryant"},"change_message_id":"57c9a17cbb75abf2e7614f1152ba2904829b610f","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def do_patch_alarms(self, req, res, id):"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        helpers.validate_authorization(req, self._default_authorized_roles)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        tenant_id \u003d helpers.get_tenant_id(req)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        state, lifecycle_state, link \u003d self._get_alarm_update_info(req)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_ae989b6b","line":81,"in_reply_to":"5afe65bd_6be73513","updated":"2015-06-01 19:31:12.000000000","message":"See above","commit_id":"0047c5e6e8098a0573e0658a00fd9afbd00fdc32"},{"author":{"_account_id":14273,"name":"Joe Keen","email":"joe.keen@hpe.com","username":"jkeen"},"change_message_id":"e1816df1505c022d8692566b4038908b4c2f031e","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                raise falcon.HTTPBadRequest(\u0027Bad request\u0027, \u0027Invalid state\u0027)"},{"line_number":402,"context_line":"        else:"},{"line_number":403,"context_line":"            if state_required:"},{"line_number":404,"context_line":"                raise falcon.HTTPBadRequest(\u0027Bad request\u0027, \u0027State is required\u0027)"},{"line_number":405,"context_line":"        if \u0027lifecycle_state\u0027 in json_msg:"},{"line_number":406,"context_line":"            lifecycle_state \u003d json_msg[\u0027lifecycle_state\u0027]"},{"line_number":407,"context_line":"        if \u0027link\u0027 in json_msg:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_0bbb2110","line":404,"updated":"2015-06-01 16:28:52.000000000","message":"It looks like state is required on all put calls.  Why not detect the lack of state in the validation of the input rather than down here in a get method?","commit_id":"0047c5e6e8098a0573e0658a00fd9afbd00fdc32"},{"author":{"_account_id":14517,"name":"Ryan Brandt","email":"ryan.brandt@hpe.com","username":"ryan-brandt"},"change_message_id":"e38eff7ad25e38193da5b04677523c01b4457388","unresolved":false,"context_lines":[{"line_number":401,"context_line":"                raise falcon.HTTPBadRequest(\u0027Bad request\u0027, \u0027Invalid state\u0027)"},{"line_number":402,"context_line":"        else:"},{"line_number":403,"context_line":"            if state_required:"},{"line_number":404,"context_line":"                raise falcon.HTTPBadRequest(\u0027Bad request\u0027, \u0027State is required\u0027)"},{"line_number":405,"context_line":"        if \u0027lifecycle_state\u0027 in json_msg:"},{"line_number":406,"context_line":"            lifecycle_state \u003d json_msg[\u0027lifecycle_state\u0027]"},{"line_number":407,"context_line":"        if \u0027link\u0027 in json_msg:"}],"source_content_type":"text/x-python","patch_set":2,"id":"5afe65bd_a7ec3990","line":404,"in_reply_to":"5afe65bd_0bbb2110","updated":"2015-06-01 20:39:51.000000000","message":"Done","commit_id":"0047c5e6e8098a0573e0658a00fd9afbd00fdc32"}]}
