)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"282b0b811ececfd9ceeab8427f9fae389d82622a","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Implements notification-dispatcher-filter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This patch allow to define a filter into an endpoint like this:"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"class WarnHandler(object):"},{"line_number":12,"context_line":"    filter \u003d NotificationFilter(publisher_id\u003d\u0027^compute.*\u0027)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":15,"id":"1ae5cdf2_b419df89","line":9,"updated":"2014-06-20 12:50:42.000000000","message":"I really want to review this patch, but I\u0027m not big expert in oslo.messaging. So that would be great to describe what does it do and what the profit will be received with this patch.","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"6327f30face1b92452d77aefd7575483b3eefcd3","unresolved":false,"context_lines":[{"line_number":9,"context_line":"The NotificationFilter class is used for filter notification that a"},{"line_number":10,"context_line":"notification listerner endpoint will received."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The notification can be filter on different fields, the"},{"line_number":13,"context_line":"context, the publisher_id, the event_type and the metadatas."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Filters use regular expression and look like:"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1abeadc6_533569d9","line":12,"updated":"2014-08-27 15:17:47.000000000","message":"\"The notification can be filtered\" i think so. Am I right? Please, use \":\" and list format. It will be more readable.","commit_id":"f6c0fca2bfc255b3315d2d9492382fe84bcea627"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"6327f30face1b92452d77aefd7575483b3eefcd3","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Filters use regular expression and look like:"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"class WarnHandler(object):"},{"line_number":18,"context_line":"    filter \u003d NotificationFilter(publisher_id\u003d\u0027^compute.*\u0027)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"More example are avialable into NotificationFilter class"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1abeadc6_3372ad7c","line":17,"updated":"2014-08-27 15:17:47.000000000","message":"If 4 chars indent used, the code will be formatted with mono-space font, if I remember this behavior correctly.","commit_id":"f6c0fca2bfc255b3315d2d9492382fe84bcea627"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"6327f30face1b92452d77aefd7575483b3eefcd3","unresolved":false,"context_lines":[{"line_number":20,"context_line":"More example are avialable into NotificationFilter class"},{"line_number":21,"context_line":"documentation."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Implements blueprint notification-dispatcher-filter"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Change-Id: Ic1239422fac9879b113c9d3d6c3f8dccef20d044"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"1abeadc6_93fe21ad","line":23,"updated":"2014-08-27 15:17:47.000000000","message":"Colon is desired.","commit_id":"f6c0fca2bfc255b3315d2d9492382fe84bcea627"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"256b56b0e461b3d3cc45da8460bb7e47db02a172","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implements notification-dispatcher-filter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The NotificationFilter class is used to filter notifications that a"},{"line_number":10,"context_line":"notification listerner endpoint will received."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The notification can be filtered on different fields: context,"},{"line_number":13,"context_line":"publisher_id, event_type, metadata, and payload"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3a961159_db24cd61","line":10,"updated":"2014-12-23 11:07:48.000000000","message":"it might be re-worded:\n\n\nThe NotificationFilter class is used to filter income notifications to listener endpoint by:\n\n    - event_type\n    - metadata\n    - payload","commit_id":"5a5b683d72de81ac950f9fb0b93d13fa60a594e1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7eb1b2359f825e629af7de80374224f13fd15e35","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implements notification-dispatcher-filter"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The NotificationFilter class is used to filter notifications that a"},{"line_number":10,"context_line":"notification listerner endpoint will received."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The notification can be filtered on different fields: context,"},{"line_number":13,"context_line":"publisher_id, event_type, metadata, and payload"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3a961159_88f5afcc","line":10,"in_reply_to":"3a961159_db24cd61","updated":"2015-01-07 16:15:10.000000000","message":"i left it as is since i don\u0027t really see a difference. let me know if you\u0027d really really like to see me change it :)","commit_id":"5a5b683d72de81ac950f9fb0b93d13fa60a594e1"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"256b56b0e461b3d3cc45da8460bb7e47db02a172","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Filters use regular expression and look like:"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    class WarnHandler(object):"},{"line_number":18,"context_line":"        filter_rule \u003d NotificationFilter(publisher_id\u003d\u0027^compute.*\u0027)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"More examples are available in the NotificationFilter class"},{"line_number":21,"context_line":"documentation."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3a961159_1be9f5e5","line":18,"updated":"2014-12-23 11:07:48.000000000","message":"i feel a bit concerned about adding code snippets to commit message body.","commit_id":"5a5b683d72de81ac950f9fb0b93d13fa60a594e1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7eb1b2359f825e629af7de80374224f13fd15e35","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Filters use regular expression and look like:"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    class WarnHandler(object):"},{"line_number":18,"context_line":"        filter_rule \u003d NotificationFilter(publisher_id\u003d\u0027^compute.*\u0027)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"More examples are available in the NotificationFilter class"},{"line_number":21,"context_line":"documentation."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3a961159_c86417b5","line":18,"in_reply_to":"3a961159_1be9f5e5","updated":"2015-01-07 16:15:10.000000000","message":"Done","commit_id":"5a5b683d72de81ac950f9fb0b93d13fa60a594e1"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"256b56b0e461b3d3cc45da8460bb7e47db02a172","unresolved":false,"context_lines":[{"line_number":18,"context_line":"        filter_rule \u003d NotificationFilter(publisher_id\u003d\u0027^compute.*\u0027)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"More examples are available in the NotificationFilter class"},{"line_number":21,"context_line":"documentation."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Implements: blueprint notification-dispatcher-filter"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3a961159_5b18dd1d","line":21,"updated":"2014-12-23 11:07:48.000000000","message":"This should be a DocImpact flag","commit_id":"5a5b683d72de81ac950f9fb0b93d13fa60a594e1"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"7eb1b2359f825e629af7de80374224f13fd15e35","unresolved":false,"context_lines":[{"line_number":18,"context_line":"        filter_rule \u003d NotificationFilter(publisher_id\u003d\u0027^compute.*\u0027)"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"More examples are available in the NotificationFilter class"},{"line_number":21,"context_line":"documentation."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Implements: blueprint notification-dispatcher-filter"},{"line_number":24,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":19,"id":"3a961159_485907fc","line":21,"in_reply_to":"3a961159_5b18dd1d","updated":"2015-01-07 16:15:10.000000000","message":"Done","commit_id":"5a5b683d72de81ac950f9fb0b93d13fa60a594e1"}],"oslo/messaging/notify/dispatcher.py":[{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"db57bc078a15f06a6240ca804e2eb650adb0924a","unresolved":false,"context_lines":[{"line_number":56,"context_line":"                method \u003d getattr(endpoint, prio)"},{"line_number":57,"context_line":"                nfilter \u003d getattr(endpoint, \u0027filter\u0027, None)"},{"line_number":58,"context_line":"                self._callbacks_by_priority.setdefault(prio, []).append("},{"line_number":59,"context_line":"                    (nfilter, method))"},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"        priorities \u003d self._callbacks_by_priority.keys()"},{"line_number":62,"context_line":"        self._targets_priorities \u003d set(itertools.product(self.targets,"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_2752fedd","line":59,"updated":"2014-06-20 14:50:33.000000000","message":"I wondered for a minute whether it would be cleaner to do:\n\n  def filtering_method(...):\n      if not filter.match(...):\n          return NOT_HANDLED\n      return method(...)\n\n  ...append(filtering_method if filter else method)\n\nbut I guess that would be a little wasteful","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"db57bc078a15f06a6240ca804e2eb650adb0924a","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        for nfilter, callback in self._callbacks_by_priority.get(priority, []):"},{"line_number":120,"context_line":"            if nfilter and not nfilter.match(ctxt, publisher_id, event_type,"},{"line_number":121,"context_line":"                                             metadata):"},{"line_number":122,"context_line":"                continue"},{"line_number":123,"context_line":"            localcontext.set_local_context(ctxt)"},{"line_number":124,"context_line":"            try:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_474d4a3a","line":121,"updated":"2014-06-20 14:50:33.000000000","message":"I feel like we may have discussed this before, but why no support for matching on the payload?","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"e347951733e7dde15aa73639ca120570db5d4ffd","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        for endpoint, prio in itertools.product(endpoints, PRIORITIES):"},{"line_number":55,"context_line":"            if hasattr(endpoint, prio):"},{"line_number":56,"context_line":"                method \u003d getattr(endpoint, prio)"},{"line_number":57,"context_line":"                nfilter \u003d getattr(endpoint, \u0027filter\u0027, None)"},{"line_number":58,"context_line":"                self._callbacks_by_priority.setdefault(prio, []).append("},{"line_number":59,"context_line":"                    (nfilter, method))"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_e570d1dc","line":57,"updated":"2014-12-05 11:20:18.000000000","message":"The variable needs more obvious name.","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bac4e77814855495d17f03de0b952dbaa780d159","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        for endpoint, prio in itertools.product(endpoints, PRIORITIES):"},{"line_number":55,"context_line":"            if hasattr(endpoint, prio):"},{"line_number":56,"context_line":"                method \u003d getattr(endpoint, prio)"},{"line_number":57,"context_line":"                nfilter \u003d getattr(endpoint, \u0027filter\u0027, None)"},{"line_number":58,"context_line":"                self._callbacks_by_priority.setdefault(prio, []).append("},{"line_number":59,"context_line":"                    (nfilter, method))"},{"line_number":60,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_a24c8a9f","line":57,"in_reply_to":"5a890539_e570d1dc","updated":"2014-12-10 22:34:08.000000000","message":"Done","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"e347951733e7dde15aa73639ca120570db5d4ffd","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        payload \u003d self.serializer.deserialize_entity(ctxt,"},{"line_number":117,"context_line":"                                                     message.get(\u0027payload\u0027))"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        for nfilter, callback in self._callbacks_by_priority.get(priority, []):"},{"line_number":120,"context_line":"            if nfilter and not nfilter.match(ctxt, publisher_id, event_type,"},{"line_number":121,"context_line":"                                             metadata, payload):"},{"line_number":122,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_c55af550","line":119,"updated":"2014-12-05 11:20:18.000000000","message":"Same here. Or maybe a short note if the string will be too long.","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bac4e77814855495d17f03de0b952dbaa780d159","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        payload \u003d self.serializer.deserialize_entity(ctxt,"},{"line_number":117,"context_line":"                                                     message.get(\u0027payload\u0027))"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        for nfilter, callback in self._callbacks_by_priority.get(priority, []):"},{"line_number":120,"context_line":"            if nfilter and not nfilter.match(ctxt, publisher_id, event_type,"},{"line_number":121,"context_line":"                                             metadata, payload):"},{"line_number":122,"context_line":"                continue"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_c2519637","line":119,"in_reply_to":"5a890539_c55af550","updated":"2014-12-10 22:34:08.000000000","message":"Done","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"}],"oslo/messaging/notify/filter.py":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"6a60cf03da6b57a876bc2cab0c6b501d3330bbe5","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                and not self.regex_event_type.match(event_type):"},{"line_number":40,"context_line":"            return False"},{"line_number":41,"context_line":"        for k in self.regexs_context:"},{"line_number":42,"context_line":"            if not self.regexs_context[k].match(context[k]):"},{"line_number":43,"context_line":"                return False"},{"line_number":44,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXH%2F%2FpYE%3D","line":42,"updated":"2014-04-18 14:52:29.000000000","message":"key in self.regexs_context isn\u0027t always  in context. Here may raise KeyError, I\u0027d like a scenario of this to be added in test.","commit_id":"26b1ccecf689a2380f632224dc34d02de60d124a"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f40be3772cd23a5f3bf2599b0f8ba2ce4297fa25","unresolved":false,"context_lines":[{"line_number":39,"context_line":"                and not self.regex_event_type.match(event_type):"},{"line_number":40,"context_line":"            return False"},{"line_number":41,"context_line":"        for k in self.regexs_context:"},{"line_number":42,"context_line":"            if not self.regexs_context[k].match(context[k]):"},{"line_number":43,"context_line":"                return False"},{"line_number":44,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXH%2F%2FUzg%3D","line":42,"in_reply_to":"AAAAXH%2F%2FpYE%3D","updated":"2014-04-22 14:02:02.000000000","message":"Done and test added","commit_id":"26b1ccecf689a2380f632224dc34d02de60d124a"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"282b0b811ececfd9ceeab8427f9fae389d82622a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"# Copyright 2013 eNovance"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_97b14546","line":3,"updated":"2014-06-20 12:50:42.000000000","message":"This is file just created. Please, change the year.","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"db57bc078a15f06a6240ca804e2eb650adb0924a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2011 OpenStack Foundation."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"# Copyright 2013 eNovance"},{"line_number":4,"context_line":"#"},{"line_number":5,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":6,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":7,"context_line":"#    a copy of the License at"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_675fa6e5","line":4,"updated":"2014-06-20 14:50:33.000000000","message":"Well, Mehdi wrote the code in 2013. He is the copyright holder, it is up to him to decide what date is most appropriate","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"db57bc078a15f06a6240ca804e2eb650adb0924a","unresolved":false,"context_lines":[{"line_number":23,"context_line":"        self.regexs_context \u003d {}"},{"line_number":24,"context_line":"        self.regex_publisher_id \u003d None"},{"line_number":25,"context_line":"        self.regex_event_type \u003d None"},{"line_number":26,"context_line":"        self.regexs_metadata \u003d {}"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if publisher_id:"},{"line_number":29,"context_line":"            self.regex_publisher_id \u003d re.compile(publisher_id)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_8762f2aa","line":26,"updated":"2014-06-20 14:50:33.000000000","message":"These should all be private attributes, but perhaps make the non-compile parameters available as public attributes?","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"db57bc078a15f06a6240ca804e2eb650adb0924a","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        self.regex_event_type \u003d None"},{"line_number":26,"context_line":"        self.regexs_metadata \u003d {}"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if publisher_id:"},{"line_number":29,"context_line":"            self.regex_publisher_id \u003d re.compile(publisher_id)"},{"line_number":30,"context_line":"        if event_type:"},{"line_number":31,"context_line":"            self.regex_event_type \u003d re.compile(event_type)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_a7552ec3","line":28,"updated":"2014-06-20 14:50:33.000000000","message":"Interesting to consider what happens if someone passes publiser_id\u003d\u0027\u0027 - I guess we match everything, so not compiling it into a regexp in that case is a nice and simple optimization?\n\nOr maybe \"if publisher_id is None\" would be more easily understood","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"a2d4e4e7cbf4aa9a177df79b09cc75e8a2264735","unresolved":false,"context_lines":[{"line_number":25,"context_line":"        self.regex_event_type \u003d None"},{"line_number":26,"context_line":"        self.regexs_metadata \u003d {}"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"        if publisher_id:"},{"line_number":29,"context_line":"            self.regex_publisher_id \u003d re.compile(publisher_id)"},{"line_number":30,"context_line":"        if event_type:"},{"line_number":31,"context_line":"            self.regex_event_type \u003d re.compile(event_type)"}],"source_content_type":"text/x-python","patch_set":15,"id":"baada198_dab893ca","line":28,"in_reply_to":"1ae5cdf2_a7552ec3","updated":"2014-07-03 16:18:08.000000000","message":"I think you meant \"if publisher_id is not None\", right?","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"282b0b811ececfd9ceeab8427f9fae389d82622a","unresolved":false,"context_lines":[{"line_number":37,"context_line":"                                        for k in metadata)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def match(self, context, publisher_id, event_type, metadata):"},{"line_number":40,"context_line":"        if self.regex_publisher_id \\"},{"line_number":41,"context_line":"                and not self.regex_publisher_id.match(publisher_id):"},{"line_number":42,"context_line":"            return False"},{"line_number":43,"context_line":"        if self.regex_event_type \\"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_57789d2a","line":40,"updated":"2014-06-20 12:50:42.000000000","message":"Please, think about how to squash `if` statements with the same action. Anyway your `if` statements are longer than 80 characters.","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"db57bc078a15f06a6240ca804e2eb650adb0924a","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    def match(self, context, publisher_id, event_type, metadata):"},{"line_number":40,"context_line":"        if self.regex_publisher_id \\"},{"line_number":41,"context_line":"                and not self.regex_publisher_id.match(publisher_id):"},{"line_number":42,"context_line":"            return False"},{"line_number":43,"context_line":"        if self.regex_event_type \\"},{"line_number":44,"context_line":"                and not self.regex_event_type.match(event_type):"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_c7587afb","line":41,"updated":"2014-06-20 14:50:33.000000000","message":"Yeah, we avoid backlash line continuations - I thought we had a pep8 rule for that\n\nInstead:\n\n  if (foo\n      and bar):","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"db57bc078a15f06a6240ca804e2eb650adb0924a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        if self.regex_publisher_id \\"},{"line_number":41,"context_line":"                and not self.regex_publisher_id.match(publisher_id):"},{"line_number":42,"context_line":"            return False"},{"line_number":43,"context_line":"        if self.regex_event_type \\"},{"line_number":44,"context_line":"                and not self.regex_event_type.match(event_type):"},{"line_number":45,"context_line":"            return False"},{"line_number":46,"context_line":"        for k in self.regexs_context:"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_e772d67a","line":43,"updated":"2014-06-20 14:50:33.000000000","message":"I think \"if self.regex_event_type is None\" is more clear - I don\u0027t want to have to figure out what happens when you coerce a regexp into a boolean :)","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"},{"author":{"_account_id":7536,"name":"Ilya Pekelny","email":"ipekelny@mirantis.com","username":"I159"},"change_message_id":"e347951733e7dde15aa73639ca120570db5d4ffd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 eNovance"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_402353aa","line":2,"updated":"2014-12-05 11:20:18.000000000","message":"Seems like the copyright is wrong. This is a new module isn\u0027t it?","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bac4e77814855495d17f03de0b952dbaa780d159","unresolved":false,"context_lines":[{"line_number":1,"context_line":"#"},{"line_number":2,"context_line":"# Copyright 2013 eNovance"},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_9cb8d5c9","line":2,"in_reply_to":"5a890539_402353aa","updated":"2014-12-10 22:34:08.000000000","message":"i think this is just a super old patch","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"65fe8f9de5c667faef57cd8de5ffd75234883c03","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import re"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class NotificationFilter(object):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    \"\"\"Filter notification messages"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_a6ecf8bc","line":18,"updated":"2014-12-05 23:34:32.000000000","message":"Is this better named RegexNotificationFilter?","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bac4e77814855495d17f03de0b952dbaa780d159","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import re"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class NotificationFilter(object):"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"    \"\"\"Filter notification messages"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_fc12b907","line":18,"in_reply_to":"5a890539_a6ecf8bc","updated":"2014-12-10 22:34:08.000000000","message":"slight preference for just keeping it NotificationFilter... unless we have another filtering option lined up.","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"65fe8f9de5c667faef57cd8de5ffd75234883c03","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        if event_type is not None:"},{"line_number":52,"context_line":"            self._regex_event_type \u003d re.compile(event_type)"},{"line_number":53,"context_line":"        if context is not None:"},{"line_number":54,"context_line":"            self._regexs_context \u003d dict((k, re.compile(context[k]))"},{"line_number":55,"context_line":"                                        for k in context)"},{"line_number":56,"context_line":"        if metadata is not None:"},{"line_number":57,"context_line":"            self._regexs_metadata \u003d dict((k, re.compile(metadata[k]))"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_e62d20ff","line":54,"updated":"2014-12-05 23:34:32.000000000","message":"This same logic is repeated 3 times, maybe a tiny lambda or helper function?","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bac4e77814855495d17f03de0b952dbaa780d159","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        if event_type is not None:"},{"line_number":52,"context_line":"            self._regex_event_type \u003d re.compile(event_type)"},{"line_number":53,"context_line":"        if context is not None:"},{"line_number":54,"context_line":"            self._regexs_context \u003d dict((k, re.compile(context[k]))"},{"line_number":55,"context_line":"                                        for k in context)"},{"line_number":56,"context_line":"        if metadata is not None:"},{"line_number":57,"context_line":"            self._regexs_metadata \u003d dict((k, re.compile(metadata[k]))"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_427686d8","line":54,"in_reply_to":"5a890539_e62d20ff","updated":"2014-12-10 22:34:08.000000000","message":"Done","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"},{"author":{"_account_id":1297,"name":"Joshua Harlow","email":"jxharlow@godaddy.com","username":"harlowja"},"change_message_id":"65fe8f9de5c667faef57cd8de5ffd75234883c03","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        if (self._regex_publisher_id is not None and"},{"line_number":65,"context_line":"                not self._regex_publisher_id.match(publisher_id)):"},{"line_number":66,"context_line":"            return False"},{"line_number":67,"context_line":"        if (self._regex_event_type is not None and"},{"line_number":68,"context_line":"                not self._regex_event_type.match(event_type)):"},{"line_number":69,"context_line":"            return False"},{"line_number":70,"context_line":"        for k in self._regexs_context:"}],"source_content_type":"text/x-python","patch_set":17,"id":"5a890539_06330c63","line":67,"updated":"2014-12-05 23:34:32.000000000","message":"Ditto, maybe a tiny helper function to avoid all the common stuff?","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"},{"author":{"_account_id":6537,"name":"gordon chung","email":"gord@live.ca","username":"chungg"},"change_message_id":"bac4e77814855495d17f03de0b952dbaa780d159","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        if (self._regex_publisher_id is not None and"},{"line_number":65,"context_line":"                not self._regex_publisher_id.match(publisher_id)):"},{"line_number":66,"context_line":"            return False"},{"line_number":67,"context_line":"        if (self._regex_event_type is not None and"},{"line_number":68,"context_line":"                not self._regex_event_type.match(event_type)):"},{"line_number":69,"context_line":"            return False"},{"line_number":70,"context_line":"        for k in self._regexs_context:"}],"source_content_type":"text/x-python","patch_set":17,"id":"3a961159_827ceeb6","line":67,"in_reply_to":"5a890539_06330c63","updated":"2014-12-10 22:34:08.000000000","message":"Done","commit_id":"65122236756a2716f2ee315b4fad8522c359b973"}],"oslo/messaging/notify/listener.py":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"6a60cf03da6b57a876bc2cab0c6b501d3330bbe5","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    class ErrorEndpoint(object):"},{"line_number":54,"context_line":"        filter \u003d NotificationFilter(event_type\u003d\u0027^instance\\..*\\.start$\u0027,"},{"line_number":55,"context_line":"                                    context\u003d{\u0027ctxt_key\u0027: \u0027regexp\u0027)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        def error(self, ctxt, publisher_id, event_type, payload, metadata):"},{"line_number":58,"context_line":"            do_something(payload)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXH%2F%2FphE%3D","line":55,"updated":"2014-04-18 14:52:29.000000000","message":"missing one } before )","commit_id":"26b1ccecf689a2380f632224dc34d02de60d124a"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f40be3772cd23a5f3bf2599b0f8ba2ce4297fa25","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    class ErrorEndpoint(object):"},{"line_number":54,"context_line":"        filter \u003d NotificationFilter(event_type\u003d\u0027^instance\\..*\\.start$\u0027,"},{"line_number":55,"context_line":"                                    context\u003d{\u0027ctxt_key\u0027: \u0027regexp\u0027)"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        def error(self, ctxt, publisher_id, event_type, payload, metadata):"},{"line_number":58,"context_line":"            do_something(payload)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXH%2F%2FU18%3D","line":55,"in_reply_to":"AAAAXH%2F%2FphE%3D","updated":"2014-04-22 14:02:02.000000000","message":"Done","commit_id":"26b1ccecf689a2380f632224dc34d02de60d124a"},{"author":{"_account_id":1247,"name":"Mark McLoughlin","email":"markmc@redhat.com","username":"markmc"},"change_message_id":"db57bc078a15f06a6240ca804e2eb650adb0924a","unresolved":false,"context_lines":[{"line_number":52,"context_line":""},{"line_number":53,"context_line":"    class ErrorEndpoint(object):"},{"line_number":54,"context_line":"        filter \u003d NotificationFilter(event_type\u003d\u0027^instance\\..*\\.start$\u0027,"},{"line_number":55,"context_line":"                                    context\u003d{\u0027ctxt_key\u0027: \u0027regexp\u0027})"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"        def error(self, ctxt, publisher_id, event_type, payload, metadata):"},{"line_number":58,"context_line":"            do_something(payload)"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_076ee295","line":55,"updated":"2014-06-20 14:50:33.000000000","message":"Ok, I missed these examples - nice\n\nWould be good to have more explicit docs in NotificationFilter itself, tho","commit_id":"a083c5e1c8c47beba2cb4b721b3259081ce3b854"}],"oslo_messaging/notify/filter.py":[{"author":{"_account_id":2472,"name":"Doug Hellmann","email":"dhellmann@redhat.com","username":"doug-hellmann"},"change_message_id":"9e7d9163046d3116e56e10ccd5fe7aedbbf120fa","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    filter_rule \u003d  NotificationFilter("},{"line_number":32,"context_line":"         publisher_id\u003d\u0027^compute.*\u0027,"},{"line_number":33,"context_line":"         context\u003d{\u0027tenant_id\u0027: \u0027^5f643cfc-664b-4c69-8000-ce2ed7b08216$\u0027,"},{"line_number":34,"context_line":"                  \u0027roles\u003d\u0027private\u0027},"},{"line_number":35,"context_line":"         event_type\u003d\u0027^compute\\.instance\\..*\u0027,"},{"line_number":36,"context_line":"         metadata\u003d{\u0027timestamp\u0027: \u0027Aug\u0027},"},{"line_number":37,"context_line":"         payload\u003d{\u0027state\u0027: \u0027^active$\u0027)"}],"source_content_type":"text/x-python","patch_set":22,"id":"da86d52c_d342450f","line":34,"updated":"2015-02-03 19:53:33.000000000","message":"nit: missing \u0027 between \"roles\" and \"\u003d\" in the example.","commit_id":"3d232a0f389eb46b857bf209644f5ac817b88801"}],"tests/test_notify_dispatcher.py":[{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"6a60cf03da6b57a876bc2cab0c6b501d3330bbe5","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            callback()"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        if self.match:"},{"line_number":211,"context_line":"            self.assertEqual(endpoint.info.call_count, 1)"},{"line_number":212,"context_line":"        else:"},{"line_number":213,"context_line":"            self.assertEqual(endpoint.info.call_count, 0)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXH%2F%2Fpd8%3D","line":211,"updated":"2014-04-18 14:52:29.000000000","message":"The parameter order for assertEqual is (expected, actual)","commit_id":"26b1ccecf689a2380f632224dc34d02de60d124a"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f40be3772cd23a5f3bf2599b0f8ba2ce4297fa25","unresolved":false,"context_lines":[{"line_number":208,"context_line":"            callback()"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"        if self.match:"},{"line_number":211,"context_line":"            self.assertEqual(endpoint.info.call_count, 1)"},{"line_number":212,"context_line":"        else:"},{"line_number":213,"context_line":"            self.assertEqual(endpoint.info.call_count, 0)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXH%2F%2FU2M%3D","line":211,"in_reply_to":"AAAAXH%2F%2Fpd8%3D","updated":"2014-04-22 14:02:02.000000000","message":"Done","commit_id":"26b1ccecf689a2380f632224dc34d02de60d124a"},{"author":{"_account_id":9796,"name":"ChangBo Guo","email":"glongwave@gmail.com","username":"gcb"},"change_message_id":"6a60cf03da6b57a876bc2cab0c6b501d3330bbe5","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        if self.match:"},{"line_number":211,"context_line":"            self.assertEqual(endpoint.info.call_count, 1)"},{"line_number":212,"context_line":"        else:"},{"line_number":213,"context_line":"            self.assertEqual(endpoint.info.call_count, 0)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXH%2F%2FpdY%3D","line":213,"updated":"2014-04-18 14:52:29.000000000","message":"ditto","commit_id":"26b1ccecf689a2380f632224dc34d02de60d124a"},{"author":{"_account_id":2813,"name":"Mehdi Abaakouk","email":"sileht@sileht.net","username":"sileht"},"change_message_id":"f40be3772cd23a5f3bf2599b0f8ba2ce4297fa25","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        if self.match:"},{"line_number":211,"context_line":"            self.assertEqual(endpoint.info.call_count, 1)"},{"line_number":212,"context_line":"        else:"},{"line_number":213,"context_line":"            self.assertEqual(endpoint.info.call_count, 0)"}],"source_content_type":"text/x-python","patch_set":13,"id":"AAAAXH%2F%2FU2I%3D","line":213,"in_reply_to":"AAAAXH%2F%2FpdY%3D","updated":"2014-04-22 14:02:02.000000000","message":"Done","commit_id":"26b1ccecf689a2380f632224dc34d02de60d124a"}]}
