)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":35657,"name":"LeeChunghwan","display_name":"chung00.lee","email":"chung00.lee@samsung.com","username":"chung00.lee"},"change_message_id":"a36ebfa99cef2dcf6fb27e5648512dc788b7327e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"64fe6fa0_3fbfde2c","updated":"2025-01-05 16:03:23.000000000","message":"recheck, unrelated failure","commit_id":"5093c4101edaaceaa258f1586b5f2a99dc101f71"},{"author":{"_account_id":35657,"name":"LeeChunghwan","display_name":"chung00.lee","email":"chung00.lee@samsung.com","username":"chung00.lee"},"change_message_id":"7e8d759ffa69c7ac299d5f38d2450ecaafa20019","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"6f23af2c_09e809a5","updated":"2025-01-05 13:58:07.000000000","message":"recheck, unrelated failure","commit_id":"5093c4101edaaceaa258f1586b5f2a99dc101f71"},{"author":{"_account_id":35657,"name":"LeeChunghwan","display_name":"chung00.lee","email":"chung00.lee@samsung.com","username":"chung00.lee"},"change_message_id":"0705c5e651f2410e04c8d910841de36f575215bb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"765ba189_77ffb0e4","updated":"2025-01-06 01:12:09.000000000","message":"recheck, unrelated failure","commit_id":"5093c4101edaaceaa258f1586b5f2a99dc101f71"},{"author":{"_account_id":35657,"name":"LeeChunghwan","display_name":"chung00.lee","email":"chung00.lee@samsung.com","username":"chung00.lee"},"change_message_id":"d3f70454cf21927954fe5e523b1a2c5ae0f169c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b19fb351_aefaf513","updated":"2025-01-06 09:54:00.000000000","message":"recheck, unrelated failure","commit_id":"5093c4101edaaceaa258f1586b5f2a99dc101f71"},{"author":{"_account_id":35657,"name":"LeeChunghwan","display_name":"chung00.lee","email":"chung00.lee@samsung.com","username":"chung00.lee"},"change_message_id":"1f6f554a026da27c6e71a571b74ae8662f632769","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"e7896ce1_92251733","updated":"2024-12-12 06:32:49.000000000","message":"recheck, unrelated failure","commit_id":"5093c4101edaaceaa258f1586b5f2a99dc101f71"},{"author":{"_account_id":35657,"name":"LeeChunghwan","display_name":"chung00.lee","email":"chung00.lee@samsung.com","username":"chung00.lee"},"change_message_id":"723126c572280c5a5505765507371ab770dd6cba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b7fc113a_c248b352","in_reply_to":"e7896ce1_92251733","updated":"2024-12-12 07:18:27.000000000","message":"Done","commit_id":"5093c4101edaaceaa258f1586b5f2a99dc101f71"}],"openstack_dashboard/api/placement.py":[{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"3c920f3c20f1091ad1f4bc1aa8bb39561d59da32","unresolved":true,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def _get_json(request, path):"},{"line_number":62,"context_line":"    adapter \u003d make_adapter(request)"},{"line_number":63,"context_line":"    uri \u003d base.url_for(request, \u0027placement\u0027) + path"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    parsed_uri \u003d urlparse(uri)"},{"line_number":66,"context_line":"    path \u003d re.sub(r\u0027//+\u0027, \u0027/\u0027, parsed_uri.path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"a1f3c14f_061792a3","line":63,"updated":"2024-11-21 09:00:07.000000000","message":"perhaps it would be easier to use urljoin here instead?\nhttps://docs.python.org/3/library/urllib.parse.html#urllib.parse.urljoin","commit_id":"bdd4c4e280ddaa6278eeeb4d582da301a6bc87e2"},{"author":{"_account_id":8648,"name":"Radomir Dopieralski","email":"openstack@dopieralski.pl","username":"thesheep"},"change_message_id":"19549d9e3fa9887008a598bba853077b5b68b765","unresolved":true,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def _get_json(request, path):"},{"line_number":62,"context_line":"    adapter \u003d make_adapter(request)"},{"line_number":63,"context_line":"    uri \u003d base.url_for(request, \u0027placement\u0027) + path"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    parsed_uri \u003d urlparse(uri)"},{"line_number":66,"context_line":"    path \u003d re.sub(r\u0027//+\u0027, \u0027/\u0027, parsed_uri.path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"bccef913_9f08344a","line":63,"in_reply_to":"6087b4a4_07aab26e","updated":"2024-12-11 12:34:43.000000000","message":"If the \u0027/\u0027 is always present at the beginning, and that is a problem, perhaps it would be better to lstrip it before urljoin, rather than do global regular expression substitutions on the resulting string? Similarily, to prevent urljoin from stripping the last segment of the base url, you only need to make sure it ends with \u0027/\u0027.","commit_id":"bdd4c4e280ddaa6278eeeb4d582da301a6bc87e2"},{"author":{"_account_id":35657,"name":"LeeChunghwan","display_name":"chung00.lee","email":"chung00.lee@samsung.com","username":"chung00.lee"},"change_message_id":"efc77bfdafd1ff34f06d177dbde2d761839997ef","unresolved":true,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def _get_json(request, path):"},{"line_number":62,"context_line":"    adapter \u003d make_adapter(request)"},{"line_number":63,"context_line":"    uri \u003d base.url_for(request, \u0027placement\u0027) + path"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    parsed_uri \u003d urlparse(uri)"},{"line_number":66,"context_line":"    path \u003d re.sub(r\u0027//+\u0027, \u0027/\u0027, parsed_uri.path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"6087b4a4_07aab26e","line":63,"in_reply_to":"a1f3c14f_061792a3","updated":"2024-11-24 03:36:30.000000000","message":"If base is \u0027http://placement.com/a\u0027 or \u0027http://placement.com/a/\u0027 and url is \u0027/b\u0027, the urljoin results \u0027http://placement.com/b\u0027.\n\nIn openstack_dashboard/api/placement.py, \u0027/\u0027 is always included in the front of the url. And if we use urljoin, the \u0027/a\u0027 in the base disappears. \nSo I used urlparse, urlunparse instead of urljoin.","commit_id":"bdd4c4e280ddaa6278eeeb4d582da301a6bc87e2"},{"author":{"_account_id":35657,"name":"LeeChunghwan","display_name":"chung00.lee","email":"chung00.lee@samsung.com","username":"chung00.lee"},"change_message_id":"2b2f8d3344613e2dfd7a206dd4babe85bc1acccf","unresolved":true,"context_lines":[{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def _get_json(request, path):"},{"line_number":62,"context_line":"    adapter \u003d make_adapter(request)"},{"line_number":63,"context_line":"    uri \u003d base.url_for(request, \u0027placement\u0027) + path"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    parsed_uri \u003d urlparse(uri)"},{"line_number":66,"context_line":"    path \u003d re.sub(r\u0027//+\u0027, \u0027/\u0027, parsed_uri.path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"85f20e10_44bef0f1","line":63,"in_reply_to":"bccef913_9f08344a","updated":"2024-12-12 04:01:17.000000000","message":"Thank you for your review.\nI changed it to use rstrip for base and lstrip for path.","commit_id":"bdd4c4e280ddaa6278eeeb4d582da301a6bc87e2"}]}
