)]}'
{"horizon/exceptions.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"4f058be3c0a28fdd71472498fd8e83eb0b0684b6","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"def appenddetail(message, details):"},{"line_number":264,"context_line":"    return str(message) + \u0027...\u0027 + str(details)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def handle(request, message\u003dNone, redirect\u003dNone, ignore\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_67248ec7","line":264,"updated":"2020-02-25 12:14:20.000000000","message":"I was thinking about using the unicode … and not three characters ...","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"6ee1e4dc8dd0e2d69bb84e36fa4c139a6ed7956a","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"def appenddetail(message, details):"},{"line_number":264,"context_line":"    return str(message) + \u0027...\u0027 + str(details)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def handle(request, message\u003dNone, redirect\u003dNone, ignore\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_2e4df971","line":264,"in_reply_to":"1fa4df85_67248ec7","updated":"2020-02-26 13:19:00.000000000","message":"Done.\nthanks","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"b5ab7e3807ae7475e4f3a79653549a3c58015ec6","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"def appenddetail(message, details):"},{"line_number":264,"context_line":"    return str(message) + \u0027...\u0027 + str(details)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def handle(request, message\u003dNone, redirect\u003dNone, ignore\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_ffce4db2","line":264,"in_reply_to":"1fa4df85_67248ec7","updated":"2020-03-04 01:53:57.000000000","message":"Now I am using Unicode for this.","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"4f058be3c0a28fdd71472498fd8e83eb0b0684b6","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    class indicating the type of exception that was encountered will be"},{"line_number":294,"context_line":"    returned."},{"line_number":295,"context_line":"    \"\"\""},{"line_number":296,"context_line":"    message \u003d appenddetail(message, details)"},{"line_number":297,"context_line":"    exc_type, exc_value, exc_traceback \u003d sys.exc_info()"},{"line_number":298,"context_line":"    log_method \u003d getattr(LOG, log_level or \"exception\")"},{"line_number":299,"context_line":"    force_log \u003d force_log or os.environ.get(\"HORIZON_TEST_RUN\", False)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_4756322c","line":296,"updated":"2020-02-25 12:14:20.000000000","message":"You want to do this later on, after all the changes to message on line 323","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"45d30097915440d3616b7d72636d1c5daa0f2e87","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    class indicating the type of exception that was encountered will be"},{"line_number":294,"context_line":"    returned."},{"line_number":295,"context_line":"    \"\"\""},{"line_number":296,"context_line":"    message \u003d appenddetail(message, details)"},{"line_number":297,"context_line":"    exc_type, exc_value, exc_traceback \u003d sys.exc_info()"},{"line_number":298,"context_line":"    log_method \u003d getattr(LOG, log_level or \"exception\")"},{"line_number":299,"context_line":"    force_log \u003d force_log or os.environ.get(\"HORIZON_TEST_RUN\", False)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_629ea564","line":296,"in_reply_to":"1fa4df85_2e7659a6","updated":"2020-02-26 14:23:53.000000000","message":"Two reasons. First of all, you want to do the split() only when … is present in the message string in the first place, otherwise there is no details to show. Second, you want to do this with user_message, not message, because that is what is getting passed to the error handling functions.","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"b5ab7e3807ae7475e4f3a79653549a3c58015ec6","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    class indicating the type of exception that was encountered will be"},{"line_number":294,"context_line":"    returned."},{"line_number":295,"context_line":"    \"\"\""},{"line_number":296,"context_line":"    message \u003d appenddetail(message, details)"},{"line_number":297,"context_line":"    exc_type, exc_value, exc_traceback \u003d sys.exc_info()"},{"line_number":298,"context_line":"    log_method \u003d getattr(LOG, log_level or \"exception\")"},{"line_number":299,"context_line":"    force_log \u003d force_log or os.environ.get(\"HORIZON_TEST_RUN\", False)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_df3ef189","line":296,"in_reply_to":"1fa4df85_4756322c","updated":"2020-03-04 01:53:57.000000000","message":"Done.","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"6ee1e4dc8dd0e2d69bb84e36fa4c139a6ed7956a","unresolved":false,"context_lines":[{"line_number":293,"context_line":"    class indicating the type of exception that was encountered will be"},{"line_number":294,"context_line":"    returned."},{"line_number":295,"context_line":"    \"\"\""},{"line_number":296,"context_line":"    message \u003d appenddetail(message, details)"},{"line_number":297,"context_line":"    exc_type, exc_value, exc_traceback \u003d sys.exc_info()"},{"line_number":298,"context_line":"    log_method \u003d getattr(LOG, log_level or \"exception\")"},{"line_number":299,"context_line":"    force_log \u003d force_log or os.environ.get(\"HORIZON_TEST_RUN\", False)"}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_2e7659a6","line":296,"in_reply_to":"1fa4df85_4756322c","updated":"2020-02-26 13:19:00.000000000","message":"If I call this after 323 line then href collapse stop working.\nI am looking into it why?","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"4f058be3c0a28fdd71472498fd8e83eb0b0684b6","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            ret \u003d handler(request, user_message, redirect, ignore,"},{"line_number":331,"context_line":"                          exc_handler.get(\u0027escalate\u0027, escalate),"},{"line_number":332,"context_line":"                          handled, force_silence, force_log,"},{"line_number":333,"context_line":"                          log_method, log_entry, log_level, details\u003ddetails)"},{"line_number":334,"context_line":"            if ret:"},{"line_number":335,"context_line":"                return ret  # return to normal code flow"},{"line_number":336,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_0736fa04","line":333,"updated":"2020-02-25 12:14:20.000000000","message":"no point in passing details here anymore, if it\u0027s included in the message already","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"6ee1e4dc8dd0e2d69bb84e36fa4c139a6ed7956a","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            ret \u003d handler(request, user_message, redirect, ignore,"},{"line_number":331,"context_line":"                          exc_handler.get(\u0027escalate\u0027, escalate),"},{"line_number":332,"context_line":"                          handled, force_silence, force_log,"},{"line_number":333,"context_line":"                          log_method, log_entry, log_level, details\u003ddetails)"},{"line_number":334,"context_line":"            if ret:"},{"line_number":335,"context_line":"                return ret  # return to normal code flow"},{"line_number":336,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_ae69e9be","line":333,"in_reply_to":"1fa4df85_0736fa04","updated":"2020-02-26 13:19:00.000000000","message":"Right now If I am removing this then there is no error is raised:(.","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"b5ab7e3807ae7475e4f3a79653549a3c58015ec6","unresolved":false,"context_lines":[{"line_number":330,"context_line":"            ret \u003d handler(request, user_message, redirect, ignore,"},{"line_number":331,"context_line":"                          exc_handler.get(\u0027escalate\u0027, escalate),"},{"line_number":332,"context_line":"                          handled, force_silence, force_log,"},{"line_number":333,"context_line":"                          log_method, log_entry, log_level, details\u003ddetails)"},{"line_number":334,"context_line":"            if ret:"},{"line_number":335,"context_line":"                return ret  # return to normal code flow"},{"line_number":336,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"1fa4df85_9f4cf942","line":333,"in_reply_to":"1fa4df85_0736fa04","updated":"2020-03-04 01:53:57.000000000","message":"removed.","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"971699030ac34556d8144e3d916c6fb172d7d2eb","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"def handle_unauthorized(request, message, redirect, ignore, escalate, handled,"},{"line_number":210,"context_line":"                        force_silence, force_log,"},{"line_number":211,"context_line":"                        log_method, log_entry, log_level, details\u003d\u0027\u0027):"},{"line_number":212,"context_line":"    if ignore:"},{"line_number":213,"context_line":"        return NotAuthorized"},{"line_number":214,"context_line":"    if not force_silence and not handled:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4c43b2_c32025b4","line":211,"range":{"start_line":211,"start_character":66,"end_line":211,"end_character":68},"updated":"2020-04-13 04:07:10.000000000","message":"IMHO None is preferred.","commit_id":"7dc7a875156879720ab301f11f0b9ac447d5df40"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"971699030ac34556d8144e3d916c6fb172d7d2eb","unresolved":false,"context_lines":[{"line_number":260,"context_line":"]"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"def appenddetail(message, details):"},{"line_number":264,"context_line":"    return str(message) + u\u0027\\u2026\u0027 + str(details)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4c43b2_e323a1bd","line":263,"range":{"start_line":263,"start_character":4,"end_line":263,"end_character":16},"updated":"2020-04-13 04:07:10.000000000","message":"Our convention of the function name is to use an underscore as a delimiter. In addition, it is a private func so it is better to start with an underscore.","commit_id":"7dc7a875156879720ab301f11f0b9ac447d5df40"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"971699030ac34556d8144e3d916c6fb172d7d2eb","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"def appenddetail(message, details):"},{"line_number":264,"context_line":"    return str(message) + u\u0027\\u2026\u0027 + str(details)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def handle(request, message\u003dNone, redirect\u003dNone, ignore\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4c43b2_66bddf67","line":264,"range":{"start_line":264,"start_character":26,"end_line":264,"end_character":35},"updated":"2020-04-13 04:07:10.000000000","message":"In python3, a string is a unicode string, so \u0027u\u0027 prefix is unnecessary.","commit_id":"7dc7a875156879720ab301f11f0b9ac447d5df40"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6336b8bc15264878f7ffba746b6d62be9c0c467d","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"def handle_unauthorized(request, message, redirect, ignore, escalate, handled,"},{"line_number":210,"context_line":"                        force_silence, force_log,"},{"line_number":211,"context_line":"                        log_method, log_entry, log_level, details\u003d\u0027None\u0027):"},{"line_number":212,"context_line":"    if ignore:"},{"line_number":213,"context_line":"        return NotAuthorized"},{"line_number":214,"context_line":"    if not force_silence and not handled:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f4c43b2_4dc27eeb","line":211,"range":{"start_line":211,"start_character":66,"end_line":211,"end_character":72},"updated":"2020-04-13 12:28:30.000000000","message":"not \u0027None\u0027 but None","commit_id":"573132a8f11409670cf48bbe205a3a126989fab7"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"3262e76017d02566a74abc1dd04184583c4c9043","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        user_message \u003d encoding.force_text(message) % {\"exc\": log_entry}"},{"line_number":321,"context_line":"    elif message:"},{"line_number":322,"context_line":"        user_message \u003d encoding.force_text(message)"},{"line_number":323,"context_line":"    if details is None:"},{"line_number":324,"context_line":"        user_message \u003d _append_detail(user_message, exc_value)"},{"line_number":325,"context_line":"    elif len(details) \u003e 0:"},{"line_number":326,"context_line":"        user_message \u003d _append_detail(user_message, details)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    for exc_handler in HANDLE_EXC_METHODS:"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f560f44_7e84e9b1","line":325,"range":{"start_line":323,"start_character":4,"end_line":325,"end_character":26},"updated":"2020-07-30 20:14:30.000000000","message":"It makes \u0027details\u0027 argument usage not obvious. Please, add docstring with a param description.","commit_id":"98b5944193a5cd3765a6b353a7792dcf3e6c47f2"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"00cc06efd239cc8a3b7710415cae54b8b9f299aa","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        user_message \u003d encoding.force_text(message) % {\"exc\": log_entry}"},{"line_number":321,"context_line":"    elif message:"},{"line_number":322,"context_line":"        user_message \u003d encoding.force_text(message)"},{"line_number":323,"context_line":"    if details is None:"},{"line_number":324,"context_line":"        user_message \u003d _append_detail(user_message, exc_value)"},{"line_number":325,"context_line":"    elif len(details) \u003e 0:"},{"line_number":326,"context_line":"        user_message \u003d _append_detail(user_message, details)"},{"line_number":327,"context_line":""},{"line_number":328,"context_line":"    for exc_handler in HANDLE_EXC_METHODS:"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f560f44_47583531","line":325,"range":{"start_line":323,"start_character":4,"end_line":325,"end_character":26},"in_reply_to":"9f560f44_7e84e9b1","updated":"2020-07-31 09:31:03.000000000","message":"Done.","commit_id":"98b5944193a5cd3765a6b353a7792dcf3e6c47f2"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4287e2ff8c650cb4859e2600fab6e7fafb00e9e2","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"def handle_unauthorized(request, message, redirect, ignore, escalate, handled,"},{"line_number":210,"context_line":"                        force_silence, force_log,"},{"line_number":211,"context_line":"                        log_method, log_entry, log_level, details\u003dNone):"},{"line_number":212,"context_line":"    if ignore:"},{"line_number":213,"context_line":"        return NotAuthorized"},{"line_number":214,"context_line":"    if not force_silence and not handled:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_40645b22","line":211,"range":{"start_line":211,"start_character":57,"end_line":211,"end_character":70},"updated":"2020-08-05 08:25:58.000000000","message":"Please, remove unused argument","commit_id":"ee3bf10a66403c9410dd8357ac27bbdd4bc6ce3d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4287e2ff8c650cb4859e2600fab6e7fafb00e9e2","unresolved":false,"context_lines":[{"line_number":226,"context_line":""},{"line_number":227,"context_line":"def handle_notfound(request, message, redirect, ignore, escalate, handled,"},{"line_number":228,"context_line":"                    force_silence, force_log,"},{"line_number":229,"context_line":"                    log_method, log_entry, log_level, details\u003dNone):"},{"line_number":230,"context_line":"    if not force_silence and not handled and (not ignore or force_log):"},{"line_number":231,"context_line":"        log_method(error_color(\"Not Found: %s\" % log_entry))"},{"line_number":232,"context_line":"    if not ignore and not handled:"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_606fdffb","line":229,"range":{"start_line":229,"start_character":54,"end_line":229,"end_character":61},"updated":"2020-08-05 08:25:58.000000000","message":"Please, remove unused argument","commit_id":"ee3bf10a66403c9410dd8357ac27bbdd4bc6ce3d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4287e2ff8c650cb4859e2600fab6e7fafb00e9e2","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"def handle_recoverable(request, message, redirect, ignore, escalate, handled,"},{"line_number":241,"context_line":"                       force_silence, force_log,"},{"line_number":242,"context_line":"                       log_method, log_entry, log_level, details\u003dNone):"},{"line_number":243,"context_line":"    if not force_silence and not handled and (not ignore or force_log):"},{"line_number":244,"context_line":"        # Default recoverable error to WARN log level"},{"line_number":245,"context_line":"        log_method \u003d getattr(LOG, log_level or \"warning\")"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_c077cbd3","line":242,"range":{"start_line":242,"start_character":57,"end_line":242,"end_character":64},"updated":"2020-08-05 08:25:58.000000000","message":"Please, remove unused argument","commit_id":"ee3bf10a66403c9410dd8357ac27bbdd4bc6ce3d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4287e2ff8c650cb4859e2600fab6e7fafb00e9e2","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        user_message \u003d encoding.force_text(message) % {\"exc\": log_entry}"},{"line_number":321,"context_line":"    elif message:"},{"line_number":322,"context_line":"        user_message \u003d encoding.force_text(message)"},{"line_number":323,"context_line":"    # If details is None (default), take it from exception sys.exc_info."},{"line_number":324,"context_line":"    if details is None:"},{"line_number":325,"context_line":"        user_message \u003d _append_detail(user_message, exc_value)"},{"line_number":326,"context_line":"    # If details is other string, use that string explicitly or if details"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_007ee3ad","line":323,"range":{"start_line":323,"start_character":4,"end_line":323,"end_character":72},"updated":"2020-08-05 08:25:58.000000000","message":"Please, add how this works into the docstring","commit_id":"ee3bf10a66403c9410dd8357ac27bbdd4bc6ce3d"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"a8ecf588277d0cfb7d8636e4e5a557408e9bf11d","unresolved":false,"context_lines":[{"line_number":320,"context_line":"        user_message \u003d encoding.force_text(message) % {\"exc\": log_entry}"},{"line_number":321,"context_line":"    elif message:"},{"line_number":322,"context_line":"        user_message \u003d encoding.force_text(message)"},{"line_number":323,"context_line":"    # If details is None (default), take it from exception sys.exc_info."},{"line_number":324,"context_line":"    if details is None:"},{"line_number":325,"context_line":"        user_message \u003d _append_detail(user_message, exc_value)"},{"line_number":326,"context_line":"    # If details is other string, use that string explicitly or if details"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_f6f0d593","line":323,"range":{"start_line":323,"start_character":4,"end_line":323,"end_character":72},"in_reply_to":"9f560f44_007ee3ad","updated":"2020-08-05 10:05:36.000000000","message":"What do you mean could you elaborate? I have already added\nwhat details parameter do.","commit_id":"ee3bf10a66403c9410dd8357ac27bbdd4bc6ce3d"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4287e2ff8c650cb4859e2600fab6e7fafb00e9e2","unresolved":false,"context_lines":[{"line_number":350,"context_line":"        ret \u003d handle_recoverable(request, user_message, redirect, ignore,"},{"line_number":351,"context_line":"                                 escalate, handled, force_silence, force_log,"},{"line_number":352,"context_line":"                                 log_method, log_entry, log_level,"},{"line_number":353,"context_line":"                                 details\u003ddetails)"},{"line_number":354,"context_line":"        # pylint: disable\u003dusing-constant-test"},{"line_number":355,"context_line":"        if ret:"},{"line_number":356,"context_line":"            return ret"}],"source_content_type":"text/x-python","patch_set":19,"id":"9f560f44_8043136c","line":353,"range":{"start_line":353,"start_character":33,"end_line":353,"end_character":40},"updated":"2020-08-05 08:25:58.000000000","message":"It\u0027s not used in \u0027handle_recoverable\u0027 function","commit_id":"ee3bf10a66403c9410dd8357ac27bbdd4bc6ce3d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3614fd7bcfcd9681d1f932ebe8482f900cc02429","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"def _append_detail(message, details):"},{"line_number":264,"context_line":"    return str(message) + \u0027\\u2026\u0027 + str(details)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def handle(request, message\u003dNone, redirect\u003dNone, ignore\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_a95bf284","line":264,"range":{"start_line":264,"start_character":11,"end_line":264,"end_character":15},"updated":"2020-08-18 17:17:01.000000000","message":"for consistency, encoding.force_text() looks better than str().","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"f16b896a0b273cf0900e1353a645d57f10bc81b7","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"def _append_detail(message, details):"},{"line_number":264,"context_line":"    return str(message) + \u0027\\u2026\u0027 + str(details)"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"def handle(request, message\u003dNone, redirect\u003dNone, ignore\u003dFalse,"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_f8ebe40e","line":264,"range":{"start_line":264,"start_character":11,"end_line":264,"end_character":15},"in_reply_to":"9f560f44_a95bf284","updated":"2020-08-20 17:08:07.000000000","message":"Done.","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3614fd7bcfcd9681d1f932ebe8482f900cc02429","unresolved":false,"context_lines":[{"line_number":325,"context_line":"        user_message \u003d _append_detail(user_message, exc_value)"},{"line_number":326,"context_line":"    # If details is other string, use that string explicitly or if details"},{"line_number":327,"context_line":"    # is \"\" then suppress it."},{"line_number":328,"context_line":"    elif len(details) \u003e 0:"},{"line_number":329,"context_line":"        user_message \u003d _append_detail(user_message, details)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    for exc_handler in HANDLE_EXC_METHODS:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_69fefa05","line":328,"range":{"start_line":328,"start_character":4,"end_line":328,"end_character":26},"updated":"2020-08-18 17:17:01.000000000","message":"nit: In Python we usually do like:\n\n  elif details:","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"f16b896a0b273cf0900e1353a645d57f10bc81b7","unresolved":false,"context_lines":[{"line_number":325,"context_line":"        user_message \u003d _append_detail(user_message, exc_value)"},{"line_number":326,"context_line":"    # If details is other string, use that string explicitly or if details"},{"line_number":327,"context_line":"    # is \"\" then suppress it."},{"line_number":328,"context_line":"    elif len(details) \u003e 0:"},{"line_number":329,"context_line":"        user_message \u003d _append_detail(user_message, details)"},{"line_number":330,"context_line":""},{"line_number":331,"context_line":"    for exc_handler in HANDLE_EXC_METHODS:"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_536d7730","line":328,"range":{"start_line":328,"start_character":4,"end_line":328,"end_character":26},"in_reply_to":"9f560f44_69fefa05","updated":"2020-08-20 17:08:07.000000000","message":"Done.\nthanks.","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"519a00096aea2d422258fe61537e727b287b5733","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        user_message \u003d encoding.force_text(message) % {\"exc\": log_entry}"},{"line_number":322,"context_line":"    elif message:"},{"line_number":323,"context_line":"        user_message \u003d encoding.force_text(message)"},{"line_number":324,"context_line":"    \"\"\" If details is None (default), take it from exception sys.exc_info."},{"line_number":325,"context_line":"    If details is other string, then use that string explicitly or if details"},{"line_number":326,"context_line":"    is empty then suppress it.\"\"\""},{"line_number":327,"context_line":"    if details is None:"},{"line_number":328,"context_line":"        user_message \u003d _append_detail(user_message, exc_value)"},{"line_number":329,"context_line":"    elif details:"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_b7e73fac","line":326,"range":{"start_line":324,"start_character":4,"end_line":326,"end_character":33},"updated":"2020-08-26 18:45:26.000000000","message":"Could you move this to the function docstring? \u0027details\u0027 is the argument of the function. It is an interface, so it should be documented in the function docstring.","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"9c96f15b329445bdf5e036a29201dbc3bdfec781","unresolved":false,"context_lines":[{"line_number":321,"context_line":"        user_message \u003d encoding.force_text(message) % {\"exc\": log_entry}"},{"line_number":322,"context_line":"    elif message:"},{"line_number":323,"context_line":"        user_message \u003d encoding.force_text(message)"},{"line_number":324,"context_line":"    \"\"\" If details is None (default), take it from exception sys.exc_info."},{"line_number":325,"context_line":"    If details is other string, then use that string explicitly or if details"},{"line_number":326,"context_line":"    is empty then suppress it.\"\"\""},{"line_number":327,"context_line":"    if details is None:"},{"line_number":328,"context_line":"        user_message \u003d _append_detail(user_message, exc_value)"},{"line_number":329,"context_line":"    elif details:"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_6b112905","line":326,"range":{"start_line":324,"start_character":4,"end_line":326,"end_character":33},"in_reply_to":"9f560f44_b7e73fac","updated":"2020-08-28 13:17:28.000000000","message":"Done","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"}],"horizon/middleware/base.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"949617f63e3d7c48717daf73d515b137bf83ca28","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        if request.is_ajax() and hasattr(request, \u0027horizon\u0027):"},{"line_number":171,"context_line":"            queued_msgs \u003d request.horizon[\u0027async_messages\u0027]"},{"line_number":172,"context_line":"            if queued_msgs:"},{"line_number":173,"context_line":"                import pdb;pdb.set_trace()"},{"line_number":174,"context_line":"            if type(response) \u003d\u003d http.HttpResponseRedirect:"},{"line_number":175,"context_line":"                # Drop our messages back into the session as per usual so they"},{"line_number":176,"context_line":"                # don\u0027t disappear during the redirect. Not that we explicitly"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9a16afa1","line":173,"updated":"2020-02-19 14:08:33.000000000","message":"oops","commit_id":"6d05c1cf430e2d51ece48c57f033a71facc239bc"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"949617f63e3d7c48717daf73d515b137bf83ca28","unresolved":false,"context_lines":[{"line_number":181,"context_line":"                                       details\u003ddetails)"},{"line_number":182,"context_line":"                    else:"},{"line_number":183,"context_line":"                        getattr(django_messages, tag)(request, message,"},{"line_number":184,"context_line":"                                                      extra_tags, details)"},{"line_number":185,"context_line":"                if response[\u0027location\u0027].startswith(settings.LOGOUT_URL):"},{"line_number":186,"context_line":"                    redirect_response \u003d http.HttpResponse(status\u003d401)"},{"line_number":187,"context_line":"                    # This header is used for handling the logout in JS"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa7e38b_9af22f69","line":184,"updated":"2020-02-19 14:08:33.000000000","message":"this should probably be using django_messages.add_message(request, django_messages.constants.DEFAULT_LEVELS[tag.upper()], message, extra_tags) and the \"message\" would combine both the message and details, separated by some special character","commit_id":"6d05c1cf430e2d51ece48c57f033a71facc239bc"}],"horizon/static/horizon/js/horizon.messages.js":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"4f058be3c0a28fdd71472498fd8e83eb0b0684b6","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"horizon.alert \u003d function (type, message, extra_tags, details) {"},{"line_number":16,"context_line":"  var safe \u003d false;"},{"line_number":17,"context_line":"  var [message, details] \u003d message.split(\u0027...\u0027)"},{"line_number":18,"context_line":"  // Check if the message is tagged as safe."},{"line_number":19,"context_line":"  if (typeof(extra_tags) !\u003d\u003d \"undefined\" \u0026\u0026 $.inArray(\u0027safe\u0027, extra_tags.split(\u0027 \u0027)) !\u003d\u003d -1) {"},{"line_number":20,"context_line":"    safe \u003d true;"}],"source_content_type":"text/javascript","patch_set":3,"id":"1fa4df85_472b9293","line":17,"updated":"2020-02-25 12:14:20.000000000","message":"you probably want this in a separate function, in case it gets more complicated later (when we add escaping)","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"6ee1e4dc8dd0e2d69bb84e36fa4c139a6ed7956a","unresolved":false,"context_lines":[{"line_number":14,"context_line":""},{"line_number":15,"context_line":"horizon.alert \u003d function (type, message, extra_tags, details) {"},{"line_number":16,"context_line":"  var safe \u003d false;"},{"line_number":17,"context_line":"  var [message, details] \u003d message.split(\u0027...\u0027)"},{"line_number":18,"context_line":"  // Check if the message is tagged as safe."},{"line_number":19,"context_line":"  if (typeof(extra_tags) !\u003d\u003d \"undefined\" \u0026\u0026 $.inArray(\u0027safe\u0027, extra_tags.split(\u0027 \u0027)) !\u003d\u003d -1) {"},{"line_number":20,"context_line":"    safe \u003d true;"}],"source_content_type":"text/javascript","patch_set":3,"id":"1fa4df85_4e52b515","line":17,"in_reply_to":"1fa4df85_472b9293","updated":"2020-02-26 13:19:00.000000000","message":"Done.\nThanks","commit_id":"f7f71efc0e3e73accba425ff32c97c7636ac22b6"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"971699030ac34556d8144e3d916c6fb172d7d2eb","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    type \u003d \u0027danger\u0027;"},{"line_number":36,"context_line":"  }"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  function UnicodeSplit(str) {"},{"line_number":39,"context_line":"    for (var i \u003d 0, n \u003d str.length; i \u003c n; i++) {"},{"line_number":40,"context_line":"        if (str.charCodeAt( i ) \u003e 255) { return i; }"},{"line_number":41,"context_line":"    }"}],"source_content_type":"text/javascript","patch_set":8,"id":"3f4c43b2_a6b7e786","line":38,"range":{"start_line":38,"start_character":11,"end_line":38,"end_character":23},"updated":"2020-04-13 04:07:10.000000000","message":"the function name should follow the naming convention \"unicodeSplit\"","commit_id":"7dc7a875156879720ab301f11f0b9ac447d5df40"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"971699030ac34556d8144e3d916c6fb172d7d2eb","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"  function UnicodeSplit(str) {"},{"line_number":39,"context_line":"    for (var i \u003d 0, n \u003d str.length; i \u003c n; i++) {"},{"line_number":40,"context_line":"        if (str.charCodeAt( i ) \u003e 255) { return i; }"},{"line_number":41,"context_line":"    }"},{"line_number":42,"context_line":"    return str.length;"},{"line_number":43,"context_line":"  }"}],"source_content_type":"text/javascript","patch_set":8,"id":"3f4c43b2_46c263eb","line":40,"range":{"start_line":40,"start_character":12,"end_line":40,"end_character":37},"updated":"2020-04-13 04:07:10.000000000","message":"Why do you consider all unicode character as a delimiter? Don\u0027t we need to check \u0027\\u2026\u0027 explicitly?","commit_id":"7dc7a875156879720ab301f11f0b9ac447d5df40"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"971699030ac34556d8144e3d916c6fb172d7d2eb","unresolved":false,"context_lines":[{"line_number":42,"context_line":"    return str.length;"},{"line_number":43,"context_line":"  }"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"  function extractdetail(str) {"},{"line_number":46,"context_line":"    var i \u003d UnicodeSplit(str);"},{"line_number":47,"context_line":"    return [str.substring(0, i), str.substring(i+1)];"},{"line_number":48,"context_line":"  }"}],"source_content_type":"text/javascript","patch_set":8,"id":"3f4c43b2_86bc6b6a","line":45,"range":{"start_line":45,"start_character":11,"end_line":45,"end_character":24},"updated":"2020-04-13 04:07:10.000000000","message":"per the naming convention in JS, \"extractDetail\"","commit_id":"7dc7a875156879720ab301f11f0b9ac447d5df40"}],"horizon/templates/horizon/_messages.html":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"487829b51052849a40d90cdcd8f5f04b8853ae15","unresolved":false,"context_lines":[{"line_number":23,"context_line":"      \u003ca class\u003d\"close\" data-dismiss\u003d\"alert\" href\u003d\"#\"\u003e"},{"line_number":24,"context_line":"        \u003cspan class\u003d\"fa fa-times\"\u003e\u003c/span\u003e"},{"line_number":25,"context_line":"      \u003c/a\u003e"},{"line_number":26,"context_line":"      \u003cp\u003e\u003cstrong\u003e{% trans \"Success: \" %}\u003c/strong\u003e{{ message }}\u003c/p\u003e"},{"line_number":27,"context_line":"    \u003c/div\u003e"},{"line_number":28,"context_line":"  {% endif %}"},{"line_number":29,"context_line":"  {% if \"error\" in message.tags %}"}],"source_content_type":"text/html","patch_set":11,"id":"bf51134e_bb56bd28","line":26,"updated":"2020-06-17 10:40:29.000000000","message":"We need to add here something like (copy-pasted and adopted from [1]):\n     \u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e\n      \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e\n           {{ details }}\n      \u003c/div\u003e\n\n\ninside  \u003cdiv class\u003d\"alert alert-success alert-dismissable fade in\"\u003e.\n\nI prefer to add this to some new template e.g. _message_details.html.\n\nSince it\u0027s a django-generated template with django message, we need to create this [2] logic like a custom template tag or some logic in a template to provide \u0027details\u0027 variable.\n\n\n[1] https://review.opendev.org/#/c/708069/11/horizon/templates/horizon/client_side/_alert_message.html@18\n[2] https://review.opendev.org/#/c/708069/11/horizon/static/horizon/js/horizon.messages.js@38","commit_id":"b1dd3f623f4f4a6cdc341155b6429eea90f4b822"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"7825a7e686d8e3b62fb3b57af87fa460c7a71e0f","unresolved":false,"context_lines":[{"line_number":23,"context_line":"      \u003ca class\u003d\"close\" data-dismiss\u003d\"alert\" href\u003d\"#\"\u003e"},{"line_number":24,"context_line":"        \u003cspan class\u003d\"fa fa-times\"\u003e\u003c/span\u003e"},{"line_number":25,"context_line":"      \u003c/a\u003e"},{"line_number":26,"context_line":"      \u003cp\u003e\u003cstrong\u003e{% trans \"Success: \" %}\u003c/strong\u003e{{ message }}\u003c/p\u003e"},{"line_number":27,"context_line":"    \u003c/div\u003e"},{"line_number":28,"context_line":"  {% endif %}"},{"line_number":29,"context_line":"  {% if \"error\" in message.tags %}"}],"source_content_type":"text/html","patch_set":11,"id":"bf51134e_40c4e95f","line":26,"in_reply_to":"bf51134e_bb56bd28","updated":"2020-07-20 05:15:00.000000000","message":"I have added a custom template which fixes the redirect issue. Could you take a look?","commit_id":"b1dd3f623f4f4a6cdc341155b6429eea90f4b822"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5ae44449e45d6249bd7a43945fdddf38e7b6fe7e","unresolved":false,"context_lines":[{"line_number":33,"context_line":"      \u003c/a\u003e"},{"line_number":34,"context_line":"      \u003cp\u003e\u003cstrong\u003e"},{"line_number":35,"context_line":"        {% with message.message|split as messages %}"},{"line_number":36,"context_line":"\t{% trans \"Error: \" %}\u003c/strong\u003e{{ messages|first }}"},{"line_number":37,"context_line":"\t\u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e"},{"line_number":38,"context_line":"        \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e"},{"line_number":39,"context_line":"          {{ messages|last }}"}],"source_content_type":"text/html","patch_set":12,"id":"bf51134e_9a7bf727","line":36,"updated":"2020-07-21 12:05:20.000000000","message":"tab :(","commit_id":"a42614c7949ec063e7f19fe6f9702237073665ea"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"b3eff9964156c855665cf334df7b52010a830227","unresolved":false,"context_lines":[{"line_number":33,"context_line":"      \u003c/a\u003e"},{"line_number":34,"context_line":"      \u003cp\u003e\u003cstrong\u003e"},{"line_number":35,"context_line":"        {% with message.message|split as messages %}"},{"line_number":36,"context_line":"\t{% trans \"Error: \" %}\u003c/strong\u003e{{ messages|first }}"},{"line_number":37,"context_line":"\t\u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e"},{"line_number":38,"context_line":"        \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e"},{"line_number":39,"context_line":"          {{ messages|last }}"}],"source_content_type":"text/html","patch_set":12,"id":"bf51134e_00e018cc","line":36,"in_reply_to":"bf51134e_9a7bf727","updated":"2020-07-21 14:02:17.000000000","message":"removed.","commit_id":"a42614c7949ec063e7f19fe6f9702237073665ea"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5ae44449e45d6249bd7a43945fdddf38e7b6fe7e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"      \u003cp\u003e\u003cstrong\u003e"},{"line_number":35,"context_line":"        {% with message.message|split as messages %}"},{"line_number":36,"context_line":"\t{% trans \"Error: \" %}\u003c/strong\u003e{{ messages|first }}"},{"line_number":37,"context_line":"\t\u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e"},{"line_number":38,"context_line":"        \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e"},{"line_number":39,"context_line":"          {{ messages|last }}"},{"line_number":40,"context_line":"        \u003c/div\u003e"}],"source_content_type":"text/html","patch_set":12,"id":"bf51134e_fa915348","line":37,"range":{"start_line":37,"start_character":10,"end_line":37,"end_character":15},"updated":"2020-07-21 12:05:20.000000000","message":"\"demo\" looks inappropriate. I would like to see more meaningful naem.","commit_id":"a42614c7949ec063e7f19fe6f9702237073665ea"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"b3eff9964156c855665cf334df7b52010a830227","unresolved":false,"context_lines":[{"line_number":34,"context_line":"      \u003cp\u003e\u003cstrong\u003e"},{"line_number":35,"context_line":"        {% with message.message|split as messages %}"},{"line_number":36,"context_line":"\t{% trans \"Error: \" %}\u003c/strong\u003e{{ messages|first }}"},{"line_number":37,"context_line":"\t\u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e"},{"line_number":38,"context_line":"        \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e"},{"line_number":39,"context_line":"          {{ messages|last }}"},{"line_number":40,"context_line":"        \u003c/div\u003e"}],"source_content_type":"text/html","patch_set":12,"id":"bf51134e_40033074","line":37,"range":{"start_line":37,"start_character":10,"end_line":37,"end_character":15},"in_reply_to":"bf51134e_fa915348","updated":"2020-07-21 14:02:17.000000000","message":"I have updated it to \"#message_details\" if you have more better option, please suggest. Also \"details\" sounds good to me.","commit_id":"a42614c7949ec063e7f19fe6f9702237073665ea"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"519a00096aea2d422258fe61537e727b287b5733","unresolved":false,"context_lines":[{"line_number":31,"context_line":"      \u003ca class\u003d\"close\" data-dismiss\u003d\"alert\" href\u003d\"#\"\u003e"},{"line_number":32,"context_line":"        \u003cspan class\u003d\"fa fa-times\"\u003e\u003c/span\u003e"},{"line_number":33,"context_line":"      \u003c/a\u003e"},{"line_number":34,"context_line":"      \u003cp\u003e\u003cstrong\u003e"},{"line_number":35,"context_line":"        {% with message.message|split_message as messages %}"},{"line_number":36,"context_line":"        {% trans \"Error: \" %}\u003c/strong\u003e{{ messages|first }}"},{"line_number":37,"context_line":"          {% if messages|length \u003e 1 %}"}],"source_content_type":"text/html","patch_set":21,"id":"9f560f44_577d03e5","line":34,"range":{"start_line":34,"start_character":9,"end_line":34,"end_character":17},"updated":"2020-08-26 18:45:26.000000000","message":"\"\u003cstrong\u003e\" should be moved to the beginning of L.36. L.35 is not related to \u003cstrong\u003e.","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"9c96f15b329445bdf5e036a29201dbc3bdfec781","unresolved":false,"context_lines":[{"line_number":31,"context_line":"      \u003ca class\u003d\"close\" data-dismiss\u003d\"alert\" href\u003d\"#\"\u003e"},{"line_number":32,"context_line":"        \u003cspan class\u003d\"fa fa-times\"\u003e\u003c/span\u003e"},{"line_number":33,"context_line":"      \u003c/a\u003e"},{"line_number":34,"context_line":"      \u003cp\u003e\u003cstrong\u003e"},{"line_number":35,"context_line":"        {% with message.message|split_message as messages %}"},{"line_number":36,"context_line":"        {% trans \"Error: \" %}\u003c/strong\u003e{{ messages|first }}"},{"line_number":37,"context_line":"          {% if messages|length \u003e 1 %}"}],"source_content_type":"text/html","patch_set":21,"id":"9f560f44_0beeadec","line":34,"range":{"start_line":34,"start_character":9,"end_line":34,"end_character":17},"in_reply_to":"9f560f44_577d03e5","updated":"2020-08-28 13:17:28.000000000","message":"Done.","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"519a00096aea2d422258fe61537e727b287b5733","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            \u003cdiv id\u003d\"message_details\" class\u003d\"collapse\"\u003e"},{"line_number":41,"context_line":"              {{ messages|last }}"},{"line_number":42,"context_line":"          {% endif %}"},{"line_number":43,"context_line":"        \u003c/div\u003e"},{"line_number":44,"context_line":"      \u003c/p\u003e"},{"line_number":45,"context_line":"    \u003c/div\u003e"},{"line_number":46,"context_line":"    {% endwith %}"}],"source_content_type":"text/html","patch_set":21,"id":"9f560f44_b780dfc0","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":14},"updated":"2020-08-26 18:45:26.000000000","message":"\"\u003c/div\u003e\" should be inside of the if clause.","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"9c96f15b329445bdf5e036a29201dbc3bdfec781","unresolved":false,"context_lines":[{"line_number":40,"context_line":"            \u003cdiv id\u003d\"message_details\" class\u003d\"collapse\"\u003e"},{"line_number":41,"context_line":"              {{ messages|last }}"},{"line_number":42,"context_line":"          {% endif %}"},{"line_number":43,"context_line":"        \u003c/div\u003e"},{"line_number":44,"context_line":"      \u003c/p\u003e"},{"line_number":45,"context_line":"    \u003c/div\u003e"},{"line_number":46,"context_line":"    {% endwith %}"}],"source_content_type":"text/html","patch_set":21,"id":"9f560f44_56cfa5b2","line":43,"range":{"start_line":43,"start_character":8,"end_line":43,"end_character":14},"in_reply_to":"9f560f44_b780dfc0","updated":"2020-08-28 13:17:28.000000000","message":"Done","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"}],"horizon/templates/horizon/client_side/_alert_message.html":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"971699030ac34556d8144e3d916c6fb172d7d2eb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"      \u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e"},{"line_number":19,"context_line":"      \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e"},{"line_number":20,"context_line":"      [[details]]"},{"line_number":21,"context_line":"      \u003c/div\u003e"},{"line_number":22,"context_line":"    [[/safe]]"},{"line_number":23,"context_line":"  \u003c/p\u003e"},{"line_number":24,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":8,"id":"3f4c43b2_c6ff9332","line":21,"updated":"2020-04-13 04:07:10.000000000","message":"question: why is this added only to [[^safe]] side? Don\u0027t we need this in [[#safe]] side too?","commit_id":"7dc7a875156879720ab301f11f0b9ac447d5df40"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"ffbd31b9f68c8b8b19d7b24d62328310d172c482","unresolved":false,"context_lines":[{"line_number":18,"context_line":"      \u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e"},{"line_number":19,"context_line":"      \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e"},{"line_number":20,"context_line":"      [[details]]"},{"line_number":21,"context_line":"      \u003c/div\u003e"},{"line_number":22,"context_line":"    [[/safe]]"},{"line_number":23,"context_line":"  \u003c/p\u003e"},{"line_number":24,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":11,"id":"3f4c43b2_1f76cad9","line":21,"updated":"2020-04-14 07:19:27.000000000","message":"same question again:\nwhy is this added only to [[^safe]] side? Don\u0027t we need this in [[#safe]] side too?","commit_id":"b1dd3f623f4f4a6cdc341155b6429eea90f4b822"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"b8780fc5f1885d980305e8723cded9911ed77d7d","unresolved":false,"context_lines":[{"line_number":18,"context_line":"      \u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e"},{"line_number":19,"context_line":"      \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e"},{"line_number":20,"context_line":"      [[details]]"},{"line_number":21,"context_line":"      \u003c/div\u003e"},{"line_number":22,"context_line":"    [[/safe]]"},{"line_number":23,"context_line":"  \u003c/p\u003e"},{"line_number":24,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":11,"id":"3f4c43b2_a6fd0e3c","line":21,"in_reply_to":"3f4c43b2_1f76cad9","updated":"2020-04-14 09:43:34.000000000","message":"ok, I will add it in [[#safe]] as well in the next PS.","commit_id":"b1dd3f623f4f4a6cdc341155b6429eea90f4b822"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"f6cf8f9bfd5d0a662117307d630c61479b55606c","unresolved":false,"context_lines":[{"line_number":18,"context_line":"      \u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e"},{"line_number":19,"context_line":"      \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e"},{"line_number":20,"context_line":"      [[details]]"},{"line_number":21,"context_line":"      \u003c/div\u003e"},{"line_number":22,"context_line":"    [[/safe]]"},{"line_number":23,"context_line":"  \u003c/p\u003e"},{"line_number":24,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":11,"id":"bf51134e_b4a384b1","line":21,"in_reply_to":"3f4c43b2_75cf267f","updated":"2020-07-20 10:21:25.000000000","message":"When I add this only inside[[#safe]] then collapse-able alert box didn\u0027t work.","commit_id":"b1dd3f623f4f4a6cdc341155b6429eea90f4b822"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"0daa5c8291c0237a9919c6fc238a8005f9571fc3","unresolved":false,"context_lines":[{"line_number":18,"context_line":"      \u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e"},{"line_number":19,"context_line":"      \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e"},{"line_number":20,"context_line":"      [[details]]"},{"line_number":21,"context_line":"      \u003c/div\u003e"},{"line_number":22,"context_line":"    [[/safe]]"},{"line_number":23,"context_line":"  \u003c/p\u003e"},{"line_number":24,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":11,"id":"3f4c43b2_75cf267f","line":21,"in_reply_to":"3f4c43b2_a6fd0e3c","updated":"2020-04-14 11:40:26.000000000","message":"Honestly I don\u0027t know which is correct., so I just asked the question","commit_id":"b1dd3f623f4f4a6cdc341155b6429eea90f4b822"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5ae44449e45d6249bd7a43945fdddf38e7b6fe7e","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    [[^safe]]"},{"line_number":17,"context_line":"      [[message]]"},{"line_number":18,"context_line":"      \u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e"},{"line_number":19,"context_line":"      \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e"},{"line_number":20,"context_line":"      [[details]]"},{"line_number":21,"context_line":"      \u003c/div\u003e"},{"line_number":22,"context_line":"    [[/safe]]"}],"source_content_type":"text/html","patch_set":12,"id":"bf51134e_3a9c6b5c","line":19,"updated":"2020-07-21 12:05:20.000000000","message":"\"demo\" looks too adhoc. Could you use more meaningful name?","commit_id":"a42614c7949ec063e7f19fe6f9702237073665ea"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"b3eff9964156c855665cf334df7b52010a830227","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    [[^safe]]"},{"line_number":17,"context_line":"      [[message]]"},{"line_number":18,"context_line":"      \u003ca href\u003d\"#demo\"  data-toggle\u003d\"collapse\" data-target\u003d\"#demo\"\u003eDetails\u003c/a\u003e"},{"line_number":19,"context_line":"      \u003cdiv id\u003d\"demo\" class\u003d\"collapse\"\u003e"},{"line_number":20,"context_line":"      [[details]]"},{"line_number":21,"context_line":"      \u003c/div\u003e"},{"line_number":22,"context_line":"    [[/safe]]"}],"source_content_type":"text/html","patch_set":12,"id":"bf51134e_e0f1a497","line":19,"in_reply_to":"bf51134e_3a9c6b5c","updated":"2020-07-21 14:02:17.000000000","message":"changed it \"message_details\".","commit_id":"a42614c7949ec063e7f19fe6f9702237073665ea"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"519a00096aea2d422258fe61537e727b287b5733","unresolved":false,"context_lines":[{"line_number":18,"context_line":"      \u003ca href\u003d\"#message_details\"  data-toggle\u003d\"collapse\" data-target\u003d\"#message_details\"\u003eDetails\u003c/a\u003e"},{"line_number":19,"context_line":"      \u003cdiv id\u003d\"message_details\" class\u003d\"collapse\"\u003e"},{"line_number":20,"context_line":"      [[details]]"},{"line_number":21,"context_line":"      \u003c/div\u003e"},{"line_number":22,"context_line":"    [[/safe]]"},{"line_number":23,"context_line":"  \u003c/p\u003e"},{"line_number":24,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":21,"id":"9f560f44_b79c5f0e","line":21,"updated":"2020-08-26 18:45:26.000000000","message":"When I passed an empty string to \"details\" of exceptions.handle, I see \"Details\" link. The link should not be shown.","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"11fba2444cbc371310e523b94c488938048b1da1","unresolved":false,"context_lines":[{"line_number":18,"context_line":"      \u003ca href\u003d\"#message_details\"  data-toggle\u003d\"collapse\" data-target\u003d\"#message_details\"\u003eDetails\u003c/a\u003e"},{"line_number":19,"context_line":"      \u003cdiv id\u003d\"message_details\" class\u003d\"collapse\"\u003e"},{"line_number":20,"context_line":"      [[details]]"},{"line_number":21,"context_line":"      \u003c/div\u003e"},{"line_number":22,"context_line":"    [[/safe]]"},{"line_number":23,"context_line":"  \u003c/p\u003e"},{"line_number":24,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":21,"id":"9f560f44_801f3c5a","line":21,"in_reply_to":"9f560f44_1daa856f","updated":"2020-08-28 02:04:47.000000000","message":"if it takes time, you can work on this as a follow-up. If so, please file a bug on this to clarify it. I am okay with either.","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"9c96f15b329445bdf5e036a29201dbc3bdfec781","unresolved":false,"context_lines":[{"line_number":18,"context_line":"      \u003ca href\u003d\"#message_details\"  data-toggle\u003d\"collapse\" data-target\u003d\"#message_details\"\u003eDetails\u003c/a\u003e"},{"line_number":19,"context_line":"      \u003cdiv id\u003d\"message_details\" class\u003d\"collapse\"\u003e"},{"line_number":20,"context_line":"      [[details]]"},{"line_number":21,"context_line":"      \u003c/div\u003e"},{"line_number":22,"context_line":"    [[/safe]]"},{"line_number":23,"context_line":"  \u003c/p\u003e"},{"line_number":24,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":21,"id":"9f560f44_cbccb58c","line":21,"in_reply_to":"9f560f44_801f3c5a","updated":"2020-08-28 13:17:28.000000000","message":"ok I have reported a bug for it https://bugs.launchpad.net/horizon/+bug/1893305","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"3f234d9ce501bd04ed402de178f492406db89cbe","unresolved":false,"context_lines":[{"line_number":18,"context_line":"      \u003ca href\u003d\"#message_details\"  data-toggle\u003d\"collapse\" data-target\u003d\"#message_details\"\u003eDetails\u003c/a\u003e"},{"line_number":19,"context_line":"      \u003cdiv id\u003d\"message_details\" class\u003d\"collapse\"\u003e"},{"line_number":20,"context_line":"      [[details]]"},{"line_number":21,"context_line":"      \u003c/div\u003e"},{"line_number":22,"context_line":"    [[/safe]]"},{"line_number":23,"context_line":"  \u003c/p\u003e"},{"line_number":24,"context_line":"\u003c/div\u003e"}],"source_content_type":"text/html","patch_set":21,"id":"9f560f44_1daa856f","line":21,"in_reply_to":"9f560f44_b79c5f0e","updated":"2020-08-27 05:02:13.000000000","message":"yeah, this patch didn\u0027t handle this case when details are empty and redirect\u003dfalse. I am working on it","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"}],"horizon/templatetags/splitfilter.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5ae44449e45d6249bd7a43945fdddf38e7b6fe7e","unresolved":false,"context_lines":[{"line_number":15,"context_line":"register \u003d template.Library()"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"@register.filter(name\u003d\u0027split\u0027)"},{"line_number":19,"context_line":"def split(value):"},{"line_number":20,"context_line":"    return value.split(\u0027\\u2026\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_dac72f64","line":18,"range":{"start_line":18,"start_character":23,"end_line":18,"end_character":28},"updated":"2020-07-21 12:05:20.000000000","message":"The name looks too generic. Potentially there is a possibility that a filter with the same name is added to Django. It looks better to use more verbose name. Something like \"split_message\", \"split_detail\"?","commit_id":"a42614c7949ec063e7f19fe6f9702237073665ea"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"b3eff9964156c855665cf334df7b52010a830227","unresolved":false,"context_lines":[{"line_number":15,"context_line":"register \u003d template.Library()"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"@register.filter(name\u003d\u0027split\u0027)"},{"line_number":19,"context_line":"def split(value):"},{"line_number":20,"context_line":"    return value.split(\u0027\\u2026\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_a03ccc30","line":18,"range":{"start_line":18,"start_character":23,"end_line":18,"end_character":28},"in_reply_to":"bf51134e_dac72f64","updated":"2020-07-21 14:02:17.000000000","message":"updated it to \"split_message\".","commit_id":"a42614c7949ec063e7f19fe6f9702237073665ea"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"3262e76017d02566a74abc1dd04184583c4c9043","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"@register.filter(name\u003d\u0027split_message\u0027)"},{"line_number":19,"context_line":"def split(value):"},{"line_number":20,"context_line":"    return value.split(\u0027\\u2026\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f560f44_1e64cd21","line":19,"range":{"start_line":19,"start_character":4,"end_line":19,"end_character":9},"updated":"2020-07-30 20:14:30.000000000","message":"It would be good to change a function name for consistency too","commit_id":"98b5944193a5cd3765a6b353a7792dcf3e6c47f2"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"00cc06efd239cc8a3b7710415cae54b8b9f299aa","unresolved":false,"context_lines":[{"line_number":16,"context_line":""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"@register.filter(name\u003d\u0027split_message\u0027)"},{"line_number":19,"context_line":"def split(value):"},{"line_number":20,"context_line":"    return value.split(\u0027\\u2026\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f560f44_a49aef6a","line":19,"range":{"start_line":19,"start_character":4,"end_line":19,"end_character":9},"in_reply_to":"9f560f44_1e64cd21","updated":"2020-07-31 09:31:03.000000000","message":"Done.","commit_id":"98b5944193a5cd3765a6b353a7792dcf3e6c47f2"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"00e120752a9674b407f951a6eed63277de4b5542","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"@register.filter(name\u003d\u0027split_message\u0027)"},{"line_number":19,"context_line":"def split_message(value):"},{"line_number":20,"context_line":"    return value.split(\u0027\\u2026\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f560f44_44903d43","line":20,"range":{"start_line":20,"start_character":23,"end_line":20,"end_character":31},"updated":"2020-09-03 08:54:21.000000000","message":"It could be good to move this value to a constant, but I\u0027m OK to do it in a follow-up patch","commit_id":"5081359295e5311ca725e80efa0bc4b2ec811a0e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"7343d7d90be18447435f02c031e7641226d9de24","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"@register.filter(name\u003d\u0027split_message\u0027)"},{"line_number":19,"context_line":"def split_message(value):"},{"line_number":20,"context_line":"    return value.split(\u0027\\u2026\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f560f44_81a882d9","line":20,"range":{"start_line":20,"start_character":23,"end_line":20,"end_character":31},"in_reply_to":"9f560f44_44903d43","updated":"2020-09-03 11:35:50.000000000","message":"+1. we see this magic number in multiple places.","commit_id":"5081359295e5311ca725e80efa0bc4b2ec811a0e"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"908df77f8adc0a43ed9afc6d377548ca7f272338","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"@register.filter(name\u003d\u0027split_message\u0027)"},{"line_number":19,"context_line":"def split_message(value):"},{"line_number":20,"context_line":"    return value.split(\u0027\\u2026\u0027)"}],"source_content_type":"text/x-python","patch_set":23,"id":"9f560f44_e4a488bb","line":20,"range":{"start_line":20,"start_character":23,"end_line":20,"end_character":31},"in_reply_to":"9f560f44_81a882d9","updated":"2020-09-10 05:38:38.000000000","message":"but I don\u0027t see why....","commit_id":"5081359295e5311ca725e80efa0bc4b2ec811a0e"}],"horizon/test/unit/test_exceptions.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3614fd7bcfcd9681d1f932ebe8482f900cc02429","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.assertIn(message, req.horizon[\u0027async_messages\u0027][0][1])"},{"line_number":60,"context_line":"        # verifies that the exec message which in this case is not trusted"},{"line_number":61,"context_line":"        # is not in the message content."},{"line_number":62,"context_line":"        self.assertNotIn(exc_msg, req.horizon[\u0027async_messages\u0027][0][1])"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_bf9cc05b","side":"PARENT","line":62,"updated":"2020-08-18 17:17:01.000000000","message":"Instead, can you check the exception message is included?","commit_id":"484eee068e1a9261c4797c0e27fb07ade43b93e3"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"f16b896a0b273cf0900e1353a645d57f10bc81b7","unresolved":false,"context_lines":[{"line_number":59,"context_line":"        self.assertIn(message, req.horizon[\u0027async_messages\u0027][0][1])"},{"line_number":60,"context_line":"        # verifies that the exec message which in this case is not trusted"},{"line_number":61,"context_line":"        # is not in the message content."},{"line_number":62,"context_line":"        self.assertNotIn(exc_msg, req.horizon[\u0027async_messages\u0027][0][1])"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_b36853f5","side":"PARENT","line":62,"in_reply_to":"9f560f44_bf9cc05b","updated":"2020-08-20 17:08:07.000000000","message":"Done.","commit_id":"484eee068e1a9261c4797c0e27fb07ade43b93e3"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3614fd7bcfcd9681d1f932ebe8482f900cc02429","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from horizon.test import helpers as test"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class HandleTests(test.TestCase):"},{"line_number":20,"context_line":"    def test_handle_translated(self):"},{"line_number":21,"context_line":"        translated_unicode \u003d u\u0027\\u30b3\\u30f3\\u30c6\\u30ca\\u30fc\\u304c\u0027 \\"},{"line_number":22,"context_line":"                             u\u0027\\u7a7a\\u3067\\u306f\\u306a\\u3044\\u305f\u0027 \\"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_3fba70bf","line":19,"updated":"2020-08-18 17:17:01.000000000","message":"Could you add UT coverage for all possible cases in \"detail\" arg?","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"f16b896a0b273cf0900e1353a645d57f10bc81b7","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from horizon.test import helpers as test"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class HandleTests(test.TestCase):"},{"line_number":20,"context_line":"    def test_handle_translated(self):"},{"line_number":21,"context_line":"        translated_unicode \u003d u\u0027\\u30b3\\u30f3\\u30c6\\u30ca\\u30fc\\u304c\u0027 \\"},{"line_number":22,"context_line":"                             u\u0027\\u7a7a\\u3067\\u306f\\u306a\\u3044\\u305f\u0027 \\"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_b367b34d","line":19,"in_reply_to":"9f560f44_3fba70bf","updated":"2020-08-20 17:08:07.000000000","message":"Done.","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"519a00096aea2d422258fe61537e727b287b5733","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            raise Exception(exc_msg)"},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            exceptions.handle(req, message)"},{"line_number":76,"context_line":"            print(req.horizon[\u0027async_messages\u0027])"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        self.assertCountEqual(req.horizon[\u0027async_messages\u0027], [expected])"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_d75bd350","line":75,"range":{"start_line":75,"start_character":12,"end_line":75,"end_character":43},"updated":"2020-08-26 18:45:26.000000000","message":"The case of details\u003dNone is already tested in test_handle_translated above. The case of details\u003d\u0027\u0027 (empty string) needs to be covered here.","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"9c96f15b329445bdf5e036a29201dbc3bdfec781","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            raise Exception(exc_msg)"},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            exceptions.handle(req, message)"},{"line_number":76,"context_line":"            print(req.horizon[\u0027async_messages\u0027])"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        self.assertCountEqual(req.horizon[\u0027async_messages\u0027], [expected])"}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_0bc7cd66","line":75,"range":{"start_line":75,"start_character":12,"end_line":75,"end_character":43},"in_reply_to":"9f560f44_d75bd350","updated":"2020-08-28 13:17:28.000000000","message":"Done.","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"519a00096aea2d422258fe61537e727b287b5733","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            raise Exception(exc_msg)"},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            exceptions.handle(req, message)"},{"line_number":76,"context_line":"            print(req.horizon[\u0027async_messages\u0027])"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        self.assertCountEqual(req.horizon[\u0027async_messages\u0027], [expected])"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_f777f7d2","line":76,"range":{"start_line":76,"start_character":12,"end_line":76,"end_character":48},"updated":"2020-08-26 18:45:26.000000000","message":"Unnecessary","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"9c96f15b329445bdf5e036a29201dbc3bdfec781","unresolved":false,"context_lines":[{"line_number":73,"context_line":"            raise Exception(exc_msg)"},{"line_number":74,"context_line":"        except Exception:"},{"line_number":75,"context_line":"            exceptions.handle(req, message)"},{"line_number":76,"context_line":"            print(req.horizon[\u0027async_messages\u0027])"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        self.assertCountEqual(req.horizon[\u0027async_messages\u0027], [expected])"},{"line_number":79,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9f560f44_abc9817a","line":76,"range":{"start_line":76,"start_character":12,"end_line":76,"end_character":48},"in_reply_to":"9f560f44_f777f7d2","updated":"2020-08-28 13:17:28.000000000","message":"removed","commit_id":"dd536c34821c029b067f54c657214fc8fac7b0f0"}],"openstack_dashboard/dashboards/admin/volume_types/forms.py":[{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"6336b8bc15264878f7ffba746b6d62be9c0c467d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            redirect \u003d reverse(\"horizon:admin:volume_types:index\")"},{"line_number":131,"context_line":"            exceptions.handle("},{"line_number":132,"context_line":"                request, _(\u0027Unable to create encrypted volume type: %s\u0027) % ex,"},{"line_number":133,"context_line":"                redirect\u003dredirect)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class UpdateVolumeTypeEncryption(CreateVolumeTypeEncryption):"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f4c43b2_6dbdba67","side":"PARENT","line":133,"range":{"start_line":133,"start_character":16,"end_line":133,"end_character":34},"updated":"2020-04-13 12:28:30.000000000","message":"Is it temporary? If so, a comment is required. If not, we cannot land it as-is.","commit_id":"9d434006b946608ac45b9ee11714bcba57cf1ca6"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"c154d80d6ef8265f1de952ed8399b28064ea7c0b","unresolved":false,"context_lines":[{"line_number":127,"context_line":"                                        \u0027volume type: %s\u0027) % volume_type_name)"},{"line_number":128,"context_line":"            return volume_type"},{"line_number":129,"context_line":"        except Exception as ex:"},{"line_number":130,"context_line":"            redirect \u003d reverse(\"horizon:admin:volume_types:index\")"},{"line_number":131,"context_line":"            exceptions.handle("},{"line_number":132,"context_line":"                request, _(\u0027Unable to create encrypted volume type.\u0027),"},{"line_number":133,"context_line":"                details\u003dstr(ex))"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f4c43b2_289e0063","line":130,"updated":"2020-04-13 13:14:48.000000000","message":"pep8: F841 local variable \u0027redirect\u0027 is assigned to but never used","commit_id":"573132a8f11409670cf48bbe205a3a126989fab7"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"5ae44449e45d6249bd7a43945fdddf38e7b6fe7e","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            redirect \u003d reverse(\"horizon:admin:volume_types:index\")"},{"line_number":131,"context_line":"            exceptions.handle("},{"line_number":132,"context_line":"                request, _(\u0027Unable to create encrypted volume type.\u0027),"},{"line_number":133,"context_line":"                redirect\u003dredirect, details\u003dstr(ex))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class UpdateVolumeTypeEncryption(CreateVolumeTypeEncryption):"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_fa8cb336","line":133,"updated":"2020-07-21 12:05:20.000000000","message":"This is to test a case with redirect. If you include this change in this commit, I would like to see exceptions.handle() without redirect to test the patch. Anyway I prefer to either of nothing or both.","commit_id":"a42614c7949ec063e7f19fe6f9702237073665ea"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"b3eff9964156c855665cf334df7b52010a830227","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            redirect \u003d reverse(\"horizon:admin:volume_types:index\")"},{"line_number":131,"context_line":"            exceptions.handle("},{"line_number":132,"context_line":"                request, _(\u0027Unable to create encrypted volume type.\u0027),"},{"line_number":133,"context_line":"                redirect\u003dredirect, details\u003dstr(ex))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class UpdateVolumeTypeEncryption(CreateVolumeTypeEncryption):"}],"source_content_type":"text/x-python","patch_set":12,"id":"bf51134e_001778a5","line":133,"in_reply_to":"bf51134e_fa8cb336","updated":"2020-07-21 14:02:17.000000000","message":"added a case with the redirect. please take a look.","commit_id":"a42614c7949ec063e7f19fe6f9702237073665ea"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"00cc06efd239cc8a3b7710415cae54b8b9f299aa","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            redirect \u003d reverse(\"horizon:admin:volume_types:index\")"},{"line_number":131,"context_line":"            exceptions.handle("},{"line_number":132,"context_line":"                request, _(\u0027Unable to create encrypted volume type.\u0027),"},{"line_number":133,"context_line":"                redirect\u003dredirect, details\u003dstr(ex))"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"class UpdateVolumeTypeEncryption(CreateVolumeTypeEncryption):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f560f44_e7ece92a","line":133,"range":{"start_line":133,"start_character":33,"end_line":133,"end_character":50},"updated":"2020-07-31 09:31:03.000000000","message":"Note: I have changed this file to master but now I have to remove \u0027ex\u0027 from here otherwise it will look like this https://pasteboard.co/JkaA9tX.png \nI will do the same changes for all files in this patch https://review.opendev.org/#/c/742106/. It looks like below:\nexcept Exception:\n    redirect \u003d reverse(\"horizon:admin:volume_types:index\")\n    exceptions.handle(\n        request, _(\u0027Unable to create encrypted volume \n        type.\u0027), redirect\u003d redirect)","commit_id":"98b5944193a5cd3765a6b353a7792dcf3e6c47f2"}],"openstack_dashboard/dashboards/project/instances/forms.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"3262e76017d02566a74abc1dd04184583c4c9043","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                self.fields[\u0027disk_config\u0027].choices \u003d config_choices"},{"line_number":95,"context_line":"        except Exception as ex:"},{"line_number":96,"context_line":"            exceptions.handle(request, _(\u0027Unable to retrieve extensions \u0027"},{"line_number":97,"context_line":"                                         \u0027information.\u0027), details\u003dstr(ex))"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def clean(self):"},{"line_number":100,"context_line":"        cleaned_data \u003d super(RebuildInstanceForm, self).clean()"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f560f44_be7cc1b5","line":97,"range":{"start_line":97,"start_character":58,"end_line":97,"end_character":73},"updated":"2020-07-30 20:14:30.000000000","message":"Taking into the account current exceptions.handle implementation, we can omit this  cahnge","commit_id":"98b5944193a5cd3765a6b353a7792dcf3e6c47f2"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"00cc06efd239cc8a3b7710415cae54b8b9f299aa","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                self.fields[\u0027disk_config\u0027].choices \u003d config_choices"},{"line_number":95,"context_line":"        except Exception as ex:"},{"line_number":96,"context_line":"            exceptions.handle(request, _(\u0027Unable to retrieve extensions \u0027"},{"line_number":97,"context_line":"                                         \u0027information.\u0027), details\u003dstr(ex))"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def clean(self):"},{"line_number":100,"context_line":"        cleaned_data \u003d super(RebuildInstanceForm, self).clean()"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f560f44_275b812e","line":97,"range":{"start_line":97,"start_character":58,"end_line":97,"end_character":73},"in_reply_to":"9f560f44_be7cc1b5","updated":"2020-07-31 09:31:03.000000000","message":"Done.","commit_id":"98b5944193a5cd3765a6b353a7792dcf3e6c47f2"}],"releasenotes/notes/refactor-error-messages-26c53bb3fe57fe72.yaml":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"4287e2ff8c650cb4859e2600fab6e7fafb00e9e2","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    User can see detailed error message on the horizon UI."},{"line_number":5,"context_line":"    This bp adds a collapse-able box for detailed error"},{"line_number":6,"context_line":"    messages."}],"source_content_type":"text/x-yaml","patch_set":19,"id":"9f560f44_00570328","line":6,"range":{"start_line":5,"start_character":4,"end_line":6,"end_character":13},"updated":"2020-08-05 08:25:58.000000000","message":"I won\u0027t block patch for it, but it would be great to have more user-friendly note here","commit_id":"ee3bf10a66403c9410dd8357ac27bbdd4bc6ce3d"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3614fd7bcfcd9681d1f932ebe8482f900cc02429","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    User can see detailed error message on the horizon UI."},{"line_number":5,"context_line":"    This blueprint adds a hyperlink \"details\" in the alert box."},{"line_number":6,"context_line":"    So now when a exception occurs user can click on this hyperlink"},{"line_number":7,"context_line":"    \"details\" which will collapse and shows user the same error"},{"line_number":8,"context_line":"    messages coming from different api."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9f560f44_1f920cf7","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":18},"updated":"2020-08-18 17:17:01.000000000","message":"After rendered as the release note, I cannot identify \"this blueprint\".... :-(","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"f16b896a0b273cf0900e1353a645d57f10bc81b7","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    User can see detailed error message on the horizon UI."},{"line_number":5,"context_line":"    This blueprint adds a hyperlink \"details\" in the alert box."},{"line_number":6,"context_line":"    So now when a exception occurs user can click on this hyperlink"},{"line_number":7,"context_line":"    \"details\" which will collapse and shows user the same error"},{"line_number":8,"context_line":"    messages coming from different api."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9f560f44_f87be4f0","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":18},"in_reply_to":"9f560f44_1f920cf7","updated":"2020-08-20 17:08:07.000000000","message":"oops:(.\nDone.","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3614fd7bcfcd9681d1f932ebe8482f900cc02429","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    User can see detailed error message on the horizon UI."},{"line_number":5,"context_line":"    This blueprint adds a hyperlink \"details\" in the alert box."},{"line_number":6,"context_line":"    So now when a exception occurs user can click on this hyperlink"},{"line_number":7,"context_line":"    \"details\" which will collapse and shows user the same error"},{"line_number":8,"context_line":"    messages coming from different api."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9f560f44_1fda0c16","line":6,"range":{"start_line":6,"start_character":16,"end_line":6,"end_character":27},"updated":"2020-08-18 17:17:01.000000000","message":"a exception -\u003e an exception","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3614fd7bcfcd9681d1f932ebe8482f900cc02429","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    User can see detailed error message on the horizon UI."},{"line_number":5,"context_line":"    This blueprint adds a hyperlink \"details\" in the alert box."},{"line_number":6,"context_line":"    So now when a exception occurs user can click on this hyperlink"},{"line_number":7,"context_line":"    \"details\" which will collapse and shows user the same error"},{"line_number":8,"context_line":"    messages coming from different api."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9f560f44_ffd478eb","line":6,"range":{"start_line":6,"start_character":35,"end_line":6,"end_character":39},"updated":"2020-08-18 17:17:01.000000000","message":"user -\u003e a user","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"f16b896a0b273cf0900e1353a645d57f10bc81b7","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    User can see detailed error message on the horizon UI."},{"line_number":5,"context_line":"    This blueprint adds a hyperlink \"details\" in the alert box."},{"line_number":6,"context_line":"    So now when a exception occurs user can click on this hyperlink"},{"line_number":7,"context_line":"    \"details\" which will collapse and shows user the same error"},{"line_number":8,"context_line":"    messages coming from different api."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9f560f44_18be9864","line":6,"range":{"start_line":6,"start_character":16,"end_line":6,"end_character":27},"in_reply_to":"9f560f44_1fda0c16","updated":"2020-08-20 17:08:07.000000000","message":"Done.","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"f16b896a0b273cf0900e1353a645d57f10bc81b7","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    User can see detailed error message on the horizon UI."},{"line_number":5,"context_line":"    This blueprint adds a hyperlink \"details\" in the alert box."},{"line_number":6,"context_line":"    So now when a exception occurs user can click on this hyperlink"},{"line_number":7,"context_line":"    \"details\" which will collapse and shows user the same error"},{"line_number":8,"context_line":"    messages coming from different api."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9f560f44_58b81075","line":6,"range":{"start_line":6,"start_character":35,"end_line":6,"end_character":39},"in_reply_to":"9f560f44_ffd478eb","updated":"2020-08-20 17:08:07.000000000","message":"Done.","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"3614fd7bcfcd9681d1f932ebe8482f900cc02429","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    User can see detailed error message on the horizon UI."},{"line_number":5,"context_line":"    This blueprint adds a hyperlink \"details\" in the alert box."},{"line_number":6,"context_line":"    So now when a exception occurs user can click on this hyperlink"},{"line_number":7,"context_line":"    \"details\" which will collapse and shows user the same error"},{"line_number":8,"context_line":"    messages coming from different api."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9f560f44_5f62c417","line":8,"range":{"start_line":7,"start_character":14,"end_line":8,"end_character":39},"updated":"2020-08-18 17:17:01.000000000","message":"I am a bit confused with \"collapse\" here.\n\"the same error message\" is confusing too...\n\nSomething like this?\n\n ... \"details\" which shows original error message included\n in a corresponding error. This may help a user understand\n what happens in detail.","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"},{"author":{"_account_id":29313,"name":"Vishal Manchanda","email":"manchandavishal143@gmail.com","username":"vishalmanchanda"},"change_message_id":"f16b896a0b273cf0900e1353a645d57f10bc81b7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    User can see detailed error message on the horizon UI."},{"line_number":5,"context_line":"    This blueprint adds a hyperlink \"details\" in the alert box."},{"line_number":6,"context_line":"    So now when a exception occurs user can click on this hyperlink"},{"line_number":7,"context_line":"    \"details\" which will collapse and shows user the same error"},{"line_number":8,"context_line":"    messages coming from different api."}],"source_content_type":"text/x-yaml","patch_set":20,"id":"9f560f44_38bb9c72","line":8,"range":{"start_line":7,"start_character":14,"end_line":8,"end_character":39},"in_reply_to":"9f560f44_5f62c417","updated":"2020-08-20 17:08:07.000000000","message":"updated.","commit_id":"38bc7fce032422937bee6709219e828f4d1fca13"}]}
