)]}'
{"etc/nova/policy.json":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"e205e48725a1bfa4c356076c745cd7d421e9a75c","unresolved":false,"context_lines":[{"line_number":328,"context_line":"    \"os_compute_api:os-quota-sets:update\": \"rule:admin_api\","},{"line_number":329,"context_line":"    \"os_compute_api:os-quota-sets:delete\": \"rule:admin_api\","},{"line_number":330,"context_line":"    \"os_compute_api:os-quota-sets:detail\": \"rule:admin_api\","},{"line_number":331,"context_line":"    \"os_compute_api:os-quota-class-sets:update\": \"rule:admin_api\","},{"line_number":332,"context_line":"    \"os_compute_api:os-quota-class-sets:show\": \"is_admin:True or quota_class:%(quota_class)s\","},{"line_number":333,"context_line":"    \"os_compute_api:os-quota-class-sets:discoverable\": \"\","},{"line_number":334,"context_line":"    \"os_compute_api:os-rescue\": \"\","}],"source_content_type":"application/json","patch_set":9,"id":"1aca2d91_7246c324","line":331,"updated":"2015-05-07 05:49:06.000000000","message":"+1","commit_id":"774fb1363e90d211dcfd7b95c798c890edc00e9e"}],"nova/api/openstack/compute/contrib/quota_classes.py":[{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"9cc6992284dc0af7e333de4d67e6175bbb9cf680","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            try:"},{"line_number":101,"context_line":"                # NOTE(alex_xu): back-compatible with db layer hard-code admin"},{"line_number":102,"context_line":"                # permission checks."},{"line_number":103,"context_line":"                nova.context.require_admin_context(context)"},{"line_number":104,"context_line":"                db.quota_class_update(context, quota_class, key, value)"},{"line_number":105,"context_line":"            except exception.QuotaClassNotFound:"},{"line_number":106,"context_line":"                db.quota_class_create(context, quota_class, key, value)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba7be1f8_fcf6f8d5","line":103,"updated":"2015-03-03 20:19:27.000000000","message":"should we do it here? \nthis is a loop , can we do it early?","commit_id":"5b38d8a110e0d8cf0b5f7bcd3c87254cba399ab9"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"629743d085277cff4a236df4c0157c1759d199af","unresolved":false,"context_lines":[{"line_number":100,"context_line":"            try:"},{"line_number":101,"context_line":"                # NOTE(alex_xu): back-compatible with db layer hard-code admin"},{"line_number":102,"context_line":"                # permission checks."},{"line_number":103,"context_line":"                nova.context.require_admin_context(context)"},{"line_number":104,"context_line":"                db.quota_class_update(context, quota_class, key, value)"},{"line_number":105,"context_line":"            except exception.QuotaClassNotFound:"},{"line_number":106,"context_line":"                db.quota_class_create(context, quota_class, key, value)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a80dd14_2696054d","line":103,"in_reply_to":"ba7be1f8_fcf6f8d5","updated":"2015-03-06 05:49:54.000000000","message":"good point, I will check it","commit_id":"5b38d8a110e0d8cf0b5f7bcd3c87254cba399ab9"}],"nova/api/openstack/compute/plugins/v3/quota_classes.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"e205e48725a1bfa4c356076c745cd7d421e9a75c","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        except exception.Forbidden:"},{"line_number":71,"context_line":"            raise webob.exc.HTTPForbidden()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    @extensions.expected_errors((403))"},{"line_number":74,"context_line":"    @validation.schema(quota_classes.update)"},{"line_number":75,"context_line":"    def update(self, req, id, body):"},{"line_number":76,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"1aca2d91_725da3e8","line":73,"updated":"2015-05-07 05:49:06.000000000","message":"HTTPForbidden was removed in line 85, any other code will raise 403?","commit_id":"774fb1363e90d211dcfd7b95c798c890edc00e9e"}],"nova/tests/unit/api/openstack/compute/contrib/test_quota_classes.py":[{"author":{"_account_id":12175,"name":"Eli Qiao","email":"qiaoliyong@gmail.com","username":"Eli"},"change_message_id":"7d08bf9e59fd5f7e05152d837d9caf59ee73ddb5","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                                    \u0027security_group_rules\u0027: 20,"},{"line_number":154,"context_line":"                                    \u0027key_pairs\u0027: 100,"},{"line_number":155,"context_line":"                                    }}"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,"},{"line_number":158,"context_line":"                          self.req, \u0027test_class\u0027, body\u003dbody)"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_73d3e75f","line":156,"updated":"2015-03-10 07:26:35.000000000","message":"I don\u0027t think you need to fake the instances information.\nuse body\u003d{\u0027quota_class_set\u0027: {}}) will be okay.","commit_id":"6306e5068d69ce149c26ca07d7b1889cb8ee3108"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d54d3a1226fcd54e5db2c0c3adb250d1062be22c","unresolved":false,"context_lines":[{"line_number":153,"context_line":"                                    \u0027security_group_rules\u0027: 20,"},{"line_number":154,"context_line":"                                    \u0027key_pairs\u0027: 100,"},{"line_number":155,"context_line":"                                    }}"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"        self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,"},{"line_number":158,"context_line":"                          self.req, \u0027test_class\u0027, body\u003dbody)"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9a80dd14_471c2fc2","line":156,"in_reply_to":"9a80dd14_73d3e75f","updated":"2015-03-11 02:11:53.000000000","message":"I don\u0027t think we need fake instance info. The body just make it looks like as something real","commit_id":"6306e5068d69ce149c26ca07d7b1889cb8ee3108"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"f0fea9f9095a399417c40cf26064bea17aa0eaea","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    def test_quotas_update_as_user(self):"},{"line_number":147,"context_line":"        body \u003d {\u0027quota_class_set\u0027: {}}"},{"line_number":148,"context_line":"        self.assertRaises(webob.exc.HTTPForbidden, self.controller.update,"},{"line_number":149,"context_line":"                          self.req, \u0027test_class\u0027, body\u003dbody)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"class QuotaClassesPolicyEnforcementV21(test.NoDBTestCase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a80dd14_69949344","line":149,"updated":"2015-03-11 12:49:40.000000000","message":"this change is related to this patch? \nbut I think it\u0027s a better choice","commit_id":"5903676e81f1eaea6086b784ee7b1f98a2dab14f"}]}
