)]}'
{"keystone/assignment/backends/sql.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"6e3d7f0f3ad829e0a60403e8e4298b8eb2de2e54","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            RoleAssignment.inherited \u003d\u003d false(),"},{"line_number":266,"context_line":"            RoleAssignment.target_id \u003d\u003d project_id)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        if CONF.os_inherit.enabled and not is_domain:"},{"line_number":269,"context_line":"            # Inherited roles from domains"},{"line_number":270,"context_line":"            sql_constraints \u003d sqlalchemy.or_("},{"line_number":271,"context_line":"                sql_constraints,"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_132c7749","line":268,"updated":"2015-08-03 17:31:10.000000000","message":"why \"not is_domain\" here? Aren\u0027t inherited roles from domains (not to domains) being considered?","commit_id":"8c68e37a63a0ea93fd68e782627ecd82183439bf"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"51f4ef65bfb761f080b5c03a0a387bc8639d5958","unresolved":false,"context_lines":[{"line_number":265,"context_line":"            RoleAssignment.inherited \u003d\u003d false(),"},{"line_number":266,"context_line":"            RoleAssignment.target_id \u003d\u003d project_id)"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"        if CONF.os_inherit.enabled and not is_domain:"},{"line_number":269,"context_line":"            # Inherited roles from domains"},{"line_number":270,"context_line":"            sql_constraints \u003d sqlalchemy.or_("},{"line_number":271,"context_line":"                sql_constraints,"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_332baeed","line":268,"in_reply_to":"1a4dcd0f_132c7749","updated":"2015-08-03 19:26:12.000000000","message":"if this projects acts as a domain, no inherited role can be applied to it, only from it. Which means that only the projects below it will have the inheritance applied","commit_id":"8c68e37a63a0ea93fd68e782627ecd82183439bf"}],"keystone/assignment/controllers.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"047527fcd5936771e9d35248654bbde93dae4ed4","unresolved":false,"context_lines":[{"line_number":699,"context_line":"                    target_type \u003d \u0027projects\u0027"},{"line_number":700,"context_line":"                    target_id \u003d base_entry[\u0027scope\u0027][\u0027project\u0027][\u0027id\u0027]"},{"line_number":701,"context_line":"                    base_entry[\u0027scope\u0027].pop(\u0027project\u0027)"},{"line_number":702,"context_line":"                    target_domain_id \u003d self.resource_api.\\"},{"line_number":703,"context_line":"                        get_project(project_id)[\u0027domain_id\u0027]"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"                # For each project, create an equivalent role assignment"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_ba83da55","line":702,"updated":"2015-04-14 21:51:07.000000000","message":"nit: usual style is to us () to handle long lines","commit_id":"d1c0cfdda140f209a52bd67f236d69d1a90adf63"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"571119dbfb148885e190979a7193641047b14283","unresolved":false,"context_lines":[{"line_number":699,"context_line":"                    target_type \u003d \u0027projects\u0027"},{"line_number":700,"context_line":"                    target_id \u003d base_entry[\u0027scope\u0027][\u0027project\u0027][\u0027id\u0027]"},{"line_number":701,"context_line":"                    base_entry[\u0027scope\u0027].pop(\u0027project\u0027)"},{"line_number":702,"context_line":"                    target_domain_id \u003d self.resource_api.\\"},{"line_number":703,"context_line":"                        get_project(project_id)[\u0027domain_id\u0027]"},{"line_number":704,"context_line":""},{"line_number":705,"context_line":"                # For each project, create an equivalent role assignment"}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_f7367ab3","line":702,"in_reply_to":"7aaa499b_ba83da55","updated":"2015-04-29 14:35:39.000000000","message":"Done","commit_id":"d1c0cfdda140f209a52bd67f236d69d1a90adf63"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"047527fcd5936771e9d35248654bbde93dae4ed4","unresolved":false,"context_lines":[{"line_number":706,"context_line":"                for p in projects:"},{"line_number":707,"context_line":"                    # NOTE(raildo): inherited roles are applied to projects"},{"line_number":708,"context_line":"                    # with the is_domain flag disable."},{"line_number":709,"context_line":"                    if p[\u0027domain_id\u0027] !\u003d target_domain_id:"},{"line_number":710,"context_line":"                        continue"},{"line_number":711,"context_line":"                    # If it\u0027s a group assignment, then create equivalent user"},{"line_number":712,"context_line":"                    # roles based on membership of the group"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_7a42f211","line":709,"updated":"2015-04-14 21:51:07.000000000","message":"the user of target_domain_id is not intuitive....I think you need to explain more about how this is handling the issue the comment mentions","commit_id":"d1c0cfdda140f209a52bd67f236d69d1a90adf63"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"571119dbfb148885e190979a7193641047b14283","unresolved":false,"context_lines":[{"line_number":706,"context_line":"                for p in projects:"},{"line_number":707,"context_line":"                    # NOTE(raildo): inherited roles are applied to projects"},{"line_number":708,"context_line":"                    # with the is_domain flag disable."},{"line_number":709,"context_line":"                    if p[\u0027domain_id\u0027] !\u003d target_domain_id:"},{"line_number":710,"context_line":"                        continue"},{"line_number":711,"context_line":"                    # If it\u0027s a group assignment, then create equivalent user"},{"line_number":712,"context_line":"                    # roles based on membership of the group"}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_d73b7e9b","line":709,"in_reply_to":"7aaa499b_7a42f211","updated":"2015-04-29 14:35:39.000000000","message":"this target_domain_id will be the domain_id from the assignment, if this a inherited assignment to a domain, or the domain_id from the project, if this a inherited assignment to a project. So, the inherited role assignment will be applied just for the projects with the same domain_id from the target..\n\nI\u0027ll see a way to resume this as a comment in the code.","commit_id":"d1c0cfdda140f209a52bd67f236d69d1a90adf63"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"6e3d7f0f3ad829e0a60403e8e4298b8eb2de2e54","unresolved":false,"context_lines":[{"line_number":700,"context_line":"                    # NOTE(raildo): inherited roles assignments are applied"},{"line_number":701,"context_line":"                    # to projects with the is_domain flag disabled inside"},{"line_number":702,"context_line":"                    # target\u0027s domain_id."},{"line_number":703,"context_line":"                    if p[\u0027domain_id\u0027] !\u003d target_domain_id:"},{"line_number":704,"context_line":"                        continue"},{"line_number":705,"context_line":"                    # If it\u0027s a group assignment, then create equivalent user"},{"line_number":706,"context_line":"                    # roles based on membership of the group"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_1304777c","line":703,"updated":"2015-08-03 17:31:10.000000000","message":"I believe this filtering should be done in the list_projects_in_subtree() method. It can\u0027t return the domains from a project subtree.\n\nAlso, this change should be done in a different patchset (maybe one of the firsts in the Reseller chain)","commit_id":"8c68e37a63a0ea93fd68e782627ecd82183439bf"}],"keystone/assignment/core.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"0c48963ca8cb88f296b827db6d475f3eb176d5ac","unresolved":false,"context_lines":[{"line_number":156,"context_line":"                    pass"},{"line_number":157,"context_line":"                # As well inherited roles from parent projects"},{"line_number":158,"context_line":"                for p in self.list_project_parents(project_ref[\u0027id\u0027]):"},{"line_number":159,"context_line":"                    # A role will not be inherited to a subdomain"},{"line_number":160,"context_line":"                    if p[\u0027domain_id\u0027] \u003d\u003d project_ref[\u0027domain_id\u0027]:"},{"line_number":161,"context_line":"                        p_roles \u003d self.list_grants("},{"line_number":162,"context_line":"                            user_id\u003duser_id, project_id\u003dp[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":9,"id":"baa041b7_f1e78e3e","line":159,"updated":"2015-04-02 10:44:50.000000000","message":"I get what you are doing, but this comment doesn\u0027t really explain the test...maybe:\n\nRoles are not inherited to subdomains, so as we look at the parents, only include those assignments from projects that share our domain_id","commit_id":"c902ee6c7df77524bb0d1007d336da21f9ed8e34"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"047527fcd5936771e9d35248654bbde93dae4ed4","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                        metadata_ref.get(\u0027roles\u0027, {}), True)"},{"line_number":155,"context_line":"                except (exception.MetadataNotFound, exception.NotImplemented):"},{"line_number":156,"context_line":"                    pass"},{"line_number":157,"context_line":"                # As well inherited roles from parent projects"},{"line_number":158,"context_line":"                for p in self.list_project_parents(project_ref[\u0027id\u0027]):"},{"line_number":159,"context_line":"                    # Roles are not inherited to subdomains, so as we look at"},{"line_number":160,"context_line":"                    # the parents, only include those assignments from"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_1a488e2c","line":157,"updated":"2015-04-14 21:51:07.000000000","message":"nit: As well as?","commit_id":"d1c0cfdda140f209a52bd67f236d69d1a90adf63"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"571119dbfb148885e190979a7193641047b14283","unresolved":false,"context_lines":[{"line_number":154,"context_line":"                        metadata_ref.get(\u0027roles\u0027, {}), True)"},{"line_number":155,"context_line":"                except (exception.MetadataNotFound, exception.NotImplemented):"},{"line_number":156,"context_line":"                    pass"},{"line_number":157,"context_line":"                # As well inherited roles from parent projects"},{"line_number":158,"context_line":"                for p in self.list_project_parents(project_ref[\u0027id\u0027]):"},{"line_number":159,"context_line":"                    # Roles are not inherited to subdomains, so as we look at"},{"line_number":160,"context_line":"                    # the parents, only include those assignments from"}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_97450619","line":157,"in_reply_to":"7aaa499b_1a488e2c","updated":"2015-04-29 14:35:39.000000000","message":"Done","commit_id":"d1c0cfdda140f209a52bd67f236d69d1a90adf63"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"6e3d7f0f3ad829e0a60403e8e4298b8eb2de2e54","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        if CONF.os_inherit.enabled:"},{"line_number":115,"context_line":"            project_ref \u003d self.resource_api.get_project(project_id)"},{"line_number":116,"context_line":"            return [x[\u0027id\u0027]"},{"line_number":117,"context_line":"                    for x in self.resource_api.list_project_parents(project_id)"},{"line_number":118,"context_line":"                    if (x[\u0027id\u0027] \u003d\u003d project_ref[\u0027parent_id\u0027]"},{"line_number":119,"context_line":"                        or x[\u0027domain_id\u0027] \u003d\u003d project_ref[\u0027domain_id\u0027])]"},{"line_number":120,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_93264715","line":117,"updated":"2015-08-03 17:31:10.000000000","message":"same issue as in list_projects_in_subtree(), it should return the parents up to the domain","commit_id":"8c68e37a63a0ea93fd68e782627ecd82183439bf"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"00ef7ae469cf8099315bd3b33b12ffdd879a0a72","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        if CONF.os_inherit.enabled:"},{"line_number":115,"context_line":"            project_ref \u003d self.resource_api.get_project(project_id)"},{"line_number":116,"context_line":"            return [x[\u0027id\u0027]"},{"line_number":117,"context_line":"                    for x in self.resource_api.list_project_parents(project_id)"},{"line_number":118,"context_line":"                    if (x[\u0027id\u0027] \u003d\u003d project_ref[\u0027parent_id\u0027]"},{"line_number":119,"context_line":"                        or x[\u0027domain_id\u0027] \u003d\u003d project_ref[\u0027domain_id\u0027])]"},{"line_number":120,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_9b740cfe","line":117,"in_reply_to":"1a4dcd0f_734936d0","updated":"2015-08-04 03:39:19.000000000","message":"the calls were changed at the previous patch and now, return only until the domain","commit_id":"8c68e37a63a0ea93fd68e782627ecd82183439bf"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"51f4ef65bfb761f080b5c03a0a387bc8639d5958","unresolved":false,"context_lines":[{"line_number":114,"context_line":"        if CONF.os_inherit.enabled:"},{"line_number":115,"context_line":"            project_ref \u003d self.resource_api.get_project(project_id)"},{"line_number":116,"context_line":"            return [x[\u0027id\u0027]"},{"line_number":117,"context_line":"                    for x in self.resource_api.list_project_parents(project_id)"},{"line_number":118,"context_line":"                    if (x[\u0027id\u0027] \u003d\u003d project_ref[\u0027parent_id\u0027]"},{"line_number":119,"context_line":"                        or x[\u0027domain_id\u0027] \u003d\u003d project_ref[\u0027domain_id\u0027])]"},{"line_number":120,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":28,"id":"1a4dcd0f_734936d0","line":117,"in_reply_to":"1a4dcd0f_93264715","updated":"2015-08-03 19:26:12.000000000","message":"maybe we can create two new resource api calls, like: subtree_until_domain and parents_until_domain","commit_id":"8c68e37a63a0ea93fd68e782627ecd82183439bf"}],"keystone/tests/unit/test_v3_assignment.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"047527fcd5936771e9d35248654bbde93dae4ed4","unresolved":false,"context_lines":[{"line_number":2370,"context_line":"            password\u003duser[\u0027password\u0027],"},{"line_number":2371,"context_line":"            project_id\u003dsub_domain_child_id)"},{"line_number":2372,"context_line":""},{"line_number":2373,"context_line":"        # Check the user cannot get a token in neither of the projects"},{"line_number":2374,"context_line":"        self.v3_authenticate_token(sub_domain_auth_data, expected_status\u003d401)"},{"line_number":2375,"context_line":"        self.v3_authenticate_token(root_child_auth_data, expected_status\u003d401)"},{"line_number":2376,"context_line":"        self.v3_authenticate_token(sub_domain_child_auth_data,"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_daffc6a8","line":2373,"updated":"2015-04-14 21:51:07.000000000","message":"nit: s/neither/either/\n\nThe code is clear what it does...what we need in the comment is WHY the user cannot get a token","commit_id":"d1c0cfdda140f209a52bd67f236d69d1a90adf63"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"571119dbfb148885e190979a7193641047b14283","unresolved":false,"context_lines":[{"line_number":2370,"context_line":"            password\u003duser[\u0027password\u0027],"},{"line_number":2371,"context_line":"            project_id\u003dsub_domain_child_id)"},{"line_number":2372,"context_line":""},{"line_number":2373,"context_line":"        # Check the user cannot get a token in neither of the projects"},{"line_number":2374,"context_line":"        self.v3_authenticate_token(sub_domain_auth_data, expected_status\u003d401)"},{"line_number":2375,"context_line":"        self.v3_authenticate_token(root_child_auth_data, expected_status\u003d401)"},{"line_number":2376,"context_line":"        self.v3_authenticate_token(sub_domain_child_auth_data,"}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_d7625ead","line":2373,"in_reply_to":"7aaa499b_daffc6a8","updated":"2015-04-29 14:35:39.000000000","message":"Done","commit_id":"d1c0cfdda140f209a52bd67f236d69d1a90adf63"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"047527fcd5936771e9d35248654bbde93dae4ed4","unresolved":false,"context_lines":[{"line_number":2400,"context_line":"        self.v3_authenticate_token(root_child_auth_data, expected_status\u003d201)"},{"line_number":2401,"context_line":"        self.v3_authenticate_token(root_auth_data, expected_status\u003d201)"},{"line_number":2402,"context_line":""},{"line_number":2403,"context_line":"        # Check the user cannot get a token for sub_domain nor its child"},{"line_number":2404,"context_line":"        self.v3_authenticate_token(sub_domain_child_auth_data,"},{"line_number":2405,"context_line":"                                   expected_status\u003d401)"},{"line_number":2406,"context_line":"        self.v3_authenticate_token(sub_domain_auth_data, expected_status\u003d401)"}],"source_content_type":"text/x-python","patch_set":12,"id":"7aaa499b_faf282d1","line":2403,"updated":"2015-04-14 21:51:07.000000000","message":"again, say why","commit_id":"d1c0cfdda140f209a52bd67f236d69d1a90adf63"},{"author":{"_account_id":8866,"name":"Raildo Mascena de Sousa Filho","email":"rmascena@redhat.com","username":"raildo"},"change_message_id":"571119dbfb148885e190979a7193641047b14283","unresolved":false,"context_lines":[{"line_number":2400,"context_line":"        self.v3_authenticate_token(root_child_auth_data, expected_status\u003d201)"},{"line_number":2401,"context_line":"        self.v3_authenticate_token(root_auth_data, expected_status\u003d201)"},{"line_number":2402,"context_line":""},{"line_number":2403,"context_line":"        # Check the user cannot get a token for sub_domain nor its child"},{"line_number":2404,"context_line":"        self.v3_authenticate_token(sub_domain_child_auth_data,"},{"line_number":2405,"context_line":"                                   expected_status\u003d401)"},{"line_number":2406,"context_line":"        self.v3_authenticate_token(sub_domain_auth_data, expected_status\u003d401)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3acd31a7_975ce6ee","line":2403,"in_reply_to":"7aaa499b_faf282d1","updated":"2015-04-29 14:35:39.000000000","message":"Done","commit_id":"d1c0cfdda140f209a52bd67f236d69d1a90adf63"}]}
