)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"38d168b16433a5701d54013e2eec89b4964e1a79","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\u0027after\u0027 hook is executed after the \u0027after\u0027 hook for the policy engine."},{"line_number":14,"context_line":"This will ensure that any \u0027alien\u0027 data returned from the plugin is"},{"line_number":15,"context_line":"stripped off before being sent to the notifiers, as well as any"},{"line_number":16,"context_line":"attribute that the user is not authorized to access."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Since delete operations require to send the original object to the"},{"line_number":19,"context_line":"notifier, this patch leverages the \"prefetch\" feature of the policy"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a57f1b5_0c10864d","line":16,"updated":"2016-02-11 14:49:07.000000000","message":"it doesn\u0027t seem the latter half of this statement is the way it should behave. It makes sense to strip alien data off, but I thought that all notifications are privileged and therefore should have all of the admin-only stuff (e.g. port binding info) since they are going to operator-run systems. It seems strange that you could observe port notifications on the bus with different fields depending on who did the creation. Is that how it works now?","commit_id":"ba1a19a48c34a28611fbc02153a4ed744adde503"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"5e7b28e567a97e5e3bbe80d27501befb9e95af0d","unresolved":false,"context_lines":[{"line_number":13,"context_line":"\u0027after\u0027 hook is executed after the \u0027after\u0027 hook for the policy engine."},{"line_number":14,"context_line":"This will ensure that any \u0027alien\u0027 data returned from the plugin is"},{"line_number":15,"context_line":"stripped off before being sent to the notifiers, as well as any"},{"line_number":16,"context_line":"attribute that the user is not authorized to access."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Since delete operations require to send the original object to the"},{"line_number":19,"context_line":"notifier, this patch leverages the \"prefetch\" feature of the policy"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"3a57f1b5_5eae1299","line":16,"in_reply_to":"3a57f1b5_0c10864d","updated":"2016-02-11 19:26:10.000000000","message":"It does not work this way currently... or at least I don\u0027t think so!\nHonestly this is a minor point that I could revert. While doing the tests I noticed that I was having failures as the notifier was called with vlan_transparent attribute which was not then returned to the client, and it occurred to me that the current api first applies policy on response and then sends stuff to the notifier.\n\nThe notifier is kind of privileged so this maybe does not matter a lot, but it might make sense to preserve the current API processing behaviour in order to avoid unexpected surprises.\n\nSaid that restoring the hook order would take like 5 minutes. I\u0027d have to tweak a test too, but it would just take 5 more minutes.","commit_id":"ba1a19a48c34a28611fbc02153a4ed744adde503"}],"neutron/pecan_wsgi/constants.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5ac735529f431c293c27a6300568a4a905dabe68","unresolved":false,"context_lines":[{"line_number":15,"context_line":"ACTION_MAP \u003d {\u0027POST\u0027: \u0027create\u0027,"},{"line_number":16,"context_line":"              \u0027PUT\u0027: \u0027update\u0027,"},{"line_number":17,"context_line":"              \u0027GET\u0027: \u0027get\u0027,"},{"line_number":18,"context_line":"              \u0027DELETE\u0027: \u0027delete\u0027}"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_6ba1e8f7","line":18,"updated":"2016-02-18 07:09:12.000000000","message":"could have sworn this was already defined somewhere else...","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"e4471b4215de58afc889d0c8e1b991bbe8a65d0a","unresolved":false,"context_lines":[{"line_number":15,"context_line":"ACTION_MAP \u003d {\u0027POST\u0027: \u0027create\u0027,"},{"line_number":16,"context_line":"              \u0027PUT\u0027: \u0027update\u0027,"},{"line_number":17,"context_line":"              \u0027GET\u0027: \u0027get\u0027,"},{"line_number":18,"context_line":"              \u0027DELETE\u0027: \u0027delete\u0027}"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_f3102e02","line":18,"in_reply_to":"dae33548_31ec6a29","updated":"2016-02-18 16:59:10.000000000","message":"yeah i grepped too and couldn\u0027t find it.  I think i might just be mixing my memory of the previous version of the quota hook.","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"b2e38cdff1dcd58478d24b73f01a82ef612b6cb6","unresolved":false,"context_lines":[{"line_number":15,"context_line":"ACTION_MAP \u003d {\u0027POST\u0027: \u0027create\u0027,"},{"line_number":16,"context_line":"              \u0027PUT\u0027: \u0027update\u0027,"},{"line_number":17,"context_line":"              \u0027GET\u0027: \u0027get\u0027,"},{"line_number":18,"context_line":"              \u0027DELETE\u0027: \u0027delete\u0027}"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_31ec6a29","line":18,"in_reply_to":"dae33548_6ba1e8f7","updated":"2016-02-18 10:23:32.000000000","message":"I thought that too.\nMaybe I\u0027ve not been good enough with grep.","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"}],"neutron/pecan_wsgi/hooks/notifier.py":[{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"4e67e108acf9a6d90892ffb8e046720665398740","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                    state.request.context.get(\u0027request_resources\u0027, [])}"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            try:"},{"line_number":73,"context_line":"                data \u003d jsonutils.loads(state.response.body)"},{"line_number":74,"context_line":"            except ValueError:"},{"line_number":75,"context_line":"                if not state.response.body:"},{"line_number":76,"context_line":"                    data \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_7d9ec907","line":73,"updated":"2016-02-18 09:33:00.000000000","message":"The reason we guessed during the mid-cycle was that state.response.json does not do the same encoding handling like jsonutils does. Salvatore, can you verify?","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5ac735529f431c293c27a6300568a4a905dabe68","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                    state.request.context.get(\u0027request_resources\u0027, [])}"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            try:"},{"line_number":73,"context_line":"                data \u003d jsonutils.loads(state.response.body)"},{"line_number":74,"context_line":"            except ValueError:"},{"line_number":75,"context_line":"                if not state.response.body:"},{"line_number":76,"context_line":"                    data \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_eba17895","line":73,"updated":"2016-02-18 07:09:12.000000000","message":"couldn\u0027t do state.response.json or state.response.json_body? to either save the exception handling or at least using jsonutils\n\nI think kevin and I went over this actually at the lbaas midcycle and I think there was a good reason for this, but it escapes me.","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"b2e38cdff1dcd58478d24b73f01a82ef612b6cb6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                    state.request.context.get(\u0027request_resources\u0027, [])}"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            try:"},{"line_number":73,"context_line":"                data \u003d jsonutils.loads(state.response.body)"},{"line_number":74,"context_line":"            except ValueError:"},{"line_number":75,"context_line":"                if not state.response.body:"},{"line_number":76,"context_line":"                    data \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_f154c2ca","line":73,"in_reply_to":"dae33548_7d9ec907","updated":"2016-02-18 10:23:32.000000000","message":"I\u0027ve never seen a difference in encoding actually.\n\nthe point is that I\u0027m using jsonutils to avoid obvious review comments like:\n\"please use jsonutils as it is the official openstack routine for encoding decoding json\"","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"e4471b4215de58afc889d0c8e1b991bbe8a65d0a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                    state.request.context.get(\u0027request_resources\u0027, [])}"},{"line_number":71,"context_line":"        else:"},{"line_number":72,"context_line":"            try:"},{"line_number":73,"context_line":"                data \u003d jsonutils.loads(state.response.body)"},{"line_number":74,"context_line":"            except ValueError:"},{"line_number":75,"context_line":"                if not state.response.body:"},{"line_number":76,"context_line":"                    data \u003d {}"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_13a15346","line":73,"in_reply_to":"dae33548_f154c2ca","updated":"2016-02-18 16:59:10.000000000","message":"yea i had a feeling it was something like that. no biggie.","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"}],"neutron/tests/functional/pecan_wsgi/test_hooks.py":[{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5ac735529f431c293c27a6300568a4a905dabe68","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        # the agent"},{"line_number":189,"context_line":"        patcher \u003d mock.patch(\u0027neutron.api.rpc.agentnotifiers.\u0027"},{"line_number":190,"context_line":"                             \u0027dhcp_rpc_agent_api.DhcpAgentNotifyAPI.notify\u0027)"},{"line_number":191,"context_line":"        self.mock_notifier \u003d patcher.start()"},{"line_number":192,"context_line":"        super(TestNotifierHook, self).setUp()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def test_dhcp_notifications_disabled(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_eb3df82b","line":191,"updated":"2016-02-18 07:09:12.000000000","message":"I\u0027ve seen some weird issues pop up when you don\u0027t do the patcher.stop() as well.  Could you add the patcher.stop method as a cleanup method?","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"4e67e108acf9a6d90892ffb8e046720665398740","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        # the agent"},{"line_number":189,"context_line":"        patcher \u003d mock.patch(\u0027neutron.api.rpc.agentnotifiers.\u0027"},{"line_number":190,"context_line":"                             \u0027dhcp_rpc_agent_api.DhcpAgentNotifyAPI.notify\u0027)"},{"line_number":191,"context_line":"        self.mock_notifier \u003d patcher.start()"},{"line_number":192,"context_line":"        super(TestNotifierHook, self).setUp()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def test_dhcp_notifications_disabled(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_1d9b3d19","line":191,"updated":"2016-02-18 09:33:00.000000000","message":"Last time I\u0027ll paste this, I swear ;)\n\nhttps://github.com/openstack/neutron/blob/1d0aadb6fcf40048e899df6688bda98744c2a999/neutron/tests/base.py#L150","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"b2e38cdff1dcd58478d24b73f01a82ef612b6cb6","unresolved":false,"context_lines":[{"line_number":188,"context_line":"        # the agent"},{"line_number":189,"context_line":"        patcher \u003d mock.patch(\u0027neutron.api.rpc.agentnotifiers.\u0027"},{"line_number":190,"context_line":"                             \u0027dhcp_rpc_agent_api.DhcpAgentNotifyAPI.notify\u0027)"},{"line_number":191,"context_line":"        self.mock_notifier \u003d patcher.start()"},{"line_number":192,"context_line":"        super(TestNotifierHook, self).setUp()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def test_dhcp_notifications_disabled(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_b1fcfab8","line":191,"in_reply_to":"dae33548_1d9b3d19","updated":"2016-02-18 10:23:32.000000000","message":"Thanks for saving me that time to find the link!","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5ac735529f431c293c27a6300568a4a905dabe68","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        patcher \u003d mock.patch(\u0027neutron.api.rpc.agentnotifiers.\u0027"},{"line_number":190,"context_line":"                             \u0027dhcp_rpc_agent_api.DhcpAgentNotifyAPI.notify\u0027)"},{"line_number":191,"context_line":"        self.mock_notifier \u003d patcher.start()"},{"line_number":192,"context_line":"        super(TestNotifierHook, self).setUp()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def test_dhcp_notifications_disabled(self):"},{"line_number":195,"context_line":"        cfg.CONF.set_override(\u0027dhcp_agent_notification\u0027, False)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_cb0bd47b","line":192,"updated":"2016-02-18 07:09:12.000000000","message":"any reason why super setup is not called first?","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"b2e38cdff1dcd58478d24b73f01a82ef612b6cb6","unresolved":false,"context_lines":[{"line_number":189,"context_line":"        patcher \u003d mock.patch(\u0027neutron.api.rpc.agentnotifiers.\u0027"},{"line_number":190,"context_line":"                             \u0027dhcp_rpc_agent_api.DhcpAgentNotifyAPI.notify\u0027)"},{"line_number":191,"context_line":"        self.mock_notifier \u003d patcher.start()"},{"line_number":192,"context_line":"        super(TestNotifierHook, self).setUp()"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def test_dhcp_notifications_disabled(self):"},{"line_number":195,"context_line":"        cfg.CONF.set_override(\u0027dhcp_agent_notification\u0027, False)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_911e160a","line":192,"in_reply_to":"dae33548_cb0bd47b","updated":"2016-02-18 10:23:32.000000000","message":"no reason. I was just being conservative...","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5ac735529f431c293c27a6300568a4a905dabe68","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            \u0027/v2.0/networks.json\u0027,"},{"line_number":198,"context_line":"            params\u003d{\u0027network\u0027: {\u0027name\u0027: \u0027meh\u0027}},"},{"line_number":199,"context_line":"            headers\u003d{\u0027X-Project-Id\u0027: \u0027tenid\u0027})"},{"line_number":200,"context_line":"        self.assertEqual(0, self.mock_notifier.call_count)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def test_get_does_not_trigger_notification(self):"},{"line_number":203,"context_line":"        self.do_request(\u0027/v2.0/networks\u0027, tenant_id\u003d\u0027tenid\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_cb591490","line":200,"updated":"2016-02-18 07:09:12.000000000","message":"could also do self.assertFalse(self.mock_notifier.called) but no biggie","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"b2e38cdff1dcd58478d24b73f01a82ef612b6cb6","unresolved":false,"context_lines":[{"line_number":197,"context_line":"            \u0027/v2.0/networks.json\u0027,"},{"line_number":198,"context_line":"            params\u003d{\u0027network\u0027: {\u0027name\u0027: \u0027meh\u0027}},"},{"line_number":199,"context_line":"            headers\u003d{\u0027X-Project-Id\u0027: \u0027tenid\u0027})"},{"line_number":200,"context_line":"        self.assertEqual(0, self.mock_notifier.call_count)"},{"line_number":201,"context_line":""},{"line_number":202,"context_line":"    def test_get_does_not_trigger_notification(self):"},{"line_number":203,"context_line":"        self.do_request(\u0027/v2.0/networks\u0027, tenant_id\u003d\u0027tenid\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_d1141eea","line":200,"in_reply_to":"dae33548_cb591490","updated":"2016-02-18 10:23:32.000000000","message":"Done","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5ac735529f431c293c27a6300568a4a905dabe68","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        self.assertEqual(0, self.mock_notifier.call_count)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def test_post_put_delete_triggers_notification(self):"},{"line_number":207,"context_line":"        req_headers \u003d {\u0027X-Project-Id\u0027: \u0027tenid\u0027, \u0027X-Roles\u0027: \u0027admin\u0027}"},{"line_number":208,"context_line":"        response \u003d self.app.post_json("},{"line_number":209,"context_line":"            \u0027/v2.0/networks.json\u0027,"},{"line_number":210,"context_line":"            params\u003d{\u0027network\u0027: {\u0027name\u0027: \u0027meh\u0027}}, headers\u003dreq_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_cbd0f4cb","line":207,"updated":"2016-02-18 07:09:12.000000000","message":"this requires admin role?","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"b2e38cdff1dcd58478d24b73f01a82ef612b6cb6","unresolved":false,"context_lines":[{"line_number":204,"context_line":"        self.assertEqual(0, self.mock_notifier.call_count)"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"    def test_post_put_delete_triggers_notification(self):"},{"line_number":207,"context_line":"        req_headers \u003d {\u0027X-Project-Id\u0027: \u0027tenid\u0027, \u0027X-Roles\u0027: \u0027admin\u0027}"},{"line_number":208,"context_line":"        response \u003d self.app.post_json("},{"line_number":209,"context_line":"            \u0027/v2.0/networks.json\u0027,"},{"line_number":210,"context_line":"            params\u003d{\u0027network\u0027: {\u0027name\u0027: \u0027meh\u0027}}, headers\u003dreq_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_f175e231","line":207,"in_reply_to":"dae33548_cbd0f4cb","updated":"2016-02-18 10:23:32.000000000","message":"I don\u0027t think so... perhaps initially I wanted to run the tests differently.\nI can remove the admin role.","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5ac735529f431c293c27a6300568a4a905dabe68","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        json_body \u003d jsonutils.loads(response.body)"},{"line_number":213,"context_line":"        self.assertEqual(1, self.mock_notifier.call_count)"},{"line_number":214,"context_line":"        self.assertEqual(mock.call(mock.ANY, json_body, \u0027network.create.end\u0027),"},{"line_number":215,"context_line":"                         self.mock_notifier.mock_calls[-1])"},{"line_number":216,"context_line":"        network_id \u003d json_body[\u0027network\u0027][\u0027id\u0027]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        response \u003d self.app.put_json("}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_0b62dc09","line":215,"updated":"2016-02-18 07:09:12.000000000","message":"this can be simplified to this?\n\nself.mock_notifier.assert_called_once_with(mock.ANY, json_body, \u0027network.create.end\u0027)\n\nunless I\u0027m not realizing something","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"b2e38cdff1dcd58478d24b73f01a82ef612b6cb6","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        json_body \u003d jsonutils.loads(response.body)"},{"line_number":213,"context_line":"        self.assertEqual(1, self.mock_notifier.call_count)"},{"line_number":214,"context_line":"        self.assertEqual(mock.call(mock.ANY, json_body, \u0027network.create.end\u0027),"},{"line_number":215,"context_line":"                         self.mock_notifier.mock_calls[-1])"},{"line_number":216,"context_line":"        network_id \u003d json_body[\u0027network\u0027][\u0027id\u0027]"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        response \u003d self.app.put_json("}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_71af127d","line":215,"in_reply_to":"dae33548_0b62dc09","updated":"2016-02-18 10:23:32.000000000","message":"yes sure. You see the call like this because I\u0027ve been doing copy and paste","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"5ac735529f431c293c27a6300568a4a905dabe68","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        json_body \u003d jsonutils.loads(response.body)"},{"line_number":224,"context_line":"        self.assertEqual(2, self.mock_notifier.call_count)"},{"line_number":225,"context_line":"        self.assertEqual(mock.call(mock.ANY, json_body, \u0027network.update.end\u0027),"},{"line_number":226,"context_line":"                         self.mock_notifier.mock_calls[-1])"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        response \u003d self.app.delete("},{"line_number":229,"context_line":"            \u0027/v2.0/networks/%s.json\u0027 % network_id, headers\u003dreq_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_4b2fc4a0","line":226,"updated":"2016-02-18 07:09:12.000000000","message":"same for this, but before doing the the app.put_json call you would need to do a self.mock_notifier.reset_mock()","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":261,"name":"Salvatore Orlando","email":"salv.orlando@gmail.com","username":"salvatore-orlando"},"change_message_id":"b2e38cdff1dcd58478d24b73f01a82ef612b6cb6","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        json_body \u003d jsonutils.loads(response.body)"},{"line_number":224,"context_line":"        self.assertEqual(2, self.mock_notifier.call_count)"},{"line_number":225,"context_line":"        self.assertEqual(mock.call(mock.ANY, json_body, \u0027network.update.end\u0027),"},{"line_number":226,"context_line":"                         self.mock_notifier.mock_calls[-1])"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        response \u003d self.app.delete("},{"line_number":229,"context_line":"            \u0027/v2.0/networks/%s.json\u0027 % network_id, headers\u003dreq_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_d1d53ee5","line":226,"in_reply_to":"dae33548_4b2fc4a0","updated":"2016-02-18 10:23:32.000000000","message":"Agreed. I can do as you suggest, even if I like this more ;)","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"},{"author":{"_account_id":6951,"name":"Brandon Logan","email":"brandon.logan@rackspace.com","username":"brandon-logan"},"change_message_id":"e4471b4215de58afc889d0c8e1b991bbe8a65d0a","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        json_body \u003d jsonutils.loads(response.body)"},{"line_number":224,"context_line":"        self.assertEqual(2, self.mock_notifier.call_count)"},{"line_number":225,"context_line":"        self.assertEqual(mock.call(mock.ANY, json_body, \u0027network.update.end\u0027),"},{"line_number":226,"context_line":"                         self.mock_notifier.mock_calls[-1])"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"        response \u003d self.app.delete("},{"line_number":229,"context_line":"            \u0027/v2.0/networks/%s.json\u0027 % network_id, headers\u003dreq_headers)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dae33548_13aaf284","line":226,"in_reply_to":"dae33548_d1d53ee5","updated":"2016-02-18 16:59:10.000000000","message":"its a style preference type of thing in my book, keep it if you like","commit_id":"ea4ba642dd8946a96a177780b50bdd0594912813"}]}
