)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5143d2de5689889dfd9ee187b172c63965920e09","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2014-12-17 09:57:51 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"don\u0027t allow user to add role on disabled project or domain"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I1736af62fbebfa7ae8a5960613890a075b58c305"},{"line_number":10,"context_line":"Closes-Bug: #1401040"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"3a961159_8be6f714","line":8,"updated":"2014-12-17 21:25:31.000000000","message":"Add a reason why users shouldn\u0027t be allowed to add a role assignment on a disabled project or domain.","commit_id":"7080007535a60d45f20fbc4fdb7c97609943ecc3"}],"keystone/assignment/core.py":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"d44bd22ab3aae79859ebac4d649e3529bee819c4","unresolved":false,"context_lines":[{"line_number":671,"context_line":"            project \u003d self.get_project(project_id)"},{"line_number":672,"context_line":"            if not project.get(\u0027enabled\u0027, True):"},{"line_number":673,"context_line":"                raise exception.ForbiddenAction("},{"line_number":674,"context_line":"                    action\u003d_(\u0027cannot add or remove role on disabled project.\u0027))"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"    @notifications.role_assignment(\u0027created\u0027)"},{"line_number":677,"context_line":"    def create_grant(self, role_id, user_id\u003dNone, group_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_2abf1a62","line":674,"updated":"2014-12-15 15:16:21.000000000","message":"Just a small wording suggestion:\n\n  Cannot add or remove role on ...\n\nAlso, use _LE() too.","commit_id":"54e006a40f46e43e76cedbe7988b7ff5605d3986"},{"author":{"_account_id":9101,"name":"wanghong","email":"reviewwanghong@126.com","username":"wanghong"},"change_message_id":"c24c94188ceabeec97f742a196f6cf841f10ec91","unresolved":false,"context_lines":[{"line_number":671,"context_line":"            project \u003d self.get_project(project_id)"},{"line_number":672,"context_line":"            if not project.get(\u0027enabled\u0027, True):"},{"line_number":673,"context_line":"                raise exception.ForbiddenAction("},{"line_number":674,"context_line":"                    action\u003d_(\u0027cannot add or remove role on disabled project.\u0027))"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"    @notifications.role_assignment(\u0027created\u0027)"},{"line_number":677,"context_line":"    def create_grant(self, role_id, user_id\u003dNone, group_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_7d6c7809","line":674,"in_reply_to":"3a961159_2abf1a62","updated":"2014-12-16 01:26:19.000000000","message":"Here should not use _LE(), refer to:http://docs.openstack.org/developer/oslo.i18n/guidelines.html#examples","commit_id":"54e006a40f46e43e76cedbe7988b7ff5605d3986"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"6a2dcbb674efa1b6d99151af49419a4edd349cb9","unresolved":false,"context_lines":[{"line_number":685,"context_line":"    def delete_grant(self, role_id, user_id\u003dNone, group_id\u003dNone,"},{"line_number":686,"context_line":"                     domain_id\u003dNone, project_id\u003dNone,"},{"line_number":687,"context_line":"                     inherited_to_projects\u003dFalse, context\u003dNone):"},{"line_number":688,"context_line":"        self._assert_domain_or_project_enabled(domain_id, project_id)"},{"line_number":689,"context_line":"        if group_id is None:"},{"line_number":690,"context_line":"            if self.revoke_api:"},{"line_number":691,"context_line":"                self.revoke_api.revoke_by_grant(user_id\u003duser_id,"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_bc93224e","line":688,"updated":"2014-12-16 20:52:42.000000000","message":"why can\u0027t users delete a role assignment on a disabled project or domain? I don\u0027t think it\u0027s expected that you\u0027d have to enable a project just so you can remove an assignment.","commit_id":"1c7b2f9b4ab5160178d9d2ffce7715de2954b386"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"c49b683344a9e56b2f77de34e915be4a804ec130","unresolved":false,"context_lines":[{"line_number":666,"context_line":"            domain \u003d self.get_domain(domain_id)"},{"line_number":667,"context_line":"            if not domain.get(\u0027enabled\u0027, True):"},{"line_number":668,"context_line":"                raise exception.ForbiddenAction("},{"line_number":669,"context_line":"                    action\u003d_(\u0027Cannot add role on disabled domain.\u0027))"},{"line_number":670,"context_line":"        if project_id is not None:"},{"line_number":671,"context_line":"            project \u003d self.get_project(project_id)"},{"line_number":672,"context_line":"            if not project.get(\u0027enabled\u0027, True):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_c871f545","line":669,"updated":"2015-02-16 01:03:28.000000000","message":"nit: instead of \"add\", \"assign\" might be more accurate","commit_id":"7080007535a60d45f20fbc4fdb7c97609943ecc3"},{"author":{"_account_id":1941,"name":"Lin Hua Cheng","email":"os.lcheng@gmail.com","username":"lin-hua-cheng"},"change_message_id":"c49b683344a9e56b2f77de34e915be4a804ec130","unresolved":false,"context_lines":[{"line_number":671,"context_line":"            project \u003d self.get_project(project_id)"},{"line_number":672,"context_line":"            if not project.get(\u0027enabled\u0027, True):"},{"line_number":673,"context_line":"                raise exception.ForbiddenAction("},{"line_number":674,"context_line":"                    action\u003d_(\u0027Cannot add role on disabled project.\u0027))"},{"line_number":675,"context_line":""},{"line_number":676,"context_line":"    @notifications.role_assignment(\u0027created\u0027)"},{"line_number":677,"context_line":"    def create_grant(self, role_id, user_id\u003dNone, group_id\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_e88dd92b","line":674,"updated":"2015-02-16 01:03:28.000000000","message":"same here","commit_id":"7080007535a60d45f20fbc4fdb7c97609943ecc3"}],"keystone/tests/test_v3_assignment.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5143d2de5689889dfd9ee187b172c63965920e09","unresolved":false,"context_lines":[{"line_number":947,"context_line":"                  headers\u003d{\u0027x-subject-token\u0027: token},"},{"line_number":948,"context_line":"                  expected_status\u003d404)"},{"line_number":949,"context_line":""},{"line_number":950,"context_line":"    def test_connot_create_grant_on_disabled_domain(self):"},{"line_number":951,"context_line":"        domain \u003d self.new_domain_ref()"},{"line_number":952,"context_line":"        domain[\u0027enabled\u0027] \u003d False"},{"line_number":953,"context_line":"        self.assignment_api.create_domain(domain[\u0027id\u0027], domain)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_0b884721","line":950,"updated":"2014-12-17 21:25:31.000000000","message":"change \"connot\" to \"cannot\"","commit_id":"7080007535a60d45f20fbc4fdb7c97609943ecc3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5143d2de5689889dfd9ee187b172c63965920e09","unresolved":false,"context_lines":[{"line_number":952,"context_line":"        domain[\u0027enabled\u0027] \u003d False"},{"line_number":953,"context_line":"        self.assignment_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":954,"context_line":""},{"line_number":955,"context_line":"        collection_url \u003d ("},{"line_number":956,"context_line":"            \u0027/domains/%(domain_id)s/users/%(user_id)s/roles/%(role_id)s\u0027 % {"},{"line_number":957,"context_line":"                \u0027domain_id\u0027: domain[\u0027id\u0027],"},{"line_number":958,"context_line":"                \u0027user_id\u0027: self.user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_cb755f33","line":955,"updated":"2014-12-17 21:25:31.000000000","message":"the URL here isn\u0027t for a collection, it\u0027s for a role assignment.","commit_id":"7080007535a60d45f20fbc4fdb7c97609943ecc3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5143d2de5689889dfd9ee187b172c63965920e09","unresolved":false,"context_lines":[{"line_number":957,"context_line":"                \u0027domain_id\u0027: domain[\u0027id\u0027],"},{"line_number":958,"context_line":"                \u0027user_id\u0027: self.user[\u0027id\u0027],"},{"line_number":959,"context_line":"                \u0027role_id\u0027: self.role[\u0027id\u0027]})"},{"line_number":960,"context_line":"        self.put(collection_url, expected_status\u003d403)"},{"line_number":961,"context_line":""},{"line_number":962,"context_line":"    def test_cannot_create_grant_on_disabled_project(self):"},{"line_number":963,"context_line":"        project \u003d self.new_project_ref(domain_id\u003dself.domain[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_0b8f6724","line":960,"updated":"2014-12-17 21:25:31.000000000","message":"Call the controller method directly rather than going through the roundabout method of a REST call.","commit_id":"7080007535a60d45f20fbc4fdb7c97609943ecc3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5143d2de5689889dfd9ee187b172c63965920e09","unresolved":false,"context_lines":[{"line_number":964,"context_line":"        project[\u0027enabled\u0027] \u003d False"},{"line_number":965,"context_line":"        self.assignment_api.create_project(project[\u0027id\u0027], project)"},{"line_number":966,"context_line":""},{"line_number":967,"context_line":"        collection_url \u003d ("},{"line_number":968,"context_line":"            \u0027/projects/%(project_id)s/users/%(user_id)s/roles/%(role_id)s\u0027 % {"},{"line_number":969,"context_line":"                \u0027project_id\u0027: project[\u0027id\u0027],"},{"line_number":970,"context_line":"                \u0027user_id\u0027: self.user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_4bb08fdd","line":967,"updated":"2014-12-17 21:25:31.000000000","message":"the URL here isn\u0027t for a collection, it\u0027s for a role assignment.","commit_id":"7080007535a60d45f20fbc4fdb7c97609943ecc3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"5143d2de5689889dfd9ee187b172c63965920e09","unresolved":false,"context_lines":[{"line_number":969,"context_line":"                \u0027project_id\u0027: project[\u0027id\u0027],"},{"line_number":970,"context_line":"                \u0027user_id\u0027: self.user[\u0027id\u0027],"},{"line_number":971,"context_line":"                \u0027role_id\u0027: self.role[\u0027id\u0027]})"},{"line_number":972,"context_line":"        self.put(collection_url, expected_status\u003d403)"},{"line_number":973,"context_line":""},{"line_number":974,"context_line":"    # Role Assignments tests"},{"line_number":975,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3a961159_6bb38be9","line":972,"updated":"2014-12-17 21:25:31.000000000","message":"Call the controller method directly rather than going through the roundabout method of a REST call.","commit_id":"7080007535a60d45f20fbc4fdb7c97609943ecc3"}]}
