)]}'
{"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f79ad6b090340a7f65194d6096d682dcddd36dbc","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        # just need to make sure the non fraction part agrees"},{"line_number":264,"context_line":"        self.assertIn(v2_token_data[\u0027access\u0027][\u0027token\u0027][\u0027expires\u0027][:-1],"},{"line_number":265,"context_line":"                      v3_token_data[\u0027token\u0027][\u0027expires_at\u0027])"},{"line_number":266,"context_line":"        self.assertEqual(v2_token_data[\u0027access\u0027][\u0027user\u0027][\u0027roles\u0027][0][\u0027name\u0027],"},{"line_number":267,"context_line":"                         v3_token_data[\u0027token\u0027][\u0027roles\u0027][0][\u0027name\u0027])"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def test_v2_v3_unscoped_token_intermix(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_20de76dd","line":266,"updated":"2015-08-05 18:14:30.000000000","message":"unrelated","commit_id":"87f0ac81af3b8ec1a1243446a72a39d54f07d2ac"}],"keystone/token/providers/fernet/core.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"1c879131bbf04b00b72d0747162223b9b6259923","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        # layer because Fernet cannot persist non-integer timestamps. Both the"},{"line_number":207,"context_line":"        # creation timestamp and expiration timestamp are based on an integer"},{"line_number":208,"context_line":"        # timestamp in the Fernet spec itself (outside of the message payload),"},{"line_number":209,"context_line":"        # plus an integer TTL (inside the message payload) to compute the"},{"line_number":210,"context_line":"        # expiration."},{"line_number":211,"context_line":"        MICROSECONDS \u003d \u0027.000000Z\u0027"},{"line_number":212,"context_line":"        v3_token_data[\u0027token\u0027][\u0027expires_at\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_f3540bcb","line":209,"updated":"2015-07-31 21:27:54.000000000","message":"is it the TTL or is it just the integer representation of the expiration? I don\u0027t think we calculate the expiration based on that integer, I think we just convert it back into a timestamp.\n\nhttps://github.com/openstack/keystone/blob/4ff9e969a8a211213a3f550273e9fead16e3d29c/keystone/token/providers/fernet/token_formatters.py#L353","commit_id":"cef556db07edcaf67298404171a715f662e430b6"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"9b24f4ba1ee62fad3627d613cdbdeddf0da95861","unresolved":false,"context_lines":[{"line_number":206,"context_line":"        # layer because Fernet cannot persist non-integer timestamps. Both the"},{"line_number":207,"context_line":"        # creation timestamp and expiration timestamp are based on an integer"},{"line_number":208,"context_line":"        # timestamp in the Fernet spec itself (outside of the message payload),"},{"line_number":209,"context_line":"        # plus an integer TTL (inside the message payload) to compute the"},{"line_number":210,"context_line":"        # expiration."},{"line_number":211,"context_line":"        MICROSECONDS \u003d \u0027.000000Z\u0027"},{"line_number":212,"context_line":"        v3_token_data[\u0027token\u0027][\u0027expires_at\u0027] \u003d ("}],"source_content_type":"text/x-python","patch_set":2,"id":"3a50d1a3_c9012206","line":209,"in_reply_to":"3a50d1a3_f3540bcb","updated":"2015-07-31 22:20:30.000000000","message":"oh, that\u0027s right. the TTL implementation took almost as much space as a standard timestamp.","commit_id":"cef556db07edcaf67298404171a715f662e430b6"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f79ad6b090340a7f65194d6096d682dcddd36dbc","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        # method written for V3 because it goes through and populates the token"},{"line_number":75,"context_line":"        # reference dynamically. Once we have a V3 token reference, we can"},{"line_number":76,"context_line":"        # attempt to convert it to a V2 token response."},{"line_number":77,"context_line":"        v3_token_data \u003d self.v3_token_data_helper.get_token_data("},{"line_number":78,"context_line":"            user_id,"},{"line_number":79,"context_line":"            method_names,"},{"line_number":80,"context_line":"            project_id\u003dproject_id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_a04cc69e","line":77,"updated":"2015-08-05 18:14:30.000000000","message":"why doesn\u0027t get_token_data do this? (e.g., add a parameter to truncate)","commit_id":"87f0ac81af3b8ec1a1243446a72a39d54f07d2ac"},{"author":{"_account_id":13478,"name":"Boris Bobrov","email":"b.bobrov@sap.com","username":"bbobrov"},"change_message_id":"94255041930ffd7104b3c23bd6d806da97617ee4","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        # timestamps. The creation timestamp is outside of the message payload"},{"line_number":209,"context_line":"        # (and a part of the Fernet spec itself), and the expiration is a part"},{"line_number":210,"context_line":"        # of the message payload."},{"line_number":211,"context_line":"        MICROSECONDS \u003d \u0027.000000Z\u0027"},{"line_number":212,"context_line":"        v3_token_data[\u0027token\u0027][\u0027expires_at\u0027] \u003d ("},{"line_number":213,"context_line":"            v3_token_data[\u0027token\u0027][\u0027expires_at\u0027][:-len(MICROSECONDS)] +"},{"line_number":214,"context_line":"            MICROSECONDS)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_725c70ed","line":211,"updated":"2015-08-05 09:49:29.000000000","message":"I dislike handling datetime as strings. This should be converted to a proper datetime or timestamp and then truncated.","commit_id":"87f0ac81af3b8ec1a1243446a72a39d54f07d2ac"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"e53b37498b646ccb6ec83881f6fd0c9c3726d062","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        # timestamps. The creation timestamp is outside of the message payload"},{"line_number":209,"context_line":"        # (and a part of the Fernet spec itself), and the expiration is a part"},{"line_number":210,"context_line":"        # of the message payload."},{"line_number":211,"context_line":"        MICROSECONDS \u003d \u0027.000000Z\u0027"},{"line_number":212,"context_line":"        v3_token_data[\u0027token\u0027][\u0027expires_at\u0027] \u003d ("},{"line_number":213,"context_line":"            v3_token_data[\u0027token\u0027][\u0027expires_at\u0027][:-len(MICROSECONDS)] +"},{"line_number":214,"context_line":"            MICROSECONDS)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_9d07b1c9","line":211,"in_reply_to":"1a4dcd0f_725c70ed","updated":"2015-08-05 17:41:09.000000000","message":"I agree, but that\u0027s a much larger problem in keystone today. Datetimes are passed as strings nearly everywhere.","commit_id":"87f0ac81af3b8ec1a1243446a72a39d54f07d2ac"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f79ad6b090340a7f65194d6096d682dcddd36dbc","unresolved":false,"context_lines":[{"line_number":214,"context_line":"            MICROSECONDS)"},{"line_number":215,"context_line":"        v3_token_data[\u0027token\u0027][\u0027issued_at\u0027] \u003d ("},{"line_number":216,"context_line":"            v3_token_data[\u0027token\u0027][\u0027issued_at\u0027][:-len(MICROSECONDS)] +"},{"line_number":217,"context_line":"            MICROSECONDS)"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"    def _get_token_id(self, token_data):"},{"line_number":220,"context_line":"        \"\"\"Generate the token_id based upon the data in token_data."}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_002b3a95","line":217,"updated":"2015-08-05 18:14:30.000000000","message":"suggest provide a function rather than copy-pasting.","commit_id":"87f0ac81af3b8ec1a1243446a72a39d54f07d2ac"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"f79ad6b090340a7f65194d6096d682dcddd36dbc","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        :type token_data: dict"},{"line_number":224,"context_line":"        :raises keystone.exception.NotImplemented: when called"},{"line_number":225,"context_line":"        \"\"\""},{"line_number":226,"context_line":"        self._truncate_timestamps(token_data)"},{"line_number":227,"context_line":"        return self.token_formatter.create_token("},{"line_number":228,"context_line":"            token_data[\u0027token\u0027][\u0027user\u0027][\u0027id\u0027],"},{"line_number":229,"context_line":"            token_data[\u0027token\u0027][\u0027expires_at\u0027],"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a4dcd0f_606b1ef2","line":226,"updated":"2015-08-05 18:14:30.000000000","message":"this is going to mutate the input value which makes the code much more difficult to reason about. It would be safer to make a copy or have the caller do the self._truncate_timestamps first.","commit_id":"87f0ac81af3b8ec1a1243446a72a39d54f07d2ac"}]}
