)]}'
{"keystone/assignment/core.py":[{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3695588bd1e5d86fd86069afa3c4c86f3811ee17","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        In all cases, if either user_id and/or project_id is specified, then we"},{"line_number":541,"context_line":"        filter the result on those values."},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        If project_id is specified and subtree_ids in None, then this"},{"line_number":544,"context_line":"        indicates that we are only interested in that one project. If"},{"line_number":545,"context_line":"        subtree_ids is not None, then this is an indicator that any"},{"line_number":546,"context_line":"        inherited assignments need to be expanded down the tree. The"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_5578898f","line":543,"updated":"2015-09-02 02:44:42.000000000","message":"\u0027subtree_ids is None,\u0027","commit_id":"f1a469da9d743d98312df76cec7c35dcb7c8052a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"572f179a4029697eb55246180133a8ff47eb01c2","unresolved":false,"context_lines":[{"line_number":540,"context_line":"        In all cases, if either user_id and/or project_id is specified, then we"},{"line_number":541,"context_line":"        filter the result on those values."},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"        If project_id is specified and subtree_ids in None, then this"},{"line_number":544,"context_line":"        indicates that we are only interested in that one project. If"},{"line_number":545,"context_line":"        subtree_ids is not None, then this is an indicator that any"},{"line_number":546,"context_line":"        inherited assignments need to be expanded down the tree. The"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_4cfafbbe","line":543,"in_reply_to":"da20952f_5578898f","updated":"2015-09-03 09:18:08.000000000","message":"Done","commit_id":"f1a469da9d743d98312df76cec7c35dcb7c8052a"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3695588bd1e5d86fd86069afa3c4c86f3811ee17","unresolved":false,"context_lines":[{"line_number":614,"context_line":"            project_id is specified, but subtree_ids is None) then simply"},{"line_number":615,"context_line":"            format this as a single assignment (since we are effectively"},{"line_number":616,"context_line":"            filtering on project_id). If however, project_id is None or"},{"line_number":617,"context_line":"            subtree_ids is not None, the replace this one assignment with a"},{"line_number":618,"context_line":"            list of role assignments for that user on every project under"},{"line_number":619,"context_line":"            that target."},{"line_number":620,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_75acad8c","line":617,"updated":"2015-09-02 02:44:42.000000000","message":"\u0027then replace\u0027","commit_id":"f1a469da9d743d98312df76cec7c35dcb7c8052a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"572f179a4029697eb55246180133a8ff47eb01c2","unresolved":false,"context_lines":[{"line_number":614,"context_line":"            project_id is specified, but subtree_ids is None) then simply"},{"line_number":615,"context_line":"            format this as a single assignment (since we are effectively"},{"line_number":616,"context_line":"            filtering on project_id). If however, project_id is None or"},{"line_number":617,"context_line":"            subtree_ids is not None, the replace this one assignment with a"},{"line_number":618,"context_line":"            list of role assignments for that user on every project under"},{"line_number":619,"context_line":"            that target."},{"line_number":620,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_ace077fb","line":617,"in_reply_to":"da20952f_75acad8c","updated":"2015-09-03 09:18:08.000000000","message":"Done","commit_id":"f1a469da9d743d98312df76cec7c35dcb7c8052a"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3695588bd1e5d86fd86069afa3c4c86f3811ee17","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                    # however, the assignment point is within the subtree,"},{"line_number":686,"context_line":"                    # then only a partial tree will get the assignment."},{"line_number":687,"context_line":"                    if ref.get(\u0027project_id\u0027):"},{"line_number":688,"context_line":"                        if ref.get(\u0027project_id\u0027) in project_ids:"},{"line_number":689,"context_line":"                            project_ids \u003d ("},{"line_number":690,"context_line":"                                [x[\u0027id\u0027] for x in"},{"line_number":691,"context_line":"                                    self.list_projects_in_subtree("}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_b525650b","line":688,"updated":"2015-09-02 02:44:42.000000000","message":"if ref.get(\u0027project_id\u0027) in project_ids:","commit_id":"f1a469da9d743d98312df76cec7c35dcb7c8052a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"572f179a4029697eb55246180133a8ff47eb01c2","unresolved":false,"context_lines":[{"line_number":685,"context_line":"                    # however, the assignment point is within the subtree,"},{"line_number":686,"context_line":"                    # then only a partial tree will get the assignment."},{"line_number":687,"context_line":"                    if ref.get(\u0027project_id\u0027):"},{"line_number":688,"context_line":"                        if ref.get(\u0027project_id\u0027) in project_ids:"},{"line_number":689,"context_line":"                            project_ids \u003d ("},{"line_number":690,"context_line":"                                [x[\u0027id\u0027] for x in"},{"line_number":691,"context_line":"                                    self.list_projects_in_subtree("}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_4c8afbc0","line":688,"in_reply_to":"da20952f_b525650b","updated":"2015-09-03 09:18:08.000000000","message":"I think you were saying that I could ditch the first if check...I think technically yes, although I think it is clearer this way since it shows the existence of project ID as a flag to say that this is a project inherited assignment....and then separately check where that assignment point is in the tree.  I did, however, modify the second check to simply be if ref[\u0027project_id} in project_ids since we then know that ref contains project_id.","commit_id":"f1a469da9d743d98312df76cec7c35dcb7c8052a"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3695588bd1e5d86fd86069afa3c4c86f3811ee17","unresolved":false,"context_lines":[{"line_number":889,"context_line":""},{"line_number":890,"context_line":"    def list_role_assignments(self, role_id\u003dNone, user_id\u003dNone, group_id\u003dNone,"},{"line_number":891,"context_line":"                              domain_id\u003dNone, project_id\u003dNone,"},{"line_number":892,"context_line":"                              include_subtree\u003dFalse, inherited\u003dNone,"},{"line_number":893,"context_line":"                              effective\u003dNone, ):"},{"line_number":894,"context_line":"        \"\"\"List role assignments, honoring effective mode and provided filters."},{"line_number":895,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_fed099f9","line":892,"updated":"2015-09-02 02:44:42.000000000","message":"may want to move the new param to the end of the list","commit_id":"f1a469da9d743d98312df76cec7c35dcb7c8052a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"572f179a4029697eb55246180133a8ff47eb01c2","unresolved":false,"context_lines":[{"line_number":889,"context_line":""},{"line_number":890,"context_line":"    def list_role_assignments(self, role_id\u003dNone, user_id\u003dNone, group_id\u003dNone,"},{"line_number":891,"context_line":"                              domain_id\u003dNone, project_id\u003dNone,"},{"line_number":892,"context_line":"                              include_subtree\u003dFalse, inherited\u003dNone,"},{"line_number":893,"context_line":"                              effective\u003dNone, ):"},{"line_number":894,"context_line":"        \"\"\"List role assignments, honoring effective mode and provided filters."},{"line_number":895,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_8c449374","line":892,"in_reply_to":"da20952f_fed099f9","updated":"2015-09-03 09:18:08.000000000","message":"I put it there since it seems naturally to sit with project_od","commit_id":"f1a469da9d743d98312df76cec7c35dcb7c8052a"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"3695588bd1e5d86fd86069afa3c4c86f3811ee17","unresolved":false,"context_lines":[{"line_number":890,"context_line":"    def list_role_assignments(self, role_id\u003dNone, user_id\u003dNone, group_id\u003dNone,"},{"line_number":891,"context_line":"                              domain_id\u003dNone, project_id\u003dNone,"},{"line_number":892,"context_line":"                              include_subtree\u003dFalse, inherited\u003dNone,"},{"line_number":893,"context_line":"                              effective\u003dNone, ):"},{"line_number":894,"context_line":"        \"\"\"List role assignments, honoring effective mode and provided filters."},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        Returns a list of role assignments, where their attributes match the"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_1ecead5a","line":893,"updated":"2015-09-02 02:44:42.000000000","message":",?","commit_id":"f1a469da9d743d98312df76cec7c35dcb7c8052a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"572f179a4029697eb55246180133a8ff47eb01c2","unresolved":false,"context_lines":[{"line_number":890,"context_line":"    def list_role_assignments(self, role_id\u003dNone, user_id\u003dNone, group_id\u003dNone,"},{"line_number":891,"context_line":"                              domain_id\u003dNone, project_id\u003dNone,"},{"line_number":892,"context_line":"                              include_subtree\u003dFalse, inherited\u003dNone,"},{"line_number":893,"context_line":"                              effective\u003dNone, ):"},{"line_number":894,"context_line":"        \"\"\"List role assignments, honoring effective mode and provided filters."},{"line_number":895,"context_line":""},{"line_number":896,"context_line":"        Returns a list of role assignments, where their attributes match the"}],"source_content_type":"text/x-python","patch_set":8,"id":"da20952f_0caba31e","line":893,"in_reply_to":"da20952f_1ecead5a","updated":"2015-09-03 09:18:08.000000000","message":"oops!","commit_id":"f1a469da9d743d98312df76cec7c35dcb7c8052a"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"e3087ca5f5684703ecf00580475314b004e7a4a1","unresolved":false,"context_lines":[{"line_number":731,"context_line":"                               additionally any projects specified in"},{"line_number":732,"context_line":"                               subtree_ids"},{"line_number":733,"context_line":"            :param subtree_ids: If specified, also include those assignments"},{"line_number":734,"context_line":"                                that affect these project. These projects are"},{"line_number":735,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":736,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":737,"context_line":"                                will only be specified if project_id has also"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_ea878ad5","line":734,"updated":"2015-09-24 18:31:27.000000000","message":"s/project/projects/","commit_id":"0b6ff18042d05e83f4f5ab8f7d4b84d9e291e637"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"11e407367d3406b1cba971480fcf54f82e764c4e","unresolved":false,"context_lines":[{"line_number":731,"context_line":"                               additionally any projects specified in"},{"line_number":732,"context_line":"                               subtree_ids"},{"line_number":733,"context_line":"            :param subtree_ids: If specified, also include those assignments"},{"line_number":734,"context_line":"                                that affect these project. These projects are"},{"line_number":735,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":736,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":737,"context_line":"                                will only be specified if project_id has also"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_a7bbf6c3","line":734,"in_reply_to":"9a1a9d01_ea878ad5","updated":"2015-09-25 11:57:55.000000000","message":"Done","commit_id":"0b6ff18042d05e83f4f5ab8f7d4b84d9e291e637"},{"author":{"_account_id":13055,"name":"Alexander Makarov","email":"ajiekcahdp.makapob@gmail.com","username":"amakarov"},"change_message_id":"e3087ca5f5684703ecf00580475314b004e7a4a1","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":736,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":737,"context_line":"                                will only be specified if project_id has also"},{"line_number":738,"context_line":"                                been specified."},{"line_number":739,"context_line":"            :param domain_id: If specified, only include those assignments"},{"line_number":740,"context_line":"                              that affect this domain - by definition this will"},{"line_number":741,"context_line":"                              not include any inherited assignments"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_2ac102e5","line":738,"updated":"2015-09-24 18:31:27.000000000","message":"How can we be sure, that \"subtree_ids will only be specified if project_id has also been specified\"?\n\nMaybe I missed something, though I can see a need for schema validation here.","commit_id":"0b6ff18042d05e83f4f5ab8f7d4b84d9e291e637"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"21335a6a6da67158b1bd84966237ef44affcbeec","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":736,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":737,"context_line":"                                will only be specified if project_id has also"},{"line_number":738,"context_line":"                                been specified."},{"line_number":739,"context_line":"            :param domain_id: If specified, only include those assignments"},{"line_number":740,"context_line":"                              that affect this domain - by definition this will"},{"line_number":741,"context_line":"                              not include any inherited assignments"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_d2c7d843","line":738,"in_reply_to":"9a1a9d01_2ac102e5","updated":"2015-09-24 20:16:21.000000000","message":"Is this \u0027will only be\u0027 or \u0027can only be\u0027?","commit_id":"0b6ff18042d05e83f4f5ab8f7d4b84d9e291e637"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"11e407367d3406b1cba971480fcf54f82e764c4e","unresolved":false,"context_lines":[{"line_number":735,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":736,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":737,"context_line":"                                will only be specified if project_id has also"},{"line_number":738,"context_line":"                                been specified."},{"line_number":739,"context_line":"            :param domain_id: If specified, only include those assignments"},{"line_number":740,"context_line":"                              that affect this domain - by definition this will"},{"line_number":741,"context_line":"                              not include any inherited assignments"}],"source_content_type":"text/x-python","patch_set":9,"id":"9a1a9d01_67b07ef5","line":738,"in_reply_to":"9a1a9d01_d2c7d843","updated":"2015-09-25 11:57:55.000000000","message":"So the API states that you can only specify subtree_id if project_id is specified.  I\u0027ll add checking to the controller for this. However, I\u0027ll change the code below to be a little more defensive.","commit_id":"0b6ff18042d05e83f4f5ab8f7d4b84d9e291e637"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0c25aa0035992737c26b481dff14bf999f450032","unresolved":false,"context_lines":[{"line_number":595,"context_line":"            }"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"            Once expanded, it should be returned as a list of entities like the"},{"line_number":598,"context_line":"            one below, one for each each user_id in the provided group_id and"},{"line_number":599,"context_line":"            for each subproject_id in the project_id subtree."},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_fa039374","line":598,"updated":"2015-10-03 07:46:05.000000000","message":"non-relevant, but seems there is a duplicated \u0027each\u0027 here :)","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"85c95948e295cc5332258ed0a057e1295a1f71f1","unresolved":false,"context_lines":[{"line_number":595,"context_line":"            }"},{"line_number":596,"context_line":""},{"line_number":597,"context_line":"            Once expanded, it should be returned as a list of entities like the"},{"line_number":598,"context_line":"            one below, one for each each user_id in the provided group_id and"},{"line_number":599,"context_line":"            for each subproject_id in the project_id subtree."},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_7a6d4331","line":598,"in_reply_to":"9a1a9d01_fa039374","updated":"2015-10-06 08:43:39.000000000","message":"yep, I\u0027ll provide  follow on patch to fix that","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0c25aa0035992737c26b481dff14bf999f450032","unresolved":false,"context_lines":[{"line_number":734,"context_line":"                               additionally any projects specified in"},{"line_number":735,"context_line":"                               subtree_ids"},{"line_number":736,"context_line":"            :param subtree_ids: If specified, also include those assignments"},{"line_number":737,"context_line":"                                that affect these projects. These projects are"},{"line_number":738,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":739,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":740,"context_line":"                                can only be specified if project_id has also"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_054e50c1","line":737,"updated":"2015-10-03 07:46:05.000000000","message":"better to explicitly comment at the beginning of the line to tell us that \u0027subtree_ids\u0027 is a list of project ids.","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"85c95948e295cc5332258ed0a057e1295a1f71f1","unresolved":false,"context_lines":[{"line_number":734,"context_line":"                               additionally any projects specified in"},{"line_number":735,"context_line":"                               subtree_ids"},{"line_number":736,"context_line":"            :param subtree_ids: If specified, also include those assignments"},{"line_number":737,"context_line":"                                that affect these projects. These projects are"},{"line_number":738,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":739,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":740,"context_line":"                                can only be specified if project_id has also"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_3a77cb03","line":737,"in_reply_to":"9a1a9d01_054e50c1","updated":"2015-10-06 08:43:39.000000000","message":"Done","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0c25aa0035992737c26b481dff14bf999f450032","unresolved":false,"context_lines":[{"line_number":790,"context_line":"                                  self.resource_api.list_project_parents("},{"line_number":791,"context_line":"                                      project_id)]"},{"line_number":792,"context_line":"                    if subtree_ids:"},{"line_number":793,"context_line":"                        parent_ids +\u003d project_ids_of_interest"},{"line_number":794,"context_line":"                    if parent_ids:"},{"line_number":795,"context_line":"                        inherited_refs +\u003d self.driver.list_role_assignments("},{"line_number":796,"context_line":"                            role_id\u003drole_id, project_ids\u003dparent_ids,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_88d035cb","line":793,"updated":"2015-10-03 07:46:05.000000000","message":"so, it\u0027s not just parent ids anymore, it\u0027s all the project ids in the tree, both the upward and downward projects in the tree, iiuc, can we change the name this variable?","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"85c95948e295cc5332258ed0a057e1295a1f71f1","unresolved":false,"context_lines":[{"line_number":790,"context_line":"                                  self.resource_api.list_project_parents("},{"line_number":791,"context_line":"                                      project_id)]"},{"line_number":792,"context_line":"                    if subtree_ids:"},{"line_number":793,"context_line":"                        parent_ids +\u003d project_ids_of_interest"},{"line_number":794,"context_line":"                    if parent_ids:"},{"line_number":795,"context_line":"                        inherited_refs +\u003d self.driver.list_role_assignments("},{"line_number":796,"context_line":"                            role_id\u003drole_id, project_ids\u003dparent_ids,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_03973891","line":793,"in_reply_to":"9a1a9d01_88d035cb","updated":"2015-10-06 08:43:39.000000000","message":"good suggestion, done.","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0c25aa0035992737c26b481dff14bf999f450032","unresolved":false,"context_lines":[{"line_number":893,"context_line":"        if project_id and include_subtree:"},{"line_number":894,"context_line":"            subtree_ids \u003d ("},{"line_number":895,"context_line":"                [x[\u0027id\u0027] for x in"},{"line_number":896,"context_line":"                    self.resource_api.list_projects_in_subtree(project_id)])"},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"        if effective:"},{"line_number":899,"context_line":"            return self._list_effective_role_assignments("}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_a58764d6","line":896,"updated":"2015-10-03 07:46:05.000000000","message":"fine as it is, just curious why the outermost brackets \u0027()\u0027 is needed here. :)","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"85c95948e295cc5332258ed0a057e1295a1f71f1","unresolved":false,"context_lines":[{"line_number":893,"context_line":"        if project_id and include_subtree:"},{"line_number":894,"context_line":"            subtree_ids \u003d ("},{"line_number":895,"context_line":"                [x[\u0027id\u0027] for x in"},{"line_number":896,"context_line":"                    self.resource_api.list_projects_in_subtree(project_id)])"},{"line_number":897,"context_line":""},{"line_number":898,"context_line":"        if effective:"},{"line_number":899,"context_line":"            return self._list_effective_role_assignments("}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_e3523cdd","line":896,"in_reply_to":"9a1a9d01_a58764d6","updated":"2015-10-06 08:43:39.000000000","message":"So kind of personal preference - I prefer this to:\n\nsubtree_ids \u003d [\n    x[\u0027id\u0027] for x in\n    self.resource_api.list_projects_in_subtree(project_id)]\n\nsince I think it shows the \"loop\" and \"loop statement\" better","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"5e102373c2caf11b9b187972f5aeb5f77169b315","unresolved":false,"context_lines":[{"line_number":665,"context_line":"                        self.resource_api.list_projects_in_domain("},{"line_number":666,"context_line":"                            ref[\u0027domain_id\u0027])])"},{"line_number":667,"context_line":"            else:"},{"line_number":668,"context_line":"                # It must be a project assignment, so apply it to it\u0027s subtree"},{"line_number":669,"context_line":"                project_ids \u003d ("},{"line_number":670,"context_line":"                    [x[\u0027id\u0027] for x in"},{"line_number":671,"context_line":"                        self.resource_api.list_projects_in_subtree("}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_08bf49fc","line":668,"updated":"2015-10-06 14:17:12.000000000","message":"s/it\u0027s/its","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6d2571e80811959d4b02f0ae06c74e9f69751a75","unresolved":false,"context_lines":[{"line_number":665,"context_line":"                        self.resource_api.list_projects_in_domain("},{"line_number":666,"context_line":"                            ref[\u0027domain_id\u0027])])"},{"line_number":667,"context_line":"            else:"},{"line_number":668,"context_line":"                # It must be a project assignment, so apply it to it\u0027s subtree"},{"line_number":669,"context_line":"                project_ids \u003d ("},{"line_number":670,"context_line":"                    [x[\u0027id\u0027] for x in"},{"line_number":671,"context_line":"                        self.resource_api.list_projects_in_subtree("}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_58080bda","line":668,"in_reply_to":"7a2fa921_08bf49fc","updated":"2015-10-22 15:16:11.000000000","message":"Done","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"5e102373c2caf11b9b187972f5aeb5f77169b315","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        parameters, although since we are in effective mode, group can never"},{"line_number":705,"context_line":"        act as a filter (since group assignments are expanded into user roles)"},{"line_number":706,"context_line":"        and domain can only be filter if we want non-inherited assignments,"},{"line_number":707,"context_line":"        since domains can\u0027t inherit assignments."},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        The goal of this method is to only ask the driver for those"},{"line_number":710,"context_line":"        assignments as could effect the result based on the parameter filters"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_e63a3fcd","line":707,"updated":"2015-10-06 14:17:12.000000000","message":"I think including a quick note about subtree_ids would be worth it.","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6d2571e80811959d4b02f0ae06c74e9f69751a75","unresolved":false,"context_lines":[{"line_number":704,"context_line":"        parameters, although since we are in effective mode, group can never"},{"line_number":705,"context_line":"        act as a filter (since group assignments are expanded into user roles)"},{"line_number":706,"context_line":"        and domain can only be filter if we want non-inherited assignments,"},{"line_number":707,"context_line":"        since domains can\u0027t inherit assignments."},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        The goal of this method is to only ask the driver for those"},{"line_number":710,"context_line":"        assignments as could effect the result based on the parameter filters"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_9848e3cd","line":707,"in_reply_to":"7a2fa921_e63a3fcd","updated":"2015-10-22 15:16:11.000000000","message":"Done","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"5e102373c2caf11b9b187972f5aeb5f77169b315","unresolved":false,"context_lines":[{"line_number":707,"context_line":"        since domains can\u0027t inherit assignments."},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        The goal of this method is to only ask the driver for those"},{"line_number":710,"context_line":"        assignments as could effect the result based on the parameter filters"},{"line_number":711,"context_line":"        specified, hence avoiding retrieving a huge list."},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_4bb53ecb","line":710,"updated":"2015-10-06 14:17:12.000000000","message":"(nit) maybe \"affect\" instead of \"effect\" (although not the primary goal of this patch)","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6d2571e80811959d4b02f0ae06c74e9f69751a75","unresolved":false,"context_lines":[{"line_number":707,"context_line":"        since domains can\u0027t inherit assignments."},{"line_number":708,"context_line":""},{"line_number":709,"context_line":"        The goal of this method is to only ask the driver for those"},{"line_number":710,"context_line":"        assignments as could effect the result based on the parameter filters"},{"line_number":711,"context_line":"        specified, hence avoiding retrieving a huge list."},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_38374f4e","line":710,"in_reply_to":"7a2fa921_4bb53ecb","updated":"2015-10-22 15:16:11.000000000","message":"sounds like a clean up patch to me","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"03d40286da6c899e8e4df1706092bcd7d030e8e1","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":740,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":741,"context_line":"                                can only be specified if project_id has also"},{"line_number":742,"context_line":"                                been specified."},{"line_number":743,"context_line":"            :param domain_id: If specified, only include those assignments"},{"line_number":744,"context_line":"                              that affect this domain - by definition this will"},{"line_number":745,"context_line":"                              not include any inherited assignments"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_4500bf34","line":742,"updated":"2015-10-06 16:33:15.000000000","message":"Can we do this today? Say we have a project hierarchy like this\n\n Project A -\u003e Project B -\u003e Project C\n           -\u003e Project D\n\nCan we assign a role to Project A, and have it inherit down to one level only, meaning Project B and Project D get it, but not Project C?","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"fc7d772ff996c767794f5b9acb16937b0666d59c","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":740,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":741,"context_line":"                                can only be specified if project_id has also"},{"line_number":742,"context_line":"                                been specified."},{"line_number":743,"context_line":"            :param domain_id: If specified, only include those assignments"},{"line_number":744,"context_line":"                              that affect this domain - by definition this will"},{"line_number":745,"context_line":"                              not include any inherited assignments"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_8517b750","line":742,"in_reply_to":"7a2fa921_4500bf34","updated":"2015-10-06 16:35:50.000000000","message":"No, we can do this using inherited role assignments. We only can do this if we assign the role for the user on each project individually.","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":1916,"name":"Guang Yee","email":"gyee@suse.com","username":"guang-yee"},"change_message_id":"34a8a855ef45c129bedbe31563f424f00ea4b8c7","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":740,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":741,"context_line":"                                can only be specified if project_id has also"},{"line_number":742,"context_line":"                                been specified."},{"line_number":743,"context_line":"            :param domain_id: If specified, only include those assignments"},{"line_number":744,"context_line":"                              that affect this domain - by definition this will"},{"line_number":745,"context_line":"                              not include any inherited assignments"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_e82f629f","line":742,"in_reply_to":"7a2fa921_8517b750","updated":"2015-10-06 16:54:49.000000000","message":"In that case, what\u0027s the point of passing subtree_ids? Should it just be a Boolean? Unless we are trying to future proof here.","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6d2571e80811959d4b02f0ae06c74e9f69751a75","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":740,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":741,"context_line":"                                can only be specified if project_id has also"},{"line_number":742,"context_line":"                                been specified."},{"line_number":743,"context_line":"            :param domain_id: If specified, only include those assignments"},{"line_number":744,"context_line":"                              that affect this domain - by definition this will"},{"line_number":745,"context_line":"                              not include any inherited assignments"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_f8f6b78d","line":742,"in_reply_to":"7a2fa921_a3baebdf","updated":"2015-10-22 15:16:11.000000000","message":"That\u0027s correct - whether we are in effective mode or not we need the subtree_ids - so we build them once (line 893).","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"730d0a73f0235877e68188d33e194ad353fd8f40","unresolved":false,"context_lines":[{"line_number":739,"context_line":"                                guaranteed to be in the same domain as the"},{"line_number":740,"context_line":"                                project specified in project_id. subtree_ids"},{"line_number":741,"context_line":"                                can only be specified if project_id has also"},{"line_number":742,"context_line":"                                been specified."},{"line_number":743,"context_line":"            :param domain_id: If specified, only include those assignments"},{"line_number":744,"context_line":"                              that affect this domain - by definition this will"},{"line_number":745,"context_line":"                              not include any inherited assignments"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_a3baebdf","line":742,"in_reply_to":"7a2fa921_e82f629f","updated":"2015-10-06 17:02:08.000000000","message":"I think that we need the subtree_as_ids to get the assignments later (see line 755), so if wepass the subtree as a boolean, we should have to request the subtree again inside this method.","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"5e102373c2caf11b9b187972f5aeb5f77169b315","unresolved":false,"context_lines":[{"line_number":754,"context_line":"                if subtree_ids:"},{"line_number":755,"context_line":"                    project_ids_of_interest \u003d subtree_ids + [project_id]"},{"line_number":756,"context_line":"                else:"},{"line_number":757,"context_line":"                    project_ids_of_interest \u003d [project_id]"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"            # List direct project role assignments"},{"line_number":760,"context_line":"            non_inherited_refs \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_8b57d301","line":757,"updated":"2015-10-06 14:17:12.000000000","message":"We are doing the same operation at lines 852-855 in 4-lines; let\u0027s keep them consistent.","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6d2571e80811959d4b02f0ae06c74e9f69751a75","unresolved":false,"context_lines":[{"line_number":754,"context_line":"                if subtree_ids:"},{"line_number":755,"context_line":"                    project_ids_of_interest \u003d subtree_ids + [project_id]"},{"line_number":756,"context_line":"                else:"},{"line_number":757,"context_line":"                    project_ids_of_interest \u003d [project_id]"},{"line_number":758,"context_line":""},{"line_number":759,"context_line":"            # List direct project role assignments"},{"line_number":760,"context_line":"            non_inherited_refs \u003d []"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_13f27406","line":757,"in_reply_to":"7a2fa921_8b57d301","updated":"2015-10-22 15:16:11.000000000","message":"Done","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"5e102373c2caf11b9b187972f5aeb5f77169b315","unresolved":false,"context_lines":[{"line_number":774,"context_line":"                    # specific projects, then we can only get inherited"},{"line_number":775,"context_line":"                    # assignments from their common domain or from any of"},{"line_number":776,"context_line":"                    # their parents projects."},{"line_number":777,"context_line":""},{"line_number":778,"context_line":"                    # List inherited assignments from the project\u0027s domain"},{"line_number":779,"context_line":"                    proj_domain_id \u003d self.resource_api.get_project("},{"line_number":780,"context_line":"                        project_id)[\u0027domain_id\u0027]"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_a8edf58c","line":777,"updated":"2015-10-06 14:17:12.000000000","message":"I\u0027d join these two comments, as they are refering to the same thing/operation below.","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"5e102373c2caf11b9b187972f5aeb5f77169b315","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        \"\"\"List role assignments without applying expansion."},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        Returns a list of direct role assignments, where their attributes match"},{"line_number":848,"context_line":"        the provided filters."},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"        \"\"\""},{"line_number":851,"context_line":"        group_ids \u003d [group_id] if group_id else None"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_8b6356b1","line":848,"updated":"2015-10-06 14:17:12.000000000","message":"Please include something about subtree_ids in this doc, since it currently doesn\u0027t apply to it because subtree_ids isn\u0027t a filter for assignment attributes.","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6d2571e80811959d4b02f0ae06c74e9f69751a75","unresolved":false,"context_lines":[{"line_number":845,"context_line":"        \"\"\"List role assignments without applying expansion."},{"line_number":846,"context_line":""},{"line_number":847,"context_line":"        Returns a list of direct role assignments, where their attributes match"},{"line_number":848,"context_line":"        the provided filters."},{"line_number":849,"context_line":""},{"line_number":850,"context_line":"        \"\"\""},{"line_number":851,"context_line":"        group_ids \u003d [group_id] if group_id else None"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_93f0c4ca","line":848,"in_reply_to":"7a2fa921_8b6356b1","updated":"2015-10-22 15:16:11.000000000","message":"Done","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0c25aa0035992737c26b481dff14bf999f450032","unresolved":false,"context_lines":[{"line_number":6643,"context_line":"    def test_list_assignments_for_tree_with_inherited_parent_assignments(self):"},{"line_number":6644,"context_line":"        \"\"\"Test tree of project assignments with mixed inherited assignments."},{"line_number":6645,"context_line":""},{"line_number":6646,"context_line":"        In this test we want to ensure that a when asking for a list of"},{"line_number":6647,"context_line":"        assignments in a subtree, any assignments inherited from above the"},{"line_number":6648,"context_line":"        subtree are correctly combined with any assignments within the subtree"},{"line_number":6649,"context_line":"        itself."}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_5aa87f77","line":6646,"updated":"2015-10-03 07:46:05.000000000","message":"del/\u0027a\u0027 before \u0027when\u0027","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"85c95948e295cc5332258ed0a057e1295a1f71f1","unresolved":false,"context_lines":[{"line_number":6643,"context_line":"    def test_list_assignments_for_tree_with_inherited_parent_assignments(self):"},{"line_number":6644,"context_line":"        \"\"\"Test tree of project assignments with mixed inherited assignments."},{"line_number":6645,"context_line":""},{"line_number":6646,"context_line":"        In this test we want to ensure that a when asking for a list of"},{"line_number":6647,"context_line":"        assignments in a subtree, any assignments inherited from above the"},{"line_number":6648,"context_line":"        subtree are correctly combined with any assignments within the subtree"},{"line_number":6649,"context_line":"        itself."}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_03fad8bd","line":6646,"in_reply_to":"9a1a9d01_5aa87f77","updated":"2015-10-06 08:43:39.000000000","message":"Done","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0c25aa0035992737c26b481dff14bf999f450032","unresolved":false,"context_lines":[{"line_number":6673,"context_line":"            # Both users are part of the same group"},{"line_number":6674,"context_line":"            \u0027group_memberships\u0027: [{\u0027group\u0027: 0, \u0027users\u0027: [0, 1]}],"},{"line_number":6675,"context_line":"            # We are going to ask for listing of assignment on project 1 and"},{"line_number":6676,"context_line":"            # it\u0027s subtree. So first we\u0027ll add two inherited assignents above"},{"line_number":6677,"context_line":"            # this (one user and one for a group that contains this user)."},{"line_number":6678,"context_line":"            \u0027assignments\u0027: [{\u0027user\u0027: 0, \u0027role\u0027: 0, \u0027project\u0027: 0,"},{"line_number":6679,"context_line":"                             \u0027inherited_to_projects\u0027: True},"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_1a3a0799","line":6676,"updated":"2015-10-03 07:46:05.000000000","message":"nit: s/assignents/assignments","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"85c95948e295cc5332258ed0a057e1295a1f71f1","unresolved":false,"context_lines":[{"line_number":6673,"context_line":"            # Both users are part of the same group"},{"line_number":6674,"context_line":"            \u0027group_memberships\u0027: [{\u0027group\u0027: 0, \u0027users\u0027: [0, 1]}],"},{"line_number":6675,"context_line":"            # We are going to ask for listing of assignment on project 1 and"},{"line_number":6676,"context_line":"            # it\u0027s subtree. So first we\u0027ll add two inherited assignents above"},{"line_number":6677,"context_line":"            # this (one user and one for a group that contains this user)."},{"line_number":6678,"context_line":"            \u0027assignments\u0027: [{\u0027user\u0027: 0, \u0027role\u0027: 0, \u0027project\u0027: 0,"},{"line_number":6679,"context_line":"                             \u0027inherited_to_projects\u0027: True},"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_43269069","line":6676,"in_reply_to":"9a1a9d01_1a3a0799","updated":"2015-10-06 08:43:39.000000000","message":"Done","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0c25aa0035992737c26b481dff14bf999f450032","unresolved":false,"context_lines":[{"line_number":6680,"context_line":"                            {\u0027group\u0027: 0, \u0027role\u0027: 1, \u0027project\u0027: 0,"},{"line_number":6681,"context_line":"                             \u0027inherited_to_projects\u0027: True},"},{"line_number":6682,"context_line":"                            # Now an inherited assignment on project 1 itself,"},{"line_number":6683,"context_line":"                            # which should ONLY show up on its children"},{"line_number":6684,"context_line":"                            {\u0027user\u0027: 0, \u0027role\u0027: 2, \u0027project\u0027: 1,"},{"line_number":6685,"context_line":"                             \u0027inherited_to_projects\u0027: True},"},{"line_number":6686,"context_line":"                            # ...and a direct assignment on one of those"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_9a905750","line":6683,"updated":"2015-10-03 07:46:05.000000000","message":"why ignore this assignment on project1 itself?","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"85c95948e295cc5332258ed0a057e1295a1f71f1","unresolved":false,"context_lines":[{"line_number":6680,"context_line":"                            {\u0027group\u0027: 0, \u0027role\u0027: 1, \u0027project\u0027: 0,"},{"line_number":6681,"context_line":"                             \u0027inherited_to_projects\u0027: True},"},{"line_number":6682,"context_line":"                            # Now an inherited assignment on project 1 itself,"},{"line_number":6683,"context_line":"                            # which should ONLY show up on its children"},{"line_number":6684,"context_line":"                            {\u0027user\u0027: 0, \u0027role\u0027: 2, \u0027project\u0027: 1,"},{"line_number":6685,"context_line":"                             \u0027inherited_to_projects\u0027: True},"},{"line_number":6686,"context_line":"                            # ...and a direct assignment on one of those"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_a3bf64cf","line":6683,"in_reply_to":"9a1a9d01_9a905750","updated":"2015-10-06 08:43:39.000000000","message":"..because today, inherited assignments only apply to children, not the their anchor point. This is a hang over from when they were only application to domains.  We plan to change this when we move inheritance to core in Mitaka.","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"0c25aa0035992737c26b481dff14bf999f450032","unresolved":false,"context_lines":[{"line_number":6711,"context_line":"                     {\u0027user\u0027: 0, \u0027role\u0027: 1, \u0027project\u0027: 3,"},{"line_number":6712,"context_line":"                      \u0027indirect\u0027: {\u0027project\u0027: 0, \u0027group\u0027: 0}},"},{"line_number":6713,"context_line":"                     # The inherited assignment on project 1 should appear only"},{"line_number":6714,"context_line":"                     # on its children"},{"line_number":6715,"context_line":"                     {\u0027user\u0027: 0, \u0027role\u0027: 2, \u0027project\u0027: 2,"},{"line_number":6716,"context_line":"                      \u0027indirect\u0027: {\u0027project\u0027: 1}},"},{"line_number":6717,"context_line":"                     {\u0027user\u0027: 0, \u0027role\u0027: 2, \u0027project\u0027: 3,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_fa871310","line":6714,"updated":"2015-10-03 07:46:05.000000000","message":"why this {\u0027user\u0027: 0, \u0027role\u0027: 2, \u0027project\u0027: 1} is redundant?","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"85c95948e295cc5332258ed0a057e1295a1f71f1","unresolved":false,"context_lines":[{"line_number":6711,"context_line":"                     {\u0027user\u0027: 0, \u0027role\u0027: 1, \u0027project\u0027: 3,"},{"line_number":6712,"context_line":"                      \u0027indirect\u0027: {\u0027project\u0027: 0, \u0027group\u0027: 0}},"},{"line_number":6713,"context_line":"                     # The inherited assignment on project 1 should appear only"},{"line_number":6714,"context_line":"                     # on its children"},{"line_number":6715,"context_line":"                     {\u0027user\u0027: 0, \u0027role\u0027: 2, \u0027project\u0027: 2,"},{"line_number":6716,"context_line":"                      \u0027indirect\u0027: {\u0027project\u0027: 1}},"},{"line_number":6717,"context_line":"                     {\u0027user\u0027: 0, \u0027role\u0027: 2, \u0027project\u0027: 3,"}],"source_content_type":"text/x-python","patch_set":10,"id":"7a2fa921_63b06cf5","line":6714,"in_reply_to":"9a1a9d01_fa871310","updated":"2015-10-06 08:43:39.000000000","message":"...because of the comment above - inherited assignments don\u0027t currently apply to their anchor point.","commit_id":"d80df88f4735eaa68113f66423cfffc75a3d6d9c"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"5e102373c2caf11b9b187972f5aeb5f77169b315","unresolved":false,"context_lines":[{"line_number":6597,"context_line":"        self.execute_assignment_tests("},{"line_number":6598,"context_line":"            test_plan_with_os_inherit_disabled, test_data)"},{"line_number":6599,"context_line":""},{"line_number":6600,"context_line":"    def test_list_assignments_for_tree(self):"},{"line_number":6601,"context_line":"        \"\"\"Test listing of role assignments for tree of projects.\"\"\""},{"line_number":6602,"context_line":""},{"line_number":6603,"context_line":"        # Enable OS-INHERIT extension"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_ab3acf34","line":6600,"updated":"2015-10-06 14:17:12.000000000","message":"What about being more clear we use include_subtree and it\u0027s effective too ?\n\nSomething like test_list_effective_assignments_for_subtree ?","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6d2571e80811959d4b02f0ae06c74e9f69751a75","unresolved":false,"context_lines":[{"line_number":6597,"context_line":"        self.execute_assignment_tests("},{"line_number":6598,"context_line":"            test_plan_with_os_inherit_disabled, test_data)"},{"line_number":6599,"context_line":""},{"line_number":6600,"context_line":"    def test_list_assignments_for_tree(self):"},{"line_number":6601,"context_line":"        \"\"\"Test listing of role assignments for tree of projects.\"\"\""},{"line_number":6602,"context_line":""},{"line_number":6603,"context_line":"        # Enable OS-INHERIT extension"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_25c3a78a","line":6600,"in_reply_to":"7a2fa921_ab3acf34","updated":"2015-10-22 15:16:11.000000000","message":"Done","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"5e102373c2caf11b9b187972f5aeb5f77169b315","unresolved":false,"context_lines":[{"line_number":6649,"context_line":""},{"line_number":6650,"context_line":"        self.execute_assignment_test_plan(test_plan)"},{"line_number":6651,"context_line":""},{"line_number":6652,"context_line":"    def test_list_assignments_for_tree_with_inherited_parent_assignments(self):"},{"line_number":6653,"context_line":"        \"\"\"Test tree of project assignments with mixed inherited assignments."},{"line_number":6654,"context_line":""},{"line_number":6655,"context_line":"        In this test we want to ensure that when asking for a list of"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_2b1ebfba","line":6652,"updated":"2015-10-06 14:17:12.000000000","message":"Same as above, what about including effective ?test_list_effective_assignments_for_subtree_with_inherited_parent_assignments (too big?)","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6d2571e80811959d4b02f0ae06c74e9f69751a75","unresolved":false,"context_lines":[{"line_number":6649,"context_line":""},{"line_number":6650,"context_line":"        self.execute_assignment_test_plan(test_plan)"},{"line_number":6651,"context_line":""},{"line_number":6652,"context_line":"    def test_list_assignments_for_tree_with_inherited_parent_assignments(self):"},{"line_number":6653,"context_line":"        \"\"\"Test tree of project assignments with mixed inherited assignments."},{"line_number":6654,"context_line":""},{"line_number":6655,"context_line":"        In this test we want to ensure that when asking for a list of"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_655afff3","line":6652,"in_reply_to":"7a2fa921_2b1ebfba","updated":"2015-10-22 15:16:11.000000000","message":"Done","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"5e102373c2caf11b9b187972f5aeb5f77169b315","unresolved":false,"context_lines":[{"line_number":6731,"context_line":"        }"},{"line_number":6732,"context_line":""},{"line_number":6733,"context_line":"        self.execute_assignment_test_plan(test_plan)"},{"line_number":6734,"context_line":""},{"line_number":6735,"context_line":""},{"line_number":6736,"context_line":"class FilterTests(filtering.FilterTests):"},{"line_number":6737,"context_line":"    def test_list_entities_filtered(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7a2fa921_abb96feb","line":6734,"updated":"2015-10-06 14:17:12.000000000","message":"What about a test with only include_subtree and project_id (not effective) ?\n\nWhat about a test where inherited assignments come from the domain too ?","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6d2571e80811959d4b02f0ae06c74e9f69751a75","unresolved":false,"context_lines":[{"line_number":6731,"context_line":"        }"},{"line_number":6732,"context_line":""},{"line_number":6733,"context_line":"        self.execute_assignment_test_plan(test_plan)"},{"line_number":6734,"context_line":""},{"line_number":6735,"context_line":""},{"line_number":6736,"context_line":"class FilterTests(filtering.FilterTests):"},{"line_number":6737,"context_line":"    def test_list_entities_filtered(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_28c37e8a","line":6734,"in_reply_to":"7a2fa921_abb96feb","updated":"2015-10-22 15:16:11.000000000","message":"Done","commit_id":"cea249af3633be2c697878c1868519c6836cf1a9"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"86ddeff8a2856945ceeb6aaa39504470f5b630a5","unresolved":false,"context_lines":[{"line_number":6820,"context_line":"                {\u0027params\u0027: {\u0027project\u0027: 1, \u0027effective\u0027: True,"},{"line_number":6821,"context_line":"                            \u0027include_subtree\u0027: True},"},{"line_number":6822,"context_line":"                 \u0027results\u0027: ["},{"line_number":6823,"context_line":"                     # The inherited assignment from the doamin should appear"},{"line_number":6824,"context_line":"                     # only on the part of the subtree we interested in"},{"line_number":6825,"context_line":"                     {\u0027user\u0027: 0, \u0027role\u0027: 1, \u0027project\u0027: 1,"},{"line_number":6826,"context_line":"                      \u0027indirect\u0027: {\u0027domain\u0027: 0}},"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa80f949_7165521c","line":6823,"updated":"2015-11-06 02:06:53.000000000","message":"(nit) s/doamin/domain","commit_id":"ab478f8957d966a95275d3b885607354f06bb6c3"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"86ddeff8a2856945ceeb6aaa39504470f5b630a5","unresolved":false,"context_lines":[{"line_number":6821,"context_line":"                            \u0027include_subtree\u0027: True},"},{"line_number":6822,"context_line":"                 \u0027results\u0027: ["},{"line_number":6823,"context_line":"                     # The inherited assignment from the doamin should appear"},{"line_number":6824,"context_line":"                     # only on the part of the subtree we interested in"},{"line_number":6825,"context_line":"                     {\u0027user\u0027: 0, \u0027role\u0027: 1, \u0027project\u0027: 1,"},{"line_number":6826,"context_line":"                      \u0027indirect\u0027: {\u0027domain\u0027: 0}},"},{"line_number":6827,"context_line":"                     {\u0027user\u0027: 0, \u0027role\u0027: 1, \u0027project\u0027: 2,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa80f949_51704edc","line":6824,"updated":"2015-11-06 02:06:53.000000000","message":"(nit) maybe s/we interested in/we are interested in ?","commit_id":"ab478f8957d966a95275d3b885607354f06bb6c3"}]}
