)]}'
{"keystone/tests/unit/core.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"a9f26b2d942b104decfe842305f55779a6507382","unresolved":false,"context_lines":[{"line_number":409,"context_line":""},{"line_number":410,"context_line":"def new_totp_credential(user_id, project_id\u003dNone, blob\u003dNone):"},{"line_number":411,"context_line":"    if not blob:"},{"line_number":412,"context_line":"        blob \u003d base64.b32encode(os.urandom(20)).decode(\u0027utf-8\u0027)"},{"line_number":413,"context_line":"    credential \u003d new_credential_ref(user_id\u003duser_id,"},{"line_number":414,"context_line":"                                    project_id\u003dproject_id,"},{"line_number":415,"context_line":"                                    blob\u003dblob,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_227bacf6","line":412,"range":{"start_line":412,"start_character":32,"end_line":412,"end_character":46},"updated":"2016-05-20 20:34:08.000000000","message":"It\u0027s not obvious what this code does. Please add a comment explaining, eg: # Get a random string with 20 bytes to represent ...\n\nAlso, don\u0027t we need to rstrip(\u0027\u003d\u0027) anymore?","commit_id":"68473b26eea2114fc02e4f29e8f33f0bcb4c0eba"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"609a32b5145e5a9a25ea7865b87a82932fc859d6","unresolved":false,"context_lines":[{"line_number":409,"context_line":""},{"line_number":410,"context_line":"def new_totp_credential(user_id, project_id\u003dNone, blob\u003dNone):"},{"line_number":411,"context_line":"    if not blob:"},{"line_number":412,"context_line":"        blob \u003d base64.b32encode(os.urandom(20)).decode(\u0027utf-8\u0027)"},{"line_number":413,"context_line":"    credential \u003d new_credential_ref(user_id\u003duser_id,"},{"line_number":414,"context_line":"                                    project_id\u003dproject_id,"},{"line_number":415,"context_line":"                                    blob\u003dblob,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_e89185f2","line":412,"range":{"start_line":412,"start_character":32,"end_line":412,"end_character":46},"in_reply_to":"bab6814e_227bacf6","updated":"2016-05-20 21:27:52.000000000","message":"rstrip isn\u0027t needed with proper byte barriers. This is just making it so we don\u0027t need to .encode/decode/encode/decode like 4 times. The alternative was:\n\nuuid.uuid().hex.encode(\u0027utf-8\u0027)).decode(\u0027utf-8\u0027).rstrip(\u0027\u003d\u0027).encode(\u0027utf-8\u0027)","commit_id":"68473b26eea2114fc02e4f29e8f33f0bcb4c0eba"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"62d7e229fceab9222a66714ee4e32df578311c89","unresolved":false,"context_lines":[{"line_number":409,"context_line":""},{"line_number":410,"context_line":"def new_totp_credential(user_id, project_id\u003dNone, blob\u003dNone):"},{"line_number":411,"context_line":"    if not blob:"},{"line_number":412,"context_line":"        blob \u003d base64.b32encode(os.urandom(20)).decode(\u0027utf-8\u0027)"},{"line_number":413,"context_line":"    credential \u003d new_credential_ref(user_id\u003duser_id,"},{"line_number":414,"context_line":"                                    project_id\u003dproject_id,"},{"line_number":415,"context_line":"                                    blob\u003dblob,"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_032dca94","line":412,"range":{"start_line":412,"start_character":32,"end_line":412,"end_character":46},"in_reply_to":"bab6814e_e89185f2","updated":"2016-05-20 21:32:12.000000000","message":"https://review.openstack.org/319462","commit_id":"68473b26eea2114fc02e4f29e8f33f0bcb4c0eba"}],"keystone/tests/unit/test_v3_auth.py":[{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"a9f26b2d942b104decfe842305f55779a6507382","unresolved":false,"context_lines":[{"line_number":203,"context_line":"    def assertTimestampEqual(self, expected, value):"},{"line_number":204,"context_line":"        # Compare two timestamps but ignore the microseconds part"},{"line_number":205,"context_line":"        # of the expected timestamp. Keystone does not track microseconds and"},{"line_number":206,"context_line":"        # is working to eliminate microseconds from it\u0027s datetimes used."},{"line_number":207,"context_line":"        expected \u003d timeutils.parse_isotime(expected).replace(microsecond\u003d0)"},{"line_number":208,"context_line":"        value \u003d timeutils.parse_isotime(value).replace(microsecond\u003d0)"},{"line_number":209,"context_line":"        self.assertEqual("}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_e291a4f2","line":206,"range":{"start_line":206,"start_character":52,"end_line":206,"end_character":56},"updated":"2016-05-20 20:34:08.000000000","message":"(nit) s/it\u0027s/its ?","commit_id":"68473b26eea2114fc02e4f29e8f33f0bcb4c0eba"},{"author":{"_account_id":17860,"name":"Samuel de Medeiros Queiroz","email":"samueldmq@gmail.com","username":"samueldmq"},"change_message_id":"a9f26b2d942b104decfe842305f55779a6507382","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        self.assertEqual("},{"line_number":210,"context_line":"            expected,"},{"line_number":211,"context_line":"            value,"},{"line_number":212,"context_line":"            \"%s !\u003d %s\" % (expected, value))"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def test_validate_unscoped_token(self):"},{"line_number":215,"context_line":"        unscoped_token \u003d self._get_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_423eb0da","line":212,"range":{"start_line":212,"start_character":12,"end_line":212,"end_character":42},"updated":"2016-05-20 20:34:08.000000000","message":"Isn\u0027t the default message something like this already?","commit_id":"68473b26eea2114fc02e4f29e8f33f0bcb4c0eba"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"609a32b5145e5a9a25ea7865b87a82932fc859d6","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        self.assertEqual("},{"line_number":210,"context_line":"            expected,"},{"line_number":211,"context_line":"            value,"},{"line_number":212,"context_line":"            \"%s !\u003d %s\" % (expected, value))"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def test_validate_unscoped_token(self):"},{"line_number":215,"context_line":"        unscoped_token \u003d self._get_unscoped_token()"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_48b9b178","line":212,"range":{"start_line":212,"start_character":12,"end_line":212,"end_character":42},"in_reply_to":"bab6814e_423eb0da","updated":"2016-05-20 21:27:52.000000000","message":"I think it ends up something different.","commit_id":"68473b26eea2114fc02e4f29e8f33f0bcb4c0eba"}]}
