)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"0687905913a5b1a483bb2c621bdcae9c1a4fe811","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3b21d917_4b6cf0d1","updated":"2025-04-15 18:50:07.000000000","message":"Curious about something, perhaps not enough for -1.","commit_id":"953ad07c830cf080bc4cd01228bc0a7be2a07172"}],"swift/common/middleware/s3api/s3api.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"0687905913a5b1a483bb2c621bdcae9c1a4fe811","unresolved":true,"context_lines":[{"line_number":346,"context_line":"            return [b\u0027\u0027]"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        try:"},{"line_number":349,"context_line":"            req_class, checker_class \u003d get_request_and_sig_checker_classes("},{"line_number":350,"context_line":"                env, self.conf.s3_acl)"},{"line_number":351,"context_line":"            req \u003d req_class(env, self.app, self.conf, checker_class)"},{"line_number":352,"context_line":"            resp \u003d self.handle_request(req)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9064c162_682b9e90","line":349,"updated":"2025-04-15 18:50:07.000000000","message":"Eww, what a mouthful. :-)","commit_id":"953ad07c830cf080bc4cd01228bc0a7be2a07172"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cda045f773ca8750f878ae43c13de56effce804b","unresolved":true,"context_lines":[{"line_number":346,"context_line":"            return [b\u0027\u0027]"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        try:"},{"line_number":349,"context_line":"            req_class, checker_class \u003d get_request_and_sig_checker_classes("},{"line_number":350,"context_line":"                env, self.conf.s3_acl)"},{"line_number":351,"context_line":"            req \u003d req_class(env, self.app, self.conf, checker_class)"},{"line_number":352,"context_line":"            resp \u003d self.handle_request(req)"}],"source_content_type":"text/x-python","patch_set":1,"id":"afb274db_387e7928","line":349,"in_reply_to":"9064c162_682b9e90","updated":"2025-04-16 01:16:45.000000000","message":"FWIW, the goal is to eventually get rid of `SigV4Mixin` -- but I think it\u0027s going to take a few iterations to get to that point.","commit_id":"953ad07c830cf080bc4cd01228bc0a7be2a07172"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"71f4b64495134e70cdf74d123c61415be12f4bc6","unresolved":true,"context_lines":[{"line_number":346,"context_line":"            return [b\u0027\u0027]"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        try:"},{"line_number":349,"context_line":"            req_class, checker_class \u003d get_request_and_sig_checker_classes("},{"line_number":350,"context_line":"                env, self.conf.s3_acl)"},{"line_number":351,"context_line":"            req \u003d req_class(env, self.app, self.conf, checker_class)"},{"line_number":352,"context_line":"            resp \u003d self.handle_request(req)"}],"source_content_type":"text/x-python","patch_set":1,"id":"21b9561a_8ba02d00","line":349,"in_reply_to":"afb274db_387e7928","updated":"2025-04-16 09:17:16.000000000","message":"maybe a factory to hide the gory details e.g.:\n\n``req \u003d s3request.request_factory(env, self.app, self.conf)``","commit_id":"953ad07c830cf080bc4cd01228bc0a7be2a07172"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"0687905913a5b1a483bb2c621bdcae9c1a4fe811","unresolved":true,"context_lines":[{"line_number":642,"context_line":"    bucket_acl \u003d _header_acl_property(\u0027container\u0027)"},{"line_number":643,"context_line":"    object_acl \u003d _header_acl_property(\u0027object\u0027)"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"    def __init__(self, env, app\u003dNone, conf\u003dNone, sig_checker_class\u003dBaseSigChecker):"},{"line_number":646,"context_line":"        # NOTE: app is not used by this class, need for compatibility of S3acl"},{"line_number":647,"context_line":"        swob.Request.__init__(self, env)"},{"line_number":648,"context_line":"        self.conf \u003d conf or Config()"}],"source_content_type":"text/x-python","patch_set":1,"id":"35e4d5b7_0db488b9","line":645,"range":{"start_line":645,"start_character":67,"end_line":645,"end_character":81},"updated":"2025-04-15 18:50:07.000000000","message":"Is there a single instance of request_classes() being called with implicit sig_checker_class? If not, then what is this default for here, mypy?","commit_id":"953ad07c830cf080bc4cd01228bc0a7be2a07172"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1b1ee4fb79ecb254eac99902a42d109afb3e6f71","unresolved":true,"context_lines":[{"line_number":642,"context_line":"    bucket_acl \u003d _header_acl_property(\u0027container\u0027)"},{"line_number":643,"context_line":"    object_acl \u003d _header_acl_property(\u0027object\u0027)"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"    def __init__(self, env, app\u003dNone, conf\u003dNone, sig_checker_class\u003dBaseSigChecker):"},{"line_number":646,"context_line":"        # NOTE: app is not used by this class, need for compatibility of S3acl"},{"line_number":647,"context_line":"        swob.Request.__init__(self, env)"},{"line_number":648,"context_line":"        self.conf \u003d conf or Config()"}],"source_content_type":"text/x-python","patch_set":1,"id":"bcf200a9_b97739cf","line":645,"range":{"start_line":645,"start_character":67,"end_line":645,"end_character":81},"in_reply_to":"35e4d5b7_0db488b9","updated":"2025-04-15 20:16:33.000000000","message":"Yeah, they should all be explicit. Mostly, I just wanted to be adding to the end, so I needed _some_ default, `None` definitely seemed wrong, and all the `NotImplementedError`s made it reasonably easy to find where all needed updating (though maybe `AttributeError` would have worked just as well). I suppose I could have made the signature more like\n```\ndef __init__(self, sig_checker_class, env, app\u003dNone, conf\u003dNone):\n```\nor something... either way there was going to be a lot of test churn.","commit_id":"953ad07c830cf080bc4cd01228bc0a7be2a07172"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"71f4b64495134e70cdf74d123c61415be12f4bc6","unresolved":true,"context_lines":[{"line_number":643,"context_line":"    object_acl \u003d _header_acl_property(\u0027object\u0027)"},{"line_number":644,"context_line":""},{"line_number":645,"context_line":"    def __init__(self, env, app\u003dNone, conf\u003dNone,"},{"line_number":646,"context_line":"                 sig_checker_class\u003dBaseSigChecker):"},{"line_number":647,"context_line":"        # NOTE: app is not used by this class, need for compatibility of S3acl"},{"line_number":648,"context_line":"        swob.Request.__init__(self, env)"},{"line_number":649,"context_line":"        self.conf \u003d conf or Config()"}],"source_content_type":"text/x-python","patch_set":2,"id":"ee209c65_ee164ac2","line":646,"updated":"2025-04-16 09:17:16.000000000","message":"In principle this pattern looks ok.\n\nIn practice, what I am bothered by is that over in the chunked transfer patch we instantiate a StreamingInput that assumes it has a SigCheckerV4 (here, where we call ``self._sig_checker.check_chunk_signature`` , https://review.opendev.org/c/openstack/swift/+/836755/73/swift/common/middleware/s3api/s3request.py#311) and it is *non-obvious* that we\u0027d only be using a StreamingInput if we had installed a SigCheckerv4.\n\nThe same is true of the parent to this patch, but I was at least hoping to move the points of installation closer to make it more obvious that there is a tight coupling between use of SigCheckerV4 and StreamingInput.\n\ne.g. somewhere around here https://review.opendev.org/c/openstack/swift/+/836755/comment/32511307_b4a76bf4/\nalso use ``isinstance(self, SigV4Mixin)`` as a condition for installing a StreamingInputWrapper.","commit_id":"fd4e08923c1d0df6ed572bba5595893472ca1009"}],"test/unit/common/middleware/s3api/test_obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1b1ee4fb79ecb254eac99902a42d109afb3e6f71","unresolved":true,"context_lines":[{"line_number":887,"context_line":"        # No way to determine ETag to send"},{"line_number":888,"context_line":"        self.assertNotIn(\u0027etag\u0027, headers)"},{"line_number":889,"context_line":"        self.assertIn(b\u0027UNSIGNED-PAYLOAD\u0027, SigV4Request("},{"line_number":890,"context_line":"            req.environ, self.s3api.conf)._canonical_request())"},{"line_number":891,"context_line":""},{"line_number":892,"context_line":"    def _test_object_PUT_copy(self, head_resp, put_header\u003dNone,"},{"line_number":893,"context_line":"                              src_path\u003d\u0027/some/source\u0027, timestamp\u003dNone):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3c0a4387_0f986ac2","side":"PARENT","line":890,"updated":"2025-04-15 20:16:33.000000000","message":"Oops -- maybe we should say `conf\u003dself.s3api.conf`?","commit_id":"a93e420d32ecebb28f111e7fcf9e0be7163747af"}],"test/unit/common/middleware/s3api/test_s3request.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1b1ee4fb79ecb254eac99902a42d109afb3e6f71","unresolved":true,"context_lines":[{"line_number":237,"context_line":"                patch.object(Request, \u0027remote_user\u0027, \u0027authorized\u0027):"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"            m_swift_resp.return_value \u003d FakeSwiftResponse()"},{"line_number":240,"context_line":"            s3_req \u003d S3AclRequest(req.environ, self.s3api.conf, None)"},{"line_number":241,"context_line":"            self.assertNotIn(\u0027s3api.auth_details\u0027, s3_req.environ)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def test_to_swift_req_Authorization_not_exist_in_swreq(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"5703e628_c6c2b023","side":"PARENT","line":240,"range":{"start_line":240,"start_character":47,"end_line":240,"end_character":68},"updated":"2025-04-15 20:16:33.000000000","message":"app, conf -- whatever, same difference right?","commit_id":"a93e420d32ecebb28f111e7fcf9e0be7163747af"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cda045f773ca8750f878ae43c13de56effce804b","unresolved":false,"context_lines":[{"line_number":237,"context_line":"                patch.object(Request, \u0027remote_user\u0027, \u0027authorized\u0027):"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"            m_swift_resp.return_value \u003d FakeSwiftResponse()"},{"line_number":240,"context_line":"            s3_req \u003d S3AclRequest(req.environ, self.s3api.conf, None)"},{"line_number":241,"context_line":"            self.assertNotIn(\u0027s3api.auth_details\u0027, s3_req.environ)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"    def test_to_swift_req_Authorization_not_exist_in_swreq(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3b146308_8892e1ef","side":"PARENT","line":240,"range":{"start_line":240,"start_character":47,"end_line":240,"end_character":68},"in_reply_to":"5703e628_c6c2b023","updated":"2025-04-16 01:16:45.000000000","message":"Done","commit_id":"a93e420d32ecebb28f111e7fcf9e0be7163747af"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1b1ee4fb79ecb254eac99902a42d109afb3e6f71","unresolved":true,"context_lines":[{"line_number":870,"context_line":"            \u0027Authorization\u0027: (\u0027AWS AKIAIOSFODNN7EXAMPLE:\u0027"},{"line_number":871,"context_line":"                              \u0027bWq2s1WEIj+Ydj0vQ697zp+IXMU\u003d\u0027),"},{"line_number":872,"context_line":"        })"},{"line_number":873,"context_line":"        sigv2_req \u003d S3Request(req.environ, Config({"},{"line_number":874,"context_line":"            \u0027storage_domains\u0027: [\u0027s3.amazonaws.com\u0027]"},{"line_number":875,"context_line":"        }), sig_checker_class\u003dSigCheckerV2)"},{"line_number":876,"context_line":"        # This is a failure case with utf-8 non-ascii multi-bytes charactor"}],"source_content_type":"text/x-python","patch_set":1,"id":"7de0257f_825b5536","line":873,"updated":"2025-04-15 20:16:33.000000000","message":"Pretty sure this config is coming through as `app`...","commit_id":"953ad07c830cf080bc4cd01228bc0a7be2a07172"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cda045f773ca8750f878ae43c13de56effce804b","unresolved":false,"context_lines":[{"line_number":870,"context_line":"            \u0027Authorization\u0027: (\u0027AWS AKIAIOSFODNN7EXAMPLE:\u0027"},{"line_number":871,"context_line":"                              \u0027bWq2s1WEIj+Ydj0vQ697zp+IXMU\u003d\u0027),"},{"line_number":872,"context_line":"        })"},{"line_number":873,"context_line":"        sigv2_req \u003d S3Request(req.environ, Config({"},{"line_number":874,"context_line":"            \u0027storage_domains\u0027: [\u0027s3.amazonaws.com\u0027]"},{"line_number":875,"context_line":"        }), sig_checker_class\u003dSigCheckerV2)"},{"line_number":876,"context_line":"        # This is a failure case with utf-8 non-ascii multi-bytes charactor"}],"source_content_type":"text/x-python","patch_set":1,"id":"1f73bf9b_ce77070e","line":873,"in_reply_to":"7de0257f_825b5536","updated":"2025-04-16 01:16:45.000000000","message":"Done","commit_id":"953ad07c830cf080bc4cd01228bc0a7be2a07172"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"1b1ee4fb79ecb254eac99902a42d109afb3e6f71","unresolved":true,"context_lines":[{"line_number":890,"context_line":"            \u0027X-Amz-Date\u0027: amz_date_header"},{"line_number":891,"context_line":"        })"},{"line_number":892,"context_line":"        sigv4_req \u003d SigV4Request("},{"line_number":893,"context_line":"            req.environ, Config({\u0027storage_domains\u0027: [\u0027s3.amazonaws.com\u0027]}),"},{"line_number":894,"context_line":"            sig_checker_class\u003dSigCheckerV4)"},{"line_number":895,"context_line":"        self.assertFalse(sigv4_req.sig_checker.check_signature("},{"line_number":896,"context_line":"            u\u0027\\u30c9\\u30e9\\u30b4\\u30f3\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"134d598b_2704e171","line":893,"updated":"2025-04-15 20:16:33.000000000","message":"ditto","commit_id":"953ad07c830cf080bc4cd01228bc0a7be2a07172"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"cda045f773ca8750f878ae43c13de56effce804b","unresolved":false,"context_lines":[{"line_number":890,"context_line":"            \u0027X-Amz-Date\u0027: amz_date_header"},{"line_number":891,"context_line":"        })"},{"line_number":892,"context_line":"        sigv4_req \u003d SigV4Request("},{"line_number":893,"context_line":"            req.environ, Config({\u0027storage_domains\u0027: [\u0027s3.amazonaws.com\u0027]}),"},{"line_number":894,"context_line":"            sig_checker_class\u003dSigCheckerV4)"},{"line_number":895,"context_line":"        self.assertFalse(sigv4_req.sig_checker.check_signature("},{"line_number":896,"context_line":"            u\u0027\\u30c9\\u30e9\\u30b4\\u30f3\u0027))"}],"source_content_type":"text/x-python","patch_set":1,"id":"0efc70c4_bd174b78","line":893,"in_reply_to":"134d598b_2704e171","updated":"2025-04-16 01:16:45.000000000","message":"Done","commit_id":"953ad07c830cf080bc4cd01228bc0a7be2a07172"}]}
