)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":38937,"name":"Living Enaanasebh","display_name":"Living Enaanasebh","email":"livingenaanasebh@gmail.com","username":"AndroGenius"},"change_message_id":"4d0851b2c79c77ef725f606dc6b81285d5e4fbaa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"49ccee2a_c1987352","updated":"2026-03-22 14:12:13.000000000","message":"Hi, I\u0027m Living Enaanasebh an Outreachy applicant working on Manila as part of the application process. While going through the codebase I noticed a TODO comment in manila/api/common.py suggesting that dict_to_query_str should use urllib.urlencode instead of the manual loop implementation. Since urllib.parse is already imported in the module, I went ahead and made the fix and added unit tests for the function. I\u0027d appreciate any feedback or review. Thank you","commit_id":"b62e3eaaa532eec3b17dc3444c1a960c524b77df"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"0c45f87636ab62ab6ebe286c68d359639ee0398d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2e106585_6607e6d5","updated":"2026-03-25 21:25:48.000000000","message":"Thanks for working on this change. Please take a look at the comment inline.","commit_id":"6a5e09e3bdf59d26f1584713f250bf9a2878ea74"},{"author":{"_account_id":38937,"name":"Living Enaanasebh","display_name":"Living Enaanasebh","email":"livingenaanasebh@gmail.com","username":"AndroGenius"},"change_message_id":"90e6bdf4d98135854505e0183253c915f7ad0ff5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f58f956a_357afecc","updated":"2026-03-26 15:40:39.000000000","message":"recheck","commit_id":"141e11b669379b0a81e28e0cbe6401b1d2d3def3"},{"author":{"_account_id":38937,"name":"Living Enaanasebh","display_name":"Living Enaanasebh","email":"livingenaanasebh@gmail.com","username":"AndroGenius"},"change_message_id":"0e5ccc5a525aadab3e1bb736d6a3a6cdf3148b09","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"601f65de_30db741d","updated":"2026-04-02 22:19:37.000000000","message":"Hi Goutham, thanks for the detailed feedback! I\u0027ve addressed all your comments:\n\nSimplified back to parse.urlencode(params) without safe\u003d\u0027 \u0027\nUpdated the commit message to note this is a behavior improvement over the old naive string concatenation\nAdded a test for special characters ({\u0027key\u0027: \u0027a\u0026b\u0027} -\u003e \u0027key\u003da%26b\u0027) to demonstrate the encoding improvement\nUpdated test_multiple_params to use assertEqual(\u0027limit\u003d10\u0026marker\u003dabc\u0027, result) instead of two assertIn calls\nupdated test_spaces_are_not_encoded to assert the correct encoded behavior\n\nPlease take another look","commit_id":"30cc9f2d87510f2cd3b75f8d23ec6dcdcc990c1d"}],"manila/api/common.py":[{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"0c45f87636ab62ab6ebe286c68d359639ee0398d","unresolved":true,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def dict_to_query_str(params):"},{"line_number":240,"context_line":"    return parse.urlencode(params)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"def check_net_id_and_subnet_id(body):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fd0297f0_ea836b3f","line":240,"range":{"start_line":240,"start_character":0,"end_line":240,"end_character":34},"updated":"2026-03-25 21:25:48.000000000","message":"wouldn\u0027t this change the behavior to:\n`` Old: {\u0027name\u0027: \u0027hello world\u0027} → \"name\u003dhello world\"``\n`` New: {\u0027name\u0027: \u0027hello world\u0027} → \"name\u003dhello+world\"``\n? If so, that is not doing the exact same thing and we should signal so in the commit message","commit_id":"6a5e09e3bdf59d26f1584713f250bf9a2878ea74"},{"author":{"_account_id":38937,"name":"Living Enaanasebh","display_name":"Living Enaanasebh","email":"livingenaanasebh@gmail.com","username":"AndroGenius"},"change_message_id":"c33db16001c4c4f855eab8d41a27c94ee448bbda","unresolved":true,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def dict_to_query_str(params):"},{"line_number":240,"context_line":"    return parse.urlencode(params)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"def check_net_id_and_subnet_id(body):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5baa806b_b5046b7b","line":240,"range":{"start_line":240,"start_character":0,"end_line":240,"end_character":34},"in_reply_to":"420e6a1b_d29a7bd6","updated":"2026-03-26 08:26:34.000000000","message":"Hi Carlos, thank you so much for the feedback, You\u0027re right that the behavior was different. I\u0027ve updated the patch to use quote_via\u003dparse.quote and safe\u003d\u0027 \u0027 so that spaces remain unencoded, preserving the original behavior. I\u0027ve also added a test to cover this case and updated the commit message to note the behavior. Please take another look.","commit_id":"6a5e09e3bdf59d26f1584713f250bf9a2878ea74"},{"author":{"_account_id":38937,"name":"Living Enaanasebh","display_name":"Living Enaanasebh","email":"livingenaanasebh@gmail.com","username":"AndroGenius"},"change_message_id":"df3950318471b17a292fa7c8f96ffbf218f05688","unresolved":true,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def dict_to_query_str(params):"},{"line_number":240,"context_line":"    return parse.urlencode(params)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"def check_net_id_and_subnet_id(body):"}],"source_content_type":"text/x-python","patch_set":2,"id":"420e6a1b_d29a7bd6","line":240,"range":{"start_line":240,"start_character":0,"end_line":240,"end_character":34},"in_reply_to":"fd0297f0_ea836b3f","updated":"2026-03-26 08:23:56.000000000","message":"\u003e wouldn\u0027t this change the behavior to:\n\u003e `` Old: {\u0027name\u0027: \u0027hello world\u0027} → \"name\u003dhello world\"``\n\u003e `` New: {\u0027name\u0027: \u0027hello world\u0027} → \"name\u003dhello+world\"``\n\u003e ? If so, that is not doing the exact same thing and we should signal so in the commit message","commit_id":"6a5e09e3bdf59d26f1584713f250bf9a2878ea74"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7f2cac794231f2a08be7aae10ac1e384de2e605e","unresolved":true,"context_lines":[{"line_number":237,"context_line":""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"def dict_to_query_str(params):"},{"line_number":240,"context_line":"    return parse.urlencode(params, quote_via\u003dparse.quote, safe\u003d\u0027 \u0027)"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"def check_net_id_and_subnet_id(body):"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a942416_b3ab13b8","line":240,"updated":"2026-03-31 21:18:51.000000000","message":"The safe\u003d\u0027 \u0027 parameter preserves a bug from the old code. The old\ncode did zero encoding (naive string concatenation), so spaces were\nunencoded by accident, not by design. Since urlencode now correctly\nencodes \u0026 and \u003d in values, spaces should be encoded too. Simplify\nto: return parse.urlencode(params)\nUpdate the commit message to note this is a behavior improvement.","commit_id":"141e11b669379b0a81e28e0cbe6401b1d2d3def3"}],"manila/tests/api/test_common.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7f2cac794231f2a08be7aae10ac1e384de2e605e","unresolved":true,"context_lines":[{"line_number":521,"context_line":"                         self.view_builder._collection_route_name)"},{"line_number":522,"context_line":""},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"class DictToQueryStrTest(test.TestCase):"},{"line_number":525,"context_line":"    \"\"\"Unit tests for `manila.api.common.dict_to_query_str`.\"\"\""},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    def test_empty_params(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"31bdd065_6bf184a2","line":524,"updated":"2026-03-31 21:18:51.000000000","message":"Consider adding a test for special characters in values (e.g.,\n{\u0027key\u0027: \u0027a\u0026b\u0027} -\u003e \u0027key\u003da%26b\u0027) to demonstrate the encoding\nimprovement over the old broken concatenation.","commit_id":"141e11b669379b0a81e28e0cbe6401b1d2d3def3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7f2cac794231f2a08be7aae10ac1e384de2e605e","unresolved":true,"context_lines":[{"line_number":531,"context_line":"        result \u003d common.dict_to_query_str({\u0027key\u0027: \u0027value\u0027})"},{"line_number":532,"context_line":"        self.assertEqual(\u0027key\u003dvalue\u0027, result)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def test_multiple_params(self):"},{"line_number":535,"context_line":"        result \u003d common.dict_to_query_str({\u0027limit\u0027: 10, \u0027marker\u0027: \u0027abc\u0027})"},{"line_number":536,"context_line":"        self.assertIn(\u0027limit\u003d10\u0027, result)"},{"line_number":537,"context_line":"        self.assertIn(\u0027marker\u003dabc\u0027, result)"}],"source_content_type":"text/x-python","patch_set":4,"id":"bb83d631_6efc6b2d","line":534,"updated":"2026-03-31 21:18:51.000000000","message":"Since dict ordering is guaranteed in Python 3.7+, use\nassertEqual(\u0027limit\u003d10\u0026marker\u003dabc\u0027, result) instead of two assertIn\ncalls for a more precise test.","commit_id":"141e11b669379b0a81e28e0cbe6401b1d2d3def3"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7f2cac794231f2a08be7aae10ac1e384de2e605e","unresolved":true,"context_lines":[{"line_number":539,"context_line":"    def test_integer_values(self):"},{"line_number":540,"context_line":"        self.assertEqual(\u0027limit\u003d5\u0027, common.dict_to_query_str({\u0027limit\u0027: 5}))"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":"    def test_spaces_are_not_encoded(self):"},{"line_number":543,"context_line":"        result \u003d common.dict_to_query_str({\u0027name\u0027: \u0027hello world\u0027})"},{"line_number":544,"context_line":"        self.assertEqual(\u0027name\u003dhello world\u0027, result)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ad10c255_8f7c288a","line":542,"updated":"2026-03-31 21:18:51.000000000","message":"The test_spaces_are_not_encoded test asserts broken behavior. Once\nsafe\u003d\u0027 \u0027 is dropped, update to assert \u0027name\u003dhello+world\u0027 or\n\u0027name\u003dhello%20world\u0027.","commit_id":"141e11b669379b0a81e28e0cbe6401b1d2d3def3"}]}
