)]}'
{"keystone/tests/unit/token/test_fernet_provider.py":[{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5cfa675dc8a31e54b52e7d49b4fa3c1deeb995af","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        msgpack_payload \u003d msgpack.packb(payload)"},{"line_number":238,"context_line":"        # msgpack_payload is bytes."},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        tf \u003d token_formatters.TokenFormatter()"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        # NOTE(lbragstad): This method perserves the way that keystone used to"},{"line_number":243,"context_line":"        # percent encode the tokens, prior to bug #1491926."}],"source_content_type":"text/x-python","patch_set":3,"id":"5a2ca52d_2b30df00","line":240,"updated":"2015-10-14 17:53:37.000000000","message":"++","commit_id":"2f4bbf4b7ea5e26a6b87124d1a0477b78930468d"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"5cfa675dc8a31e54b52e7d49b4fa3c1deeb995af","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            # encrypted_payload is bytes."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            # the encrypted_payload is returned with padding appended"},{"line_number":250,"context_line":"            self.assertEqual(b\u0027\u003d\u0027, encrypted_payload[-1:])"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"            # using urllib.parse.quote will percent encode the padding, like"},{"line_number":253,"context_line":"            # keystone did in Kilo."}],"source_content_type":"text/x-python","patch_set":3,"id":"5a2ca52d_8e36e1e5","line":250,"updated":"2015-10-14 17:53:37.000000000","message":"is the slice necessary? lol","commit_id":"2f4bbf4b7ea5e26a6b87124d1a0477b78930468d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"51dd1d24024133576fbdc0bab3d9fc7a7754f0ba","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            # encrypted_payload is bytes."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            # the encrypted_payload is returned with padding appended"},{"line_number":250,"context_line":"            self.assertEqual(b\u0027\u003d\u0027, encrypted_payload[-1:])"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"            # using urllib.parse.quote will percent encode the padding, like"},{"line_number":253,"context_line":"            # keystone did in Kilo."}],"source_content_type":"text/x-python","patch_set":3,"id":"5a2ca52d_d15a3e2a","line":250,"in_reply_to":"5a2ca52d_8e36e1e5","updated":"2015-10-14 18:34:56.000000000","message":"Done","commit_id":"2f4bbf4b7ea5e26a6b87124d1a0477b78930468d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"d6184c96b116d299365d768e99dd8abe4ec2a855","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            # encrypted_payload is bytes."},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"            # the encrypted_payload is returned with padding appended"},{"line_number":250,"context_line":"            self.assertEqual(b\u0027\u003d\u0027, encrypted_payload[-1:])"},{"line_number":251,"context_line":""},{"line_number":252,"context_line":"            # using urllib.parse.quote will percent encode the padding, like"},{"line_number":253,"context_line":"            # keystone did in Kilo."}],"source_content_type":"text/x-python","patch_set":3,"id":"5a2ca52d_8e1ca114","line":250,"in_reply_to":"5a2ca52d_8e36e1e5","updated":"2015-10-14 18:02:16.000000000","message":"Maybe I was reading the error wrong...\n\n \u003e\u003e\u003e (b\u0027abc\u003d\u0027).endswith(\u0027\u003d\u0027)\n Traceback (most recent call last):\n   File \"\u003cstdin\u003e\", line 1, in \u003cmodule\u003e\n TypeError: endswith first arg must be bytes or a tuple of bytes, not str\n \u003e\u003e\u003e (b\u0027abc\u003d\u0027).endswith(b\u0027\u003d\u0027)\n\nSo maybe I could switch to b\u0027\u003d\u0027 instead.\n\nI think the output of assertEqual would be more useful since it would show what the values are...","commit_id":"2f4bbf4b7ea5e26a6b87124d1a0477b78930468d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"48d9a3082575a08c8637da3a80a0aeca3fa050c5","unresolved":false,"context_lines":[{"line_number":254,"context_line":"            percent_encoded_payload \u003d urllib.parse.quote(encrypted_payload)"},{"line_number":255,"context_line":"            # percent_encoded_payload is six.text_type."},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"            # ensure that the padding was actually percent encoded"},{"line_number":258,"context_line":"            self.assertTrue(percent_encoded_payload.endswith(\u0027%3D\u0027))"},{"line_number":259,"context_line":"            return percent_encoded_payload"},{"line_number":260,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"3a29b11f_9e04a4c0","line":257,"updated":"2015-10-20 21:24:31.000000000","message":"thanks :)","commit_id":"49fccd78041dd56ec344faf0e62c5990a230f31c"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"261fa2b33c9e9165b9fd2bbfc63e8c1916a5f321","unresolved":false,"context_lines":[{"line_number":268,"context_line":"        returned_payload \u003d msgpack.unpackb(serialized_payload)"},{"line_number":269,"context_line":"        # returned_payload contains six.binary_type."},{"line_number":270,"context_line":"        self.assertEqual(first_value, returned_payload[0].decode(\u0027utf-8\u0027))"},{"line_number":271,"context_line":"        self.assertEqual(second_value, returned_payload[1].decode(\u0027utf-8\u0027))"},{"line_number":272,"context_line":""},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"class TestPayloads(unit.TestCase):"}],"source_content_type":"text/x-python","patch_set":15,"id":"fa69d971_9a27ceb5","line":271,"updated":"2016-01-04 15:23:01.000000000","message":"This should not require decoding. This specific test change resulted in https://bugs.launchpad.net/keystone/+bug/1528981","commit_id":"df35726b409ede7a77c1d0527d367a29db3ae8d5"}],"keystone/tests/unit/token/test_provider.py":[{"author":{"_account_id":16523,"name":"ZhangLei","display_name":"ZhangLei","email":"zhang.lei@99cloud.net","username":"zhang.lei"},"change_message_id":"b4fa67362a75d1481267cde0548e95dd00f95c2e","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_strings_can_be_converted_to_bytes(self):"},{"line_number":26,"context_line":"        s \u003d provider.random_urlsafe_str()"},{"line_number":27,"context_line":"        self.assertIsInstance(s, six.string_types)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        b \u003d provider.random_urlsafe_str_to_bytes(s)"},{"line_number":30,"context_line":"        self.assertIsInstance(b, bytes)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_572343a7","line":27,"updated":"2015-10-08 08:40:43.000000000","message":"self.assertIsInstance(obj, cls, msg\u003dNone) is same as self.assertTrue(isinstance(obj, cls))\ni don\u0027t understand why do you want to do this change.","commit_id":"4cc7afe26ff502c9aa1cb73027738cdf8d962230"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"fd81e255f1b7354ce66c15cfb386fb7b311294f0","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_strings_can_be_converted_to_bytes(self):"},{"line_number":26,"context_line":"        s \u003d provider.random_urlsafe_str()"},{"line_number":27,"context_line":"        self.assertIsInstance(s, six.string_types)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        b \u003d provider.random_urlsafe_str_to_bytes(s)"},{"line_number":30,"context_line":"        self.assertIsInstance(b, bytes)"}],"source_content_type":"text/x-python","patch_set":2,"id":"7a2fa921_6fcf7829","line":27,"in_reply_to":"7a2fa921_572343a7","updated":"2015-10-08 13:30:15.000000000","message":"The message when the test fails is different so it\u0027s not the same. The message is more useful for assertIsInstance.","commit_id":"4cc7afe26ff502c9aa1cb73027738cdf8d962230"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"875168efe94257bd310a8c5e7f21a8f47c2a8dd3","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"    def test_strings_can_be_converted_to_bytes(self):"},{"line_number":26,"context_line":"        s \u003d provider.random_urlsafe_str()"},{"line_number":27,"context_line":"        self.assertIsInstance(s, six.string_types)"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"        b \u003d provider.random_urlsafe_str_to_bytes(s)"},{"line_number":30,"context_line":"        self.assertIsInstance(b, bytes)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5a2ca52d_2e4c6d6f","line":27,"in_reply_to":"7a2fa921_6fcf7829","updated":"2015-10-14 17:53:46.000000000","message":"this is a terrible reason to leave a -1","commit_id":"4cc7afe26ff502c9aa1cb73027738cdf8d962230"}],"keystone/token/provider.py":[{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"297ea844bab4e56aace31cbeff8453b3b69dcee0","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    s \u003d str(s)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    # restore the padding (\u003d\u003d) at the end of the string"},{"line_number":86,"context_line":"    return base64.urlsafe_b64decode(s + \u0027\u003d\u003d\u0027)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def default_expire_time():"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a2fa921_4f59d18d","line":86,"updated":"2015-10-12 20:29:46.000000000","message":"not sure if this belongs in this commit or not, but this should probably determine the padding the same as restore_padding does.","commit_id":"2f4bbf4b7ea5e26a6b87124d1a0477b78930468d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"81ce370d7bb21693cb4738d0d998d0755c2ca262","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    s \u003d str(s)"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    # restore the padding (\u003d\u003d) at the end of the string"},{"line_number":86,"context_line":"    return base64.urlsafe_b64decode(s + \u0027\u003d\u003d\u0027)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"def default_expire_time():"}],"source_content_type":"text/x-python","patch_set":3,"id":"5a2ca52d_d138fe3f","line":86,"in_reply_to":"7a2fa921_4f59d18d","updated":"2015-10-14 18:35:46.000000000","message":"what\u0027s restore_padding?","commit_id":"2f4bbf4b7ea5e26a6b87124d1a0477b78930468d"}]}
