)]}'
{"nova/api/openstack/compute/security_groups.py":[{"author":{"_account_id":5441,"name":"Andrew Laski","email":"andrew@lascii.com","username":"alaski"},"change_message_id":"2a6235907f58959a224eeb95990e72cffe41303c","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"def _authorize_context(req):"},{"line_number":42,"context_line":"    context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":43,"context_line":"    authorize(context)"},{"line_number":44,"context_line":"    return context"},{"line_number":45,"context_line":""},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"3aaa91ec_d32983f4","side":"PARENT","line":43,"updated":"2016-06-27 14:10:25.000000000","message":"authorize is not soft so these three replacements shouldn\u0027t have fatal\u003dFalse","commit_id":"562d0e078ea62721f1861f19dc4e1d70ba90c91d"}],"nova/tests/unit/api/openstack/compute/test_used_limits.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b01eb1e544972952232642194aefeab3de4db849","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def _set_up_controller(self):"},{"line_number":46,"context_line":"        self.ext_mgr \u003d None"},{"line_number":47,"context_line":"        self.controller \u003d used_limits_v21.UsedLimitsController()"},{"line_number":48,"context_line":"        self.mock_can \u003d mock.patch.object(self.fake_context, \u0027can\u0027).start()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _do_test_used_limits(self, reserved):"},{"line_number":51,"context_line":"        fake_req \u003d FakeRequest(self.fake_context, reserved\u003dreserved)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_6e084fda","line":48,"updated":"2016-06-28 21:48:34.000000000","message":"I think here we need something like:\n\n patcher \u003d mock.patch.object(self.fake_context, \u0027can\u0027)\n self.mock_can \u003d patcher.start()\n self.addCleanup(patcher.stop)\n\nto undo patching after the test [1].\n\n[1] https://docs.python.org/dev/library/unittest.mock.html#patch-methods-start-and-stop","commit_id":"75472ded8b466495ef8c72d88e933f4ae05490c9"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7ed8f73e4287649c5c256fa423d334090dcdbc01","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    def _set_up_controller(self):"},{"line_number":46,"context_line":"        self.ext_mgr \u003d None"},{"line_number":47,"context_line":"        self.controller \u003d used_limits_v21.UsedLimitsController()"},{"line_number":48,"context_line":"        self.mock_can \u003d mock.patch.object(self.fake_context, \u0027can\u0027).start()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"    def _do_test_used_limits(self, reserved):"},{"line_number":51,"context_line":"        fake_req \u003d FakeRequest(self.fake_context, reserved\u003dreserved)"}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_f5417564","line":48,"in_reply_to":"3aaa91ec_6e084fda","updated":"2016-06-29 19:11:48.000000000","message":"yeah, I was thinking that it wasn\u0027t necessary, as I was patching an object, instead of the usual class. but it seems that patch is done at a class level and shared across instances. The more you know. :)","commit_id":"75472ded8b466495ef8c72d88e933f4ae05490c9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b01eb1e544972952232642194aefeab3de4db849","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                        usages\u003dTrue).AndReturn({})"},{"line_number":122,"context_line":"        self.mox.ReplayAll()"},{"line_number":123,"context_line":"        res \u003d wsgi.ResponseObject(obj)"},{"line_number":124,"context_line":"        self.controller.index(fake_req, res)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def test_admin_can_fetch_used_limits_for_own_project(self):"},{"line_number":127,"context_line":"        project_id \u003d \"123456\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_6e920f4d","line":124,"updated":"2016-06-28 21:48:34.000000000","message":"I think the equivalent here would be to:\n\n self.mock_can.assert_called_once_with(rule, target)","commit_id":"75472ded8b466495ef8c72d88e933f4ae05490c9"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7ed8f73e4287649c5c256fa423d334090dcdbc01","unresolved":false,"context_lines":[{"line_number":121,"context_line":"                                        usages\u003dTrue).AndReturn({})"},{"line_number":122,"context_line":"        self.mox.ReplayAll()"},{"line_number":123,"context_line":"        res \u003d wsgi.ResponseObject(obj)"},{"line_number":124,"context_line":"        self.controller.index(fake_req, res)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"    def test_admin_can_fetch_used_limits_for_own_project(self):"},{"line_number":127,"context_line":"        project_id \u003d \"123456\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_d546f979","line":124,"in_reply_to":"3aaa91ec_6e920f4d","updated":"2016-06-29 19:11:48.000000000","message":"Done","commit_id":"75472ded8b466495ef8c72d88e933f4ae05490c9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b01eb1e544972952232642194aefeab3de4db849","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        self.mox.ReplayAll()"},{"line_number":169,"context_line":"        res \u003d wsgi.ResponseObject(obj)"},{"line_number":170,"context_line":"        self.assertRaises(exception.PolicyNotAuthorized, self.controller.index,"},{"line_number":171,"context_line":"                          fake_req, res)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_used_limits_fetched_for_context_project_id(self):"},{"line_number":174,"context_line":"        project_id \u003d \"123456\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_4eae3386","line":171,"updated":"2016-06-28 21:48:34.000000000","message":"Similar here:\n\n self.mock_can.assert_called_once_with(rule, target)","commit_id":"75472ded8b466495ef8c72d88e933f4ae05490c9"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"7ed8f73e4287649c5c256fa423d334090dcdbc01","unresolved":false,"context_lines":[{"line_number":168,"context_line":"        self.mox.ReplayAll()"},{"line_number":169,"context_line":"        res \u003d wsgi.ResponseObject(obj)"},{"line_number":170,"context_line":"        self.assertRaises(exception.PolicyNotAuthorized, self.controller.index,"},{"line_number":171,"context_line":"                          fake_req, res)"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"    def test_used_limits_fetched_for_context_project_id(self):"},{"line_number":174,"context_line":"        project_id \u003d \"123456\""}],"source_content_type":"text/x-python","patch_set":7,"id":"3aaa91ec_35601d01","line":171,"in_reply_to":"3aaa91ec_4eae3386","updated":"2016-06-29 19:11:48.000000000","message":"Done","commit_id":"75472ded8b466495ef8c72d88e933f4ae05490c9"}]}
