)]}'
{"ceilometer/alarm/notifier.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"0b8bef40b05f53838b4ded249528fa2355985108","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class AlarmNotifier(rpc_service.Service):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    EXTENSIONS_NAMESPACE \u003d \"ceilometer.alarm.notifier\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, host, topic):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FrWM%3D","line":36,"updated":"2013-06-25 13:46:47.000000000","message":"It\u0027s a little confusing for this class to be named the same as the ABC defined in __init__.py. Maybe rename it AlarmNotifierService?","commit_id":"24f888cd1e77c9f8c9f67d47e57fcc77ece4401a"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"62877be1f068880c4994aed0aa18c582cf08ee0f","unresolved":false,"context_lines":[{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"class AlarmNotifier(rpc_service.Service):"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    EXTENSIONS_NAMESPACE \u003d \"ceilometer.alarm.notifier\""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def __init__(self, host, topic):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fojc%3D","line":36,"in_reply_to":"AAAAPn%2F%2FrWM%3D","updated":"2013-06-26 10:25:39.000000000","message":"Good idea.","commit_id":"24f888cd1e77c9f8c9f67d47e57fcc77ece4401a"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a6054466291b50be797480e111592e61f2de739c","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        data should be a dict with the following keys:"},{"line_number":53,"context_line":"        - action, the URL of the action to run;"},{"line_number":54,"context_line":"          this is a mapped to an extension automatically"},{"line_number":55,"context_line":"        - alarm, the alarm that has been triggered"},{"line_number":56,"context_line":"        - condition, the condition under which"},{"line_number":57,"context_line":"          the alarm has been triggered"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FZzE%3D","line":54,"updated":"2013-07-02 17:00:07.000000000","message":"I wonder should this a list of actions as opposed to a single one? \n\n(As the alarm representation allows for actions to be lists of webhooks in the most general case, so batching the notification dispatch might be more convenient).","commit_id":"e54b29aa36ab5420e2a9d52540b89be780d33357"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f49657304b85881c56206b1a37b3b1931c862ef9","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        data should be a dict with the following keys:"},{"line_number":53,"context_line":"        - action, the URL of the action to run;"},{"line_number":54,"context_line":"          this is a mapped to an extension automatically"},{"line_number":55,"context_line":"        - alarm, the alarm that has been triggered"},{"line_number":56,"context_line":"        - condition, the condition under which"},{"line_number":57,"context_line":"          the alarm has been triggered"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FXU4%3D","line":54,"in_reply_to":"AAAAPn%2F%2FZzE%3D","updated":"2013-07-03 09:30:38.000000000","message":"Makes sense, I\u0027ll change this.","commit_id":"e54b29aa36ab5420e2a9d52540b89be780d33357"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"a6054466291b50be797480e111592e61f2de739c","unresolved":false,"context_lines":[{"line_number":54,"context_line":"          this is a mapped to an extension automatically"},{"line_number":55,"context_line":"        - alarm, the alarm that has been triggered"},{"line_number":56,"context_line":"        - condition, the condition under which"},{"line_number":57,"context_line":"          the alarm has been triggered"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        :param context: Request context."},{"line_number":60,"context_line":"        :param data: A dict as described above."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FZ0Y%3D","line":57,"updated":"2013-07-02 17:00:07.000000000","message":"For ease of integration with the threshold eval logic, I wonder could this condition be decomposed into state and reason strings?\n\nSee https://github.com/openstack/ceilometer/blob/master/ceilometer/alarm/threshold_evaluation.py#L133\n\nFor example:\n\n  state\u003d\u0027alarm\u0027,\n  reason\u003d\u0027Transition to alarm due to 5 samples outside threshold, most recent: 85.0\u0027","commit_id":"e54b29aa36ab5420e2a9d52540b89be780d33357"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f49657304b85881c56206b1a37b3b1931c862ef9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"          this is a mapped to an extension automatically"},{"line_number":55,"context_line":"        - alarm, the alarm that has been triggered"},{"line_number":56,"context_line":"        - condition, the condition under which"},{"line_number":57,"context_line":"          the alarm has been triggered"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"        :param context: Request context."},{"line_number":60,"context_line":"        :param data: A dict as described above."}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FXTw%3D","line":57,"in_reply_to":"AAAAPn%2F%2FZ0Y%3D","updated":"2013-07-03 09:30:38.000000000","message":"Ack. In my mind, I hoped we would have a more computer friendly description of the reason, that\u0027s what I called \"condition\". But we can build this later, I\u0027m fine with a string for now.","commit_id":"e54b29aa36ab5420e2a9d52540b89be780d33357"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"4d30a07ee58d096fa6d42a5c348d470ab284b4e3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright © 2013 eNovance \u003clicensing@enovance.com\u003e"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FRiE%3D","line":1,"updated":"2013-07-05 13:50:30.000000000","message":"What do you think about renaming this module \"service.py\"? Given its current name, I expected to find the base class that\u0027s in __init__.py.","commit_id":"48856a4f765923403d19be5c3fd719151252747a"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"49d9fae929d4f84d682224fc45cd951e8ad5ee63","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# -*- encoding: utf-8 -*-"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"# Copyright © 2013 eNovance \u003clicensing@enovance.com\u003e"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FRLY%3D","line":1,"in_reply_to":"AAAAPn%2F%2FRiE%3D","updated":"2013-07-05 16:05:07.000000000","message":"There\u0027s a lot of different service in alarming, and there\u0027s already a ceilometer.service that is about the evaluation service. But I can merge it inside I guess, though it may be better to rename ceilometer.service to ceilometer.alarm.threshold_evaluation or something","commit_id":"48856a4f765923403d19be5c3fd719151252747a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"4d30a07ee58d096fa6d42a5c348d470ab284b4e3","unresolved":false,"context_lines":[{"line_number":31,"context_line":"cfg.CONF.import_opt(\u0027host\u0027, \u0027ceilometer.service\u0027)"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"class AlarmNotifierService(rpc_service.Service):"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    EXTENSIONS_NAMESPACE \u003d \"ceilometer.alarm.notifier\""},{"line_number":37,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FRho%3D","line":34,"updated":"2013-07-05 13:50:30.000000000","message":"The error logging in this class should include identifying details about the alarm that is failing so the deployer can help users debug.","commit_id":"48856a4f765923403d19be5c3fd719151252747a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"4d30a07ee58d096fa6d42a5c348d470ab284b4e3","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    def __init__(self, host, topic):"},{"line_number":39,"context_line":"        super(AlarmNotifierService, self).__init__(host, topic, self)"},{"line_number":40,"context_line":"        self.notifiers \u003d extension.ExtensionManager(self.EXTENSIONS_NAMESPACE,"},{"line_number":41,"context_line":"                                                    invoke_on_load\u003dTrue)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def start(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FRg4%3D","line":40,"updated":"2013-07-05 13:50:30.000000000","message":"Testing will be easier to control if this manager is passed as an argument to the constructor instead of being built inside the service. See also comment on the test plugin.","commit_id":"48856a4f765923403d19be5c3fd719151252747a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"4d30a07ee58d096fa6d42a5c348d470ab284b4e3","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def start(self):"},{"line_number":44,"context_line":"        super(AlarmNotifierService, self).start()"},{"line_number":45,"context_line":"        # Add a dummy thread to have wait() working"},{"line_number":46,"context_line":"        self.tg.add_timer(604800, lambda: None)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _handle_action(self, action, alarm, state, reason):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FRhQ%3D","line":45,"updated":"2013-07-05 13:50:30.000000000","message":"Wow, really?","commit_id":"48856a4f765923403d19be5c3fd719151252747a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"f7e91d9e1376423ed9130687b71a05a4125f44b6","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def start(self):"},{"line_number":44,"context_line":"        super(AlarmNotifierService, self).start()"},{"line_number":45,"context_line":"        # Add a dummy thread to have wait() working"},{"line_number":46,"context_line":"        self.tg.add_timer(604800, lambda: None)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _handle_action(self, action, alarm, state, reason):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAP3%2F%2F9Bs%3D","line":45,"in_reply_to":"AAAAPn%2F%2FRLc%3D","updated":"2013-07-08 16:52:05.000000000","message":"I hadn\u0027t noticed that. Sigh.","commit_id":"48856a4f765923403d19be5c3fd719151252747a"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"49d9fae929d4f84d682224fc45cd951e8ad5ee63","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    def start(self):"},{"line_number":44,"context_line":"        super(AlarmNotifierService, self).start()"},{"line_number":45,"context_line":"        # Add a dummy thread to have wait() working"},{"line_number":46,"context_line":"        self.tg.add_timer(604800, lambda: None)"},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"    def _handle_action(self, action, alarm, state, reason):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FRLc%3D","line":45,"in_reply_to":"AAAAPn%2F%2FRhQ%3D","updated":"2013-07-05 16:05:07.000000000","message":"Yes, see the collector, it already has this :)","commit_id":"48856a4f765923403d19be5c3fd719151252747a"}],"ceilometer/alarm/notifier/log.py":[{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"855c112408a8d23cbb696f23705d278734d4c9d7","unresolved":false,"context_lines":[{"line_number":26,"context_line":"class LogAlarmNotifier(notifier.AlarmNotifier):"},{"line_number":27,"context_line":"    \"Log alarm notifier.\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def notify(action, alarm, state, reason):"},{"line_number":30,"context_line":"        LOG.info(\"Notifying alarm %s in state %s with action %s because %s\","},{"line_number":31,"context_line":"                 alarm, state, action, reason)"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Fx10%3D","line":29,"updated":"2013-07-11 15:51:31.000000000","message":"self or @staticmethod is missing ? I guess I don\u0027t understand something because tests seems OK.","commit_id":"fed91f5c45da9a71a81b02f38228dcfd882598ef"}],"ceilometer/alarm/notifiers/log.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"0b8bef40b05f53838b4ded249528fa2355985108","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class LogAlarmNotifier(alarm.AlarmNotifier):"},{"line_number":27,"context_line":"    \"Log alarm notifier.\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def notify(action, alarm, condition):"},{"line_number":30,"context_line":"        LOG.info(\"Notifying alarm %s for action %s under condition %s\","},{"line_number":31,"context_line":"                 alarm, action, condition)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FrVA%3D","line":28,"updated":"2013-06-25 13:46:47.000000000","message":"It\u0027d be nice to have a small test for this class.","commit_id":"24f888cd1e77c9f8c9f67d47e57fcc77ece4401a"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"62877be1f068880c4994aed0aa18c582cf08ee0f","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"class LogAlarmNotifier(alarm.AlarmNotifier):"},{"line_number":27,"context_line":"    \"Log alarm notifier.\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    def notify(action, alarm, condition):"},{"line_number":30,"context_line":"        LOG.info(\"Notifying alarm %s for action %s under condition %s\","},{"line_number":31,"context_line":"                 alarm, action, condition)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FojY%3D","line":28,"in_reply_to":"AAAAPn%2F%2FrVA%3D","updated":"2013-06-26 10:25:39.000000000","message":"Done","commit_id":"24f888cd1e77c9f8c9f67d47e57fcc77ece4401a"}],"ceilometer/alarm/notifiers/test.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"4d30a07ee58d096fa6d42a5c348d470ab284b4e3","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from ceilometer import alarm"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestAlarmNotifier(alarm.AlarmNotifier):"},{"line_number":24,"context_line":"    \"Test alarm notifier.\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FRhA%3D","line":23,"updated":"2013-07-05 13:50:30.000000000","message":"There\u0027s no need to register a test notifier plugin if the tests pass a TestExtensionManager to the service instead of letting it instantiate its own manager.","commit_id":"48856a4f765923403d19be5c3fd719151252747a"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"f7e91d9e1376423ed9130687b71a05a4125f44b6","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from ceilometer import alarm"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestAlarmNotifier(alarm.AlarmNotifier):"},{"line_number":24,"context_line":"    \"Test alarm notifier.\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAP3%2F%2F9Bo%3D","line":23,"in_reply_to":"AAAAPn%2F%2FRLE%3D","updated":"2013-07-08 16:52:05.000000000","message":"The entry point stuff is well tested via the setuptools and stevedore libraries, so I don\u0027t think we need to test it here. But if you want to, that\u0027s fine.","commit_id":"48856a4f765923403d19be5c3fd719151252747a"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"49d9fae929d4f84d682224fc45cd951e8ad5ee63","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from ceilometer import alarm"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestAlarmNotifier(alarm.AlarmNotifier):"},{"line_number":24,"context_line":"    \"Test alarm notifier.\"\"\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FRLE%3D","line":23,"in_reply_to":"AAAAPn%2F%2FRhA%3D","updated":"2013-07-05 16:05:07.000000000","message":"Agreed, but I like having this since that tests also the entry points. No?","commit_id":"48856a4f765923403d19be5c3fd719151252747a"}],"ceilometer/alarm/service.py":[{"author":{"_account_id":4491,"name":"Lianhao Lu","email":"llh_misc@outlook.com","username":"lianhao-lu"},"change_message_id":"887f626e7a4af7b6dda90076192d8949d43a6b96","unresolved":false,"context_lines":[{"line_number":25,"context_line":"from ceilometer.openstack.common import log"},{"line_number":26,"context_line":"from ceilometer.openstack.common import network_utils"},{"line_number":27,"context_line":"from ceilometer.openstack.common import service as os_service"},{"line_number":28,"context_line":"from ceilometer.openstack.common.gettextutils import _"},{"line_number":29,"context_line":"from ceilometer.openstack.common.rpc import service as rpc_service"},{"line_number":30,"context_line":"from ceilometerclient import client as ceiloclient"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAP3%2F%2Fz5w%3D","line":28,"updated":"2013-07-11 03:25:30.000000000","message":"why import this? I think the gettextutils.install() call in prepare_service() should install \"_\" into the built-in namespace.","commit_id":"fed91f5c45da9a71a81b02f38228dcfd882598ef"},{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"1843ca73766311ca12e1a791e5aef6a992eb6cde","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                locals())"},{"line_number":123,"context_line":"            return"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        try:"},{"line_number":126,"context_line":"            notifier \u003d self.notifiers[action.scheme].obj"},{"line_number":127,"context_line":"        except KeyError:"},{"line_number":128,"context_line":"            scheme \u003d action.scheme"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAP3%2F%2FwtI%3D","line":125,"updated":"2013-07-11 20:27:05.000000000","message":"I think the NameDispatchExtensionManager would let you skip this manual lookup step.\n\nhttp://stevedore.readthedocs.org/en/latest/managers.html#namedispatchextensionmanager","commit_id":"2093c1cb56fa1b3fb3329b3df948c39bf6845cd4"}],"tests/alarm/test_notifier.py":[{"author":{"_account_id":7385,"name":"Thomas Herve","email":"therve@redhat.com","username":"therve"},"change_message_id":"0b8bef40b05f53838b4ded249528fa2355985108","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                                      \u0027action\u0027: \u0027no-such-action-i-am-sure\u0027,"},{"line_number":50,"context_line":"                                      \u0027alarm\u0027: {\u0027name\u0027: \u0027foobar\u0027},"},{"line_number":51,"context_line":"                                      \u0027condition\u0027: {\u0027threshold\u0027: 42},"},{"line_number":52,"context_line":"                                  })"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FrVY%3D","line":52,"updated":"2013-06-25 13:46:47.000000000","message":"It\u0027s a little bit weird for the 2 tests above to not have assertions.","commit_id":"24f888cd1e77c9f8c9f67d47e57fcc77ece4401a"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"62877be1f068880c4994aed0aa18c582cf08ee0f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"                                      \u0027action\u0027: \u0027no-such-action-i-am-sure\u0027,"},{"line_number":50,"context_line":"                                      \u0027alarm\u0027: {\u0027name\u0027: \u0027foobar\u0027},"},{"line_number":51,"context_line":"                                      \u0027condition\u0027: {\u0027threshold\u0027: 42},"},{"line_number":52,"context_line":"                                  })"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2FojU%3D","line":52,"in_reply_to":"AAAAPn%2F%2FrVY%3D","updated":"2013-06-26 10:25:39.000000000","message":"Agreed, though they don\u0027t do much nor are supposed to raise so I think it\u0027s good enough :)","commit_id":"24f888cd1e77c9f8c9f67d47e57fcc77ece4401a"},{"author":{"_account_id":688,"name":"Sandy Walsh","email":"sandy.walsh@rackspace.com","username":"sandy-walsh"},"change_message_id":"fd5ac60ce180cd7bc562911bf441f6096d29c61a","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def test_notify_alarm_invalid_action(self):"},{"line_number":55,"context_line":"        self.service.notify_alarm(context.get_admin_context(),"},{"line_number":56,"context_line":"                                  {"},{"line_number":57,"context_line":"                                      \u0027action\u0027: \u0027no-such-action-i-am-sure\u0027,"},{"line_number":58,"context_line":"                                      \u0027alarm\u0027: {\u0027name\u0027: \u0027foobar\u0027},"},{"line_number":59,"context_line":"                                      \u0027condition\u0027: {\u0027threshold\u0027: 42},"},{"line_number":60,"context_line":"                                  })"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2Fafk%3D","line":57,"updated":"2013-07-02 13:41:20.000000000","message":"this with cover the bad url situation, but don\u0027t we also need to cover .notify blowing up as well as no notifier[scheme]?","commit_id":"e54b29aa36ab5420e2a9d52540b89be780d33357"},{"author":{"_account_id":1669,"name":"Julien Danjou","display_name":"jd","email":"julien@danjou.info","username":"jdanjou"},"change_message_id":"f49657304b85881c56206b1a37b3b1931c862ef9","unresolved":false,"context_lines":[{"line_number":54,"context_line":"    def test_notify_alarm_invalid_action(self):"},{"line_number":55,"context_line":"        self.service.notify_alarm(context.get_admin_context(),"},{"line_number":56,"context_line":"                                  {"},{"line_number":57,"context_line":"                                      \u0027action\u0027: \u0027no-such-action-i-am-sure\u0027,"},{"line_number":58,"context_line":"                                      \u0027alarm\u0027: {\u0027name\u0027: \u0027foobar\u0027},"},{"line_number":59,"context_line":"                                      \u0027condition\u0027: {\u0027threshold\u0027: 42},"},{"line_number":60,"context_line":"                                  })"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAPn%2F%2FXPY%3D","line":57,"in_reply_to":"AAAAPn%2F%2Fafk%3D","updated":"2013-07-03 09:30:38.000000000","message":"This is actually the case, that is parsed to something with no scheme.","commit_id":"e54b29aa36ab5420e2a9d52540b89be780d33357"}]}
