)]}'
{"swift/common/middleware/crypto/crypto_utils.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"d9ab2eca3c8c80982f628a18b25f928f878c92db","unresolved":true,"context_lines":[{"line_number":17,"context_line":"if six.PY2:"},{"line_number":18,"context_line":"    import collections as collections_abc"},{"line_number":19,"context_line":"else:"},{"line_number":20,"context_line":"    import collections.abc as collections_abc"},{"line_number":21,"context_line":"import json"},{"line_number":22,"context_line":"import os"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"161d56d3_cba3c44e","line":20,"updated":"2021-07-16 18:43:00.000000000","message":"Might as well just import Mapping at this point.","commit_id":"b9958f30b01476fd178b4941b1ae48fcfd9a112e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"662c0b129df9463cb7ec28f1144061fecc845623","unresolved":false,"context_lines":[{"line_number":17,"context_line":"if six.PY2:"},{"line_number":18,"context_line":"    import collections as collections_abc"},{"line_number":19,"context_line":"else:"},{"line_number":20,"context_line":"    import collections.abc as collections_abc"},{"line_number":21,"context_line":"import json"},{"line_number":22,"context_line":"import os"},{"line_number":23,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"a225a8b6_1aac9c05","line":20,"in_reply_to":"161d56d3_cba3c44e","updated":"2021-07-17 03:44:37.000000000","message":"Because usage of collections was removed, I\u0027ll mark this as resolved.","commit_id":"b9958f30b01476fd178b4941b1ae48fcfd9a112e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"dc6c60f6906b31725a41c84d82f88cd6694fb108","unresolved":true,"context_lines":[{"line_number":263,"context_line":"        if not isinstance(value, six.string_types):"},{"line_number":264,"context_line":"            raise ValueError(\u0027crypto meta not a string\u0027)"},{"line_number":265,"context_line":"        val \u003d json.loads(urlparse.unquote_plus(value))"},{"line_number":266,"context_line":"        if not isinstance(val, collections_abc.Mapping):"},{"line_number":267,"context_line":"            raise ValueError(\u0027crypto meta not a Mapping\u0027)"},{"line_number":268,"context_line":"        return b64_decode_meta(val)"},{"line_number":269,"context_line":"    except (KeyError, ValueError, TypeError) as err:"}],"source_content_type":"text/x-python","patch_set":1,"id":"0af1bba1_6f6bdb46","line":266,"range":{"start_line":266,"start_character":31,"end_line":266,"end_character":54},"updated":"2021-07-16 19:45:00.000000000","message":"I\u0027m really tempted to say we should just check isinstance(val, dict) -- we\u0027re not doing anything with json.loads\u0027s object_hook/object_pairs_hook kwargs, so dict should be a safe bet.","commit_id":"b9958f30b01476fd178b4941b1ae48fcfd9a112e"},{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"662c0b129df9463cb7ec28f1144061fecc845623","unresolved":false,"context_lines":[{"line_number":263,"context_line":"        if not isinstance(value, six.string_types):"},{"line_number":264,"context_line":"            raise ValueError(\u0027crypto meta not a string\u0027)"},{"line_number":265,"context_line":"        val \u003d json.loads(urlparse.unquote_plus(value))"},{"line_number":266,"context_line":"        if not isinstance(val, collections_abc.Mapping):"},{"line_number":267,"context_line":"            raise ValueError(\u0027crypto meta not a Mapping\u0027)"},{"line_number":268,"context_line":"        return b64_decode_meta(val)"},{"line_number":269,"context_line":"    except (KeyError, ValueError, TypeError) as err:"}],"source_content_type":"text/x-python","patch_set":1,"id":"90e20caf_1f18b422","line":266,"range":{"start_line":266,"start_character":31,"end_line":266,"end_character":54},"in_reply_to":"0af1bba1_6f6bdb46","updated":"2021-07-17 03:44:37.000000000","message":"I agree with you and it\u0027s better and simpler to use dict instead here.\n# I included results of my quick validations in the updated commit message.\n\nI updated the patch accordingly.","commit_id":"b9958f30b01476fd178b4941b1ae48fcfd9a112e"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"0882090e7de2c6b49081e932a873ba5f4e857bed","unresolved":true,"context_lines":[{"line_number":260,"context_line":"            raise ValueError(\u0027crypto meta not a string\u0027)"},{"line_number":261,"context_line":"        val \u003d json.loads(urlparse.unquote_plus(value))"},{"line_number":262,"context_line":"        if not isinstance(val, dict):"},{"line_number":263,"context_line":"            raise ValueError(\u0027crypto meta not a Mapping\u0027)"},{"line_number":264,"context_line":"        return b64_decode_meta(val)"},{"line_number":265,"context_line":"    except (KeyError, ValueError, TypeError) as err:"},{"line_number":266,"context_line":"        msg \u003d \u0027Bad crypto meta %r: %s\u0027 % (value, err)"}],"source_content_type":"text/x-python","patch_set":2,"id":"5fc9585f_3ac5ed01","line":263,"updated":"2021-07-17 04:45:49.000000000","message":"Well strictly speaking it wasn\u0027t a Mapping, so this message should be something like \"bad syntax of crypto metadata, needs a JSON dict\". But whatever.","commit_id":"775ad9a56882b387e834eae7635f9f1ffa7c2f2c"}]}
