)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b6ab85140e0191e81814d919328eb9241b6b55d6","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* Modify the response of update quota include \u0027id\u0027 that is same"},{"line_number":10,"context_line":"with show quota."},{"line_number":11,"context_line":"* Change the status code of delete to 204."},{"line_number":12,"context_line":"* The body of update needn\u0027t \u0027tenant_id\u0027 and \u0027id\u0027, so remove them"},{"line_number":13,"context_line":"from NON_QUOTA_KEYS."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partially implements bp v3-api-extension-versioning"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAP3%2F%2FuDY%3D","line":12,"updated":"2013-07-12 14:09:09.000000000","message":"typo? \"update needn\u0027t have \u0027tenant_id\u0027\"?","commit_id":"51a644d9c956d18f5003ee028759e43e76031911"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fad431419dfbc870e5bac37fe70c5ad741a1500","unresolved":false,"context_lines":[{"line_number":9,"context_line":"* Modify the response of update quota include \u0027id\u0027 that is same"},{"line_number":10,"context_line":"with show quota."},{"line_number":11,"context_line":"* Change the status code of delete to 204."},{"line_number":12,"context_line":"* The body of update needn\u0027t \u0027tenant_id\u0027 and \u0027id\u0027, so remove them"},{"line_number":13,"context_line":"from NON_QUOTA_KEYS."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Partially implements bp v3-api-extension-versioning"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"AAAAP3%2F%2Ftz4%3D","line":12,"in_reply_to":"AAAAP3%2F%2FuDY%3D","updated":"2013-07-12 15:00:20.000000000","message":"you mean remove \u0027the body\u0027? that done","commit_id":"51a644d9c956d18f5003ee028759e43e76031911"}],"nova/api/openstack/compute/plugins/v3/quota_sets.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"02b696bd7738e42d86f01519fe6db242ec8db663","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        except exception.NotAuthorized:"},{"line_number":122,"context_line":"            raise webob.exc.HTTPForbidden()"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        for key, value in body[\u0027quota_set\u0027].iteritems():"},{"line_number":125,"context_line":"            if key in NON_QUOTA_KEYS or not value:"},{"line_number":126,"context_line":"                continue"},{"line_number":127,"context_line":"            # validate whether already used and reserved exceeds the new"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2F6EQ%3D","line":124,"updated":"2013-07-09 12:45:28.000000000","message":"iteritems is removed in Python 3, so I\u0027m not sure its worth changing items to iteritems here where we\u0027re probably not gaining much anyway","commit_id":"842f3e61f09fbc321269255994171f8bfd57e199"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"81511b8061524c8756d8fa579e8542815740bc29","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        except exception.NotAuthorized:"},{"line_number":122,"context_line":"            raise webob.exc.HTTPForbidden()"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        for key, value in body[\u0027quota_set\u0027].iteritems():"},{"line_number":125,"context_line":"            if key in NON_QUOTA_KEYS or not value:"},{"line_number":126,"context_line":"                continue"},{"line_number":127,"context_line":"            # validate whether already used and reserved exceeds the new"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAP3%2F%2F55I%3D","line":124,"in_reply_to":"AAAAP3%2F%2F6EQ%3D","updated":"2013-07-09 13:46:48.000000000","message":"Ops, I use iteritems because it is more effective. But if it will removed in python 3, I will back it to items","commit_id":"842f3e61f09fbc321269255994171f8bfd57e199"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b6ab85140e0191e81814d919328eb9241b6b55d6","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                bad_keys.append(key)"},{"line_number":100,"context_line":"                continue"},{"line_number":101,"context_line":"            if key \u003d\u003d \u0027force\u0027:"},{"line_number":102,"context_line":"                force_update \u003d strutils.bool_from_string(value)"},{"line_number":103,"context_line":"            elif key not in NON_QUOTA_KEYS and value:"},{"line_number":104,"context_line":"                try:"},{"line_number":105,"context_line":"                    value \u003d int(value)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FuC0%3D","line":102,"updated":"2013-07-12 14:09:09.000000000","message":"should any value error here be converted to BadRequest too?","commit_id":"51a644d9c956d18f5003ee028759e43e76031911"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fad431419dfbc870e5bac37fe70c5ad741a1500","unresolved":false,"context_lines":[{"line_number":99,"context_line":"                bad_keys.append(key)"},{"line_number":100,"context_line":"                continue"},{"line_number":101,"context_line":"            if key \u003d\u003d \u0027force\u0027:"},{"line_number":102,"context_line":"                force_update \u003d strutils.bool_from_string(value)"},{"line_number":103,"context_line":"            elif key not in NON_QUOTA_KEYS and value:"},{"line_number":104,"context_line":"                try:"},{"line_number":105,"context_line":"                    value \u003d int(value)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Ft0w%3D","line":102,"in_reply_to":"AAAAP3%2F%2FuC0%3D","updated":"2013-07-12 15:00:20.000000000","message":"I don\u0027t suggest fix anything about the request parameters now. After \u0027API input validation framework\u0027 merged, we need change the code again. https://review.openstack.org/#/c/25358/","commit_id":"51a644d9c956d18f5003ee028759e43e76031911"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b6ab85140e0191e81814d919328eb9241b6b55d6","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                continue"},{"line_number":101,"context_line":"            if key \u003d\u003d \u0027force\u0027:"},{"line_number":102,"context_line":"                force_update \u003d strutils.bool_from_string(value)"},{"line_number":103,"context_line":"            elif key not in NON_QUOTA_KEYS and value:"},{"line_number":104,"context_line":"                try:"},{"line_number":105,"context_line":"                    value \u003d int(value)"},{"line_number":106,"context_line":"                except (ValueError, TypeError):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FuCk%3D","line":103,"updated":"2013-07-12 14:09:09.000000000","message":"do we need NON_QUOTA_KEYS any more, now it only has force?","commit_id":"51a644d9c956d18f5003ee028759e43e76031911"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fad431419dfbc870e5bac37fe70c5ad741a1500","unresolved":false,"context_lines":[{"line_number":100,"context_line":"                continue"},{"line_number":101,"context_line":"            if key \u003d\u003d \u0027force\u0027:"},{"line_number":102,"context_line":"                force_update \u003d strutils.bool_from_string(value)"},{"line_number":103,"context_line":"            elif key not in NON_QUOTA_KEYS and value:"},{"line_number":104,"context_line":"                try:"},{"line_number":105,"context_line":"                    value \u003d int(value)"},{"line_number":106,"context_line":"                except (ValueError, TypeError):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Ft0o%3D","line":103,"in_reply_to":"AAAAP3%2F%2FuCk%3D","updated":"2013-07-12 15:00:20.000000000","message":"Done","commit_id":"51a644d9c956d18f5003ee028759e43e76031911"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b6ab85140e0191e81814d919328eb9241b6b55d6","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                except (ValueError, TypeError):"},{"line_number":107,"context_line":"                    msg \u003d _(\"Quota \u0027%(value)s\u0027 for %(key)s should be \""},{"line_number":108,"context_line":"                            \"integer.\") % locals()"},{"line_number":109,"context_line":"                    LOG.warn(msg)"},{"line_number":110,"context_line":"                    raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":111,"context_line":"                self._validate_quota_limit(value)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FuB0%3D","line":109,"updated":"2013-07-12 14:09:09.000000000","message":"Not sure we should log here. The alternative is logging on all the bad request cases.","commit_id":"51a644d9c956d18f5003ee028759e43e76031911"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fad431419dfbc870e5bac37fe70c5ad741a1500","unresolved":false,"context_lines":[{"line_number":106,"context_line":"                except (ValueError, TypeError):"},{"line_number":107,"context_line":"                    msg \u003d _(\"Quota \u0027%(value)s\u0027 for %(key)s should be \""},{"line_number":108,"context_line":"                            \"integer.\") % locals()"},{"line_number":109,"context_line":"                    LOG.warn(msg)"},{"line_number":110,"context_line":"                    raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":111,"context_line":"                self._validate_quota_limit(value)"},{"line_number":112,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Ft0Y%3D","line":109,"in_reply_to":"AAAAP3%2F%2FuB0%3D","updated":"2013-07-12 15:00:20.000000000","message":"Same as above, didn\u0027t touch this now. fix those after \u0027API input validation framework\u0027 merged","commit_id":"51a644d9c956d18f5003ee028759e43e76031911"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"3681692a4df85d49cc9d6f0eb2d44476fa15eeac","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            msg \u003d _(\"Bad key(s) %s in quota_set\") % \",\".join(bad_keys)"},{"line_number":112,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        LOG.debug(_(\"Force update quotas: %s\") % force_update)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            project_quota \u003d self._get_quotas(context, id, True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FlSE%3D","line":114,"updated":"2013-07-16 09:28:18.000000000","message":"How about moving this log message to line 121?\nbecause I feel this change is for avoiding unnecessary message due to causes except the ones of quota_update().","commit_id":"30fcca3de9e0306c81f813d77ffd153c8f77e52d"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c776657717c8a74c7ef35eb5a8818c848a39be29","unresolved":false,"context_lines":[{"line_number":111,"context_line":"            msg \u003d _(\"Bad key(s) %s in quota_set\") % \",\".join(bad_keys)"},{"line_number":112,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        LOG.debug(_(\"Force update quotas: %s\") % force_update)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        try:"},{"line_number":117,"context_line":"            project_quota \u003d self._get_quotas(context, id, True)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAP3%2F%2FhSI%3D","line":114,"in_reply_to":"AAAAP3%2F%2FlSE%3D","updated":"2013-07-17 02:13:01.000000000","message":"Done","commit_id":"30fcca3de9e0306c81f813d77ffd153c8f77e52d"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"5a903cd5cd2e586fc5514bf2272a06d5dcde090c","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        except exception.NotAuthorized:"},{"line_number":83,"context_line":"            raise webob.exc.HTTPForbidden()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @wsgi.serializers(xml\u003dQuotaTemplate)"},{"line_number":86,"context_line":"    def update(self, req, id, body):"},{"line_number":87,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":88,"context_line":"        authorize_update(context)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAP3%2F%2Ff%2BE%3D","line":85,"updated":"2013-07-17 10:40:42.000000000","message":"I guess the expected decorator is going on in another change set?","commit_id":"db96deb87dd3e4beb4d1e5d27108c6452196284e"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"cb4f4faa3e0e0373c7abb866aadde249f27ccfaa","unresolved":false,"context_lines":[{"line_number":82,"context_line":"        except exception.NotAuthorized:"},{"line_number":83,"context_line":"            raise webob.exc.HTTPForbidden()"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    @wsgi.serializers(xml\u003dQuotaTemplate)"},{"line_number":86,"context_line":"    def update(self, req, id, body):"},{"line_number":87,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":88,"context_line":"        authorize_update(context)"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAQn%2F%2F%2FCM%3D","line":85,"in_reply_to":"AAAAP3%2F%2Ff%2BE%3D","updated":"2013-07-18 00:35:58.000000000","message":"yes, we do that separated patch","commit_id":"db96deb87dd3e4beb4d1e5d27108c6452196284e"}],"nova/tests/api/openstack/compute/plugins/v3/test_quota_sets.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a56acfb4a07e5d27fa4fbe3ee05ff284240a1bd0","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        self.mox.ReplayAll()"},{"line_number":247,"context_line":"        res \u003d self.controller.delete(self.req, 1234)"},{"line_number":248,"context_line":"        self.mox.VerifyAll()"},{"line_number":249,"context_line":"        self.assertEqual(res.status_int, 202)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def test_quotas_update_exceed_in_used(self):"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FuT4%3D","side":"PARENT","line":249,"updated":"2013-07-12 12:14:13.000000000","message":"Should this line be kept but with the status as 204?","commit_id":"9cb480a8c651b7449a3cab33bbbddc95f166f577"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"1fad431419dfbc870e5bac37fe70c5ad741a1500","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        self.mox.ReplayAll()"},{"line_number":247,"context_line":"        res \u003d self.controller.delete(self.req, 1234)"},{"line_number":248,"context_line":"        self.mox.VerifyAll()"},{"line_number":249,"context_line":"        self.assertEqual(res.status_int, 202)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def test_quotas_update_exceed_in_used(self):"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2Ft2s%3D","side":"PARENT","line":249,"in_reply_to":"AAAAP3%2F%2FuAc%3D","updated":"2013-07-12 15:00:20.000000000","message":"no, the reason was I use decorator \u0027wsgi.response \u0027instead of \u0027return webob.Response(status_int\u003d202)\u0027","commit_id":"9cb480a8c651b7449a3cab33bbbddc95f166f577"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b6ab85140e0191e81814d919328eb9241b6b55d6","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        self.mox.ReplayAll()"},{"line_number":247,"context_line":"        res \u003d self.controller.delete(self.req, 1234)"},{"line_number":248,"context_line":"        self.mox.VerifyAll()"},{"line_number":249,"context_line":"        self.assertEqual(res.status_int, 202)"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"    def test_quotas_update_exceed_in_used(self):"},{"line_number":252,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAP3%2F%2FuAc%3D","side":"PARENT","line":249,"in_reply_to":"AAAAP3%2F%2FuT4%3D","updated":"2013-07-12 14:09:09.000000000","message":"+1","commit_id":"9cb480a8c651b7449a3cab33bbbddc95f166f577"}]}
