)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5a7a862d3bb91484d36e3b01c50c51ebf97da685","unresolved":false,"context_lines":[{"line_number":11,"context_line":"use the versioned notification framework."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a validation step into the legacy notification"},{"line_number":14,"context_line":"sending call chain. It checks the even_type against a whitelist."},{"line_number":15,"context_line":"During unit and functional testing an exception is raised if the"},{"line_number":16,"context_line":"event_type is not known and therefore forbiden. This check is not"},{"line_number":17,"context_line":"100% foolproof as it only detects the new event_type if there is"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dae33548_0a103658","line":14,"updated":"2016-02-17 17:16:33.000000000","message":"event_type","commit_id":"d485a198e559b5c0ed645778202fb81db943995d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"de62faac1e1ed96e364223bcf24513e2b4cb90d0","unresolved":false,"context_lines":[{"line_number":11,"context_line":"use the versioned notification framework."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch adds a validation step into the legacy notification"},{"line_number":14,"context_line":"sending call chain. It checks the even_type against a whitelist."},{"line_number":15,"context_line":"During unit and functional testing an exception is raised if the"},{"line_number":16,"context_line":"event_type is not known and therefore forbiden. This check is not"},{"line_number":17,"context_line":"100% foolproof as it only detects the new event_type if there is"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dae33548_6050d90b","line":14,"in_reply_to":"dae33548_0a103658","updated":"2016-02-18 10:47:56.000000000","message":"Done","commit_id":"d485a198e559b5c0ed645778202fb81db943995d"}],"nova/rpc.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5a7a862d3bb91484d36e3b01c50c51ebf97da685","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                \u0027notification event type. It is not allowed to add new legacy \u0027"},{"line_number":324,"context_line":"                \u0027notifications in Nova. Every new notification shall use the \u0027"},{"line_number":325,"context_line":"                \u0027versioned notification framework. See \u0027"},{"line_number":326,"context_line":"                \u0027./doc/source/notification.rst\u0027)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def __init__(self, notifier):"},{"line_number":329,"context_line":"        self.notifier \u003d notifier"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_a5efbd1c","line":326,"updated":"2016-02-17 17:16:33.000000000","message":"This message is a bit too long and ambiguous. Maybe something a bit more direct like:\n\n%(event_type)s is not a versioned notification and not whitelisted. See ./doc/source/notification.rst\n\nLet the docs make things more clear. All the log message needs to do is signal the issue, not explain it.","commit_id":"d485a198e559b5c0ed645778202fb81db943995d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"de62faac1e1ed96e364223bcf24513e2b4cb90d0","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                \u0027notification event type. It is not allowed to add new legacy \u0027"},{"line_number":324,"context_line":"                \u0027notifications in Nova. Every new notification shall use the \u0027"},{"line_number":325,"context_line":"                \u0027versioned notification framework. See \u0027"},{"line_number":326,"context_line":"                \u0027./doc/source/notification.rst\u0027)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    def __init__(self, notifier):"},{"line_number":329,"context_line":"        self.notifier \u003d notifier"}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_51376e4c","line":326,"in_reply_to":"dae33548_a5efbd1c","updated":"2016-02-18 10:47:56.000000000","message":"Done","commit_id":"d485a198e559b5c0ed645778202fb81db943995d"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"6f7dc82b4b5286b86c10de42adbdacdff77d471a","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"    def _is_wrap_exception_notification(self, payload):"},{"line_number":334,"context_line":"        # nova.exception.wrap_exception decorator emits notification where the"},{"line_number":335,"context_line":"        # event_type is the name of the decorated function. This is used in may"},{"line_number":336,"context_line":"        # places but it will be converted to versioned notification in one run"},{"line_number":337,"context_line":"        # by updating the decorator so it is pointless to white list all the"},{"line_number":338,"context_line":"        # function names here we white list the notification itself detected"}],"source_content_type":"text/x-python","patch_set":6,"id":"bae84128_0a36d551","line":335,"updated":"2016-02-21 15:17:13.000000000","message":"s/may/many/","commit_id":"9aa4add2823c55e444a86e0d9537cceb4d2bc8ed"}],"nova/test.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"5a7a862d3bb91484d36e3b01c50c51ebf97da685","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def stub_out(self, old, new):"},{"line_number":263,"context_line":"        \"\"\"Replace a function for the duration of the test."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        Use the monkey patch fixture to replace a function for the"},{"line_number":266,"context_line":"        duration of a test. Useful when you want to provide fake"},{"line_number":267,"context_line":"        methods instead of mocks during testing."}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_25cd6d85","side":"PARENT","line":264,"updated":"2016-02-17 17:16:33.000000000","message":"Unrelated?","commit_id":"11019fab7a2415cbca8b93e9346b21327e79688d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"de62faac1e1ed96e364223bcf24513e2b4cb90d0","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"    def stub_out(self, old, new):"},{"line_number":263,"context_line":"        \"\"\"Replace a function for the duration of the test."},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"        Use the monkey patch fixture to replace a function for the"},{"line_number":266,"context_line":"        duration of a test. Useful when you want to provide fake"},{"line_number":267,"context_line":"        methods instead of mocks during testing."}],"source_content_type":"text/x-python","patch_set":4,"id":"dae33548_f11fa2b4","side":"PARENT","line":264,"in_reply_to":"dae33548_25cd6d85","updated":"2016-02-18 10:47:56.000000000","message":"definitely unrelated","commit_id":"11019fab7a2415cbca8b93e9346b21327e79688d"}]}
