)]}'
{"keystone/token/provider.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9c39113023c550e67fe2d9077342ef1b52d450f8","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def _create_token(self, token_id, token_data):"},{"line_number":148,"context_line":"        try:"},{"line_number":149,"context_line":"            if isinstance(token_data[\u0027expires\u0027], six.string_types):"},{"line_number":150,"context_line":"                token_data[\u0027expires\u0027] \u003d timeutils.normalize_time("},{"line_number":151,"context_line":"                    timeutils.parse_isotime(token_data[\u0027expires\u0027]))"},{"line_number":152,"context_line":"            self.persistence.create_token(token_id, token_data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_0a1b6780","line":149,"updated":"2014-08-03 22:57:15.000000000","message":"Aren\u0027t the callers passing the correct token data? A comment why this needs to be done would help.","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f93861a9d34be026b788a2f303b5952d079b17a9","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def _create_token(self, token_id, token_data):"},{"line_number":148,"context_line":"        try:"},{"line_number":149,"context_line":"            if isinstance(token_data[\u0027expires\u0027], six.string_types):"},{"line_number":150,"context_line":"                token_data[\u0027expires\u0027] \u003d timeutils.normalize_time("},{"line_number":151,"context_line":"                    timeutils.parse_isotime(token_data[\u0027expires\u0027]))"},{"line_number":152,"context_line":"            self.persistence.create_token(token_id, token_data)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_321b24cc","line":149,"in_reply_to":"baada198_0a1b6780","updated":"2014-08-04 15:46:08.000000000","message":"This is being lifted up from the provider manager. I was making an effort to keep the code as close to the original (most cases no functional changes) to ensure I was not introducing changed behavior:\n\nhttps://review.openstack.org/#/c/109041/6/keystone/token/providers/common.py line 358 (old)","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"926002c9ded660e9a54a6e00fbf1f3b5c21b28b9","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        except Exception:"},{"line_number":154,"context_line":"            exc_info \u003d sys.exc_info()"},{"line_number":155,"context_line":"            # an identical token may have been created already."},{"line_number":156,"context_line":"            # if so, return the token_data as it is also identical"},{"line_number":157,"context_line":"            try:"},{"line_number":158,"context_line":"                self.persistence.get_token(token_id)"},{"line_number":159,"context_line":"            except exception.TokenNotFound:"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_d625750a","line":156,"updated":"2014-07-28 15:28:40.000000000","message":"If*","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9c39113023c550e67fe2d9077342ef1b52d450f8","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        except Exception:"},{"line_number":154,"context_line":"            exc_info \u003d sys.exc_info()"},{"line_number":155,"context_line":"            # an identical token may have been created already."},{"line_number":156,"context_line":"            # if so, return the token_data as it is also identical"},{"line_number":157,"context_line":"            try:"},{"line_number":158,"context_line":"                self.persistence.get_token(token_id)"},{"line_number":159,"context_line":"            except exception.TokenNotFound:"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_aa535b38","line":156,"in_reply_to":"baada198_715ba522","updated":"2014-08-03 22:57:15.000000000","message":"Are you going to remove it then? Is this a WIP?","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f93861a9d34be026b788a2f303b5952d079b17a9","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        except Exception:"},{"line_number":154,"context_line":"            exc_info \u003d sys.exc_info()"},{"line_number":155,"context_line":"            # an identical token may have been created already."},{"line_number":156,"context_line":"            # if so, return the token_data as it is also identical"},{"line_number":157,"context_line":"            try:"},{"line_number":158,"context_line":"                self.persistence.get_token(token_id)"},{"line_number":159,"context_line":"            except exception.TokenNotFound:"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_d28108c3","line":156,"in_reply_to":"baada198_aa535b38","updated":"2014-08-04 15:46:08.000000000","message":"Same as above comment","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"9874135efc96cd48d5b349df364e0bddd8b867cc","unresolved":false,"context_lines":[{"line_number":153,"context_line":"        except Exception:"},{"line_number":154,"context_line":"            exc_info \u003d sys.exc_info()"},{"line_number":155,"context_line":"            # an identical token may have been created already."},{"line_number":156,"context_line":"            # if so, return the token_data as it is also identical"},{"line_number":157,"context_line":"            try:"},{"line_number":158,"context_line":"                self.persistence.get_token(token_id)"},{"line_number":159,"context_line":"            except exception.TokenNotFound:"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_715ba522","line":156,"in_reply_to":"baada198_d625750a","updated":"2014-07-29 15:04:44.000000000","message":"This code likely should *go away*","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9c39113023c550e67fe2d9077342ef1b52d450f8","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        # NOTE(morganfainberg): Ensure we never use the long-form token_id"},{"line_number":212,"context_line":"        # (PKI) as part of the cache_key."},{"line_number":213,"context_line":"        try:"},{"line_number":214,"context_line":"            token_ref \u003d self.persistence.get_token(unique_id)"},{"line_number":215,"context_line":"        except (exception.ValidationError, exception.UserNotFound):"},{"line_number":216,"context_line":"            raise exception.TokenNotFound(token_id\u003dtoken_id)"},{"line_number":217,"context_line":"        token \u003d self._validate_v3_token(token_ref)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_199bc717","line":214,"updated":"2014-08-03 22:57:15.000000000","message":"in validate_v2_token() above, self.persistence.get_token(unique_id) is called but it\u0027s not wrapped in try/catch... why does it need to be wrapped in try/catch here but not in validate_v2_token?","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f93861a9d34be026b788a2f303b5952d079b17a9","unresolved":false,"context_lines":[{"line_number":211,"context_line":"        # NOTE(morganfainberg): Ensure we never use the long-form token_id"},{"line_number":212,"context_line":"        # (PKI) as part of the cache_key."},{"line_number":213,"context_line":"        try:"},{"line_number":214,"context_line":"            token_ref \u003d self.persistence.get_token(unique_id)"},{"line_number":215,"context_line":"        except (exception.ValidationError, exception.UserNotFound):"},{"line_number":216,"context_line":"            raise exception.TokenNotFound(token_id\u003dtoken_id)"},{"line_number":217,"context_line":"        token \u003d self._validate_v3_token(token_ref)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_12d540b6","line":214,"in_reply_to":"baada198_199bc717","updated":"2014-08-04 15:46:08.000000000","message":"Same as above comment:\n\nhttps://review.openstack.org/#/c/109041/6/keystone/token/providers/common.py Line 613","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9c39113023c550e67fe2d9077342ef1b52d450f8","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                expires_at \u003d token_ref[\u0027expires\u0027]"},{"line_number":395,"context_line":"            elif version \u003d\u003d self.V2:"},{"line_number":396,"context_line":"                user_id \u003d token_ref[\u0027user_id\u0027]"},{"line_number":397,"context_line":"                expires_at \u003d token_ref[\u0027expires\u0027]"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"            if user_id is not None and expires_at is not None:"},{"line_number":400,"context_line":"                self.revoke_api.revoke_by_expiration(user_id, expires_at)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_85a928df","line":397,"updated":"2014-08-03 22:57:15.000000000","message":"This is incorrect and it\u0027s a bug, see https://review.openstack.org/#/c/109389/15/keystone/token/providers/common.py","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f93861a9d34be026b788a2f303b5952d079b17a9","unresolved":false,"context_lines":[{"line_number":394,"context_line":"                expires_at \u003d token_ref[\u0027expires\u0027]"},{"line_number":395,"context_line":"            elif version \u003d\u003d self.V2:"},{"line_number":396,"context_line":"                user_id \u003d token_ref[\u0027user_id\u0027]"},{"line_number":397,"context_line":"                expires_at \u003d token_ref[\u0027expires\u0027]"},{"line_number":398,"context_line":""},{"line_number":399,"context_line":"            if user_id is not None and expires_at is not None:"},{"line_number":400,"context_line":"                self.revoke_api.revoke_by_expiration(user_id, expires_at)"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_52f25869","line":397,"in_reply_to":"baada198_85a928df","updated":"2014-08-04 15:46:08.000000000","message":"Same as above comment. However, this one will be corrected in the next patchset.","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"9c39113023c550e67fe2d9077342ef1b52d450f8","unresolved":false,"context_lines":[{"line_number":438,"context_line":"    @abc.abstractmethod"},{"line_number":439,"context_line":"    def issue_v3_token(self, user_id, method_names, expires_at\u003dNone,"},{"line_number":440,"context_line":"                       project_id\u003dNone, domain_id\u003dNone, auth_context\u003dNone,"},{"line_number":441,"context_line":"                       trust\u003dNone, metadata_ref\u003dNone, include_catalog\u003dTrue):"},{"line_number":442,"context_line":"        \"\"\"Issue a V3 Token."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        :param user_id: identity of the user"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_c5afa0de","line":441,"updated":"2014-08-03 22:57:15.000000000","message":"why is this changing?","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"f93861a9d34be026b788a2f303b5952d079b17a9","unresolved":false,"context_lines":[{"line_number":438,"context_line":"    @abc.abstractmethod"},{"line_number":439,"context_line":"    def issue_v3_token(self, user_id, method_names, expires_at\u003dNone,"},{"line_number":440,"context_line":"                       project_id\u003dNone, domain_id\u003dNone, auth_context\u003dNone,"},{"line_number":441,"context_line":"                       trust\u003dNone, metadata_ref\u003dNone, include_catalog\u003dTrue):"},{"line_number":442,"context_line":"        \"\"\"Issue a V3 Token."},{"line_number":443,"context_line":""},{"line_number":444,"context_line":"        :param user_id: identity of the user"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_52ba58ba","line":441,"in_reply_to":"baada198_c5afa0de","updated":"2014-08-04 15:46:08.000000000","message":"This was a bug. It was actually missing here but the underlying implementations supported it / used it.","commit_id":"c0211c4c42def27372520469034738082c2ac39e"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"002ee2d0b12bc13e2dc8c5276eb9f95ee41c905b","unresolved":false,"context_lines":[{"line_number":38,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":39,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027token\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"UnsupportedTokenVersionException \u003d exception.UnsupportedTokenVersionException"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# NOTE(blk-u): The config options are not available at import time."},{"line_number":44,"context_line":"EXPIRATION_TIME \u003d lambda: CONF.token.cache_time"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_f4307c57","line":41,"updated":"2014-08-05 23:58:48.000000000","message":"this isn\u0027t used as far as I can tell.","commit_id":"d313b238d5eace8a89b9b3cdce0de4039e4c76e3"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"86d387f62acfaef636efb2383fd2e207d6d95de9","unresolved":false,"context_lines":[{"line_number":38,"context_line":"LOG \u003d log.getLogger(__name__)"},{"line_number":39,"context_line":"SHOULD_CACHE \u003d cache.should_cache_fn(\u0027token\u0027)"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"UnsupportedTokenVersionException \u003d exception.UnsupportedTokenVersionException"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"# NOTE(blk-u): The config options are not available at import time."},{"line_number":44,"context_line":"EXPIRATION_TIME \u003d lambda: CONF.token.cache_time"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_d7637a17","line":41,"in_reply_to":"baada198_f4307c57","updated":"2014-08-06 00:42:51.000000000","message":"I\u0027ll add a note, it is for compatibility in case someone is looking for it in the previous location, since it\u0027s being moved.","commit_id":"d313b238d5eace8a89b9b3cdce0de4039e4c76e3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"002ee2d0b12bc13e2dc8c5276eb9f95ee41c905b","unresolved":false,"context_lines":[{"line_number":406,"context_line":"                expires_at \u003d token_ref[\u0027expires\u0027]"},{"line_number":407,"context_line":"                project_id \u003d (token_ref.get(\u0027tenant\u0027) or {}).get(\u0027id\u0027)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"            if user_id is not None and expires_at is not None:"},{"line_number":410,"context_line":"                self.revoke_api.revoke_by_expiration(user_id, expires_at,"},{"line_number":411,"context_line":"                                                     project_id\u003dproject_id,"},{"line_number":412,"context_line":"                                                     domain_id\u003ddomain_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_7449ccb7","line":409,"updated":"2014-08-05 23:58:48.000000000","message":"how would the user_id or expires_at be None? if this was the case the token would be invalid and we should be raising an exception.","commit_id":"d313b238d5eace8a89b9b3cdce0de4039e4c76e3"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"86d387f62acfaef636efb2383fd2e207d6d95de9","unresolved":false,"context_lines":[{"line_number":406,"context_line":"                expires_at \u003d token_ref[\u0027expires\u0027]"},{"line_number":407,"context_line":"                project_id \u003d (token_ref.get(\u0027tenant\u0027) or {}).get(\u0027id\u0027)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"            if user_id is not None and expires_at is not None:"},{"line_number":410,"context_line":"                self.revoke_api.revoke_by_expiration(user_id, expires_at,"},{"line_number":411,"context_line":"                                                     project_id\u003dproject_id,"},{"line_number":412,"context_line":"                                                     domain_id\u003ddomain_id)"}],"source_content_type":"text/x-python","patch_set":8,"id":"baada198_b7452674","line":409,"in_reply_to":"baada198_7449ccb7","updated":"2014-08-06 00:42:51.000000000","message":"Should it raise an exception? This is in the revocation code... in theory previously we wouldn\u0027t have raised an exception (pre revocation events), and still added the token_id to the revocation list.\n\nI\u0027ll get an else in here raising an appropriate exception next patch.","commit_id":"d313b238d5eace8a89b9b3cdce0de4039e4c76e3"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"afa824e5ad5d051963de7d2d76ab361d02e9adf6","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# NOTE(morganfainberg): This is for compatibility in case someone was relying"},{"line_number":42,"context_line":"# on the old location of the UnsupportedTokenVersionException for their code."},{"line_number":43,"context_line":"UnsupportedTokenVersionException \u003d exception.UnsupportedTokenVersionException"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# NOTE(blk-u): The config options are not available at import time."},{"line_number":46,"context_line":"EXPIRATION_TIME \u003d lambda: CONF.token.cache_time"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_7db8a878","line":43,"updated":"2014-08-06 22:36:34.000000000","message":"The original code doesn\u0027t have UnsupportedTokenVersionException here.","commit_id":"4a60fbdce16d78b4360e1a3353dcad35faa18204"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"54a1aa597e397f9a4525d8fc925ac415bb811b01","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# NOTE(morganfainberg): This is for compatibility in case someone was relying"},{"line_number":42,"context_line":"# on the old location of the UnsupportedTokenVersionException for their code."},{"line_number":43,"context_line":"UnsupportedTokenVersionException \u003d exception.UnsupportedTokenVersionException"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"# NOTE(blk-u): The config options are not available at import time."},{"line_number":46,"context_line":"EXPIRATION_TIME \u003d lambda: CONF.token.cache_time"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_e06c0f0a","line":43,"in_reply_to":"baada198_7db8a878","updated":"2014-08-06 23:21:39.000000000","message":"Ah this was something that was moved in a previous patch, the alias here was added back in at this point, sorry. I can split this into a separate patch if desired:\n\nMoved here (earlier in the chain):\nhttps://review.openstack.org/#/c/106917/10/keystone/exception.py\nhttps://review.openstack.org/#/c/106917/10/keystone/token/provider.py","commit_id":"4a60fbdce16d78b4360e1a3353dcad35faa18204"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"abdae92c46294deed1569a992f09a480127096f5","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                                                     project_id\u003dproject_id,"},{"line_number":414,"context_line":"                                                     domain_id\u003ddomain_id)"},{"line_number":415,"context_line":"            else:"},{"line_number":416,"context_line":"                raise exception.ValidationError("},{"line_number":417,"context_line":"                    attributes\u003d\u0027\"user_id\" and \"expires\"\u0027,"},{"line_number":418,"context_line":"                    target\u003dtoken_ref)"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_dd59b48e","line":416,"updated":"2014-08-06 22:32:49.000000000","message":"The server returns a 400 Bad Request for this exception, but there\u0027s no way that this could actually be caused by the client sending a bad token ID, so this will be confusing for the user. This should be an UnexpectedError.","commit_id":"4a60fbdce16d78b4360e1a3353dcad35faa18204"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"8d63f7363fd72a2589d14e259d2689a0e92d0811","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                                                     project_id\u003dproject_id,"},{"line_number":414,"context_line":"                                                     domain_id\u003ddomain_id)"},{"line_number":415,"context_line":"            else:"},{"line_number":416,"context_line":"                raise exception.ValidationError("},{"line_number":417,"context_line":"                    attributes\u003d\u0027\"user_id\" and \"expires\"\u0027,"},{"line_number":418,"context_line":"                    target\u003dtoken_ref)"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_db537c14","line":416,"in_reply_to":"baada198_80b8b379","updated":"2014-08-06 23:26:46.000000000","message":"Sorry, not keyerror attribute error or name error. It doesn\u0027t make a lot of difference same net effect, it should end up a 500","commit_id":"4a60fbdce16d78b4360e1a3353dcad35faa18204"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"54a1aa597e397f9a4525d8fc925ac415bb811b01","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                                                     project_id\u003dproject_id,"},{"line_number":414,"context_line":"                                                     domain_id\u003ddomain_id)"},{"line_number":415,"context_line":"            else:"},{"line_number":416,"context_line":"                raise exception.ValidationError("},{"line_number":417,"context_line":"                    attributes\u003d\u0027\"user_id\" and \"expires\"\u0027,"},{"line_number":418,"context_line":"                    target\u003dtoken_ref)"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_80b8b379","line":416,"in_reply_to":"baada198_9d949ce8","updated":"2014-08-06 23:21:39.000000000","message":"I\u0027ll just let this raise a keyerror then. I remember there was a reason I had to add this at one point in the patch chain but a ton of stuff has changed out from under this patchset requiring rebasing.","commit_id":"4a60fbdce16d78b4360e1a3353dcad35faa18204"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"afa824e5ad5d051963de7d2d76ab361d02e9adf6","unresolved":false,"context_lines":[{"line_number":413,"context_line":"                                                     project_id\u003dproject_id,"},{"line_number":414,"context_line":"                                                     domain_id\u003ddomain_id)"},{"line_number":415,"context_line":"            else:"},{"line_number":416,"context_line":"                raise exception.ValidationError("},{"line_number":417,"context_line":"                    attributes\u003d\u0027\"user_id\" and \"expires\"\u0027,"},{"line_number":418,"context_line":"                    target\u003dtoken_ref)"},{"line_number":419,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_9d949ce8","line":416,"in_reply_to":"baada198_dd59b48e","updated":"2014-08-06 22:36:34.000000000","message":"Also, if this code wasn\u0027t changed from how revoke_token was written originally in keystone/token/providers/common.py, I\u0027d have no complaints, since that\u0027s what I thought this commit was supposed to be doing (just moving code around, not rewriting it).","commit_id":"4a60fbdce16d78b4360e1a3353dcad35faa18204"}]}
