)]}'
{"keystone/assignment/backends/kvs.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d07c296b240613765ff1093b674ba95f79f4f5bd","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    def list_role_assignments(self, role_id\u003dNone):"},{"line_number":154,"context_line":"        \"\"\"List the role assignments."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        The kvs backend stores role assignments as key-values:"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        \"metadata-{target}-{actor}\", with the value being a role list"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2F9YQ%3D","line":156,"updated":"2013-09-16 15:47:53.000000000","message":"update docstrings to reflect the new method signature","commit_id":"ecf0c86442a463e49c68cfd621a3ecf6685ee646"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f4880662a1230de9bfddd03723ef0f7e34206bc","unresolved":false,"context_lines":[{"line_number":153,"context_line":"    def list_role_assignments(self, role_id\u003dNone):"},{"line_number":154,"context_line":"        \"\"\"List the role assignments."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        The kvs backend stores role assignments as key-values:"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        \"metadata-{target}-{actor}\", with the value being a role list"},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2F4jk%3D","line":156,"in_reply_to":"AAAAS3%2F%2F9YQ%3D","updated":"2013-09-17 18:45:43.000000000","message":"Done","commit_id":"ecf0c86442a463e49c68cfd621a3ecf6685ee646"}],"keystone/assignment/backends/sql.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d07c296b240613765ff1093b674ba95f79f4f5bd","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            msg \u003d \u0027Cannot remove role that has not been granted, %s\u0027 % role_id"},{"line_number":285,"context_line":"            raise exception.RoleNotFound(message\u003dmsg)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def list_role_assignments(self, role_id\u003dNone):"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        # TODO(henry-nash): The current implementation is really simulating"},{"line_number":290,"context_line":"        # us having a common role assignment table, rather than having the"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2F9UE%3D","line":287,"updated":"2013-09-16 15:47:53.000000000","message":"Same comment here","commit_id":"ecf0c86442a463e49c68cfd621a3ecf6685ee646"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f4880662a1230de9bfddd03723ef0f7e34206bc","unresolved":false,"context_lines":[{"line_number":284,"context_line":"            msg \u003d \u0027Cannot remove role that has not been granted, %s\u0027 % role_id"},{"line_number":285,"context_line":"            raise exception.RoleNotFound(message\u003dmsg)"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"    def list_role_assignments(self, role_id\u003dNone):"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        # TODO(henry-nash): The current implementation is really simulating"},{"line_number":290,"context_line":"        # us having a common role assignment table, rather than having the"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2F4i0%3D","line":287,"in_reply_to":"AAAAS3%2F%2F9UE%3D","updated":"2013-09-17 18:45:43.000000000","message":"Done","commit_id":"ecf0c86442a463e49c68cfd621a3ecf6685ee646"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"466e1f029833f57e95f0256235b8af56a51fbc8e","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        :param role_id: if role_id is specified, then only return those"},{"line_number":350,"context_line":"                        assignments that include that role. The validity"},{"line_number":351,"context_line":"                        of the role_id will not be checked, just whether"},{"line_number":352,"context_line":"                        there are assignments that match it."},{"line_number":353,"context_line":"        \"\"\""},{"line_number":354,"context_line":"        # TODO(henry-nash): The current implementation is really simulating"},{"line_number":355,"context_line":"        # us having a common role assignment table, rather than having the"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAS3%2F%2FpUo%3D","line":352,"updated":"2013-09-23 13:58:31.000000000","message":"i\u0027d *much* rather see a new driver method rather than doubling the complexity of this method (and pushing it closer towards being incompatible with our caching implementation). everything you\u0027re doing is on the python side, so you might as well just wrap this method in the base driver class, no?","commit_id":"6d57aaae0f1b4bfe15d6736e68bcbd355ed52953"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"b245ea837ec959f91585fb2189d75d445d80cbfa","unresolved":false,"context_lines":[{"line_number":349,"context_line":"        :param role_id: if role_id is specified, then only return those"},{"line_number":350,"context_line":"                        assignments that include that role. The validity"},{"line_number":351,"context_line":"                        of the role_id will not be checked, just whether"},{"line_number":352,"context_line":"                        there are assignments that match it."},{"line_number":353,"context_line":"        \"\"\""},{"line_number":354,"context_line":"        # TODO(henry-nash): The current implementation is really simulating"},{"line_number":355,"context_line":"        # us having a common role assignment table, rather than having the"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAS3%2F%2FoLo%3D","line":352,"in_reply_to":"AAAAS3%2F%2FpUo%3D","updated":"2013-09-23 19:10:18.000000000","message":"Done","commit_id":"6d57aaae0f1b4bfe15d6736e68bcbd355ed52953"}],"keystone/assignment/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d07c296b240613765ff1093b674ba95f79f4f5bd","unresolved":false,"context_lines":[{"line_number":454,"context_line":"    def list_role_assignments(self, role_id\u003dNone):"},{"line_number":455,"context_line":"        \"\"\"Lists role assignments."},{"line_number":456,"context_line":""},{"line_number":457,"context_line":"        :param role_id: if role_id is specified, then only return those"},{"line_number":458,"context_line":"                        assignments that include that role."},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2F9UA%3D","line":457,"updated":"2013-09-16 15:47:53.000000000","message":"Like this.","commit_id":"ecf0c86442a463e49c68cfd621a3ecf6685ee646"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"73270cffa6bbc5fe44141ba7637d397670834795","unresolved":false,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        :param role_id: if role_id is specified, then only return those"},{"line_number":461,"context_line":"                        assignments that include that role."},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        \"\"\""},{"line_number":464,"context_line":"        raise exception.NotImplemented()"},{"line_number":465,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2FzzU%3D","line":462,"updated":"2013-09-18 21:37:04.000000000","message":"the other docstrings have the exceptions raised, seems like with this change this function could also raise keystone.exception.RoleNotFound if the role_id isn\u0027t a known role id.","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53f61d21a1e6d9e0683a91777811c6c36f2c09d3","unresolved":false,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        :param role_id: if role_id is specified, then only return those"},{"line_number":461,"context_line":"                        assignments that include that role."},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        \"\"\""},{"line_number":464,"context_line":"        raise exception.NotImplemented()"},{"line_number":465,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2FyEE%3D","line":462,"in_reply_to":"AAAAS3%2F%2FzzU%3D","updated":"2013-09-19 14:47:55.000000000","message":"I don\u0027t think it can raise anything, in fact.","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"71ff48262b190f95af4e5e85897c978fa0a5a551","unresolved":false,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        :param role_id: if role_id is specified, then only return those"},{"line_number":461,"context_line":"                        assignments that include that role."},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        \"\"\""},{"line_number":464,"context_line":"        raise exception.NotImplemented()"},{"line_number":465,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2FuKg%3D","line":462,"updated":"2013-09-20 15:50:27.000000000","message":"There should be a testcase for the case when this is called with an unknown role_id and it doesn\u0027t raise RoleNotFound, just returns an empty list.\n\nAlso, could add to the docstring that this function doesn\u0027t verify that the role exists.","commit_id":"a39b9f1b085ac5d6ccbc00b125a723912b77e4af"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"241ec33eb7cc0115e37948956f8b77726f6c2344","unresolved":false,"context_lines":[{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        :param role_id: if role_id is specified, then only return those"},{"line_number":461,"context_line":"                        assignments that include that role."},{"line_number":462,"context_line":""},{"line_number":463,"context_line":"        \"\"\""},{"line_number":464,"context_line":"        raise exception.NotImplemented()"},{"line_number":465,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2Ft%2Bk%3D","line":462,"in_reply_to":"AAAAS3%2F%2FuKg%3D","updated":"2013-09-20 16:22:23.000000000","message":"Done","commit_id":"a39b9f1b085ac5d6ccbc00b125a723912b77e4af"}],"keystone/common/controller.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d07c296b240613765ff1093b674ba95f79f4f5bd","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                # Add to a prune list rather than modify the object we are"},{"line_number":268,"context_line":"                # iterating over"},{"line_number":269,"context_line":"                user_and_projects_to_prune.append(user_and_project)"},{"line_number":270,"context_line":"        "},{"line_number":271,"context_line":"        for prune_item in user_and_projects_to_prune:"},{"line_number":272,"context_line":"            user_and_project_ids.remove(prune_item)"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2F9Ts%3D","line":270,"updated":"2013-09-16 15:47:53.000000000","message":"Fix whitespace.","commit_id":"ecf0c86442a463e49c68cfd621a3ecf6685ee646"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"6f4880662a1230de9bfddd03723ef0f7e34206bc","unresolved":false,"context_lines":[{"line_number":267,"context_line":"                # Add to a prune list rather than modify the object we are"},{"line_number":268,"context_line":"                # iterating over"},{"line_number":269,"context_line":"                user_and_projects_to_prune.append(user_and_project)"},{"line_number":270,"context_line":"        "},{"line_number":271,"context_line":"        for prune_item in user_and_projects_to_prune:"},{"line_number":272,"context_line":"            user_and_project_ids.remove(prune_item)"},{"line_number":273,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAS3%2F%2F4e8%3D","line":270,"in_reply_to":"AAAAS3%2F%2F9Ts%3D","updated":"2013-09-17 18:45:43.000000000","message":"Done","commit_id":"ecf0c86442a463e49c68cfd621a3ecf6685ee646"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"73270cffa6bbc5fe44141ba7637d397670834795","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            if \u0027user_id\u0027 in assignment:"},{"line_number":236,"context_line":"                if \u0027project_id\u0027 in assignment:"},{"line_number":237,"context_line":"                    user_and_project_ids.append("},{"line_number":238,"context_line":"                        {\u0027user_id\u0027: assignment[\u0027user_id\u0027],"},{"line_number":239,"context_line":"                         \u0027project_id\u0027: assignment[\u0027project_id\u0027]})"},{"line_number":240,"context_line":"                elif \u0027domain_id\u0027 in assignment:"},{"line_number":241,"context_line":"                    user_ids.add(assignment[\u0027user_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2Fzyg%3D","line":238,"updated":"2013-09-18 21:37:04.000000000","message":"suggest use a tuple here rather than dict.","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53f61d21a1e6d9e0683a91777811c6c36f2c09d3","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            if \u0027user_id\u0027 in assignment:"},{"line_number":236,"context_line":"                if \u0027project_id\u0027 in assignment:"},{"line_number":237,"context_line":"                    user_and_project_ids.append("},{"line_number":238,"context_line":"                        {\u0027user_id\u0027: assignment[\u0027user_id\u0027],"},{"line_number":239,"context_line":"                         \u0027project_id\u0027: assignment[\u0027project_id\u0027]})"},{"line_number":240,"context_line":"                elif \u0027domain_id\u0027 in assignment:"},{"line_number":241,"context_line":"                    user_ids.add(assignment[\u0027user_id\u0027])"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2FyCY%3D","line":238,"in_reply_to":"AAAAS3%2F%2Fzyg%3D","updated":"2013-09-19 14:47:55.000000000","message":"Done","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"73270cffa6bbc5fe44141ba7637d397670834795","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        for user_and_project in user_and_project_ids:"},{"line_number":266,"context_line":"            if user_and_project[\u0027user_id\u0027] in user_ids:"},{"line_number":267,"context_line":"                # Add to a prune list rather than modify the object we are"},{"line_number":268,"context_line":"                # iterating over"},{"line_number":269,"context_line":"                user_and_projects_to_prune.append(user_and_project)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        for prune_item in user_and_projects_to_prune:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2Fzxs%3D","line":268,"updated":"2013-09-18 21:37:04.000000000","message":"suggest create a new list with the ones to keep rather than the ones to remove. Then don\u0027t have to worry about adding to a prune list and then searching through the original list all over again.","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53f61d21a1e6d9e0683a91777811c6c36f2c09d3","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        for user_and_project in user_and_project_ids:"},{"line_number":266,"context_line":"            if user_and_project[\u0027user_id\u0027] in user_ids:"},{"line_number":267,"context_line":"                # Add to a prune list rather than modify the object we are"},{"line_number":268,"context_line":"                # iterating over"},{"line_number":269,"context_line":"                user_and_projects_to_prune.append(user_and_project)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"        for prune_item in user_and_projects_to_prune:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2FyBU%3D","line":268,"in_reply_to":"AAAAS3%2F%2Fzxs%3D","updated":"2013-09-19 14:47:55.000000000","message":"Done","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"0d074e805053ee34aa446ea3685eb8171f283785","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                    users \u003d self.identity_api.list_users_in_group("},{"line_number":246,"context_line":"                        assignment[\u0027group_id\u0027])"},{"line_number":247,"context_line":"                except exception.GroupNotFound:"},{"line_number":248,"context_line":"                    continue"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"                if \u0027project_id\u0027 in assignment:"},{"line_number":251,"context_line":"                    for user in users:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2FwU4%3D","line":248,"updated":"2013-09-19 21:09:54.000000000","message":"Can/Should we log a message here?","commit_id":"48d95fd53da5f59d468e4f7fabff5ca6917aa659"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"11b16f0579ccab32aed1cbbc97e0ecfe9fa8ff95","unresolved":false,"context_lines":[{"line_number":245,"context_line":"                    users \u003d self.identity_api.list_users_in_group("},{"line_number":246,"context_line":"                        assignment[\u0027group_id\u0027])"},{"line_number":247,"context_line":"                except exception.GroupNotFound:"},{"line_number":248,"context_line":"                    continue"},{"line_number":249,"context_line":""},{"line_number":250,"context_line":"                if \u0027project_id\u0027 in assignment:"},{"line_number":251,"context_line":"                    for user in users:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAS3%2F%2Fua0%3D","line":248,"in_reply_to":"AAAAS3%2F%2FwU4%3D","updated":"2013-09-20 15:15:07.000000000","message":"Done","commit_id":"48d95fd53da5f59d468e4f7fabff5ca6917aa659"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"71ff48262b190f95af4e5e85897c978fa0a5a551","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        for user_id in user_ids:"},{"line_number":280,"context_line":"            self._delete_tokens_for_user(user_id)"},{"line_number":281,"context_line":"        for user_and_project_id in user_and_project_ids_to_action:"},{"line_number":282,"context_line":"            self._delete_tokens_for_user("},{"line_number":283,"context_line":"                user_and_project_id[0],"},{"line_number":284,"context_line":"                project_id\u003duser_and_project_id[1])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2FuME%3D","line":281,"updated":"2013-09-20 15:50:27.000000000","message":"change to \n\n for user, project_id in user_and_project_ids_to_action:","commit_id":"a39b9f1b085ac5d6ccbc00b125a723912b77e4af"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"241ec33eb7cc0115e37948956f8b77726f6c2344","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        for user_id in user_ids:"},{"line_number":280,"context_line":"            self._delete_tokens_for_user(user_id)"},{"line_number":281,"context_line":"        for user_and_project_id in user_and_project_ids_to_action:"},{"line_number":282,"context_line":"            self._delete_tokens_for_user("},{"line_number":283,"context_line":"                user_and_project_id[0],"},{"line_number":284,"context_line":"                project_id\u003duser_and_project_id[1])"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAS3%2F%2Ft%2Fs%3D","line":281,"in_reply_to":"AAAAS3%2F%2FuME%3D","updated":"2013-09-20 16:22:23.000000000","message":"Done","commit_id":"a39b9f1b085ac5d6ccbc00b125a723912b77e4af"}],"keystone/tests/test_auth.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"73270cffa6bbc5fe44141ba7637d397670834795","unresolved":false,"context_lines":[{"line_number":416,"context_line":"            username\u003dself.user_foo[\u0027name\u0027],"},{"line_number":417,"context_line":"            password\u003dself.user_foo[\u0027password\u0027],"},{"line_number":418,"context_line":"            tenant_name\u003dproject1[\u0027name\u0027])"},{"line_number":419,"context_line":"        token \u003d self.controller.authenticate({}, body_dict)"},{"line_number":420,"context_line":"        # Ensure it is valid"},{"line_number":421,"context_line":"        token_id \u003d token[\u0027access\u0027][\u0027token\u0027][\u0027id\u0027]"},{"line_number":422,"context_line":"        self.controller.validate_token("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2FzxA%3D","line":419,"updated":"2013-09-18 21:37:04.000000000","message":"give a name to the {} magic number so reviewers know what it is.","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53f61d21a1e6d9e0683a91777811c6c36f2c09d3","unresolved":false,"context_lines":[{"line_number":416,"context_line":"            username\u003dself.user_foo[\u0027name\u0027],"},{"line_number":417,"context_line":"            password\u003dself.user_foo[\u0027password\u0027],"},{"line_number":418,"context_line":"            tenant_name\u003dproject1[\u0027name\u0027])"},{"line_number":419,"context_line":"        token \u003d self.controller.authenticate({}, body_dict)"},{"line_number":420,"context_line":"        # Ensure it is valid"},{"line_number":421,"context_line":"        token_id \u003d token[\u0027access\u0027][\u0027token\u0027][\u0027id\u0027]"},{"line_number":422,"context_line":"        self.controller.validate_token("}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2FyCE%3D","line":419,"in_reply_to":"AAAAS3%2F%2FzxA%3D","updated":"2013-09-19 14:47:55.000000000","message":"Done","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"}],"keystone/tests/test_backend.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ef841965f0fd12d42630741b266f0a16713800b0","unresolved":false,"context_lines":[{"line_number":461,"context_line":"        existing_assignments \u003d len(self.assignment_api.list_role_assignments())"},{"line_number":462,"context_line":"        existing_assignments_for_role \u003d ("},{"line_number":463,"context_line":"            len(self.assignment_api.list_role_assignments_for_role("},{"line_number":464,"context_line":"                role_id\u003d\u0027admin\u0027)))"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        # Now create the grants (roles are defined in default_fixtures)"},{"line_number":467,"context_line":"        self.identity_api.create_grant(user_id\u003dnew_user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAS3%2F%2Fn%2Fo%3D","line":464,"updated":"2013-09-23 20:23:05.000000000","message":"is \u0027admin\u0027 really the role ID you\u0027re testing for? where did that role come from?\n\n(nit) the extra parens and line breaks here make this hard to read would this fit?\n\n  existing_assignments_for_role \u003d len(\n      self.assignment_api.list_role_assignments_for_role(role_id\u003d\u0027admin\u0027))\n\nor\n\n  existing_assignments_for_role \u003d len(\n      self.assignment_api.list_role_assignments_for_role(\n          role_id\u003d\u0027admin\u0027))","commit_id":"81f604af85f3bc5e26bf8b7bc2bc68ce70c18691"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f9e091009a74ee389309defcc03c842fa89a036d","unresolved":false,"context_lines":[{"line_number":461,"context_line":"        existing_assignments \u003d len(self.assignment_api.list_role_assignments())"},{"line_number":462,"context_line":"        existing_assignments_for_role \u003d ("},{"line_number":463,"context_line":"            len(self.assignment_api.list_role_assignments_for_role("},{"line_number":464,"context_line":"                role_id\u003d\u0027admin\u0027)))"},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"        # Now create the grants (roles are defined in default_fixtures)"},{"line_number":467,"context_line":"        self.identity_api.create_grant(user_id\u003dnew_user[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAS3%2F%2FnoQ%3D","line":464,"in_reply_to":"AAAAS3%2F%2Fn%2Fo%3D","updated":"2013-09-24 09:52:59.000000000","message":"\u0027admin\u0027 is part of default_fixtures....I could use any of the role_ids we are about to add an assignment for here...\n\nChanged line formatting as suggested.","commit_id":"81f604af85f3bc5e26bf8b7bc2bc68ce70c18691"}],"keystone/tests/test_backend_ldap.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ef841965f0fd12d42630741b266f0a16713800b0","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self.skipTest(\u0027Blocked by bug 1195019\u0027)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def test_list_role_assignments_bad_role(self):"},{"line_number":214,"context_line":"        self.skipTest(\u0027Blocked by bug 1195019\u0027)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def test_multi_group_grants_on_project_domain(self):"},{"line_number":217,"context_line":"        self.skipTest(\u0027Blocked by bug 1101287\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAS3%2F%2Fnxg%3D","line":214,"updated":"2013-09-23 20:23:05.000000000","message":"this bug is marked Invalid?","commit_id":"81f604af85f3bc5e26bf8b7bc2bc68ce70c18691"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f9e091009a74ee389309defcc03c842fa89a036d","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self.skipTest(\u0027Blocked by bug 1195019\u0027)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def test_list_role_assignments_bad_role(self):"},{"line_number":214,"context_line":"        self.skipTest(\u0027Blocked by bug 1195019\u0027)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def test_multi_group_grants_on_project_domain(self):"},{"line_number":217,"context_line":"        self.skipTest(\u0027Blocked by bug 1101287\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAS3%2F%2Fnp8%3D","line":214,"in_reply_to":"AAAAS3%2F%2Fnxg%3D","updated":"2013-09-24 09:52:59.000000000","message":"Ah, yes, it has been superseded.  Have update with correct bug 1195019","commit_id":"81f604af85f3bc5e26bf8b7bc2bc68ce70c18691"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"f989ab6b9d380a4880ba36db3f7b4a9ca54a5897","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        self.skipTest(\u0027Blocked by bug 1195019\u0027)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def test_list_role_assignments_bad_role(self):"},{"line_number":214,"context_line":"        self.skipTest(\u0027Blocked by bug 1195019\u0027)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"    def test_multi_group_grants_on_project_domain(self):"},{"line_number":217,"context_line":"        self.skipTest(\u0027Blocked by bug 1101287\u0027)"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAS3%2F%2Fmq8%3D","line":214,"in_reply_to":"AAAAS3%2F%2Fnxg%3D","updated":"2013-09-24 03:04:38.000000000","message":"looks like these should both refer to bug 1221805 now (thanks adam!)","commit_id":"81f604af85f3bc5e26bf8b7bc2bc68ce70c18691"}],"keystone/tests/test_backend_memcache.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"73270cffa6bbc5fe44141ba7637d397670834795","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                                     test_backend.TokenCacheInvalidation):"},{"line_number":222,"context_line":"    def setUp(self):"},{"line_number":223,"context_line":"        super(MemcacheTokenCacheInvalidation, self).setUp()"},{"line_number":224,"context_line":"        identity.CONF.token.driver \u003d ("},{"line_number":225,"context_line":"            \u0027keystone.token.backends.memcache.Token\u0027)"},{"line_number":226,"context_line":"        self.load_backends()"},{"line_number":227,"context_line":"        fake_client \u003d MemcacheClient()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2Fzwc%3D","line":224,"updated":"2013-09-18 21:37:04.000000000","message":"don\u0027t we usually do \"CONF \u003d config.CONF\" (like in https://review.openstack.org/#/c/46613/5/keystone/tests/test_auth.py). Seems odd to import identity just to do this.","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53f61d21a1e6d9e0683a91777811c6c36f2c09d3","unresolved":false,"context_lines":[{"line_number":221,"context_line":"                                     test_backend.TokenCacheInvalidation):"},{"line_number":222,"context_line":"    def setUp(self):"},{"line_number":223,"context_line":"        super(MemcacheTokenCacheInvalidation, self).setUp()"},{"line_number":224,"context_line":"        identity.CONF.token.driver \u003d ("},{"line_number":225,"context_line":"            \u0027keystone.token.backends.memcache.Token\u0027)"},{"line_number":226,"context_line":"        self.load_backends()"},{"line_number":227,"context_line":"        fake_client \u003d MemcacheClient()"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2FyB8%3D","line":224,"in_reply_to":"AAAAS3%2F%2Fzwc%3D","updated":"2013-09-19 14:47:55.000000000","message":"Copied this from kvs backend...but you are right.  However, this comment should go into the underlying patch (as per my comment, there was a problem with my rebase and this file is not changed by this patch)...I will apply this.","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"}],"keystone/tests/test_v3_auth.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"ef841965f0fd12d42630741b266f0a16713800b0","unresolved":false,"context_lines":[{"line_number":473,"context_line":"                                       project_id\u003dself.projectA[\u0027id\u0027])"},{"line_number":474,"context_line":"        self.identity_api.create_grant(self.role1[\u0027id\u0027],"},{"line_number":475,"context_line":"                                       user_id\u003dself.user6[\u0027id\u0027],"},{"line_number":476,"context_line":"                                       domain_id\u003dself.domainA[\u0027id\u0027])"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def test_unscoped_token_remains_valid_after_role_assignment(self):"},{"line_number":479,"context_line":"        r \u003d self.post("}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAS3%2F%2Fnw4%3D","line":476,"updated":"2013-09-23 20:23:05.000000000","message":"this is a substantial amount of extra setup to only be used in one test :( makes all the other tests much more difficult to follow","commit_id":"81f604af85f3bc5e26bf8b7bc2bc68ce70c18691"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"f9e091009a74ee389309defcc03c842fa89a036d","unresolved":false,"context_lines":[{"line_number":473,"context_line":"                                       project_id\u003dself.projectA[\u0027id\u0027])"},{"line_number":474,"context_line":"        self.identity_api.create_grant(self.role1[\u0027id\u0027],"},{"line_number":475,"context_line":"                                       user_id\u003dself.user6[\u0027id\u0027],"},{"line_number":476,"context_line":"                                       domain_id\u003dself.domainA[\u0027id\u0027])"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def test_unscoped_token_remains_valid_after_role_assignment(self):"},{"line_number":479,"context_line":"        r \u003d self.post("}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAAS3%2F%2Flkk%3D","line":476,"in_reply_to":"AAAAS3%2F%2Fnw4%3D","updated":"2013-09-24 09:52:59.000000000","message":"Fair point - that was worrying me too!  Have moved the test specific data into the test itself.","commit_id":"81f604af85f3bc5e26bf8b7bc2bc68ce70c18691"}],"keystone/token/core.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"73270cffa6bbc5fe44141ba7637d397670834795","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        tenant_id \u003d None"},{"line_number":164,"context_line":"        if token.get(\u0027tenant\u0027):"},{"line_number":165,"context_line":"            tenant_id \u003d token[\u0027tenant\u0027].get(\u0027id\u0027, None)"},{"line_number":166,"context_line":"        self._invalidate_individual_token_cache(unique_id, tenant_id)"},{"line_number":167,"context_line":"        self.invalidate_revocation_list()"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2Fzvk%3D","line":165,"updated":"2013-09-18 21:37:04.000000000","message":"why would the token have tenant but not have the tenant\u0027s ID?","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53f61d21a1e6d9e0683a91777811c6c36f2c09d3","unresolved":false,"context_lines":[{"line_number":162,"context_line":""},{"line_number":163,"context_line":"        tenant_id \u003d None"},{"line_number":164,"context_line":"        if token.get(\u0027tenant\u0027):"},{"line_number":165,"context_line":"            tenant_id \u003d token[\u0027tenant\u0027].get(\u0027id\u0027, None)"},{"line_number":166,"context_line":"        self._invalidate_individual_token_cache(unique_id, tenant_id)"},{"line_number":167,"context_line":"        self.invalidate_revocation_list()"},{"line_number":168,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2FyB4%3D","line":165,"in_reply_to":"AAAAS3%2F%2Fzvk%3D","updated":"2013-09-19 14:47:55.000000000","message":"This has all now been removed in the latest patch","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"73270cffa6bbc5fe44141ba7637d397670834795","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                                      consumer_id\u003dconsumer_id)"},{"line_number":197,"context_line":"        for token in token_list:"},{"line_number":198,"context_line":"            try:"},{"line_number":199,"context_line":"                self.delete_token(token)"},{"line_number":200,"context_line":"            except exception.NotFound:"},{"line_number":201,"context_line":"                msg \u003d (_(\u0027Unable to delete token returned in list for user \u0027"},{"line_number":202,"context_line":"                         \u0027%(user)s, ignoring and continuing. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2Fzuo%3D","line":199,"updated":"2013-09-18 21:37:04.000000000","message":"suggest change token to token_id since that\u0027s what delete_token takes.","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"},{"author":{"_account_id":5707,"name":"Henry Nash","email":"henryn@linux.vnet.ibm.com","username":"henry-nash"},"change_message_id":"53f61d21a1e6d9e0683a91777811c6c36f2c09d3","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                                      consumer_id\u003dconsumer_id)"},{"line_number":197,"context_line":"        for token in token_list:"},{"line_number":198,"context_line":"            try:"},{"line_number":199,"context_line":"                self.delete_token(token)"},{"line_number":200,"context_line":"            except exception.NotFound:"},{"line_number":201,"context_line":"                msg \u003d (_(\u0027Unable to delete token returned in list for user \u0027"},{"line_number":202,"context_line":"                         \u0027%(user)s, ignoring and continuing. \u0027"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAS3%2F%2FyB0%3D","line":199,"in_reply_to":"AAAAS3%2F%2Fzuo%3D","updated":"2013-09-19 14:47:55.000000000","message":"This has all been removed in the latest patch...","commit_id":"a7e3d935e28f57a0e3410bf21d5974b9d5030e35"}]}
