)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f3845f267b1bec837419a71b0a07cc1c6b8c2722","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"527fafe5_bd0d339e","updated":"2025-03-12 11:23:17.000000000","message":"As you\u0027ve noted, this is poorly understood code. Could you add a unit test to prevent regression, similar to what was done in https://review.opendev.org/c/openstack/openstacksdk/+/893283? You can add it to `openstack/tests/unit/config/test_config.py` again.","commit_id":"c7c06649522aaaddec86fe0f3123388ca2759c0d"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"7ab9cda870bf3b4d87e22aa9e612784fe28e63e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e3af330f_22932ff7","in_reply_to":"527fafe5_bd0d339e","updated":"2025-03-12 14:52:11.000000000","message":"done. Also see next patches in a series where I add more tests for those magic fixes, and then refactor the magic fixes method itself a bit.","commit_id":"c7c06649522aaaddec86fe0f3123388ca2759c0d"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"7ab9cda870bf3b4d87e22aa9e612784fe28e63e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2430cf31_8236d18d","updated":"2025-03-12 14:52:11.000000000","message":"@stephenfin@redhat.com:","commit_id":"0f6deb2002245533205a0db9dcfac4d3e3c5047a"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"65b17ff87ed2f9c120ebec8b9d71e22db8c07be0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"cdf2b7f8_88a34be9","updated":"2025-03-12 14:52:51.000000000","message":"Assuming CI is happy...","commit_id":"0f6deb2002245533205a0db9dcfac4d3e3c5047a"}],"openstack/config/loader.py":[{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"7afd4abaf8e7eeaecedc52a6769525c3ad167756","unresolved":true,"context_lines":[{"line_number":1188,"context_line":"    def magic_fixes(self, config):"},{"line_number":1189,"context_line":"        \"\"\"Perform the set of magic argument fixups\"\"\""},{"line_number":1190,"context_line":""},{"line_number":1191,"context_line":"        # Infer token plugin if a token was given"},{"line_number":1192,"context_line":"        if ("},{"line_number":1193,"context_line":"            (\u0027auth\u0027 in config and \u0027token\u0027 in config[\u0027auth\u0027])"},{"line_number":1194,"context_line":"            or (\u0027auth_token\u0027 in config and config[\u0027auth_token\u0027])"},{"line_number":1195,"context_line":"            or (\u0027token\u0027 in config and config[\u0027token\u0027])"},{"line_number":1196,"context_line":"        ):"},{"line_number":1197,"context_line":"            config.setdefault(\u0027token\u0027, config.pop(\u0027auth_token\u0027, None))"},{"line_number":1198,"context_line":""},{"line_number":1199,"context_line":"        # Infer passcode if it was given separately"},{"line_number":1200,"context_line":"        # This is generally absolutely impractical to require setting passcode"}],"source_content_type":"text/x-python","patch_set":1,"id":"aea2080c_33b67a11","side":"PARENT","line":1197,"range":{"start_line":1191,"start_character":0,"end_line":1197,"end_character":70},"updated":"2025-03-11 16:32:59.000000000","message":"I have no idea what this piece of code was meant to do :-/ \n\nBut as of now, it effectively transforms\n```\nclouds:\n  test:\n    auth:\n      token: foo\n```\nwhich is how it is supposed to work according to docs,\ninto\n```\nclouds:\n  test:\n    auth:\n      token: foo\n    token: null\n```\nwhich then, due to simple check `if key in config` on L807 in _fix_backwards_project, will turn to\n```\nclouds:\n  test:\n    auth:\n      token: null\n```\n\n😞\n\nAnyway, all this deleted code does (or at least probably was meant to do), is already happening in _fix_backwards_project.","commit_id":"c87a4b93f43c60729abc599511dd1bc7d21cb592"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"65b17ff87ed2f9c120ebec8b9d71e22db8c07be0","unresolved":false,"context_lines":[{"line_number":1188,"context_line":"    def magic_fixes(self, config):"},{"line_number":1189,"context_line":"        \"\"\"Perform the set of magic argument fixups\"\"\""},{"line_number":1190,"context_line":""},{"line_number":1191,"context_line":"        # Infer token plugin if a token was given"},{"line_number":1192,"context_line":"        if ("},{"line_number":1193,"context_line":"            (\u0027auth\u0027 in config and \u0027token\u0027 in config[\u0027auth\u0027])"},{"line_number":1194,"context_line":"            or (\u0027auth_token\u0027 in config and config[\u0027auth_token\u0027])"},{"line_number":1195,"context_line":"            or (\u0027token\u0027 in config and config[\u0027token\u0027])"},{"line_number":1196,"context_line":"        ):"},{"line_number":1197,"context_line":"            config.setdefault(\u0027token\u0027, config.pop(\u0027auth_token\u0027, None))"},{"line_number":1198,"context_line":""},{"line_number":1199,"context_line":"        # Infer passcode if it was given separately"},{"line_number":1200,"context_line":"        # This is generally absolutely impractical to require setting passcode"}],"source_content_type":"text/x-python","patch_set":1,"id":"e8ed1f76_5d5a5bcb","side":"PARENT","line":1197,"range":{"start_line":1191,"start_character":0,"end_line":1197,"end_character":70},"in_reply_to":"60a3303d_ef387cec","updated":"2025-03-12 14:52:51.000000000","message":"Acknowledged","commit_id":"c87a4b93f43c60729abc599511dd1bc7d21cb592"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"930d602662b08c4c465cf2268d07fd9ad00e87fd","unresolved":true,"context_lines":[{"line_number":1188,"context_line":"    def magic_fixes(self, config):"},{"line_number":1189,"context_line":"        \"\"\"Perform the set of magic argument fixups\"\"\""},{"line_number":1190,"context_line":""},{"line_number":1191,"context_line":"        # Infer token plugin if a token was given"},{"line_number":1192,"context_line":"        if ("},{"line_number":1193,"context_line":"            (\u0027auth\u0027 in config and \u0027token\u0027 in config[\u0027auth\u0027])"},{"line_number":1194,"context_line":"            or (\u0027auth_token\u0027 in config and config[\u0027auth_token\u0027])"},{"line_number":1195,"context_line":"            or (\u0027token\u0027 in config and config[\u0027token\u0027])"},{"line_number":1196,"context_line":"        ):"},{"line_number":1197,"context_line":"            config.setdefault(\u0027token\u0027, config.pop(\u0027auth_token\u0027, None))"},{"line_number":1198,"context_line":""},{"line_number":1199,"context_line":"        # Infer passcode if it was given separately"},{"line_number":1200,"context_line":"        # This is generally absolutely impractical to require setting passcode"}],"source_content_type":"text/x-python","patch_set":1,"id":"60a3303d_ef387cec","side":"PARENT","line":1197,"range":{"start_line":1191,"start_character":0,"end_line":1197,"end_character":70},"in_reply_to":"aea2080c_33b67a11","updated":"2025-03-11 16:36:31.000000000","message":"I am pretty sure this is unintended consequence of https://review.opendev.org/c/openstack/openstacksdk/+/893283 as this was broken since exactly openstacksdk 2.0.0","commit_id":"c87a4b93f43c60729abc599511dd1bc7d21cb592"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"3d91eb4d9500d446f5563a0f4a322a18bf7d221a","unresolved":true,"context_lines":[{"line_number":1196,"context_line":"        ):"},{"line_number":1197,"context_line":"            config.setdefault(\u0027token\u0027, config.pop(\u0027auth_token\u0027, None))"},{"line_number":1198,"context_line":""},{"line_number":1199,"context_line":"        # Infer passcode if it was given separately"},{"line_number":1200,"context_line":"        # This is generally absolutely impractical to require setting passcode"},{"line_number":1201,"context_line":"        # in the clouds.yaml"},{"line_number":1202,"context_line":"        if \u0027auth\u0027 in config and \u0027passcode\u0027 in config:"},{"line_number":1203,"context_line":"            config[\u0027auth\u0027][\u0027passcode\u0027] \u003d config.pop(\u0027passcode\u0027, None)"},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"        # These backwards compat values are only set via argparse. If it\u0027s"},{"line_number":1206,"context_line":"        # there, it\u0027s because it was passed in explicitly, and should win"}],"source_content_type":"text/x-python","patch_set":1,"id":"36a99a55_7231c317","side":"PARENT","line":1203,"range":{"start_line":1199,"start_character":0,"end_line":1203,"end_character":69},"updated":"2025-03-11 17:24:29.000000000","message":"btw could be moved to _fix_backward_project too.","commit_id":"c87a4b93f43c60729abc599511dd1bc7d21cb592"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"65b17ff87ed2f9c120ebec8b9d71e22db8c07be0","unresolved":false,"context_lines":[{"line_number":1196,"context_line":"        ):"},{"line_number":1197,"context_line":"            config.setdefault(\u0027token\u0027, config.pop(\u0027auth_token\u0027, None))"},{"line_number":1198,"context_line":""},{"line_number":1199,"context_line":"        # Infer passcode if it was given separately"},{"line_number":1200,"context_line":"        # This is generally absolutely impractical to require setting passcode"},{"line_number":1201,"context_line":"        # in the clouds.yaml"},{"line_number":1202,"context_line":"        if \u0027auth\u0027 in config and \u0027passcode\u0027 in config:"},{"line_number":1203,"context_line":"            config[\u0027auth\u0027][\u0027passcode\u0027] \u003d config.pop(\u0027passcode\u0027, None)"},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"        # These backwards compat values are only set via argparse. If it\u0027s"},{"line_number":1206,"context_line":"        # there, it\u0027s because it was passed in explicitly, and should win"}],"source_content_type":"text/x-python","patch_set":1,"id":"40784350_2884869a","side":"PARENT","line":1203,"range":{"start_line":1199,"start_character":0,"end_line":1203,"end_character":69},"in_reply_to":"36a99a55_7231c317","updated":"2025-03-12 14:52:51.000000000","message":"Acknowledged","commit_id":"c87a4b93f43c60729abc599511dd1bc7d21cb592"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"6045461f219e127e528a6525a1950cf126b26f12","unresolved":false,"context_lines":[{"line_number":1196,"context_line":"        ):"},{"line_number":1197,"context_line":"            config.setdefault(\u0027token\u0027, config.pop(\u0027auth_token\u0027, None))"},{"line_number":1198,"context_line":""},{"line_number":1199,"context_line":"        # Infer passcode if it was given separately"},{"line_number":1200,"context_line":"        # This is generally absolutely impractical to require setting passcode"},{"line_number":1201,"context_line":"        # in the clouds.yaml"},{"line_number":1202,"context_line":"        if \u0027auth\u0027 in config and \u0027passcode\u0027 in config:"},{"line_number":1203,"context_line":"            config[\u0027auth\u0027][\u0027passcode\u0027] \u003d config.pop(\u0027passcode\u0027, None)"},{"line_number":1204,"context_line":""},{"line_number":1205,"context_line":"        # These backwards compat values are only set via argparse. If it\u0027s"},{"line_number":1206,"context_line":"        # there, it\u0027s because it was passed in explicitly, and should win"}],"source_content_type":"text/x-python","patch_set":1,"id":"fc91092f_b02edeb3","side":"PARENT","line":1203,"range":{"start_line":1199,"start_character":0,"end_line":1203,"end_character":69},"in_reply_to":"40784350_2884869a","updated":"2025-03-12 14:53:32.000000000","message":"see https://review.opendev.org/c/openstack/openstacksdk/+/944123","commit_id":"c87a4b93f43c60729abc599511dd1bc7d21cb592"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"3d91eb4d9500d446f5563a0f4a322a18bf7d221a","unresolved":true,"context_lines":[{"line_number":1205,"context_line":"        # These backwards compat values are only set via argparse. If it\u0027s"},{"line_number":1206,"context_line":"        # there, it\u0027s because it was passed in explicitly, and should win"},{"line_number":1207,"context_line":"        config \u003d self._fix_backwards_api_timeout(config)"},{"line_number":1208,"context_line":"        if \u0027endpoint_type\u0027 in config:"},{"line_number":1209,"context_line":"            config[\u0027interface\u0027] \u003d config.pop(\u0027endpoint_type\u0027)"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"        config \u003d self._fix_backwards_auth_plugin(config)"},{"line_number":1212,"context_line":"        config \u003d self._fix_backwards_project(config)"}],"source_content_type":"text/x-python","patch_set":1,"id":"8f6d305a_20c2a569","side":"PARENT","line":1209,"range":{"start_line":1208,"start_character":0,"end_line":1209,"end_character":61},"updated":"2025-03-11 17:24:29.000000000","message":"btw, this looks like also already happening in _fix_backwards_interface","commit_id":"c87a4b93f43c60729abc599511dd1bc7d21cb592"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"65b17ff87ed2f9c120ebec8b9d71e22db8c07be0","unresolved":false,"context_lines":[{"line_number":1205,"context_line":"        # These backwards compat values are only set via argparse. If it\u0027s"},{"line_number":1206,"context_line":"        # there, it\u0027s because it was passed in explicitly, and should win"},{"line_number":1207,"context_line":"        config \u003d self._fix_backwards_api_timeout(config)"},{"line_number":1208,"context_line":"        if \u0027endpoint_type\u0027 in config:"},{"line_number":1209,"context_line":"            config[\u0027interface\u0027] \u003d config.pop(\u0027endpoint_type\u0027)"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"        config \u003d self._fix_backwards_auth_plugin(config)"},{"line_number":1212,"context_line":"        config \u003d self._fix_backwards_project(config)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ba684b38_22e7417f","side":"PARENT","line":1209,"range":{"start_line":1208,"start_character":0,"end_line":1209,"end_character":61},"in_reply_to":"8f6d305a_20c2a569","updated":"2025-03-12 14:52:51.000000000","message":"Acknowledged","commit_id":"c87a4b93f43c60729abc599511dd1bc7d21cb592"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"6045461f219e127e528a6525a1950cf126b26f12","unresolved":true,"context_lines":[{"line_number":1205,"context_line":"        # These backwards compat values are only set via argparse. If it\u0027s"},{"line_number":1206,"context_line":"        # there, it\u0027s because it was passed in explicitly, and should win"},{"line_number":1207,"context_line":"        config \u003d self._fix_backwards_api_timeout(config)"},{"line_number":1208,"context_line":"        if \u0027endpoint_type\u0027 in config:"},{"line_number":1209,"context_line":"            config[\u0027interface\u0027] \u003d config.pop(\u0027endpoint_type\u0027)"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"        config \u003d self._fix_backwards_auth_plugin(config)"},{"line_number":1212,"context_line":"        config \u003d self._fix_backwards_project(config)"}],"source_content_type":"text/x-python","patch_set":1,"id":"ddf908ef_485549d7","side":"PARENT","line":1209,"range":{"start_line":1208,"start_character":0,"end_line":1209,"end_character":61},"in_reply_to":"8f6d305a_20c2a569","updated":"2025-03-12 14:53:32.000000000","message":"see https://review.opendev.org/c/openstack/openstacksdk/+/944123","commit_id":"c87a4b93f43c60729abc599511dd1bc7d21cb592"},{"author":{"_account_id":9542,"name":"Pavlo Shchelokovskyy","email":"pshchelokovskyy@mirantis.com","username":"pshchelo"},"change_message_id":"5dd376d79674ea1af9a6628127e89f8cc45a71a2","unresolved":false,"context_lines":[{"line_number":1205,"context_line":"        # These backwards compat values are only set via argparse. If it\u0027s"},{"line_number":1206,"context_line":"        # there, it\u0027s because it was passed in explicitly, and should win"},{"line_number":1207,"context_line":"        config \u003d self._fix_backwards_api_timeout(config)"},{"line_number":1208,"context_line":"        if \u0027endpoint_type\u0027 in config:"},{"line_number":1209,"context_line":"            config[\u0027interface\u0027] \u003d config.pop(\u0027endpoint_type\u0027)"},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"        config \u003d self._fix_backwards_auth_plugin(config)"},{"line_number":1212,"context_line":"        config \u003d self._fix_backwards_project(config)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df4b4f72_f51f6497","side":"PARENT","line":1209,"range":{"start_line":1208,"start_character":0,"end_line":1209,"end_character":61},"in_reply_to":"ddf908ef_485549d7","updated":"2025-03-12 14:56:13.000000000","message":"Done","commit_id":"c87a4b93f43c60729abc599511dd1bc7d21cb592"}]}
