)]}'
{"nova/api/openstack/extensions.py":[{"author":{"_account_id":8256,"name":"Ivo Vasev","email":"ivasev@softlayer.com","username":"Ivo"},"change_message_id":"a9d46867d2685315280f82f8bfcd0fde22174571","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                        raise"},{"line_number":487,"context_line":"                elif isinstance(exc, exception.Forbidden):"},{"line_number":488,"context_line":"                    # Note(cyeoh): Special case to handle"},{"line_number":489,"context_line":"                    # PolicyNotAuthorized exceptions so every"},{"line_number":490,"context_line":"                    # extension method does not need to wrap authorize"},{"line_number":491,"context_line":"                    # calls. ResourceExceptionHandler silently"},{"line_number":492,"context_line":"                    # converts NotAuthorized to HTTPForbidden"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_e9f130cf","line":489,"updated":"2016-03-11 19:41:56.000000000","message":"i think you miss this one","commit_id":"e2cb398faba3b52c6a0df647f5c62d05f25a67eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"34cc3d3194e05a447a84d99bc7440172a7d95478","unresolved":false,"context_lines":[{"line_number":486,"context_line":"                        raise"},{"line_number":487,"context_line":"                elif isinstance(exc, exception.Forbidden):"},{"line_number":488,"context_line":"                    # Note(cyeoh): Special case to handle"},{"line_number":489,"context_line":"                    # PolicyNotAuthorized exceptions so every"},{"line_number":490,"context_line":"                    # extension method does not need to wrap authorize"},{"line_number":491,"context_line":"                    # calls. ResourceExceptionHandler silently"},{"line_number":492,"context_line":"                    # converts NotAuthorized to HTTPForbidden"}],"source_content_type":"text/x-python","patch_set":3,"id":"3afc51ec_c41a596e","line":489,"in_reply_to":"3afc51ec_e9f130cf","updated":"2016-03-11 19:54:41.000000000","message":"Agree, should probably update this.","commit_id":"e2cb398faba3b52c6a0df647f5c62d05f25a67eb"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"04d8872525570f5ce6f3af01a3048523622807a4","unresolved":false,"context_lines":[{"line_number":489,"context_line":"                    # Forbidden exceptions so every"},{"line_number":490,"context_line":"                    # extension method does not need to wrap authorize"},{"line_number":491,"context_line":"                    # calls. ResourceExceptionHandler silently"},{"line_number":492,"context_line":"                    # converts NotAuthorized to HTTPForbidden"},{"line_number":493,"context_line":"                    raise"},{"line_number":494,"context_line":"                elif isinstance(exc, exception.ValidationError):"},{"line_number":495,"context_line":"                    # Note(oomichi): Handle a validation error, which"}],"source_content_type":"text/x-python","patch_set":4,"id":"3afc51ec_72ae9286","line":492,"range":{"start_line":492,"start_character":31,"end_line":492,"end_character":44},"updated":"2016-03-12 16:36:34.000000000","message":"Technically this would be \u0027Forbidden\u0027 to HTTPForbidden now, but it\u0027s a nit. Update it if you have to respin.","commit_id":"50f4f95ae42fd85d98e4a4426a7ecb1096664d6d"}],"nova/tests/functional/regressions/test_bug_1554631.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c0fdb5f4606daed882a37989ac84c6e166289357","unresolved":false,"context_lines":[{"line_number":47,"context_line":"        try:"},{"line_number":48,"context_line":"            self.api.post_volume({\u0027volume\u0027: volume})"},{"line_number":49,"context_line":"        except client.OpenStackApiException as e:"},{"line_number":50,"context_line":"            print(e.response.content)"},{"line_number":51,"context_line":"            self.assertEqual(403, e.response.status_code)"},{"line_number":52,"context_line":"            return"},{"line_number":53,"context_line":"        self.fail(\"We should\u0027ve thrown a 403 error\")"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_9148bacd","line":50,"updated":"2016-03-10 22:24:32.000000000","message":"remove this","commit_id":"e9d55b1e8d9af27daa24ab5ebaf4460967b28ab8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c0fdb5f4606daed882a37989ac84c6e166289357","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        except client.OpenStackApiException as e:"},{"line_number":50,"context_line":"            print(e.response.content)"},{"line_number":51,"context_line":"            self.assertEqual(403, e.response.status_code)"},{"line_number":52,"context_line":"            return"},{"line_number":53,"context_line":"        self.fail(\"We should\u0027ve thrown a 403 error\")"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_cinder_forbidden_in_compute_api_returns_403(self):"},{"line_number":56,"context_line":"        \"\"\"Regression test for bug #1554631."}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_51575257","line":53,"range":{"start_line":52,"start_character":12,"end_line":53,"end_character":52},"updated":"2016-03-10 22:24:32.000000000","message":"This could be cleaner with an assertRaises, e.g.:\n\n    e \u003d self.assertRaises(self.api.post_volume, {...})\n    self.assertEqual(403, e.response.status_code)","commit_id":"e9d55b1e8d9af27daa24ab5ebaf4460967b28ab8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"821961fa59b31d5c8272feb9aa8af6494318d3dc","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        except client.OpenStackApiException as e:"},{"line_number":50,"context_line":"            print(e.response.content)"},{"line_number":51,"context_line":"            self.assertEqual(403, e.response.status_code)"},{"line_number":52,"context_line":"            return"},{"line_number":53,"context_line":"        self.fail(\"We should\u0027ve thrown a 403 error\")"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_cinder_forbidden_in_compute_api_returns_403(self):"},{"line_number":56,"context_line":"        \"\"\"Regression test for bug #1554631."}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_af910649","line":53,"range":{"start_line":52,"start_character":12,"end_line":53,"end_character":52},"in_reply_to":"5aef4532_51575257","updated":"2016-03-11 02:13:09.000000000","message":"yeah, nice point.\nThis kind of assert way seems unreadable.","commit_id":"e9d55b1e8d9af27daa24ab5ebaf4460967b28ab8"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"821961fa59b31d5c8272feb9aa8af6494318d3dc","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            return"},{"line_number":53,"context_line":"        self.fail(\"We should\u0027ve thrown a 403 error\")"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def test_cinder_forbidden_in_compute_api_returns_403(self):"},{"line_number":56,"context_line":"        \"\"\"Regression test for bug #1554631."},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        The Cinder client can return a 403 when the compute API"},{"line_number":59,"context_line":"        performs a snapshot on a volume-backed instance. We need"},{"line_number":60,"context_line":"        to make sure the Nova API returns a 403 in this case."},{"line_number":61,"context_line":"        \"\"\""},{"line_number":62,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":1,"id":"5aef4532_efe5cedb","line":62,"range":{"start_line":55,"start_character":0,"end_line":62,"end_character":12},"updated":"2016-03-11 02:13:09.000000000","message":"Is this necessary now?\n\nI guess you are trying to verify the Nova API behavior with TDD, right?","commit_id":"e9d55b1e8d9af27daa24ab5ebaf4460967b28ab8"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"a5b1163f92d5d74d90f4190fa4205ea979c0bb41","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestCinderForbidden(test.TestCase):"},{"line_number":24,"context_line":"    REQUIRES_LOCKING \u003d True"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(TestCinderForbidden, self).setUp()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_d8efe0ae","line":24,"updated":"2016-03-11 18:37:47.000000000","message":"I know you copied this but I\u0027m not sure it\u0027s really necessary here. Might need to ask sdague on what it\u0027s really needed for. I thought it was only for concurrency-sensitive operations.","commit_id":"7d82e78b26bd149177580a986ae8e55bfd4921d7"},{"author":{"_account_id":11803,"name":"Ryan Rossiter","email":"rlrossit@us.ibm.com","username":"rlrossiter"},"change_message_id":"15aec72d2c34fa9b8f906d4a31d5e82d69ac66d3","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestCinderForbidden(test.TestCase):"},{"line_number":24,"context_line":"    REQUIRES_LOCKING \u003d True"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(TestCinderForbidden, self).setUp()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_ce00baad","line":24,"in_reply_to":"3afc51ec_b86db434","updated":"2016-03-11 19:21:32.000000000","message":"Done","commit_id":"7d82e78b26bd149177580a986ae8e55bfd4921d7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"bbcb8bf0c9bfb3a0625461eb91b07fec0674fe18","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class TestCinderForbidden(test.TestCase):"},{"line_number":24,"context_line":"    REQUIRES_LOCKING \u003d True"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def setUp(self):"},{"line_number":27,"context_line":"        super(TestCinderForbidden, self).setUp()"}],"source_content_type":"text/x-python","patch_set":2,"id":"3afc51ec_b86db434","line":24,"in_reply_to":"3afc51ec_d8efe0ae","updated":"2016-03-11 18:38:49.000000000","message":"Based on:\n\nhttp://git.openstack.org/cgit/openstack/nova/tree/nova/test.py#n199\n\nWe should probably remove this.","commit_id":"7d82e78b26bd149177580a986ae8e55bfd4921d7"}]}
