)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"a5649c33dc0fc36f54ab587c8a630bcc7272bcfb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f498db02_8f3c0617","updated":"2026-10-13 15:21:49.000000000","message":"If you rebase your patch on top of this one, it should eventually pass tests with FIPS enabled: 1010186: Add a non-voting FIPS job for the unit tests | https://review.opendev.org/c/openstack/python-swiftclient/+/1010186","commit_id":"3692e5134365e3a1aea12a36393ff1aeb5f20b0e"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"971bec5ac53546b21ef30384979567bd0c49dbb1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"9210201d_d0e09b13","updated":"2026-10-13 13:45:04.000000000","message":"Thx for working on this!\n\nThe code proposed right now looks good, but this is missing a couple of required changes in tests/. Running tests on a FIPS-enabled node will fail (this is not tested in CI yet, thus Zuul reported a +1). I think this is required because packagers likely want to run tests with FIPS enabled.","commit_id":"3692e5134365e3a1aea12a36393ff1aeb5f20b0e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5a33bd7099c12d555140944e73b53d04a79ebc70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"92efd8aa_1548a6b9","updated":"2026-10-13 23:30:14.000000000","message":"-1 for the stray empty file, but I wouldn\u0027t mind seeing a little more test coverage for the new `md5` helper. I\u0027m not worried about the failed py310 job; https://review.opendev.org/c/openstack/python-swiftclient/+/1010304 will square it.","commit_id":"659f9eac4878ea37e8c66fff375ce93423424f81"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1b2f42112b7dd7640fac9ac170065ad803cf6850","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"46a58ce4_27619edc","updated":"2026-10-13 18:55:22.000000000","message":"check experimental","commit_id":"659f9eac4878ea37e8c66fff375ce93423424f81"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"4f20e9047c1f16d26d8a07247b8d014aec922608","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8e2f2391_edea4310","updated":"2026-10-14 14:22:11.000000000","message":"LGTM!\n\nnon-voting FIPS job fails without this patch, succeeds with it.","commit_id":"eec02fdcaba420e46cf70fdf55fc1cd094ff4117"}],"object":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5a33bd7099c12d555140944e73b53d04a79ebc70","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"248f0bf4_cadd93b8","updated":"2026-10-13 23:30:14.000000000","message":"Accidentally included?","commit_id":"659f9eac4878ea37e8c66fff375ce93423424f81"},{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"change_message_id":"da61ee1e4eb712241b868bae8fb53b28e5dff301","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b36be7e8_b45dad2e","in_reply_to":"248f0bf4_cadd93b8","updated":"2026-10-14 07:39:37.000000000","message":"Yes, removed.","commit_id":"659f9eac4878ea37e8c66fff375ce93423424f81"}],"swiftclient/utils.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"971bec5ac53546b21ef30384979567bd0c49dbb1","unresolved":true,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"def _content_md5(enabled):"},{"line_number":342,"context_line":"    # The MD5 is an integrity check against the ETag, not a security function."},{"line_number":343,"context_line":"    return md5(usedforsecurity\u003dFalse) if enabled else NoopMD5()"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"30dec421_fe886594","line":342,"updated":"2026-10-13 13:45:04.000000000","message":"I think it would be helpful if the comment mentions that the helper is needed because md5 is already a keyword in the functions that use it.","commit_id":"3692e5134365e3a1aea12a36393ff1aeb5f20b0e"},{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"change_message_id":"780c3847fd9ba60f2af67e3a66d0e747a32b58bb","unresolved":false,"context_lines":[{"line_number":339,"context_line":""},{"line_number":340,"context_line":""},{"line_number":341,"context_line":"def _content_md5(enabled):"},{"line_number":342,"context_line":"    # The MD5 is an integrity check against the ETag, not a security function."},{"line_number":343,"context_line":"    return md5(usedforsecurity\u003dFalse) if enabled else NoopMD5()"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7323f2_e972ad44","line":342,"in_reply_to":"30dec421_fe886594","updated":"2026-10-13 15:26:57.000000000","message":"Done","commit_id":"3692e5134365e3a1aea12a36393ff1aeb5f20b0e"}],"test/unit/test_utils.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"5a33bd7099c12d555140944e73b53d04a79ebc70","unresolved":true,"context_lines":[{"line_number":536,"context_line":"                           u\u0027\u0026swiftinfo_expires\u003d1400003600\u0027)"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"class TestMD5(unittest.TestCase):"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    @mock.patch(\u0027swiftclient.utils.hashlib.md5\u0027)"},{"line_number":542,"context_line":"    def test_usedforsecurity_passed_through(self, mock_md5):"}],"source_content_type":"text/x-python","patch_set":2,"id":"db59b598_5d04f7b7","line":539,"updated":"2026-10-13 23:30:14.000000000","message":"Would probably also be nice to have something like\n```\n   @mock.patch(\u0027swiftclient.utils.hashlib.md5\u0027)\n    def test_usedforsecurity_defaults_to_true(self, mock_md5):\n        self.assertIs(mock_md5.return_value, u.md5(b\u0027abc\u0027))\n        mock_md5.assert_called_once_with(b\u0027abc\u0027, usedforsecurity\u003dTrue)\n```","commit_id":"659f9eac4878ea37e8c66fff375ce93423424f81"},{"author":{"_account_id":7102,"name":"Thomas Bechtold","email":"thomas.bechtold@chainguard.dev","username":"toabctl"},"change_message_id":"da61ee1e4eb712241b868bae8fb53b28e5dff301","unresolved":false,"context_lines":[{"line_number":536,"context_line":"                           u\u0027\u0026swiftinfo_expires\u003d1400003600\u0027)"},{"line_number":537,"context_line":""},{"line_number":538,"context_line":""},{"line_number":539,"context_line":"class TestMD5(unittest.TestCase):"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    @mock.patch(\u0027swiftclient.utils.hashlib.md5\u0027)"},{"line_number":542,"context_line":"    def test_usedforsecurity_passed_through(self, mock_md5):"}],"source_content_type":"text/x-python","patch_set":2,"id":"b5a4245b_e133a96d","line":539,"in_reply_to":"db59b598_5d04f7b7","updated":"2026-10-14 07:39:37.000000000","message":"Done","commit_id":"659f9eac4878ea37e8c66fff375ce93423424f81"}]}
