)]}'
{"nova/api/openstack/compute/plugins/v3/flavor_access.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bab78b316a42c3df0b6449e30d0143d743f0a1c8","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"ALIAS \u003d \u0027flavor-access\u0027"},{"line_number":32,"context_line":"soft_authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027,"},{"line_number":33,"context_line":"                                                      \u0027v3:\u0027 + ALIAS)"},{"line_number":34,"context_line":"authorize \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027v3:%s\u0027 % ALIAS)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2B8x8%3D","line":33,"updated":"2014-01-20 14:15:59.000000000","message":"we should use \u0027core_authorizer\u0027 for core api","commit_id":"59d9b0fdb025fe302843be2ab26b0b519792b60a"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"49b3e90dc26dc09e15c3b6ebe3397414f9d7e0fb","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":"ALIAS \u003d \u0027flavor-access\u0027"},{"line_number":32,"context_line":"soft_authorize \u003d extensions.soft_extension_authorizer(\u0027compute\u0027,"},{"line_number":33,"context_line":"                                                      \u0027v3:\u0027 + ALIAS)"},{"line_number":34,"context_line":"authorize \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027v3:%s\u0027 % ALIAS)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2B4ls%3D","line":33,"in_reply_to":"AAAAUH%2F%2B8x8%3D","updated":"2014-01-21 04:50:50.000000000","message":"because some changes are needed and I found some one already implemented core_authorizer, I will abandon this patch and submit another one, thanks , also I will adopt your comments on it","commit_id":"59d9b0fdb025fe302843be2ab26b0b519792b60a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ce490d7cd7dde580fa15d0d6e524b465be9ec171","unresolved":false,"context_lines":[{"line_number":125,"context_line":"    @wsgi.extends"},{"line_number":126,"context_line":"    def show(self, req, resp_obj, id):"},{"line_number":127,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"},{"line_number":128,"context_line":"        if soft_authorize(context, action\u003d\"show\"):"},{"line_number":129,"context_line":"            # Attach our slave template to the response object"},{"line_number":130,"context_line":"            resp_obj.attach(xml\u003dFlavorTemplate())"},{"line_number":131,"context_line":"            db_flavor \u003d req.get_db_flavor(id)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2B8sA%3D","line":128,"updated":"2014-01-20 14:26:22.000000000","message":"how about use \u0027extend_flavor_show\u0027? That means this is extend the flavor\u0027s show.","commit_id":"59d9b0fdb025fe302843be2ab26b0b519792b60a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ce490d7cd7dde580fa15d0d6e524b465be9ec171","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        except exception.FlavorNotFound as e:"},{"line_number":174,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":175,"context_line":"        except exception.FlavorAccessExists as err:"},{"line_number":176,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003derr.format_message())"},{"line_number":177,"context_line":"        except exception.AdminRequired as e:"},{"line_number":178,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003de.format_message())"},{"line_number":179,"context_line":"        return _marshall_flavor_access(flavor)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2B8uM%3D","line":176,"updated":"2014-01-20 14:26:22.000000000","message":"this exception won\u0027t raise again","commit_id":"59d9b0fdb025fe302843be2ab26b0b519792b60a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"59bb58eb85f02d72dfd50385054b5d711ee39258","unresolved":false,"context_lines":[{"line_number":173,"context_line":"        except exception.FlavorNotFound as e:"},{"line_number":174,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":175,"context_line":"        except exception.FlavorAccessExists as err:"},{"line_number":176,"context_line":"            raise webob.exc.HTTPConflict(explanation\u003derr.format_message())"},{"line_number":177,"context_line":"        except exception.AdminRequired as e:"},{"line_number":178,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003de.format_message())"},{"line_number":179,"context_line":"        return _marshall_flavor_access(flavor)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2B8p4%3D","line":176,"in_reply_to":"AAAAUH%2F%2B8uM%3D","updated":"2014-01-20 14:27:35.000000000","message":"look from my web-browser, the line is wrong. I mean exception AdminRequired won\u0027t raise again.","commit_id":"59d9b0fdb025fe302843be2ab26b0b519792b60a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ce490d7cd7dde580fa15d0d6e524b465be9ec171","unresolved":false,"context_lines":[{"line_number":195,"context_line":"            flavor.remove_access(tenant)"},{"line_number":196,"context_line":"        except (exception.FlavorAccessNotFound,"},{"line_number":197,"context_line":"                exception.FlavorNotFound) as e:"},{"line_number":198,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":199,"context_line":"        except exception.AdminRequired as e:"},{"line_number":200,"context_line":"            raise webob.exc.HTTPForbidden(explanation\u003de.format_message())"},{"line_number":201,"context_line":"        return _marshall_flavor_access(flavor)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2B8uI%3D","line":198,"updated":"2014-01-20 14:26:22.000000000","message":"ditto","commit_id":"59d9b0fdb025fe302843be2ab26b0b519792b60a"}],"nova/api/openstack/compute/plugins/v3/flavor_manage.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"bab78b316a42c3df0b6449e30d0143d743f0a1c8","unresolved":false,"context_lines":[{"line_number":22,"context_line":"from nova import exception"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"ALIAS \u003d \"flavor-manage\""},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"authorize \u003d extensions.extension_authorizer(\u0027compute\u0027, \u0027v3:\u0027 + ALIAS)"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2B8xQ%3D","line":25,"updated":"2014-01-20 14:15:59.000000000","message":"sorry, I missed from previous review, we should use \u0027core_authorizer\u0027 for core api","commit_id":"59d9b0fdb025fe302843be2ab26b0b519792b60a"}],"nova/api/openstack/compute/plugins/v3/flavor_rxtx.py":[{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ce490d7cd7dde580fa15d0d6e524b465be9ec171","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"    @wsgi.extends"},{"line_number":40,"context_line":"    def show(self, req, resp_obj, id):"},{"line_number":41,"context_line":"        return self._show(req, resp_obj, action\u003d\"show\")"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @wsgi.extends(action\u003d\u0027create\u0027)"},{"line_number":44,"context_line":"    def create(self, req, resp_obj, body):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2B8rQ%3D","line":41,"updated":"2014-01-20 14:26:22.000000000","message":"ditto, how about use \u0027extend_flavor_show\u0027 as action name?","commit_id":"59d9b0fdb025fe302843be2ab26b0b519792b60a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ce490d7cd7dde580fa15d0d6e524b465be9ec171","unresolved":false,"context_lines":[{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @wsgi.extends(action\u003d\u0027create\u0027)"},{"line_number":44,"context_line":"    def create(self, req, resp_obj, body):"},{"line_number":45,"context_line":"        return self._show(req, resp_obj, action\u003d\"create\")"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @wsgi.extends"},{"line_number":48,"context_line":"    def detail(self, req, resp_obj):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2B8rE%3D","line":45,"updated":"2014-01-20 14:26:22.000000000","message":"ditto","commit_id":"59d9b0fdb025fe302843be2ab26b0b519792b60a"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ce490d7cd7dde580fa15d0d6e524b465be9ec171","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    @wsgi.extends"},{"line_number":48,"context_line":"    def detail(self, req, resp_obj):"},{"line_number":49,"context_line":"        if not authorize(req.environ[\u0027nova.context\u0027], action\u003d\"detail\"):"},{"line_number":50,"context_line":"            return"},{"line_number":51,"context_line":"        resp_obj.attach(xml\u003dFlavorsRxtxTemplate())"},{"line_number":52,"context_line":"        self._extend_flavors(req, list(resp_obj.obj[\u0027flavors\u0027]))"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAUH%2F%2B8rA%3D","line":49,"updated":"2014-01-20 14:26:22.000000000","message":"ditto","commit_id":"59d9b0fdb025fe302843be2ab26b0b519792b60a"}],"nova/tests/api/openstack/compute/contrib/test_flavor_manage.py":[{"author":{"_account_id":9046,"name":"Maithem","email":"munshedm@vmware.com","username":"Maithem"},"change_message_id":"1566cf1726aad1ac63b937ba09681aebb6acc4cd","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":158,"context_line":"        req.body \u003d jsonutils.dumps(expected)"},{"line_number":159,"context_line":"        res \u003d req.get_response(self.app)"},{"line_number":160,"context_line":"        self.assertEqual(res.status_code, 403)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def test_create_invalid_name(self):"},{"line_number":163,"context_line":"        self.stubs.UnsetAll()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FOVo%3D","line":160,"updated":"2014-01-16 07:28:53.000000000","message":"Please reorder arguments, (expected, observed)","commit_id":"4ca765540b52cf093706f1ca49100e4dbc3b0d41"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"ef2c86411c2fb4df4f058262ce15f4569b5d623c","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":158,"context_line":"        req.body \u003d jsonutils.dumps(expected)"},{"line_number":159,"context_line":"        res \u003d req.get_response(self.app)"},{"line_number":160,"context_line":"        self.assertEqual(res.status_code, 403)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def test_create_invalid_name(self):"},{"line_number":163,"context_line":"        self.stubs.UnsetAll()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FMtY%3D","line":160,"in_reply_to":"AAAAUH%2F%2FOMg%3D","updated":"2014-01-16 14:21:47.000000000","message":"I clicked the links you gave, but looks to me \nhttps://bugs.launchpad.net/ubuntu/+source/gnome-power-manager/+bug/126013 was shown.....\n\nanyway, adjust it is easy to me","commit_id":"4ca765540b52cf093706f1ca49100e4dbc3b0d41"},{"author":{"_account_id":9046,"name":"Maithem","email":"munshedm@vmware.com","username":"Maithem"},"change_message_id":"33c928c02c704059e7eb7225122e16e7f8953224","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":158,"context_line":"        req.body \u003d jsonutils.dumps(expected)"},{"line_number":159,"context_line":"        res \u003d req.get_response(self.app)"},{"line_number":160,"context_line":"        self.assertEqual(res.status_code, 403)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def test_create_invalid_name(self):"},{"line_number":163,"context_line":"        self.stubs.UnsetAll()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FOMg%3D","line":160,"in_reply_to":"AAAAUH%2F%2FORA%3D","updated":"2014-01-16 08:12:38.000000000","message":"Ops, sorry for not being clear, yes the order should be  self.assertEqual(403, res.status_code) .\nYou can read this : https://bugs.launchpad.net/nova/+bug/1260134","commit_id":"4ca765540b52cf093706f1ca49100e4dbc3b0d41"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"0d6cf6bac48fa6003c394fb009a0a659226733e7","unresolved":false,"context_lines":[{"line_number":157,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":158,"context_line":"        req.body \u003d jsonutils.dumps(expected)"},{"line_number":159,"context_line":"        res \u003d req.get_response(self.app)"},{"line_number":160,"context_line":"        self.assertEqual(res.status_code, 403)"},{"line_number":161,"context_line":""},{"line_number":162,"context_line":"    def test_create_invalid_name(self):"},{"line_number":163,"context_line":"        self.stubs.UnsetAll()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FORA%3D","line":160,"in_reply_to":"AAAAUH%2F%2FOVo%3D","updated":"2014-01-16 07:51:14.000000000","message":"Thanks for review \nI am not sure I understand your question ... \ndo you want me to change code from \nself.assertEqual(res.status_code, 403) to \nself.assertEqual(403, res.status_code) ? \n\nlooks like other code doing the same to my original code , any guideline?","commit_id":"4ca765540b52cf093706f1ca49100e4dbc3b0d41"}],"nova/tests/api/openstack/compute/plugins/v3/test_flavor_manage.py":[{"author":{"_account_id":2835,"name":"Brian Elliott","email":"bdelliott@gmail.com","username":"belliott"},"change_message_id":"2395679cd88c3a137e694ada1b7e6b7dbe89bbae","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def test_create_policy_failed(self):"},{"line_number":134,"context_line":"        expected \u003d self.expected_flavor"},{"line_number":135,"context_line":"        rules \u003d {"},{"line_number":136,"context_line":"            \"compute_extension:flavormanage\":"},{"line_number":137,"context_line":"            common_policy.parse_rule(\"!\")"},{"line_number":138,"context_line":"        }"},{"line_number":139,"context_line":"        common_policy.set_rules(common_policy.Rules(rules))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2FQ4A%3D","line":136,"updated":"2014-01-15 18:06:09.000000000","message":"I don\u0027t think the v3 code is checking this policy?","commit_id":"0cd5747b3f0b1ec7f54c8dcef43e30a289a63cae"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"36589f07fae30dee9806b0293885b7e9b08feba2","unresolved":false,"context_lines":[{"line_number":133,"context_line":"    def test_create_policy_failed(self):"},{"line_number":134,"context_line":"        expected \u003d self.expected_flavor"},{"line_number":135,"context_line":"        rules \u003d {"},{"line_number":136,"context_line":"            \"compute_extension:flavormanage\":"},{"line_number":137,"context_line":"            common_policy.parse_rule(\"!\")"},{"line_number":138,"context_line":"        }"},{"line_number":139,"context_line":"        common_policy.set_rules(common_policy.Rules(rules))"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAUH%2F%2FO2U%3D","line":136,"in_reply_to":"AAAAUH%2F%2FQ4A%3D","updated":"2014-01-17 01:02:02.000000000","message":"my fault, it should be flavor_manage, I copied the code and forgot the name modification, thanks","commit_id":"0cd5747b3f0b1ec7f54c8dcef43e30a289a63cae"},{"author":{"_account_id":9046,"name":"Maithem","email":"munshedm@vmware.com","username":"Maithem"},"change_message_id":"1566cf1726aad1ac63b937ba09681aebb6acc4cd","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        req.method \u003d \u0027POST\u0027"},{"line_number":145,"context_line":"        req.body \u003d jsonutils.dumps(expected)"},{"line_number":146,"context_line":"        res \u003d req.get_response(self.app)"},{"line_number":147,"context_line":"        self.assertEqual(res.status_code, 403)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def test_create_public_default(self):"},{"line_number":150,"context_line":"        flavor \u003d {"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUH%2F%2FOV8%3D","line":147,"updated":"2014-01-16 07:28:53.000000000","message":"The order of arguments should be (expected, observed)","commit_id":"4ca765540b52cf093706f1ca49100e4dbc3b0d41"}]}
