)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"bb44391ef46008383acc71ca492a6cc2590dae66","unresolved":false,"context_lines":[{"line_number":14,"context_line":"of) that was not supported by list_role_assignments."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This patch adds that support, removes the duplicative"},{"line_number":17,"context_line":"driver methods and re-implents the manager methods to call"},{"line_number":18,"context_line":"list_role_assignments."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Partially implements: blueprint assignment-manager-cleanup"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da6ed579_37070883","line":17,"range":{"start_line":17,"start_character":22,"end_line":17,"end_character":30},"updated":"2016-01-18 12:45:22.000000000","message":"implements","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7955ca85545b88f92b63d15566ba5edf0910bbf8","unresolved":false,"context_lines":[{"line_number":14,"context_line":"of) that was not supported by list_role_assignments."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This patch adds that support, removes the duplicative"},{"line_number":17,"context_line":"driver methods and re-implents the manager methods to call"},{"line_number":18,"context_line":"list_role_assignments."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Partially implements: blueprint assignment-manager-cleanup"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba63e191_3103d211","line":17,"range":{"start_line":17,"start_character":22,"end_line":17,"end_character":30},"in_reply_to":"da6ed579_37070883","updated":"2016-01-18 17:57:42.000000000","message":"Done","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"bb44391ef46008383acc71ca492a6cc2590dae66","unresolved":false,"context_lines":[{"line_number":17,"context_line":"driver methods and re-implents the manager methods to call"},{"line_number":18,"context_line":"list_role_assignments."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Partially implements: blueprint assignment-manager-cleanup"},{"line_number":21,"context_line":"Change-Id: I9d76878963b178ec474b0c89be2ad2024bdd10d5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"da6ed579_77ed80b6","line":20,"range":{"start_line":20,"start_character":1,"end_line":20,"end_character":20},"updated":"2016-01-18 12:45:22.000000000","message":"Actually, \"Implements:\" as this one is the last on this bp, right?","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7955ca85545b88f92b63d15566ba5edf0910bbf8","unresolved":false,"context_lines":[{"line_number":17,"context_line":"driver methods and re-implents the manager methods to call"},{"line_number":18,"context_line":"list_role_assignments."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Partially implements: blueprint assignment-manager-cleanup"},{"line_number":21,"context_line":"Change-Id: I9d76878963b178ec474b0c89be2ad2024bdd10d5"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"ba63e191_dcfe0d05","line":20,"range":{"start_line":20,"start_character":1,"end_line":20,"end_character":20},"in_reply_to":"da6ed579_77ed80b6","updated":"2016-01-18 17:57:42.000000000","message":"Done","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"}],"keystone/assignment/backends/sql.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"bb44391ef46008383acc71ca492a6cc2590dae66","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                target_id \u003d domain_id or project_id"},{"line_number":121,"context_line":"                raise exception.RoleAssignmentNotFound(role_id\u003drole_id,"},{"line_number":122,"context_line":"                                                       actor_id\u003dactor_id,"},{"line_number":123,"context_line":"                                                       target_id\u003dtarget_id)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _list_project_ids_for_actor(self, actors, hints, inherited,"},{"line_number":126,"context_line":"                                    group_only\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_17dd2414","side":"PARENT","line":123,"updated":"2016-01-18 12:45:22.000000000","message":"Great cleanup, isn\u0027t it ? :)","commit_id":"5d8b1267e4950902f10633a5fd9c11357f06da0f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7955ca85545b88f92b63d15566ba5edf0910bbf8","unresolved":false,"context_lines":[{"line_number":120,"context_line":"                target_id \u003d domain_id or project_id"},{"line_number":121,"context_line":"                raise exception.RoleAssignmentNotFound(role_id\u003drole_id,"},{"line_number":122,"context_line":"                                                       actor_id\u003dactor_id,"},{"line_number":123,"context_line":"                                                       target_id\u003dtarget_id)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"    def _list_project_ids_for_actor(self, actors, hints, inherited,"},{"line_number":126,"context_line":"                                    group_only\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_3c1ac96f","side":"PARENT","line":123,"in_reply_to":"da6ed579_17dd2414","updated":"2016-01-18 17:57:42.000000000","message":"oh, yes!","commit_id":"5d8b1267e4950902f10633a5fd9c11357f06da0f"}],"keystone/assignment/core.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"bb44391ef46008383acc71ca492a6cc2590dae66","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        return self.resource_api.list_domains_from_ids(domain_ids)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        domain_ids \u003d self.list_domain_ids_for_groups(group_ids)"},{"line_number":248,"context_line":"        return self.resource_api.list_domains_from_ids(domain_ids)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def list_projects_for_groups(self, group_ids):"},{"line_number":251,"context_line":"        assignment_list \u003d self.list_role_assignments("}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_b7aa18d1","line":248,"updated":"2016-01-18 12:45:22.000000000","message":"These 2 lines are dead code :-)","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7955ca85545b88f92b63d15566ba5edf0910bbf8","unresolved":false,"context_lines":[{"line_number":245,"context_line":"        return self.resource_api.list_domains_from_ids(domain_ids)"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        domain_ids \u003d self.list_domain_ids_for_groups(group_ids)"},{"line_number":248,"context_line":"        return self.resource_api.list_domains_from_ids(domain_ids)"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"    def list_projects_for_groups(self, group_ids):"},{"line_number":251,"context_line":"        assignment_list \u003d self.list_role_assignments("}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_9c565505","line":248,"in_reply_to":"da6ed579_b7aa18d1","updated":"2016-01-18 17:57:42.000000000","message":"oops, left the old code there! Nixed.","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"bb44391ef46008383acc71ca492a6cc2590dae66","unresolved":false,"context_lines":[{"line_number":795,"context_line":"        affect a user, for example the roles that would be placed in a token."},{"line_number":796,"context_line":""},{"line_number":797,"context_line":"        If source_from_group_ids is specified, then only those assignments that"},{"line_number":798,"context_line":"        are derived from membership of those groups are considered. This is"},{"line_number":799,"context_line":"        different to group filter of the resulting list, rather it is a"},{"line_number":800,"context_line":"        restriction on which assignments should be considered before expansion"},{"line_number":801,"context_line":"        of inheritance. Further, when source_from_group_ids is specified, any"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_779a6070","line":798,"range":{"start_line":798,"start_character":25,"end_line":798,"end_character":35},"updated":"2016-01-18 12:45:22.000000000","message":"Doesn\u0027t this sound like we would be expanding membership?","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7955ca85545b88f92b63d15566ba5edf0910bbf8","unresolved":false,"context_lines":[{"line_number":795,"context_line":"        affect a user, for example the roles that would be placed in a token."},{"line_number":796,"context_line":""},{"line_number":797,"context_line":"        If source_from_group_ids is specified, then only those assignments that"},{"line_number":798,"context_line":"        are derived from membership of those groups are considered. This is"},{"line_number":799,"context_line":"        different to group filter of the resulting list, rather it is a"},{"line_number":800,"context_line":"        restriction on which assignments should be considered before expansion"},{"line_number":801,"context_line":"        of inheritance. Further, when source_from_group_ids is specified, any"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_bca9d9e1","line":798,"range":{"start_line":798,"start_character":25,"end_line":798,"end_character":35},"in_reply_to":"da6ed579_779a6070","updated":"2016-01-18 17:57:42.000000000","message":"yeah, I\u0027ll tweak!","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"bb44391ef46008383acc71ca492a6cc2590dae66","unresolved":false,"context_lines":[{"line_number":798,"context_line":"        are derived from membership of those groups are considered. This is"},{"line_number":799,"context_line":"        different to group filter of the resulting list, rather it is a"},{"line_number":800,"context_line":"        restriction on which assignments should be considered before expansion"},{"line_number":801,"context_line":"        of inheritance. Further, when source_from_group_ids is specified, any"},{"line_number":802,"context_line":"        assignments found for these groups are not expanded into their user"},{"line_number":803,"context_line":"        member assignments. This option is only used internally (i.e. it is not"},{"line_number":804,"context_line":"        exposed at the API level) and is only supported in effective mode"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_178f6424","line":801,"updated":"2016-01-18 12:45:22.000000000","message":"Nice explanation :))","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"bb44391ef46008383acc71ca492a6cc2590dae66","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        member assignments. This option is only used internally (i.e. it is not"},{"line_number":804,"context_line":"        exposed at the API level) and is only supported in effective mode"},{"line_number":805,"context_line":"        (since in regular mode there is no difference between this and a group"},{"line_number":806,"context_line":"        filter)."},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"        If OS-INHERIT extension is disabled or the used driver does not support"},{"line_number":809,"context_line":"        inherited roles retrieval, inherited role assignments will be ignored."}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_d7af8c7b","line":806,"updated":"2016-01-18 12:45:22.000000000","message":"besides this supports multiple values","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7955ca85545b88f92b63d15566ba5edf0910bbf8","unresolved":false,"context_lines":[{"line_number":803,"context_line":"        member assignments. This option is only used internally (i.e. it is not"},{"line_number":804,"context_line":"        exposed at the API level) and is only supported in effective mode"},{"line_number":805,"context_line":"        (since in regular mode there is no difference between this and a group"},{"line_number":806,"context_line":"        filter)."},{"line_number":807,"context_line":""},{"line_number":808,"context_line":"        If OS-INHERIT extension is disabled or the used driver does not support"},{"line_number":809,"context_line":"        inherited roles retrieval, inherited role assignments will be ignored."}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_5c68ddba","line":806,"in_reply_to":"da6ed579_d7af8c7b","updated":"2016-01-18 17:57:42.000000000","message":"Done","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"00e8a9b4494e3a114b0f5a72fc542f83fb2ebafa","unresolved":false,"context_lines":[{"line_number":476,"context_line":"            }"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"            Once expanded, it should be returned as a list of entities like the"},{"line_number":479,"context_line":"            one below, one for each each user_id in the provided group_id and"},{"line_number":480,"context_line":"            for each subproject_id in the project_id subtree."},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"            ::"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_01313c05","line":479,"range":{"start_line":479,"start_character":31,"end_line":479,"end_character":35},"updated":"2016-01-20 09:51:37.000000000","message":"irrelevant, duplicated \u0027each\u0027 here.","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1359e952b6cb69d2e2305a25fe848f8168e52fea","unresolved":false,"context_lines":[{"line_number":476,"context_line":"            }"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"            Once expanded, it should be returned as a list of entities like the"},{"line_number":479,"context_line":"            one below, one for each each user_id in the provided group_id and"},{"line_number":480,"context_line":"            for each subproject_id in the project_id subtree."},{"line_number":481,"context_line":""},{"line_number":482,"context_line":"            ::"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_0d416ca9","line":479,"range":{"start_line":479,"start_character":31,"end_line":479,"end_character":35},"in_reply_to":"ba63e191_01313c05","updated":"2016-01-22 08:27:51.000000000","message":"true...although probably outside of the scope of this patch - as per a comment later on, I plan to come back in and add some better docstings - I\u0027ll fix that up as well.","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"00e8a9b4494e3a114b0f5a72fc542f83fb2ebafa","unresolved":false,"context_lines":[{"line_number":574,"context_line":""},{"line_number":575,"context_line":"            return new_refs"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"        if ref.get(\u0027inherited_to_projects\u0027) \u003d\u003d \u0027projects\u0027:"},{"line_number":578,"context_line":"            return expand_inherited_assignment("},{"line_number":579,"context_line":"                ref, user_id, project_id, subtree_ids, expand_groups)"},{"line_number":580,"context_line":"        elif \u0027group_id\u0027 in ref and expand_groups:"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_336a931b","line":577,"range":{"start_line":577,"start_character":11,"end_line":577,"end_character":57},"updated":"2016-01-20 09:51:37.000000000","message":"this confuse me a little, why not make ref[\u0027inherited_to_projects\u0027] bool? any other options beside \u0027projects\u0027 and \u0027None\u0027, irrelevant though!","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1359e952b6cb69d2e2305a25fe848f8168e52fea","unresolved":false,"context_lines":[{"line_number":574,"context_line":""},{"line_number":575,"context_line":"            return new_refs"},{"line_number":576,"context_line":""},{"line_number":577,"context_line":"        if ref.get(\u0027inherited_to_projects\u0027) \u003d\u003d \u0027projects\u0027:"},{"line_number":578,"context_line":"            return expand_inherited_assignment("},{"line_number":579,"context_line":"                ref, user_id, project_id, subtree_ids, expand_groups)"},{"line_number":580,"context_line":"        elif \u0027group_id\u0027 in ref and expand_groups:"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_ad93804e","line":577,"range":{"start_line":577,"start_character":11,"end_line":577,"end_character":57},"in_reply_to":"ba63e191_336a931b","updated":"2016-01-22 08:27:51.000000000","message":"That\u0027s a long story! it was originally planned to be a bool, but others (way back when) wanted it to be more flexible (e.g. maybe it might contain reggae string matching project names). However, I don\u0027t think we\u0027ll ever do that..but we are stuck with this for now.","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"00e8a9b4494e3a114b0f5a72fc542f83fb2ebafa","unresolved":false,"context_lines":[{"line_number":755,"context_line":"        if group_id or (domain_id and inherited):"},{"line_number":756,"context_line":"            return []"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"        if user_id and source_from_group_ids:"},{"line_number":759,"context_line":"            # You can\u0027t do both - and since source_from_group_ids is only used"},{"line_number":760,"context_line":"            # internally, this must be a coding error by the caller."},{"line_number":761,"context_line":"            msg \u003d _(\u0027Cannot list assignments sourced from groups and filtered \u0027"},{"line_number":762,"context_line":"                    \u0027by user ID.\u0027)"},{"line_number":763,"context_line":"            raise exception.UnexpectedError(msg)"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"        # If filtering by domain, then only non-inherited assignments are"},{"line_number":766,"context_line":"        # relevant, since domains don\u0027t inherit assignments"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_e151880f","line":763,"range":{"start_line":758,"start_character":0,"end_line":763,"end_character":48},"updated":"2016-01-20 09:51:37.000000000","message":"could you pls add a testcase for this code block?","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1359e952b6cb69d2e2305a25fe848f8168e52fea","unresolved":false,"context_lines":[{"line_number":755,"context_line":"        if group_id or (domain_id and inherited):"},{"line_number":756,"context_line":"            return []"},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"        if user_id and source_from_group_ids:"},{"line_number":759,"context_line":"            # You can\u0027t do both - and since source_from_group_ids is only used"},{"line_number":760,"context_line":"            # internally, this must be a coding error by the caller."},{"line_number":761,"context_line":"            msg \u003d _(\u0027Cannot list assignments sourced from groups and filtered \u0027"},{"line_number":762,"context_line":"                    \u0027by user ID.\u0027)"},{"line_number":763,"context_line":"            raise exception.UnexpectedError(msg)"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"        # If filtering by domain, then only non-inherited assignments are"},{"line_number":766,"context_line":"        # relevant, since domains don\u0027t inherit assignments"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_cd4a74c5","line":763,"range":{"start_line":758,"start_character":0,"end_line":763,"end_character":48},"in_reply_to":"ba63e191_e151880f","updated":"2016-01-22 08:27:51.000000000","message":"will do","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"00e8a9b4494e3a114b0f5a72fc542f83fb2ebafa","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        Think of effective mode as being the list of assignments that actually"},{"line_number":844,"context_line":"        affect a user, for example the roles that would be placed in a token."},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"        If source_from_group_ids is specified, then only those assignments that"},{"line_number":847,"context_line":"        are derived from membership of those groups are considered, and any"},{"line_number":848,"context_line":"        such assignments will not be expanded into their user membership"},{"line_number":849,"context_line":"        assignments. This is different to a group filter of the resulting list,"},{"line_number":850,"context_line":"        instead being a restriction on which assignments should be considered"},{"line_number":851,"context_line":"        before expansion of inheritance. This option is only used internally"},{"line_number":852,"context_line":"        (i.e. it is not exposed at the API level) and is only supported in"},{"line_number":853,"context_line":"        effective mode (since in regular mode there is no difference between"},{"line_number":854,"context_line":"        this and a group filter, other than it is a list of groups)."},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"        If OS-INHERIT extension is disabled or the used driver does not support"},{"line_number":857,"context_line":"        inherited roles retrieval, inherited role assignments will be ignored."}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_fd487a5d","line":854,"range":{"start_line":846,"start_character":8,"end_line":854,"end_character":68},"updated":"2016-01-20 09:51:37.000000000","message":"I personally think add some docstring like @L663~L694 would be helpful, so it will be clear that `source_from_group_ids` is not bool but list instead.","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1359e952b6cb69d2e2305a25fe848f8168e52fea","unresolved":false,"context_lines":[{"line_number":843,"context_line":"        Think of effective mode as being the list of assignments that actually"},{"line_number":844,"context_line":"        affect a user, for example the roles that would be placed in a token."},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"        If source_from_group_ids is specified, then only those assignments that"},{"line_number":847,"context_line":"        are derived from membership of those groups are considered, and any"},{"line_number":848,"context_line":"        such assignments will not be expanded into their user membership"},{"line_number":849,"context_line":"        assignments. This is different to a group filter of the resulting list,"},{"line_number":850,"context_line":"        instead being a restriction on which assignments should be considered"},{"line_number":851,"context_line":"        before expansion of inheritance. This option is only used internally"},{"line_number":852,"context_line":"        (i.e. it is not exposed at the API level) and is only supported in"},{"line_number":853,"context_line":"        effective mode (since in regular mode there is no difference between"},{"line_number":854,"context_line":"        this and a group filter, other than it is a list of groups)."},{"line_number":855,"context_line":""},{"line_number":856,"context_line":"        If OS-INHERIT extension is disabled or the used driver does not support"},{"line_number":857,"context_line":"        inherited roles retrieval, inherited role assignments will be ignored."}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_ad086092","line":854,"range":{"start_line":846,"start_character":8,"end_line":854,"end_character":68},"in_reply_to":"ba63e191_fd487a5d","updated":"2016-01-22 08:27:51.000000000","message":"I agree - I actually want to refactor this a bit. If it is OK, for now I\u0027ll make it clear above that it is a list - then come back in as a followup and redo this as a param listing","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"bb44391ef46008383acc71ca492a6cc2590dae66","unresolved":false,"context_lines":[{"line_number":6483,"context_line":"        for x in range(0, 4):"},{"line_number":6484,"context_line":"            self.assertIn(test_data[\u0027users\u0027][x][\u0027id\u0027], user_ids)"},{"line_number":6485,"context_line":""},{"line_number":6486,"context_line":"    def test_list_role_assignment_using_sourced_groups(self):"},{"line_number":6487,"context_line":"        \"\"\"Test listing inherited assignments when restricted by groups.\"\"\""},{"line_number":6488,"context_line":"        test_plan \u003d {"},{"line_number":6489,"context_line":"            # A domain with 3 users, 3 groups, 3 projects, a second domain,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da6ed579_f7597036","line":6486,"updated":"2016-01-18 12:45:22.000000000","message":"(nit) perhaps adding \u0027inherited\u0027 to the test name would make it more meaningful?","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7955ca85545b88f92b63d15566ba5edf0910bbf8","unresolved":false,"context_lines":[{"line_number":6483,"context_line":"        for x in range(0, 4):"},{"line_number":6484,"context_line":"            self.assertIn(test_data[\u0027users\u0027][x][\u0027id\u0027], user_ids)"},{"line_number":6485,"context_line":""},{"line_number":6486,"context_line":"    def test_list_role_assignment_using_sourced_groups(self):"},{"line_number":6487,"context_line":"        \"\"\"Test listing inherited assignments when restricted by groups.\"\"\""},{"line_number":6488,"context_line":"        test_plan \u003d {"},{"line_number":6489,"context_line":"            # A domain with 3 users, 3 groups, 3 projects, a second domain,"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba63e191_3cee49ed","line":6486,"in_reply_to":"da6ed579_f7597036","updated":"2016-01-18 17:57:42.000000000","message":"since this is in the inheritance class, I was leaving that out - but since the norm appears to be to included it, I think your suggestion is correct. Fixed.","commit_id":"cc3166ad220473338dc233d3c9362fe9259b95e4"},{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"00e8a9b4494e3a114b0f5a72fc542f83fb2ebafa","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                         {\u0027user\u0027: 0, \u0027role\u0027: 2, \u0027project\u0027: 0}]}]"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        # The \u0027params\u0027 key also supports the \u0027effective\u0027,"},{"line_number":142,"context_line":"        # \u0027inherited_to_projects\u0027 and \u0027sourced_from_group_ids\u0027 options to"},{"line_number":143,"context_line":"        # list_role_assignments.}"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_10a8d61e","line":142,"range":{"start_line":142,"start_character":39,"end_line":142,"end_character":61},"updated":"2016-01-20 09:51:37.000000000","message":"nit: sourced_from_group_ids/source_from_group_ids","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1359e952b6cb69d2e2305a25fe848f8168e52fea","unresolved":false,"context_lines":[{"line_number":139,"context_line":"                         {\u0027user\u0027: 0, \u0027role\u0027: 2, \u0027project\u0027: 0}]}]"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"        # The \u0027params\u0027 key also supports the \u0027effective\u0027,"},{"line_number":142,"context_line":"        # \u0027inherited_to_projects\u0027 and \u0027sourced_from_group_ids\u0027 options to"},{"line_number":143,"context_line":"        # list_role_assignments.}"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_11109e4d","line":142,"range":{"start_line":142,"start_character":39,"end_line":142,"end_character":61},"in_reply_to":"ba63e191_10a8d61e","updated":"2016-01-22 08:27:51.000000000","message":"Done","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"}],"keystone/tests/unit/test_backend_ldap.py":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"00e8a9b4494e3a114b0f5a72fc542f83fb2ebafa","unresolved":false,"context_lines":[{"line_number":2081,"context_line":"        base.test_list_role_assignments_filtered_by_role()"},{"line_number":2082,"context_line":""},{"line_number":2083,"context_line":"    def test_list_role_assignment_using_sourced_groups_with_domains(self):"},{"line_number":2084,"context_line":"        # With SQL Assignment this method should work, so override the override"},{"line_number":2085,"context_line":"        # from BaseLDAPIdentity"},{"line_number":2086,"context_line":"        super(BaseLDAPIdentity, self).\\"},{"line_number":2087,"context_line":"            test_list_role_assignment_using_sourced_groups_with_domains"},{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":""},{"line_number":2090,"context_line":"class LdapIdentitySqlAssignmentWithMapping(LdapIdentitySqlAssignment):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ba63e191_07bb890f","line":2087,"range":{"start_line":2084,"start_character":8,"end_line":2087,"end_character":71},"updated":"2016-01-20 09:51:37.000000000","message":"I doubt the validity of this testcase. I can modify the test plan for `test_list_role_assignment_using_sourced_groups_with_domains` randomly. But this testcase can always pass.\n\nI guess how the testcase is overridden is not correct, if this is a real issue there are many testcases should be updated!\n\ndiff --git a/keystone/tests/unit/test_backend.py b/keystone/tests/unit/test_backend.py\nindex d576b43..8158121 100644\n--- a/keystone/tests/unit/test_backend.py\n+++ b/keystone/tests/unit/test_backend.py\n@@ -2022,10 +2022,12 @@ class IdentityTests(AssignmentTestHelperMixin):\n\n     def test_list_role_assignment_using_sourced_groups_with_domains(self):\n         \"\"\"Test listing domain assignments when restricted by source groups.\"\"\"\n+        import pdb\n+        pdb.set_trace()\n         test_plan \u003d {\n             # A domain with 3 users, 3 groups, 3 projects, a second domain,\n             # plus 3 roles.\n-            \u0027entities\u0027: {\u0027domains\u0027: [{\u0027users\u0027: 3, \u0027groups\u0027: 3, \u0027projects\u0027: 3},\n+            \u0027entities\u0027: {\u0027domains\u0027: [{\u0027users\u0027: 3, \u0027groups\u0027: 300, \u0027projects\u0027: 3},\n                                      1],\n                          \u0027roles\u0027: 3},\n             # Users 0 \u0026 1 are in the group 0, User 0 also in group 1\n@@ -2051,7 +2053,7 @@ class IdentityTests(AssignmentTestHelperMixin):\n                 # Adding a role a filter should further restrict the entries\n                 {\u0027params\u0027: {\u0027source_from_group_ids\u0027: [0, 1], \u0027role\u0027: 1,\n                             \u0027effective\u0027: True},\n-                 \u0027results\u0027: [{\u0027group\u0027: 0, \u0027role\u0027: 1, \u0027domain\u0027: 1},\n+                 \u0027results\u0027: [{\u0027group\u0027: 0, \u0027role\u0027: 1222, \u0027domain\u0027: 1},\n                              ]},\n             ]\n         }\n\n\n$ python -m unittest keystone.tests.unit.test_backend_ldap.LdapIdentitySqlAssignment.test_list_role_assignment_using_sourced_groups_with_domains\n.\n----------------------------------------------------------------------\nRan 1 test in 0.352s\n\nOK","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1359e952b6cb69d2e2305a25fe848f8168e52fea","unresolved":false,"context_lines":[{"line_number":2081,"context_line":"        base.test_list_role_assignments_filtered_by_role()"},{"line_number":2082,"context_line":""},{"line_number":2083,"context_line":"    def test_list_role_assignment_using_sourced_groups_with_domains(self):"},{"line_number":2084,"context_line":"        # With SQL Assignment this method should work, so override the override"},{"line_number":2085,"context_line":"        # from BaseLDAPIdentity"},{"line_number":2086,"context_line":"        super(BaseLDAPIdentity, self).\\"},{"line_number":2087,"context_line":"            test_list_role_assignment_using_sourced_groups_with_domains"},{"line_number":2088,"context_line":""},{"line_number":2089,"context_line":""},{"line_number":2090,"context_line":"class LdapIdentitySqlAssignmentWithMapping(LdapIdentitySqlAssignment):"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a68dd71_d75e7611","line":2087,"range":{"start_line":2084,"start_character":8,"end_line":2087,"end_character":71},"in_reply_to":"ba63e191_07bb890f","updated":"2016-01-22 08:27:51.000000000","message":"oops...missing trailing ()\n\nI\u0027ll check out the others like this and fix them in a separate patch","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"}],"releasenotes/notes/Assignment_V9_driver-c22be069f7baccb0.yaml":[{"author":{"_account_id":13063,"name":"WEI CHEN","email":"dave.jungler@gmail.com","username":"wei.d.chen"},"change_message_id":"00e8a9b4494e3a114b0f5a72fc542f83fb2ebafa","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    list_user_ids_for_project(), list_project_ids_for_groups(),"},{"line_number":5,"context_line":"    list_domain_ids_for_groups(), list_role_ids_for_groups_on_project() and"},{"line_number":6,"context_line":"    list_role_ids_for_groups_on_domain() methods have been removed from the"},{"line_number":7,"context_line":"    V9 version of the Assignment driver."},{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - The V8 Assignment driver interface is deprecated, but still supported in"},{"line_number":10,"context_line":"    this release, so any custom drivers based on the V8 interface should still"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"ba63e191_b34ec6bf","line":7,"updated":"2016-01-20 09:51:37.000000000","message":"Does some methods are removed could be defined as a feature? anyone know what\u0027s the feature is from this note? \n\nI\u0027d rather say cleanup, remove duplicated code or the reason behind this instead.","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"1359e952b6cb69d2e2305a25fe848f8168e52fea","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    list_user_ids_for_project(), list_project_ids_for_groups(),"},{"line_number":5,"context_line":"    list_domain_ids_for_groups(), list_role_ids_for_groups_on_project() and"},{"line_number":6,"context_line":"    list_role_ids_for_groups_on_domain() methods have been removed from the"},{"line_number":7,"context_line":"    V9 version of the Assignment driver."},{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - The V8 Assignment driver interface is deprecated, but still supported in"},{"line_number":10,"context_line":"    this release, so any custom drivers based on the V8 interface should still"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"9a68dd71_0d6f2c2c","line":7,"in_reply_to":"ba63e191_b34ec6bf","updated":"2016-01-22 08:27:51.000000000","message":"I agree it\u0027s not quite clear where we should put this..for now, following on a trend - maybe discuss with stevemar on how best to handle...then come back in and fix up this overall release note.","commit_id":"58229fb94719c874a064f35e2596a231ce9c66ee"}]}
