)]}'
{"aodh/notifier/__init__.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"786f63b1b367ef27544aa8abdfa93bd5ca807899","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        super(AlarmNotifierService, self).stop()"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def _handle_action(notifiers, action, alarm_id, alarm_name, severity,"},{"line_number":85,"context_line":"                   previous, current, reason, reason_data):"},{"line_number":86,"context_line":"    \"\"\"Process action on alarm"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    :param notifiers: list of possible notifiers."},{"line_number":89,"context_line":"    :param action: The action that is being attended, as a parsed URL."},{"line_number":90,"context_line":"    :param alarm_id: The triggered alarm."},{"line_number":91,"context_line":"    :param alarm_name: The name of triggered alarm."},{"line_number":92,"context_line":"    :param severity: The level of triggered alarm"},{"line_number":93,"context_line":"    :param previous: The previous state of the alarm."},{"line_number":94,"context_line":"    :param current: The current state of the alarm."},{"line_number":95,"context_line":"    :param reason: The reason the alarm changed its state."},{"line_number":96,"context_line":"    :param reason_data: A dict representation of the reason."},{"line_number":97,"context_line":"    \"\"\""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    try:"},{"line_number":100,"context_line":"        action \u003d netutils.urlsplit(action)"},{"line_number":101,"context_line":"    except Exception:"},{"line_number":102,"context_line":"        LOG.error("},{"line_number":103,"context_line":"            _(\"Unable to parse action %(action)s for alarm %(alarm_id)s\"),"},{"line_number":104,"context_line":"            {\u0027action\u0027: action, \u0027alarm_id\u0027: alarm_id})"},{"line_number":105,"context_line":"        return"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    try:"},{"line_number":108,"context_line":"        notifier \u003d notifiers[action.scheme].obj"},{"line_number":109,"context_line":"    except KeyError:"},{"line_number":110,"context_line":"        scheme \u003d action.scheme"},{"line_number":111,"context_line":"        LOG.error("},{"line_number":112,"context_line":"            _(\"Action %(scheme)s for alarm %(alarm_id)s is unknown, \""},{"line_number":113,"context_line":"              \"cannot notify\"),"},{"line_number":114,"context_line":"            {\u0027scheme\u0027: scheme, \u0027alarm_id\u0027: alarm_id})"},{"line_number":115,"context_line":"        return"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    try:"},{"line_number":118,"context_line":"        LOG.debug(\"Notifying alarm %(id)s with action %(act)s\","},{"line_number":119,"context_line":"                  {\u0027id\u0027: alarm_id, \u0027act\u0027: action})"},{"line_number":120,"context_line":"        notifier.notify(action, alarm_id, alarm_name, severity,"},{"line_number":121,"context_line":"                        previous, current, reason, reason_data)"},{"line_number":122,"context_line":"    except Exception:"},{"line_number":123,"context_line":"        LOG.exception(_(\"Unable to notify alarm %s\"), alarm_id)"},{"line_number":124,"context_line":"        return"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"def process_alarm(notifiers, data):"},{"line_number":128,"context_line":"    \"\"\"Notify that alarm has been triggered."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    :param notifiers: list of possible notifiers"},{"line_number":131,"context_line":"    :param data: (dict): alarm data"},{"line_number":132,"context_line":"    \"\"\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    actions \u003d data.get(\u0027actions\u0027)"},{"line_number":135,"context_line":"    if not actions:"},{"line_number":136,"context_line":"        LOG.error(_(\"Unable to notify for an alarm with no action\"))"},{"line_number":137,"context_line":"        return"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    for action in actions:"},{"line_number":140,"context_line":"        _handle_action(notifiers, action,"},{"line_number":141,"context_line":"                       data.get(\u0027alarm_id\u0027),"},{"line_number":142,"context_line":"                       data.get(\u0027alarm_name\u0027),"},{"line_number":143,"context_line":"                       data.get(\u0027severity\u0027),"},{"line_number":144,"context_line":"                       data.get(\u0027previous\u0027),"},{"line_number":145,"context_line":"                       data.get(\u0027current\u0027),"},{"line_number":146,"context_line":"                       data.get(\u0027reason\u0027),"},{"line_number":147,"context_line":"                       data.get(\u0027reason_data\u0027))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"class AlarmEndpoint(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_e4f2c399","line":147,"range":{"start_line":84,"start_character":0,"end_line":147,"end_character":47},"updated":"2016-04-22 17:59:40.000000000","message":"remove it","commit_id":"b40bba9ee3ba9cab09e0fe47e66e899fc0626a38"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"586c3df727391a714b09084985cf2e3ac922e812","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        super(AlarmNotifierService, self).stop()"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def _handle_action(notifiers, action, alarm_id, alarm_name, severity,"},{"line_number":85,"context_line":"                   previous, current, reason, reason_data):"},{"line_number":86,"context_line":"    \"\"\"Process action on alarm"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    :param notifiers: list of possible notifiers."},{"line_number":89,"context_line":"    :param action: The action that is being attended, as a parsed URL."},{"line_number":90,"context_line":"    :param alarm_id: The triggered alarm."},{"line_number":91,"context_line":"    :param alarm_name: The name of triggered alarm."},{"line_number":92,"context_line":"    :param severity: The level of triggered alarm"},{"line_number":93,"context_line":"    :param previous: The previous state of the alarm."},{"line_number":94,"context_line":"    :param current: The current state of the alarm."},{"line_number":95,"context_line":"    :param reason: The reason the alarm changed its state."},{"line_number":96,"context_line":"    :param reason_data: A dict representation of the reason."},{"line_number":97,"context_line":"    \"\"\""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    try:"},{"line_number":100,"context_line":"        action \u003d netutils.urlsplit(action)"},{"line_number":101,"context_line":"    except Exception:"},{"line_number":102,"context_line":"        LOG.error("},{"line_number":103,"context_line":"            _(\"Unable to parse action %(action)s for alarm %(alarm_id)s\"),"},{"line_number":104,"context_line":"            {\u0027action\u0027: action, \u0027alarm_id\u0027: alarm_id})"},{"line_number":105,"context_line":"        return"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    try:"},{"line_number":108,"context_line":"        notifier \u003d notifiers[action.scheme].obj"},{"line_number":109,"context_line":"    except KeyError:"},{"line_number":110,"context_line":"        scheme \u003d action.scheme"},{"line_number":111,"context_line":"        LOG.error("},{"line_number":112,"context_line":"            _(\"Action %(scheme)s for alarm %(alarm_id)s is unknown, \""},{"line_number":113,"context_line":"              \"cannot notify\"),"},{"line_number":114,"context_line":"            {\u0027scheme\u0027: scheme, \u0027alarm_id\u0027: alarm_id})"},{"line_number":115,"context_line":"        return"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    try:"},{"line_number":118,"context_line":"        LOG.debug(\"Notifying alarm %(id)s with action %(act)s\","},{"line_number":119,"context_line":"                  {\u0027id\u0027: alarm_id, \u0027act\u0027: action})"},{"line_number":120,"context_line":"        notifier.notify(action, alarm_id, alarm_name, severity,"},{"line_number":121,"context_line":"                        previous, current, reason, reason_data)"},{"line_number":122,"context_line":"    except Exception:"},{"line_number":123,"context_line":"        LOG.exception(_(\"Unable to notify alarm %s\"), alarm_id)"},{"line_number":124,"context_line":"        return"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"def process_alarm(notifiers, data):"},{"line_number":128,"context_line":"    \"\"\"Notify that alarm has been triggered."},{"line_number":129,"context_line":""},{"line_number":130,"context_line":"    :param notifiers: list of possible notifiers"},{"line_number":131,"context_line":"    :param data: (dict): alarm data"},{"line_number":132,"context_line":"    \"\"\""},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"    actions \u003d data.get(\u0027actions\u0027)"},{"line_number":135,"context_line":"    if not actions:"},{"line_number":136,"context_line":"        LOG.error(_(\"Unable to notify for an alarm with no action\"))"},{"line_number":137,"context_line":"        return"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    for action in actions:"},{"line_number":140,"context_line":"        _handle_action(notifiers, action,"},{"line_number":141,"context_line":"                       data.get(\u0027alarm_id\u0027),"},{"line_number":142,"context_line":"                       data.get(\u0027alarm_name\u0027),"},{"line_number":143,"context_line":"                       data.get(\u0027severity\u0027),"},{"line_number":144,"context_line":"                       data.get(\u0027previous\u0027),"},{"line_number":145,"context_line":"                       data.get(\u0027current\u0027),"},{"line_number":146,"context_line":"                       data.get(\u0027reason\u0027),"},{"line_number":147,"context_line":"                       data.get(\u0027reason_data\u0027))"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""},{"line_number":150,"context_line":"class AlarmEndpoint(object):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_210e6032","line":147,"range":{"start_line":84,"start_character":0,"end_line":147,"end_character":47},"in_reply_to":"1a122d0e_e4f2c399","updated":"2016-04-23 04:50:23.000000000","message":"they are used in AlarmEndpoint... :(","commit_id":"b40bba9ee3ba9cab09e0fe47e66e899fc0626a38"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"6c110de658b2996540b8973de6a450d8f988ee56","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            action \u003d netutils.urlsplit(action)"},{"line_number":111,"context_line":"        except Exception:"},{"line_number":112,"context_line":"            LOG.error("},{"line_number":113,"context_line":"                _(\"Unable to parse action %(action)s for alarm %(alarm_id)s\"),"},{"line_number":114,"context_line":"                {\u0027action\u0027: action, \u0027alarm_id\u0027: alarm_id})"},{"line_number":115,"context_line":"            return"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_dc466f7a","line":114,"range":{"start_line":113,"start_character":15,"end_line":114,"end_character":57},"updated":"2016-04-23 04:32:55.000000000","message":"use _LE","commit_id":"bef50f051ca8c7fe78bb19b7731b6f6479dda5b8"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"8cdb78eb4d53fc787e882e9a8ff0cccdd9db6708","unresolved":false,"context_lines":[{"line_number":110,"context_line":"            action \u003d netutils.urlsplit(action)"},{"line_number":111,"context_line":"        except Exception:"},{"line_number":112,"context_line":"            LOG.error("},{"line_number":113,"context_line":"                _(\"Unable to parse action %(action)s for alarm %(alarm_id)s\"),"},{"line_number":114,"context_line":"                {\u0027action\u0027: action, \u0027alarm_id\u0027: alarm_id})"},{"line_number":115,"context_line":"            return"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_47af2ce3","line":114,"range":{"start_line":113,"start_character":15,"end_line":114,"end_character":57},"in_reply_to":"1a122d0e_dc466f7a","updated":"2016-04-23 04:50:56.000000000","message":"Done","commit_id":"bef50f051ca8c7fe78bb19b7731b6f6479dda5b8"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"6c110de658b2996540b8973de6a450d8f988ee56","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            notifier \u003d notifiers[action.scheme].obj"},{"line_number":119,"context_line":"        except KeyError:"},{"line_number":120,"context_line":"            scheme \u003d action.scheme"},{"line_number":121,"context_line":"            LOG.error("},{"line_number":122,"context_line":"                _(\"Action %(scheme)s for alarm %(alarm_id)s is unknown, \""},{"line_number":123,"context_line":"                  \"cannot notify\"),"},{"line_number":124,"context_line":"                {\u0027scheme\u0027: scheme, \u0027alarm_id\u0027: alarm_id})"},{"line_number":125,"context_line":"            return"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_fc436b6a","line":123,"range":{"start_line":121,"start_character":12,"end_line":123,"end_character":35},"updated":"2016-04-23 04:32:55.000000000","message":"use _LE","commit_id":"bef50f051ca8c7fe78bb19b7731b6f6479dda5b8"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"8cdb78eb4d53fc787e882e9a8ff0cccdd9db6708","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            notifier \u003d notifiers[action.scheme].obj"},{"line_number":119,"context_line":"        except KeyError:"},{"line_number":120,"context_line":"            scheme \u003d action.scheme"},{"line_number":121,"context_line":"            LOG.error("},{"line_number":122,"context_line":"                _(\"Action %(scheme)s for alarm %(alarm_id)s is unknown, \""},{"line_number":123,"context_line":"                  \"cannot notify\"),"},{"line_number":124,"context_line":"                {\u0027scheme\u0027: scheme, \u0027alarm_id\u0027: alarm_id})"},{"line_number":125,"context_line":"            return"},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_87b94431","line":123,"range":{"start_line":121,"start_character":12,"end_line":123,"end_character":35},"in_reply_to":"1a122d0e_fc436b6a","updated":"2016-04-23 04:50:56.000000000","message":"Done","commit_id":"bef50f051ca8c7fe78bb19b7731b6f6479dda5b8"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"6c110de658b2996540b8973de6a450d8f988ee56","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            notifier.notify(action, alarm_id, alarm_name, severity,"},{"line_number":131,"context_line":"                            previous, current, reason, reason_data)"},{"line_number":132,"context_line":"        except Exception:"},{"line_number":133,"context_line":"            LOG.exception(_(\"Unable to notify alarm %s\"), alarm_id)"},{"line_number":134,"context_line":"            return"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_bc49f390","line":133,"range":{"start_line":133,"start_character":12,"end_line":133,"end_character":67},"updated":"2016-04-23 04:32:55.000000000","message":"use _LE","commit_id":"bef50f051ca8c7fe78bb19b7731b6f6479dda5b8"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"8cdb78eb4d53fc787e882e9a8ff0cccdd9db6708","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            notifier.notify(action, alarm_id, alarm_name, severity,"},{"line_number":131,"context_line":"                            previous, current, reason, reason_data)"},{"line_number":132,"context_line":"        except Exception:"},{"line_number":133,"context_line":"            LOG.exception(_(\"Unable to notify alarm %s\"), alarm_id)"},{"line_number":134,"context_line":"            return"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_67b4e834","line":133,"range":{"start_line":133,"start_character":12,"end_line":133,"end_character":67},"in_reply_to":"1a122d0e_bc49f390","updated":"2016-04-23 04:50:56.000000000","message":"Done","commit_id":"bef50f051ca8c7fe78bb19b7731b6f6479dda5b8"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"6c110de658b2996540b8973de6a450d8f988ee56","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        actions \u003d data.get(\u0027actions\u0027)"},{"line_number":145,"context_line":"        if not actions:"},{"line_number":146,"context_line":"            LOG.error(_(\"Unable to notify for an alarm with no action\"))"},{"line_number":147,"context_line":"            return"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        for action in actions:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_5c7c1fb5","line":146,"range":{"start_line":146,"start_character":12,"end_line":146,"end_character":72},"updated":"2016-04-23 04:32:55.000000000","message":"use _LE","commit_id":"bef50f051ca8c7fe78bb19b7731b6f6479dda5b8"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"8cdb78eb4d53fc787e882e9a8ff0cccdd9db6708","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        actions \u003d data.get(\u0027actions\u0027)"},{"line_number":145,"context_line":"        if not actions:"},{"line_number":146,"context_line":"            LOG.error(_(\"Unable to notify for an alarm with no action\"))"},{"line_number":147,"context_line":"            return"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"        for action in actions:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a122d0e_a784405d","line":146,"range":{"start_line":146,"start_character":12,"end_line":146,"end_character":72},"in_reply_to":"1a122d0e_5c7c1fb5","updated":"2016-04-23 04:50:56.000000000","message":"Done","commit_id":"bef50f051ca8c7fe78bb19b7731b6f6479dda5b8"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"13b321ec89e4031c19203a7a0a7097de1928a374","unresolved":false,"context_lines":[{"line_number":131,"context_line":"                            previous, current, reason, reason_data)"},{"line_number":132,"context_line":"        except Exception:"},{"line_number":133,"context_line":"            LOG.exception(_LE(\"Unable to notify alarm %s\"), alarm_id)"},{"line_number":134,"context_line":"            return"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    @staticmethod"},{"line_number":137,"context_line":"    def _process_alarm(notifiers, data):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a122d0e_679a2870","line":134,"range":{"start_line":134,"start_character":12,"end_line":134,"end_character":18},"updated":"2016-04-23 05:24:15.000000000","message":"remove this line if you have any update","commit_id":"29ca8c7df625f8372438611c2cc95a5eab067ad2"}],"aodh/tests/unit/test_notifier.py":[{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"786f63b1b367ef27544aa8abdfa93bd5ca807899","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                          data[\u0027reason_data\u0027]),"},{"line_number":99,"context_line":"                         notifications[0])"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test_notify_alarm_no_action(self):"},{"line_number":102,"context_line":"        self._msg_notifier.sample({}, \u0027alarm.update\u0027, {})"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_notify_alarm_log_action(self):"},{"line_number":105,"context_line":"        self._msg_notifier.sample({},"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_445d7778","line":102,"range":{"start_line":101,"start_character":4,"end_line":102,"end_character":57},"updated":"2016-04-22 17:59:40.000000000","message":"what is this test for? remove it","commit_id":"b40bba9ee3ba9cab09e0fe47e66e899fc0626a38"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"586c3df727391a714b09084985cf2e3ac922e812","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                          data[\u0027reason_data\u0027]),"},{"line_number":99,"context_line":"                         notifications[0])"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"    def test_notify_alarm_no_action(self):"},{"line_number":102,"context_line":"        self._msg_notifier.sample({}, \u0027alarm.update\u0027, {})"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_notify_alarm_log_action(self):"},{"line_number":105,"context_line":"        self._msg_notifier.sample({},"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_811db468","line":102,"range":{"start_line":101,"start_character":4,"end_line":102,"end_character":57},"in_reply_to":"1a122d0e_445d7778","updated":"2016-04-23 04:50:23.000000000","message":"Done","commit_id":"b40bba9ee3ba9cab09e0fe47e66e899fc0626a38"},{"author":{"_account_id":6676,"name":"zqfan","email":"aji.zqfan@gmail.com","username":"aji-zqfan"},"change_message_id":"786f63b1b367ef27544aa8abdfa93bd5ca807899","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def test_notify_alarm_no_action(self):"},{"line_number":102,"context_line":"        self._msg_notifier.sample({}, \u0027alarm.update\u0027, {})"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_notify_alarm_log_action(self):"},{"line_number":105,"context_line":"        self._msg_notifier.sample({},"},{"line_number":106,"context_line":"                                  \u0027alarm.update\u0027,"},{"line_number":107,"context_line":"                                  {"},{"line_number":108,"context_line":"                                      \u0027actions\u0027: [\u0027log://\u0027],"},{"line_number":109,"context_line":"                                      \u0027alarm_id\u0027: \u0027foobar\u0027,"},{"line_number":110,"context_line":"                                      \u0027condition\u0027: {\u0027threshold\u0027: 42}})"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @staticmethod"},{"line_number":113,"context_line":"    def _notification(action):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_64d193cd","line":110,"range":{"start_line":104,"start_character":4,"end_line":110,"end_character":70},"updated":"2016-04-22 17:59:40.000000000","message":"ditto","commit_id":"b40bba9ee3ba9cab09e0fe47e66e899fc0626a38"},{"author":{"_account_id":8290,"name":"liusheng","email":"liusheng2048@gmail.com","username":"LiuSheng"},"change_message_id":"586c3df727391a714b09084985cf2e3ac922e812","unresolved":false,"context_lines":[{"line_number":101,"context_line":"    def test_notify_alarm_no_action(self):"},{"line_number":102,"context_line":"        self._msg_notifier.sample({}, \u0027alarm.update\u0027, {})"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def test_notify_alarm_log_action(self):"},{"line_number":105,"context_line":"        self._msg_notifier.sample({},"},{"line_number":106,"context_line":"                                  \u0027alarm.update\u0027,"},{"line_number":107,"context_line":"                                  {"},{"line_number":108,"context_line":"                                      \u0027actions\u0027: [\u0027log://\u0027],"},{"line_number":109,"context_line":"                                      \u0027alarm_id\u0027: \u0027foobar\u0027,"},{"line_number":110,"context_line":"                                      \u0027condition\u0027: {\u0027threshold\u0027: 42}})"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    @staticmethod"},{"line_number":113,"context_line":"    def _notification(action):"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a122d0e_c125ecae","line":110,"range":{"start_line":104,"start_character":4,"end_line":110,"end_character":70},"in_reply_to":"1a122d0e_64d193cd","updated":"2016-04-23 04:50:23.000000000","message":"Done","commit_id":"b40bba9ee3ba9cab09e0fe47e66e899fc0626a38"}]}
