)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"74175896a05969c094f5351ae270c86497a84f3c","unresolved":false,"context_lines":[{"line_number":5,"context_line":"CommitDate: 2015-02-05 16:43:26 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"remove assignments for foreign actors when deleting domain"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When we delete a domain, we remove all the users/groups/projects"},{"line_number":10,"context_line":"within that domain (along with any role assignments any of those"},{"line_number":11,"context_line":"users/groups have on any projects/domains). However, we do not"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"da86d52c_71bd7ad7","line":8,"updated":"2015-02-13 17:21:48.000000000","message":"nit: \n\n    remove assignments when deleting a domain","commit_id":"6b3af28e192f2a5b68e8696bbcec158af3cf637c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"d07cd0ef2e2e32ca8937291cb89fc6473b663bc7","unresolved":false,"context_lines":[{"line_number":13,"context_line":"users/groups from other domains."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-Author: Ajaya Agrawal \u003cajku.agr@gmail.com\u003e"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I94cd3c242633cf013df0fd7ec32978c131c235ee"},{"line_number":18,"context_line":"Closes-Bug: #1360391"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"ba8a016a_ac76f1a1","line":16,"updated":"2015-11-18 16:33:20.000000000","message":"Depends-On: Iefa13b64084b8e71c881ae08e1ec434d24756c17","commit_id":"8c267aeb482cd4d418223340d008d165395b3cf3"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"3a03de2eb100dfaf006cb343d9f3b265496f0909","unresolved":false,"context_lines":[{"line_number":13,"context_line":"users/groups from other domains."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Co-Author: Ajaya Agrawal \u003cajku.agr@gmail.com\u003e"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I94cd3c242633cf013df0fd7ec32978c131c235ee"},{"line_number":18,"context_line":"Closes-Bug: #1360391"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"ba8a016a_19573a27","line":16,"in_reply_to":"ba8a016a_ac76f1a1","updated":"2015-11-18 17:08:48.000000000","message":"I don\u0027t think this is necessary, once he has already submitted the patch with an explicit dependency","commit_id":"8c267aeb482cd4d418223340d008d165395b3cf3"}],"keystone/assignment/backends/ldap.py":[{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"9d8244e2803add685fa60ec51c96a15aca432298","unresolved":false,"context_lines":[{"line_number":278,"context_line":"    def delete_role_assignments(self, role_id):"},{"line_number":279,"context_line":"        self.role.roles_delete_subtree_by_role(role_id, self.project.tree_dn)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":282,"context_line":"        raise exception.NotImplemented()"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba8a016a_5c44d048","line":281,"updated":"2015-11-18 17:08:35.000000000","message":"This is redundant, you\u0027ve already defined it exactly like that here in L1083 https://review.openstack.org/#/c/127433/17/keystone/assignment/core.py","commit_id":"756f52b90947505d144489b5ad8b552eca2e92ec"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"6934280bed1a99cb399e30ab23096241dba71488","unresolved":false,"context_lines":[{"line_number":278,"context_line":"    def delete_role_assignments(self, role_id):"},{"line_number":279,"context_line":"        self.role.roles_delete_subtree_by_role(role_id, self.project.tree_dn)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":282,"context_line":"        raise exception.NotImplemented()"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba8a016a_c876baa3","line":281,"in_reply_to":"ba8a016a_5c44d048","updated":"2015-11-18 18:04:50.000000000","message":"When ldap related unit tests are run, stevedore has a problem with instantiating Assignment class when I remove this method from here. Similarly I think Keystone will have problems while starting up when ldap backend is used for assignment, although I am too lazy to verify that. :)","commit_id":"756f52b90947505d144489b5ad8b552eca2e92ec"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"4b8ed2dba237a4b61a652cbd54777b2bd2bfd15d","unresolved":false,"context_lines":[{"line_number":278,"context_line":"    def delete_role_assignments(self, role_id):"},{"line_number":279,"context_line":"        self.role.roles_delete_subtree_by_role(role_id, self.project.tree_dn)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":282,"context_line":"        raise exception.NotImplemented()"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"ba8a016a_8fb2fc04","line":281,"in_reply_to":"ba8a016a_5c44d048","updated":"2015-11-18 17:23:59.000000000","message":"can we remove it? I though that gave us an error if there was no implantation of an abstract method?","commit_id":"756f52b90947505d144489b5ad8b552eca2e92ec"}],"keystone/assignment/backends/sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"89292e6a046549ec4a0246c46a6a4911a429bc0c","unresolved":false,"context_lines":[{"line_number":380,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":381,"context_line":"        with sql.transaction() as session:"},{"line_number":382,"context_line":"            q \u003d session.query(RoleAssignment)"},{"line_number":383,"context_line":"            q \u003d q.filter_by(target_id\u003ddomain_id)"},{"line_number":384,"context_line":"            q.delete(False)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def delete_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da9b358b_29d8ff52","line":383,"updated":"2015-03-30 00:47:37.000000000","message":"this should also filter by RoleAssignment.type in case a project ID matches a domain ID (e.g., if there\u0027s a \u0027default\u0027 project ID). There should be a test for this.\n\ntype must be AssignmentType.USER_DOMAIN or AssignmentType.GROUP_DOMAIN","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"97069857e2964bf7b51970b3757efe4e8f048ded","unresolved":false,"context_lines":[{"line_number":380,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":381,"context_line":"        with sql.transaction() as session:"},{"line_number":382,"context_line":"            q \u003d session.query(RoleAssignment)"},{"line_number":383,"context_line":"            q \u003d q.filter_by(target_id\u003ddomain_id)"},{"line_number":384,"context_line":"            q.delete(False)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def delete_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da9b358b_69d8471e","line":383,"in_reply_to":"da9b358b_29d8ff52","updated":"2015-03-30 01:06:39.000000000","message":"++","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"898b2ca8103439c99c2c32f1024f25ef87e82f9c","unresolved":false,"context_lines":[{"line_number":380,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":381,"context_line":"        with sql.transaction() as session:"},{"line_number":382,"context_line":"            q \u003d session.query(RoleAssignment)"},{"line_number":383,"context_line":"            q \u003d q.filter_by(target_id\u003ddomain_id)"},{"line_number":384,"context_line":"            q.delete(False)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def delete_user(self, user_id):"}],"source_content_type":"text/x-python","patch_set":11,"id":"baa041b7_68794c93","line":383,"in_reply_to":"da9b358b_29d8ff52","updated":"2015-04-02 14:11:15.000000000","message":"I think you are indeed correct...to be explicit, we should be doing that.  I also see that the delete_project_assignments() above suffers from the inverse of this issue...I\u0027ll raise a bug for that.","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7cd10630c2d908190f25f96b3d4bd037717f56d","unresolved":false,"context_lines":[{"line_number":380,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":381,"context_line":"        with sql.transaction() as session:"},{"line_number":382,"context_line":"            q \u003d session.query(RoleAssignment)"},{"line_number":383,"context_line":"            q \u003d q.filter_by(target_id\u003ddomain_id)"},{"line_number":384,"context_line":"            q.delete(False)"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def delete_user_assignments(self, user_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_83ebd477","line":383,"updated":"2015-08-05 18:32:46.000000000","message":"this should also filter by RoleAssignment.type in case a project ID matches a domain ID (e.g., if there\u0027s a \u0027default\u0027 project ID). There should be a test for this.\n\ntype must be AssignmentType.USER_DOMAIN or AssignmentType.GROUP_DOMAIN","commit_id":"649d226da95e7942e300b040cf4abc3c49bde98d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"af1b2eec7aa959719d1e0999fd76926032d376d2","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            q.delete(False)"},{"line_number":460,"context_line":""},{"line_number":461,"context_line":"    def _delete_domain_assignments(self, service, resource_type, operations,"},{"line_number":462,"context_line":"                                   payload):"},{"line_number":463,"context_line":"        domain_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":464,"context_line":"        with sql.transaction() as session:"},{"line_number":465,"context_line":"            q \u003d session.query(RoleAssignment)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba8a016a_5675ab95","line":462,"updated":"2015-11-18 08:06:04.000000000","message":"I would think we want to decode the payload in the manager not here, and just pass in domain_id","commit_id":"58c9ce2817fd3124d57e4d3d9d6a97a2db7f1787"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"97c8f39e179c982e2735b4e44edff0e3075272f4","unresolved":false,"context_lines":[{"line_number":418,"context_line":"            q \u003d session.query(RoleAssignment)"},{"line_number":419,"context_line":"            q \u003d q.filter(RoleAssignment.target_id \u003d\u003d domain_id).filter("},{"line_number":420,"context_line":"                (RoleAssignment.type \u003d\u003d \u0027UserDomain\u0027) |"},{"line_number":421,"context_line":"                (RoleAssignment.type \u003d\u003d \u0027GroupDomain\u0027))"},{"line_number":422,"context_line":"            q.delete(False)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def delete_user_assignments(self, user_id):"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a8ffd7b_e11ec85e","line":421,"updated":"2015-11-30 16:55:15.000000000","message":"These are persisted as variables above. See lines 31 - 34.","commit_id":"f5a9a39cdc420dd0078a0282656dfc537110efde"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"3d01146271613ceffafe1a6a05b8f5bd0a76df0b","unresolved":false,"context_lines":[{"line_number":418,"context_line":"            q \u003d session.query(RoleAssignment)"},{"line_number":419,"context_line":"            q \u003d q.filter(RoleAssignment.target_id \u003d\u003d domain_id).filter("},{"line_number":420,"context_line":"                (RoleAssignment.type \u003d\u003d \u0027UserDomain\u0027) |"},{"line_number":421,"context_line":"                (RoleAssignment.type \u003d\u003d \u0027GroupDomain\u0027))"},{"line_number":422,"context_line":"            q.delete(False)"},{"line_number":423,"context_line":""},{"line_number":424,"context_line":"    def delete_user_assignments(self, user_id):"}],"source_content_type":"text/x-python","patch_set":19,"id":"da6ed579_8db3f3e8","line":421,"in_reply_to":"9a8ffd7b_e11ec85e","updated":"2016-01-14 06:22:52.000000000","message":"Done","commit_id":"f5a9a39cdc420dd0078a0282656dfc537110efde"}],"keystone/assignment/core.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"2866224e7b0533799e85e216f7f78eeca3fea69e","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    def _delete_domain_assignments(self, service, resource_type, operations,"},{"line_number":76,"context_line":"                                   payload):"},{"line_number":77,"context_line":"        domain_id \u003d payload[\u0027resource_info\u0027]"},{"line_number":78,"context_line":"        self.driver._delete_domain_assignments(domain_id)"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"    def _get_group_ids_for_user_id(self, user_id):"},{"line_number":81,"context_line":"        # TODO(morganfainberg): Implement a way to get only group_ids"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba8a016a_a64ff069","line":78,"updated":"2015-11-18 15:46:06.000000000","message":"not sure why the driver method would have a leading underscore...","commit_id":"615aeee3ab0acb4f826c6c7b874bd26b101cdf2a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"7d9629850eda4a275cd8092af4a43661ab36ea6e","unresolved":false,"context_lines":[{"line_number":1078,"context_line":"    @abc.abstractmethod"},{"line_number":1079,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":1080,"context_line":"        \"\"\"Deletes all assignments for a domain.\"\"\""},{"line_number":1081,"context_line":"        raise exception.NotImplemented()"},{"line_number":1082,"context_line":""},{"line_number":1083,"context_line":""},{"line_number":1084,"context_line":"@six.add_metaclass(abc.ABCMeta)"}],"source_content_type":"text/x-python","patch_set":16,"id":"ba8a016a_e7497261","line":1081,"updated":"2015-11-18 16:34:59.000000000","message":"..this needs to be in the V9 driver below...","commit_id":"8c267aeb482cd4d418223340d008d165395b3cf3"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"f96f8945f4df9af95d6be394c39356274b3e1c80","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(Manager, self).__init__(assignment_driver)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Make sure it is a driver version we support, and if it is a legacy"},{"line_number":71,"context_line":"        # driver, then wrap it."},{"line_number":72,"context_line":"        if isinstance(self.driver, AssignmentDriverV8):"},{"line_number":73,"context_line":"            self.driver \u003d V9AssignmentWrapperForV8Driver(self.driver)"},{"line_number":74,"context_line":"        elif not isinstance(self.driver, AssignmentDriverV9):"},{"line_number":75,"context_line":"            raise exception.UnsupportedDriverVersion(driver\u003dassignment_driver)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _get_group_ids_for_user_id(self, user_id):"},{"line_number":78,"context_line":"        # TODO(morganfainberg): Implement a way to get only group_ids"}],"source_content_type":"text/x-python","patch_set":21,"id":"da6ed579_43a85177","side":"PARENT","line":75,"range":{"start_line":70,"start_character":0,"end_line":75,"end_character":78},"updated":"2016-01-14 14:59:02.000000000","message":"shouldn\u0027t this be moved into the __init__ .  Git probably was confused on a rebase.","commit_id":"bc483fdac5a1498786f2cfb9df5aaf1bb0ccc538"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"d8da055dc16c9cb8c96506cd7665c34d4236c6ae","unresolved":false,"context_lines":[{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        super(Manager, self).__init__(assignment_driver)"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # Make sure it is a driver version we support, and if it is a legacy"},{"line_number":71,"context_line":"        # driver, then wrap it."},{"line_number":72,"context_line":"        if isinstance(self.driver, AssignmentDriverV8):"},{"line_number":73,"context_line":"            self.driver \u003d V9AssignmentWrapperForV8Driver(self.driver)"},{"line_number":74,"context_line":"        elif not isinstance(self.driver, AssignmentDriverV9):"},{"line_number":75,"context_line":"            raise exception.UnsupportedDriverVersion(driver\u003dassignment_driver)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _get_group_ids_for_user_id(self, user_id):"},{"line_number":78,"context_line":"        # TODO(morganfainberg): Implement a way to get only group_ids"}],"source_content_type":"text/x-python","patch_set":21,"id":"da6ed579_f20fcc36","side":"PARENT","line":75,"range":{"start_line":70,"start_character":0,"end_line":75,"end_character":78},"in_reply_to":"da6ed579_43a85177","updated":"2016-01-14 16:32:51.000000000","message":"Good catch. I just rebased and tried running the CI checks. Thanks!","commit_id":"bc483fdac5a1498786f2cfb9df5aaf1bb0ccc538"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"0f5ebe97e590cd0f682b029c2543089d93060190","unresolved":false,"context_lines":[{"line_number":1275,"context_line":""},{"line_number":1276,"context_line":"    def delete_group_assignments(self, group_id):"},{"line_number":1277,"context_line":"        self.driver.delete_group_assignments(group_id)"},{"line_number":1278,"context_line":""},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":"Driver \u003d manager.create_legacy_driver(AssignmentDriverV8)"},{"line_number":1281,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"da6ed579_928e90ce","line":1278,"updated":"2016-01-14 16:29:44.000000000","message":"You need to add a wrapper here for your new method.  Then you need to decide if it does nothing or raises a specific error. Which ever it does you need to make sure the manager works with a legacy V8 driver (as does any test you write)....see the failure in legacy_drivers from the jenkins run","commit_id":"0c6af80596ab84abf02d38c83e848d5ab5f2124f"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ebd956738ce965be4d80881fdca301e4aa943790","unresolved":false,"context_lines":[{"line_number":1276,"context_line":""},{"line_number":1277,"context_line":"    def delete_group_assignments(self, group_id):"},{"line_number":1278,"context_line":"        self.driver.delete_group_assignments(group_id)"},{"line_number":1279,"context_line":""},{"line_number":1280,"context_line":""},{"line_number":1281,"context_line":"Driver \u003d manager.create_legacy_driver(AssignmentDriverV8)"},{"line_number":1282,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"da6ed579_a777c69e","line":1279,"updated":"2016-01-14 20:07:58.000000000","message":"you need to add wrapper for delete_domain_assignments here....see my comment on previous patch","commit_id":"3209924a6697acee2ba9a752d9c46829636b0592"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"dccf642627b031570c68cabfe6005b7c9af4634d","unresolved":false,"context_lines":[{"line_number":1322,"context_line":"    def __init__(self, wrapped_driver):"},{"line_number":1323,"context_line":"        self.driver \u003d wrapped_driver"},{"line_number":1324,"context_line":""},{"line_number":1325,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":1326,"context_line":"        \"\"\"Deletes all assignments for a domain.\"\"\""},{"line_number":1327,"context_line":"        raise exception.NotImplemented()"},{"line_number":1328,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5aef4532_e623e6a5","line":1325,"updated":"2016-03-08 13:53:17.000000000","message":"This will break backward compatibility. The point of this class is to adapt an old driver to the new interface. Since the old driver didn\u0027t have this method I think we can safely just pass here with a comment saying why.","commit_id":"95bde16ce21d2e5f8a1c261796ca949b62af0d4a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"408349d4281fe6aecd71c159d9fda76a921dff41","unresolved":false,"context_lines":[{"line_number":1322,"context_line":"    def __init__(self, wrapped_driver):"},{"line_number":1323,"context_line":"        self.driver \u003d wrapped_driver"},{"line_number":1324,"context_line":""},{"line_number":1325,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":1326,"context_line":"        \"\"\"Deletes all assignments for a domain.\"\"\""},{"line_number":1327,"context_line":"        raise exception.NotImplemented()"},{"line_number":1328,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5aef4532_722150fb","line":1325,"in_reply_to":"5aef4532_e623e6a5","updated":"2016-03-08 15:28:58.000000000","message":"++","commit_id":"95bde16ce21d2e5f8a1c261796ca949b62af0d4a"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"10a8b639985cc1225f26d5163af2437003551f11","unresolved":false,"context_lines":[{"line_number":1322,"context_line":"    def __init__(self, wrapped_driver):"},{"line_number":1323,"context_line":"        self.driver \u003d wrapped_driver"},{"line_number":1324,"context_line":""},{"line_number":1325,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":1326,"context_line":"        \"\"\"Deletes all assignments for a domain.\"\"\""},{"line_number":1327,"context_line":"        raise exception.NotImplemented()"},{"line_number":1328,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"5aef4532_3d279913","line":1325,"in_reply_to":"5aef4532_e623e6a5","updated":"2016-03-08 15:30:52.000000000","message":"Done","commit_id":"95bde16ce21d2e5f8a1c261796ca949b62af0d4a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"630e0364e2bcf3167e1fae2a3dec6c9636641051","unresolved":false,"context_lines":[{"line_number":1391,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":1392,"context_line":"        \"\"\"Deletes all assignments for a domain.\"\"\""},{"line_number":1393,"context_line":"        msg \u003d _LW(\u0027delete_domain_assignments method not found in custom \u0027"},{"line_number":1394,"context_line":"                  \u0027assignment driver. Domain assignments for domain (%s) will \u0027"},{"line_number":1395,"context_line":"                  \u0027not be removed. This was added in V9 of the assignment \u0027"},{"line_number":1396,"context_line":"                  \u0027driver.\u0027)"},{"line_number":1397,"context_line":"        LOG.warning(msg, domain_id)"},{"line_number":1398,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5aef4532_c22fad3c","line":1395,"range":{"start_line":1394,"start_character":38,"end_line":1395,"end_character":34},"updated":"2016-03-08 16:27:43.000000000","message":"So in fact, we do remove all the assignments on the domain for user who are also in that domain. What this method is used for is to catch any assignments that are for users owned by other domains.","commit_id":"905f0ae37d77aa069e463914417367d6bf29a40f"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"14c1ad6208a0e6c4ec7a85c28260812373d1b63c","unresolved":false,"context_lines":[{"line_number":1391,"context_line":"    def delete_domain_assignments(self, domain_id):"},{"line_number":1392,"context_line":"        \"\"\"Deletes all assignments for a domain.\"\"\""},{"line_number":1393,"context_line":"        msg \u003d _LW(\u0027delete_domain_assignments method not found in custom \u0027"},{"line_number":1394,"context_line":"                  \u0027assignment driver. Domain assignments for domain (%s) will \u0027"},{"line_number":1395,"context_line":"                  \u0027not be removed. This was added in V9 of the assignment \u0027"},{"line_number":1396,"context_line":"                  \u0027driver.\u0027)"},{"line_number":1397,"context_line":"        LOG.warning(msg, domain_id)"},{"line_number":1398,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5aef4532_78de3c12","line":1395,"range":{"start_line":1394,"start_character":38,"end_line":1395,"end_character":34},"in_reply_to":"5aef4532_c22fad3c","updated":"2016-03-08 22:05:27.000000000","message":"Done","commit_id":"905f0ae37d77aa069e463914417367d6bf29a40f"}],"keystone/resource/core.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"49288d750d59c729902fd73d5e2793cbb96746e2","unresolved":false,"context_lines":[{"line_number":449,"context_line":"        # Delete any database stored domain config"},{"line_number":450,"context_line":"        self.domain_config_api.delete_config_options(domain_id)"},{"line_number":451,"context_line":"        self.domain_config_api.delete_config_options(domain_id, sensitive\u003dTrue)"},{"line_number":452,"context_line":"        self.assignment_api.delete_domain_assignments(domain_id)"},{"line_number":453,"context_line":"        self.driver.delete_domain(domain_id)"},{"line_number":454,"context_line":"        notifications.Audit.deleted(self._DOMAIN, domain_id, initiator)"},{"line_number":455,"context_line":"        self.get_domain.invalidate(self, domain_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a6ced46_772d3346","line":452,"updated":"2015-03-24 10:04:54.000000000","message":"(nit): this might make more sense just below the self._delete_domain_contents(domain_id) (line 448)...since it is an extension of deleting contents (i.e. and before the domain config deletes).","commit_id":"6ddc6f2b8dfa40d84a52dbea0bf0a1d6944ee2bd"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"89292e6a046549ec4a0246c46a6a4911a429bc0c","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                         \u0027please disable it first.\u0027))"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":444,"context_line":"        self.assignment_api.delete_domain_assignments(domain_id)"},{"line_number":445,"context_line":"        # Delete any database stored domain config"},{"line_number":446,"context_line":"        self.domain_config_api.delete_config_options(domain_id)"},{"line_number":447,"context_line":"        self.domain_config_api.delete_config_options(domain_id, sensitive\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da9b358b_e9e1f7ff","line":444,"updated":"2015-03-30 00:47:37.000000000","message":"rather than make a direct call, an internal notification should be used.","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"ad9a0647e58114aa5592666c0774439bec1eeecf","unresolved":false,"context_lines":[{"line_number":441,"context_line":"                         \u0027please disable it first.\u0027))"},{"line_number":442,"context_line":""},{"line_number":443,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":444,"context_line":"        self.assignment_api.delete_domain_assignments(domain_id)"},{"line_number":445,"context_line":"        # Delete any database stored domain config"},{"line_number":446,"context_line":"        self.domain_config_api.delete_config_options(domain_id)"},{"line_number":447,"context_line":"        self.domain_config_api.delete_config_options(domain_id, sensitive\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7aaa499b_f580ac48","line":444,"in_reply_to":"da9b358b_e9e1f7ff","updated":"2015-04-11 22:48:29.000000000","message":"...and in fact I assume you could use the domain deletion event for this?","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f7cd10630c2d908190f25f96b3d4bd037717f56d","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                         \u0027please disable it first.\u0027))"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":457,"context_line":"        self.assignment_api.delete_domain_assignments(domain_id)"},{"line_number":458,"context_line":"        # Delete any database stored domain config"},{"line_number":459,"context_line":"        self.domain_config_api.delete_config_options(domain_id)"},{"line_number":460,"context_line":"        self.domain_config_api.delete_config_options(domain_id, sensitive\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1a4dcd0f_a397f0ea","line":457,"updated":"2015-08-05 18:32:46.000000000","message":"rather than make a direct call, an internal notification should be used.","commit_id":"649d226da95e7942e300b040cf4abc3c49bde98d"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"1e9c52ec4cd3e9e6b1f6cd47c584d5d5e191d64b","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                         \u0027please disable it first.\u0027))"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":457,"context_line":"        self.assignment_api.delete_domain_assignments(domain_id)"},{"line_number":458,"context_line":"        # Delete any database stored domain config"},{"line_number":459,"context_line":"        self.domain_config_api.delete_config_options(domain_id)"},{"line_number":460,"context_line":"        self.domain_config_api.delete_config_options(domain_id, sensitive\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba8a016a_a6a5e504","line":457,"in_reply_to":"1a4dcd0f_a397f0ea","updated":"2015-11-17 18:42:50.000000000","message":"I have rebased the patch and I am planning to work on it.\n\nI don\u0027t understand the internal notification stuff. Please give me an example of it so that I can use it here.","commit_id":"649d226da95e7942e300b040cf4abc3c49bde98d"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"a0f729255636f5ff81ab0b7f3c7419a30baf0f27","unresolved":false,"context_lines":[{"line_number":454,"context_line":"                         \u0027please disable it first.\u0027))"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"        self._delete_domain_contents(domain_id)"},{"line_number":457,"context_line":"        self.assignment_api.delete_domain_assignments(domain_id)"},{"line_number":458,"context_line":"        # Delete any database stored domain config"},{"line_number":459,"context_line":"        self.domain_config_api.delete_config_options(domain_id)"},{"line_number":460,"context_line":"        self.domain_config_api.delete_config_options(domain_id, sensitive\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba8a016a_39fb4fc3","line":457,"in_reply_to":"ba8a016a_a6a5e504","updated":"2015-11-17 21:30:52.000000000","message":"See the method _domain_deleted() in identity/core.py as an example....","commit_id":"649d226da95e7942e300b040cf4abc3c49bde98d"}],"keystone/tests/test_backend_sql.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4a4dc5e2311aa7edd8d8996b1ea020455043233f","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        user_domains \u003d self.assignment_api.list_domains_for_user(user[\u0027id\u0027])"},{"line_number":372,"context_line":"        self.assertThat(user_domains, matchers.HasLength(3))"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"    def test_remove_assignments_for_foreign_actors_when_deleting_domain(self):"},{"line_number":375,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":376,"context_line":"        self.assignment_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":377,"context_line":"        group \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aa7fdbe_9dac9def","line":374,"updated":"2014-10-21 00:24:44.000000000","message":"We don\u0027t want the server to have behaviors that are specific to the SQL backend, so this test should be in test_backend.py.","commit_id":"e921da3b2926fcb5b24df3e42da4a907a67505c8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4a4dc5e2311aa7edd8d8996b1ea020455043233f","unresolved":false,"context_lines":[{"line_number":392,"context_line":""},{"line_number":393,"context_line":"        role_assignments \u003d self.assignment_api.list_role_assignments_for_role("},{"line_number":394,"context_line":"            role_id\u003drole[\u0027id\u0027])"},{"line_number":395,"context_line":"        self.assertEqual(2, len(role_assignments))"},{"line_number":396,"context_line":""},{"line_number":397,"context_line":"        self.assignment_api.update_domain(domain[\u0027id\u0027], {\u0027enabled\u0027: False})"},{"line_number":398,"context_line":"        self.assignment_api.delete_domain(domain[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aa7fdbe_5d74f598","line":395,"updated":"2014-10-21 00:24:44.000000000","message":"Use self.assertThat(role_assignments, matchers.HasLength(2))","commit_id":"e921da3b2926fcb5b24df3e42da4a907a67505c8"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"4a4dc5e2311aa7edd8d8996b1ea020455043233f","unresolved":false,"context_lines":[{"line_number":399,"context_line":""},{"line_number":400,"context_line":"        role_assignments \u003d self.assignment_api.list_role_assignments_for_role("},{"line_number":401,"context_line":"            role_id\u003drole[\u0027id\u0027])"},{"line_number":402,"context_line":"        self.assertEqual(0, len(role_assignments))"},{"line_number":403,"context_line":""},{"line_number":404,"context_line":""},{"line_number":405,"context_line":"class SqlTrust(SqlTests, test_backend.TrustTests):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9aa7fdbe_9d657de3","line":402,"updated":"2014-10-21 00:24:44.000000000","message":"use assertEqual([], role_assignments)","commit_id":"e921da3b2926fcb5b24df3e42da4a907a67505c8"}],"keystone/tests/unit/assignment/test_backends.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"6a1761f2ec434009f8c09c9e129c33d810e51b3c","unresolved":false,"context_lines":[{"line_number":2419,"context_line":"        for assignment in group_assignments:"},{"line_number":2420,"context_line":"            self.assertThat(assignment.keys(), matchers.Contains(\u0027user_id\u0027))"},{"line_number":2421,"context_line":""},{"line_number":2422,"context_line":"    def test_remove_foreign_assignments_when_deleting_a_domain(self):"},{"line_number":2423,"context_line":"        # A user and a group are in default domain and have assigned a role on"},{"line_number":2424,"context_line":"        # two new domains. This test makes sure that when one of the new"},{"line_number":2425,"context_line":"        # domains is deleted, the role assignments for the user and the group"}],"source_content_type":"text/x-python","patch_set":25,"id":"5aef4532_cfbfd65e","line":2422,"updated":"2016-03-08 16:19:00.000000000","message":"Nice test","commit_id":"905f0ae37d77aa069e463914417367d6bf29a40f"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"1d2ca2fefc312a91d9229f5c8a3966624bd02191","unresolved":false,"context_lines":[{"line_number":2453,"context_line":""},{"line_number":2454,"context_line":"        role_assignments \u003d self.assignment_api.list_role_assignments("},{"line_number":2455,"context_line":"            role_id\u003drole[\u0027id\u0027])"},{"line_number":2456,"context_line":"        self.assertThat(role_assignments, matchers.HasLength(2))"},{"line_number":2457,"context_line":""},{"line_number":2458,"context_line":"        # Delete second new domain and check no assignments were left"},{"line_number":2459,"context_line":"        self.resource_api.update_domain(new_domains[1][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":25,"id":"5aef4532_6297b990","line":2456,"range":{"start_line":2456,"start_character":24,"end_line":2456,"end_character":40},"updated":"2016-03-08 16:25:49.000000000","message":"suggest to check the domain_id in the role_assignments is indeed the ID from the remaining domain","commit_id":"905f0ae37d77aa069e463914417367d6bf29a40f"}],"keystone/tests/unit/test_backend.py":[{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"5aba15f406e0b214d5d1aedca9a4ac51fdcce188","unresolved":false,"context_lines":[{"line_number":3761,"context_line":"                                  {\u0027name\u0027: self.role_member[\u0027name\u0027]})"},{"line_number":3762,"context_line":"        # If the previous line didn\u0027t raise an exception then the test passes."},{"line_number":3763,"context_line":""},{"line_number":3764,"context_line":"    def test_remove_assignments_when_deleting_a_domain(self):"},{"line_number":3765,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":3766,"context_line":"        self.assignment_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":3767,"context_line":"        group \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_2f264abb","line":3764,"updated":"2015-02-20 02:31:09.000000000","message":"would be nice to provide a docstring with the testplan.","commit_id":"6c5c99c39dbd1c21911f0d254b382fdd86336766"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"97069857e2964bf7b51970b3757efe4e8f048ded","unresolved":false,"context_lines":[{"line_number":3754,"context_line":"        # If the previous line didn\u0027t raise an exception then the test passes."},{"line_number":3755,"context_line":""},{"line_number":3756,"context_line":"    def test_remove_assignments_when_deleting_a_domain(self):"},{"line_number":3757,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":3758,"context_line":"        self.assignment_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":3759,"context_line":"        group \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":3760,"context_line":"        group \u003d self.identity_api.create_group(group)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da9b358b_69ef27b1","line":3757,"updated":"2015-03-30 01:06:39.000000000","message":"create a second domain","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"97069857e2964bf7b51970b3757efe4e8f048ded","unresolved":false,"context_lines":[{"line_number":3770,"context_line":"                                         role_id\u003drole[\u0027id\u0027])"},{"line_number":3771,"context_line":"        self.assignment_api.create_grant(user_id\u003duser[\u0027id\u0027],"},{"line_number":3772,"context_line":"                                         domain_id\u003ddomain[\u0027id\u0027],"},{"line_number":3773,"context_line":"                                         role_id\u003drole[\u0027id\u0027])"},{"line_number":3774,"context_line":""},{"line_number":3775,"context_line":"        role_assignments \u003d self.assignment_api.list_role_assignments_for_role("},{"line_number":3776,"context_line":"            role_id\u003drole[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":11,"id":"da9b358b_492b43ec","line":3773,"updated":"2015-03-30 01:06:39.000000000","message":"add role assignments for the second domain","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"89292e6a046549ec4a0246c46a6a4911a429bc0c","unresolved":false,"context_lines":[{"line_number":3781,"context_line":""},{"line_number":3782,"context_line":"        role_assignments \u003d self.assignment_api.list_role_assignments_for_role("},{"line_number":3783,"context_line":"            role_id\u003drole[\u0027id\u0027])"},{"line_number":3784,"context_line":"        self.assertEqual([], role_assignments)"},{"line_number":3785,"context_line":""},{"line_number":3786,"context_line":""},{"line_number":3787,"context_line":"class TokenTests(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da9b358b_69ee07ee","line":3784,"updated":"2015-03-30 00:47:37.000000000","message":"the test should also show that a role on a different domain isn\u0027t deleted.","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"fef81c46ab1db121e1cdc3ed028ca70607bfd6db","unresolved":false,"context_lines":[{"line_number":3781,"context_line":""},{"line_number":3782,"context_line":"        role_assignments \u003d self.assignment_api.list_role_assignments_for_role("},{"line_number":3783,"context_line":"            role_id\u003drole[\u0027id\u0027])"},{"line_number":3784,"context_line":"        self.assertEqual([], role_assignments)"},{"line_number":3785,"context_line":""},{"line_number":3786,"context_line":""},{"line_number":3787,"context_line":"class TokenTests(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"3acd31a7_37682087","line":3784,"in_reply_to":"da9b358b_69ee07ee","updated":"2015-05-01 18:26:16.000000000","message":"++ Domain role assignments on a third domain should not be affected.","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":11022,"name":"Rodrigo Duarte Sousa","email":"rodrigodsousa@gmail.com","username":"rodrigods"},"change_message_id":"97069857e2964bf7b51970b3757efe4e8f048ded","unresolved":false,"context_lines":[{"line_number":3781,"context_line":""},{"line_number":3782,"context_line":"        role_assignments \u003d self.assignment_api.list_role_assignments_for_role("},{"line_number":3783,"context_line":"            role_id\u003drole[\u0027id\u0027])"},{"line_number":3784,"context_line":"        self.assertEqual([], role_assignments)"},{"line_number":3785,"context_line":""},{"line_number":3786,"context_line":""},{"line_number":3787,"context_line":"class TokenTests(object):"}],"source_content_type":"text/x-python","patch_set":11,"id":"da9b358b_e939f742","line":3784,"in_reply_to":"da9b358b_69ee07ee","updated":"2015-03-30 01:06:39.000000000","message":"now, as Brant suggested, check if the other domain assignments are still valid","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"9d8244e2803add685fa60ec51c96a15aca432298","unresolved":false,"context_lines":[{"line_number":4272,"context_line":"                                  {\u0027name\u0027: self.role_member[\u0027name\u0027]})"},{"line_number":4273,"context_line":"        # If the previous line didn\u0027t raise an exception then the test passes."},{"line_number":4274,"context_line":""},{"line_number":4275,"context_line":"    def test_remove_assignments_when_deleting_a_domain(self):"},{"line_number":4276,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":4277,"context_line":"        self.resource_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":4278,"context_line":"        group \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba8a016a_5cfcd0b7","line":4275,"updated":"2015-11-18 17:08:35.000000000","message":"just put a comment saying that you are creating users/groups in default domain and having role assignments in other domain.","commit_id":"756f52b90947505d144489b5ad8b552eca2e92ec"},{"author":{"_account_id":10046,"name":"Henrique Truta","email":"henrique@lsd.ufcg.edu.br","username":"henriquetruta"},"change_message_id":"9d8244e2803add685fa60ec51c96a15aca432298","unresolved":false,"context_lines":[{"line_number":4273,"context_line":"        # If the previous line didn\u0027t raise an exception then the test passes."},{"line_number":4274,"context_line":""},{"line_number":4275,"context_line":"    def test_remove_assignments_when_deleting_a_domain(self):"},{"line_number":4276,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":4277,"context_line":"        self.resource_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":4278,"context_line":"        group \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":4279,"context_line":"        group \u003d self.identity_api.create_group(group)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba8a016a_bc7ffc64","line":4276,"updated":"2015-11-18 17:08:35.000000000","message":"use unit.new_domain_ref, new_group_ref, user and so on...","commit_id":"756f52b90947505d144489b5ad8b552eca2e92ec"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"6934280bed1a99cb399e30ab23096241dba71488","unresolved":false,"context_lines":[{"line_number":4273,"context_line":"        # If the previous line didn\u0027t raise an exception then the test passes."},{"line_number":4274,"context_line":""},{"line_number":4275,"context_line":"    def test_remove_assignments_when_deleting_a_domain(self):"},{"line_number":4276,"context_line":"        domain \u003d {\u0027id\u0027: uuid.uuid4().hex, \u0027name\u0027: uuid.uuid4().hex}"},{"line_number":4277,"context_line":"        self.resource_api.create_domain(domain[\u0027id\u0027], domain)"},{"line_number":4278,"context_line":"        group \u003d {\u0027name\u0027: uuid.uuid4().hex, \u0027domain_id\u0027: DEFAULT_DOMAIN_ID}"},{"line_number":4279,"context_line":"        group \u003d self.identity_api.create_group(group)"}],"source_content_type":"text/x-python","patch_set":17,"id":"ba8a016a_28e3c634","line":4276,"in_reply_to":"ba8a016a_bc7ffc64","updated":"2015-11-18 18:04:50.000000000","message":"Will do in the next patch. Thanks for the comments.","commit_id":"756f52b90947505d144489b5ad8b552eca2e92ec"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"451ada618581f00b298e50f70f77fd5cde4a9158","unresolved":false,"context_lines":[{"line_number":4302,"context_line":""},{"line_number":4303,"context_line":"        role_assignments \u003d self.assignment_api.list_role_assignments("},{"line_number":4304,"context_line":"            role_id\u003drole[\u0027id\u0027])"},{"line_number":4305,"context_line":"        self.assertEqual([], role_assignments)"},{"line_number":4306,"context_line":""},{"line_number":4307,"context_line":""},{"line_number":4308,"context_line":"class TokenTests(object):"}],"source_content_type":"text/x-python","patch_set":18,"id":"ba8a016a_080ebbe4","line":4305,"updated":"2015-11-19 20:37:59.000000000","message":"I think you should expand this test to show that assignments from  other domains are not deleted","commit_id":"0807b0e892d1c8670845c6c3f0c1fa1421b7c386"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"97c8f39e179c982e2735b4e44edff0e3075272f4","unresolved":false,"context_lines":[{"line_number":4287,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":4288,"context_line":"        role \u003d unit.new_role_ref()"},{"line_number":4289,"context_line":"        self.role_api.create_role(role[\u0027id\u0027], role)"},{"line_number":4290,"context_line":"        # Assign roles in domain1"},{"line_number":4291,"context_line":"        self.assignment_api.create_grant(group_id\u003dgroup[\u0027id\u0027],"},{"line_number":4292,"context_line":"                                         domain_id\u003ddomain1[\u0027id\u0027],"},{"line_number":4293,"context_line":"                                         role_id\u003drole[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"9a8ffd7b_615418ca","line":4290,"updated":"2015-11-30 16:55:15.000000000","message":"Could use a loop for this: \n\n    # assign roles for domain1 and domain2\n    for domain_id in [domain1[\u0027id\u0027], domain2[\u0027id\u0027]]:\n        self.assignment_api.create_grant(group_id\u003dgroup[\u0027id\u0027],\n            domain_id\u003ddomain_id,\n            role_id\u003drole[\u0027id\u0027])\n        self.assignment_api.create_grant(user_id\u003duser[\u0027id\u0027],\n            domain_id\u003ddomain_id,\n            role_id\u003drole[\u0027id\u0027])","commit_id":"f5a9a39cdc420dd0078a0282656dfc537110efde"},{"author":{"_account_id":11428,"name":"Ajaya Agrawal","email":"ajku.agr@gmail.com","username":"ajayaa"},"change_message_id":"3d01146271613ceffafe1a6a05b8f5bd0a76df0b","unresolved":false,"context_lines":[{"line_number":4287,"context_line":"        user \u003d self.identity_api.create_user(user)"},{"line_number":4288,"context_line":"        role \u003d unit.new_role_ref()"},{"line_number":4289,"context_line":"        self.role_api.create_role(role[\u0027id\u0027], role)"},{"line_number":4290,"context_line":"        # Assign roles in domain1"},{"line_number":4291,"context_line":"        self.assignment_api.create_grant(group_id\u003dgroup[\u0027id\u0027],"},{"line_number":4292,"context_line":"                                         domain_id\u003ddomain1[\u0027id\u0027],"},{"line_number":4293,"context_line":"                                         role_id\u003drole[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"da6ed579_0dc06329","line":4290,"in_reply_to":"9a8ffd7b_615418ca","updated":"2016-01-14 06:22:52.000000000","message":"Done","commit_id":"f5a9a39cdc420dd0078a0282656dfc537110efde"}],"keystone/tests/unit/test_backend_ldap.py":[{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"92f5e813583232336afa2e681d1886f99945c474","unresolved":false,"context_lines":[{"line_number":884,"context_line":"        self.assertIs(True, project_info[\u0027enabled\u0027])"},{"line_number":885,"context_line":""},{"line_number":886,"context_line":"    def test_remove_assignments_for_foreign_actors_when_deleting_domain(self):"},{"line_number":887,"context_line":"        self.skipTest(\u0027N/A: LDAP does not support multiple domains\u0027)"},{"line_number":888,"context_line":""},{"line_number":889,"context_line":""},{"line_number":890,"context_line":"class LDAPIdentity(BaseLDAPIdentity, tests.TestCase):"}],"source_content_type":"text/x-python","patch_set":8,"id":"da86d52c_bc324bf0","line":887,"updated":"2015-02-15 11:45:03.000000000","message":"rather than skip test, better to expect an exception to be raised (which will be to do with multiple domains).. You will probably find that such a test WILL work in one of the Multi iDomain scenarios further down this file...See https://review.openstack.org/#/c/154302/9/keystone/tests/unit/test_backend_ldap.py as an example","commit_id":"2b6afab6ba51133e2970cc03fb92d8019b53c97a"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"89292e6a046549ec4a0246c46a6a4911a429bc0c","unresolved":false,"context_lines":[{"line_number":921,"context_line":"        # returned as part of the ref."},{"line_number":922,"context_line":"        self.assertIs(True, project_info[\u0027enabled\u0027])"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"    def test_remove_assignments_when_deleting_a_domain(self):"},{"line_number":925,"context_line":"        self.assertRaises("},{"line_number":926,"context_line":"            (exception.Forbidden, exception.DomainNotFound),"},{"line_number":927,"context_line":"            super(BaseLDAPIdentity,"}],"source_content_type":"text/x-python","patch_set":11,"id":"da9b358b_29bfdfd1","line":924,"updated":"2015-03-30 00:47:37.000000000","message":"add a comment why the LDAP backend works this way","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":9142,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@lsd.ufcg.edu.br","username":"samuel-z","inactive":true},"change_message_id":"fef81c46ab1db121e1cdc3ed028ca70607bfd6db","unresolved":false,"context_lines":[{"line_number":921,"context_line":"        # returned as part of the ref."},{"line_number":922,"context_line":"        self.assertIs(True, project_info[\u0027enabled\u0027])"},{"line_number":923,"context_line":""},{"line_number":924,"context_line":"    def test_remove_assignments_when_deleting_a_domain(self):"},{"line_number":925,"context_line":"        self.assertRaises("},{"line_number":926,"context_line":"            (exception.Forbidden, exception.DomainNotFound),"},{"line_number":927,"context_line":"            super(BaseLDAPIdentity,"}],"source_content_type":"text/x-python","patch_set":11,"id":"3acd31a7_d7ab2c88","line":924,"in_reply_to":"da9b358b_29bfdfd1","updated":"2015-05-01 18:26:16.000000000","message":"Just to make clear, LDAP does not support delete/updates on domain.","commit_id":"a3fe5a753c0ab036947bf1ce44d54bfdefc12b44"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"a7fac9528afc49e0081a3052582c273247e8aa10","unresolved":false,"context_lines":[{"line_number":939,"context_line":"            test_list_role_assignment_by_user_with_domain_group_roles)"},{"line_number":940,"context_line":""},{"line_number":941,"context_line":"    def test_remove_assignments_when_deleting_a_domain(self):"},{"line_number":942,"context_line":"        self.assertRaises("},{"line_number":943,"context_line":"            (exception.Forbidden, exception.DomainNotFound),"},{"line_number":944,"context_line":"            super(BaseLDAPIdentity,"},{"line_number":945,"context_line":"                  self).test_remove_assignments_when_deleting_a_domain)"},{"line_number":946,"context_line":""},{"line_number":947,"context_line":""},{"line_number":948,"context_line":"class LDAPIdentity(BaseLDAPIdentity, unit.TestCase):"}],"source_content_type":"text/x-python","patch_set":22,"id":"da6ed579_340af48a","line":945,"range":{"start_line":942,"start_character":8,"end_line":945,"end_character":71},"updated":"2016-01-15 16:05:09.000000000","message":"toss up a reason why too","commit_id":"3209924a6697acee2ba9a752d9c46829636b0592"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"dccf642627b031570c68cabfe6005b7c9af4634d","unresolved":false,"context_lines":[{"line_number":2559,"context_line":"        super(BaseLDAPIdentity, self).\\"},{"line_number":2560,"context_line":"            test_list_role_assignment_by_user_with_domain_group_roles"},{"line_number":2561,"context_line":""},{"line_number":2562,"context_line":"    def test_remove_foreign_assignments_when_deleting_a_domain(self):"},{"line_number":2563,"context_line":"        # Creating multiple domains is supported when domain-specific backends"},{"line_number":2564,"context_line":"        # feature is enabled"},{"line_number":2565,"context_line":"        base \u003d super(BaseLDAPIdentity, self)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5aef4532_a661deaa","line":2562,"updated":"2016-03-08 13:53:17.000000000","message":"Why do we need this if it\u0027s just calling the parent? The methods above have a comment saying they are overriding the parent\u0027s implementation.","commit_id":"95bde16ce21d2e5f8a1c261796ca949b62af0d4a"},{"author":{"_account_id":7725,"name":"David Stanek","email":"dstanek@dstanek.com","username":"dstanek"},"change_message_id":"10a8b639985cc1225f26d5163af2437003551f11","unresolved":false,"context_lines":[{"line_number":2559,"context_line":"        super(BaseLDAPIdentity, self).\\"},{"line_number":2560,"context_line":"            test_list_role_assignment_by_user_with_domain_group_roles"},{"line_number":2561,"context_line":""},{"line_number":2562,"context_line":"    def test_remove_foreign_assignments_when_deleting_a_domain(self):"},{"line_number":2563,"context_line":"        # Creating multiple domains is supported when domain-specific backends"},{"line_number":2564,"context_line":"        # feature is enabled"},{"line_number":2565,"context_line":"        base \u003d super(BaseLDAPIdentity, self)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5aef4532_5de1c599","line":2562,"in_reply_to":"5aef4532_a661deaa","updated":"2016-03-08 15:30:52.000000000","message":"Done","commit_id":"95bde16ce21d2e5f8a1c261796ca949b62af0d4a"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"408349d4281fe6aecd71c159d9fda76a921dff41","unresolved":false,"context_lines":[{"line_number":2559,"context_line":"        super(BaseLDAPIdentity, self).\\"},{"line_number":2560,"context_line":"            test_list_role_assignment_by_user_with_domain_group_roles"},{"line_number":2561,"context_line":""},{"line_number":2562,"context_line":"    def test_remove_foreign_assignments_when_deleting_a_domain(self):"},{"line_number":2563,"context_line":"        # Creating multiple domains is supported when domain-specific backends"},{"line_number":2564,"context_line":"        # feature is enabled"},{"line_number":2565,"context_line":"        base \u003d super(BaseLDAPIdentity, self)"}],"source_content_type":"text/x-python","patch_set":24,"id":"5aef4532_dde035fd","line":2562,"in_reply_to":"5aef4532_a661deaa","updated":"2016-03-08 15:28:58.000000000","message":"I think it\u0027s the same deal - we are trying to call the original class in LDAPIdenitty, here overriding the override that is in BaseLDAPIdentity","commit_id":"95bde16ce21d2e5f8a1c261796ca949b62af0d4a"}]}
