)]}'
{"swift/common/middleware/s3api/s3api.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":274,"context_line":"        self.conf.allow_multipart_uploads \u003d config_true_value("},{"line_number":275,"context_line":"            conf.get(\u0027allow_multipart_uploads\u0027, True))"},{"line_number":276,"context_line":"        self.conf.min_segment_size \u003d config_positive_int_value("},{"line_number":277,"context_line":"            conf.get(\u0027min_segment_size\u0027, 5242880))"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        self.logger \u003d get_logger("},{"line_number":280,"context_line":"            conf, log_route\u003dconf.get(\u0027log_name\u0027, \u0027s3api\u0027))"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a5b40b6_9ee8b6ba","line":277,"updated":"2021-01-12 14:41:00.000000000","message":"can the above config init be moved to Config().__init__ and some of the defaulting de-duped?","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        self.logger \u003d get_logger("},{"line_number":280,"context_line":"            conf, log_route\u003dconf.get(\u0027log_name\u0027, \u0027s3api\u0027))"},{"line_number":281,"context_line":"        self.slo_enabled \u003d self.conf.allow_multipart_uploads"},{"line_number":282,"context_line":"        self.check_pipeline(self.conf)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def __call__(self, env, start_response):"}],"source_content_type":"text/x-python","patch_set":5,"id":"bedab7cd_b10d2274","line":281,"updated":"2021-01-12 14:41:00.000000000","message":"something subtle going on here? what is conf.slo_enabled used for?","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"890e522590572e45e987e7ce484e02a75fcde54d","unresolved":false,"context_lines":[{"line_number":278,"context_line":""},{"line_number":279,"context_line":"        self.logger \u003d get_logger("},{"line_number":280,"context_line":"            conf, log_route\u003dconf.get(\u0027log_name\u0027, \u0027s3api\u0027))"},{"line_number":281,"context_line":"        self.slo_enabled \u003d self.conf.allow_multipart_uploads"},{"line_number":282,"context_line":"        self.check_pipeline(self.conf)"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"    def __call__(self, env, start_response):"}],"source_content_type":"text/x-python","patch_set":5,"id":"1bb146fb_b519d4c0","line":281,"in_reply_to":"bedab7cd_b10d2274","updated":"2021-01-13 15:35:46.000000000","message":"Done","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":284,"context_line":"    def __call__(self, env, start_response):"},{"line_number":285,"context_line":"        try:"},{"line_number":286,"context_line":"            req_class \u003d get_request_class(env, self.conf.s3_acl)"},{"line_number":287,"context_line":"            req \u003d req_class(env, self.conf, self.app)"},{"line_number":288,"context_line":"            resp \u003d self.handle_request(req)"},{"line_number":289,"context_line":"        except NotS3Request:"},{"line_number":290,"context_line":"            resp \u003d self.app"}],"source_content_type":"text/x-python","patch_set":5,"id":"c274d437_ae34b1f3","line":287,"updated":"2021-01-12 14:41:00.000000000","message":"looks like slo_enabled is a special case - the slo_enabled value can be overridden:\n\nhttps://github.com/openstack/swift/blob/b2efd185ce0cc794a5d94880cb6b4a46075f8db7/swift/common/middleware/s3api/s3api.py#L353-L356","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"890e522590572e45e987e7ce484e02a75fcde54d","unresolved":false,"context_lines":[{"line_number":284,"context_line":"    def __call__(self, env, start_response):"},{"line_number":285,"context_line":"        try:"},{"line_number":286,"context_line":"            req_class \u003d get_request_class(env, self.conf.s3_acl)"},{"line_number":287,"context_line":"            req \u003d req_class(env, self.conf, self.app)"},{"line_number":288,"context_line":"            resp \u003d self.handle_request(req)"},{"line_number":289,"context_line":"        except NotS3Request:"},{"line_number":290,"context_line":"            resp \u003d self.app"}],"source_content_type":"text/x-python","patch_set":5,"id":"8d9d9e7d_c4dffd9f","line":287,"in_reply_to":"c274d437_ae34b1f3","updated":"2021-01-13 15:35:46.000000000","message":"Done","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":533,"context_line":"        #       compatibility of S3acl"},{"line_number":534,"context_line":"        swob.Request.__init__(self, env)"},{"line_number":535,"context_line":"        self.storage_domain \u003d storage_domain"},{"line_number":536,"context_line":"        self.location \u003d location"},{"line_number":537,"context_line":"        self.force_request_log \u003d force_request_log"},{"line_number":538,"context_line":"        self.dns_compliant_bucket_names \u003d dns_compliant_bucket_names"},{"line_number":539,"context_line":"        self.allow_multipart_uploads \u003d allow_multipart_uploads"}],"source_content_type":"text/x-python","patch_set":5,"id":"07424795_bdb28e16","side":"PARENT","line":536,"range":{"start_line":536,"start_character":8,"end_line":536,"end_character":32},"updated":"2021-01-12 14:41:00.000000000","message":"this is referenced in the SigV4Mixin","commit_id":"09a2f93933d42342be3ee33096c4dea28b2a29f7"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":287,"context_line":"                    # for AWS .NET SDK compatibility"},{"line_number":288,"context_line":"                    if not self.scope[key].islower() and \\"},{"line_number":289,"context_line":"                            cred_param[key] \u003d\u003d self.scope[key].lower():"},{"line_number":290,"context_line":"                        self.location \u003d self.location.lower()"},{"line_number":291,"context_line":"                        continue"},{"line_number":292,"context_line":"                    kwargs \u003d {\u0027region\u0027: self.scope[\u0027region\u0027]}"},{"line_number":293,"context_line":"                raise AuthorizationQueryParametersError("}],"source_content_type":"text/x-python","patch_set":5,"id":"d0fdfc31_4ba9ae82","line":290,"updated":"2021-01-12 14:41:00.000000000","message":"self.location isn\u0027t a thing anymore, not sure what\u0027s best: reinstate self.location or make self.conf a mutable clone of the conf passed to __init__\n\ntweaked a unit test to get coverage:\n\n  diff --git a/test/unit/common/middleware/s3api/test_s3request.py \n  b/test/unit/common/middleware/s3api/test_s3request.py\n  index bfd5a6b9b..3fd1a060e 100644\n  --- a/test/unit/common/middleware/s3api/test_s3request.py\n  +++ b/test/unit/common/middleware/s3api/test_s3request.py\n  @@ -673,7 +673,7 @@ class TestRequest(S3ApiTestCase):\n           # Virtual hosted-style\n           self.conf.storage_domain \u003d \u0027s3.test.com\u0027\n           req \u003d Request.blank(\u0027/\u0027, environ\u003denviron, headers\u003dheaders)\n  -        sigv4_req \u003d SigV4Request(req.environ, Config())\n  +        sigv4_req \u003d SigV4Request(req.environ, Config({\u0027location\u0027: \u0027US-East-1\u0027}))\n           uri \u003d sigv4_req._canonical_uri()\n \n           self.assertEqual(uri, b\u0027/\u0027)\n\nthen:\n\n  Launching unittests with arguments python -m unittest test_s3request.TestRequest.test_canonical_uri_sigv4 in /Users/acoles/0dev/openstack/swift/test/unit/common/middleware/s3api\n\n\n  Error\n  Traceback (most recent call last):\n  File \"/Users/acoles/.pyenv/versions/2.7.18/lib/python2.7/unittest/case.py\", line 329, in run\n    testMethod()\n  File \"/Users/acoles/0dev/openstack/swift/test/unit/common/middleware/s3api/test_s3request.py\", line 676, in test_canonical_uri_sigv4\n    sigv4_req \u003d SigV4Request(req.environ, Config({\u0027location\u0027: \u0027us-East-1\u0027}))\n  File \"/Users/acoles/0dev/openstack/swift/swift/common/middleware/s3api/s3request.py\", line 533, in __init__\n    self.access_key, self.signature \u003d self._parse_auth_info()\n  File \"/Users/acoles/0dev/openstack/swift/swift/common/middleware/s3api/s3request.py\", line 689, in _parse_auth_info\n    return self._parse_header_authentication()\n  File \"/Users/acoles/0dev/openstack/swift/swift/common/middleware/s3api/s3request.py\", line 338, in _parse_header_authentication\n    self.location \u003d self.location.lower()\nAttributeError: \u0027SigV4Request\u0027 object has no attribute \u0027location\u0027","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"890e522590572e45e987e7ce484e02a75fcde54d","unresolved":false,"context_lines":[{"line_number":287,"context_line":"                    # for AWS .NET SDK compatibility"},{"line_number":288,"context_line":"                    if not self.scope[key].islower() and \\"},{"line_number":289,"context_line":"                            cred_param[key] \u003d\u003d self.scope[key].lower():"},{"line_number":290,"context_line":"                        self.location \u003d self.location.lower()"},{"line_number":291,"context_line":"                        continue"},{"line_number":292,"context_line":"                    kwargs \u003d {\u0027region\u0027: self.scope[\u0027region\u0027]}"},{"line_number":293,"context_line":"                raise AuthorizationQueryParametersError("}],"source_content_type":"text/x-python","patch_set":5,"id":"79b9da44_dd531e8f","line":290,"in_reply_to":"d0fdfc31_4ba9ae82","updated":"2021-01-13 15:35:46.000000000","message":"Done","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":526,"context_line":"    object_acl \u003d _header_acl_property(\u0027object\u0027)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def __init__(self, env, conf, app\u003dNone):"},{"line_number":529,"context_line":"        # NOTE: app is not used by this class, need for compatibility of S3acl"},{"line_number":530,"context_line":"        swob.Request.__init__(self, env)"},{"line_number":531,"context_line":"        self.conf \u003d conf"},{"line_number":532,"context_line":"        self._timestamp \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa7d2cc8_103b27c7","line":529,"updated":"2021-01-12 14:41:00.000000000","message":"this is so much better!\n\nbut, do we consider this a public interface that someone might be calling from non-swift code? ditto re the public attributes that are deleted","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"18188b5a4710eeccfdace298871b114000ffbe07","unresolved":true,"context_lines":[{"line_number":526,"context_line":"    object_acl \u003d _header_acl_property(\u0027object\u0027)"},{"line_number":527,"context_line":""},{"line_number":528,"context_line":"    def __init__(self, env, conf, app\u003dNone):"},{"line_number":529,"context_line":"        # NOTE: app is not used by this class, need for compatibility of S3acl"},{"line_number":530,"context_line":"        swob.Request.__init__(self, env)"},{"line_number":531,"context_line":"        self.conf \u003d conf"},{"line_number":532,"context_line":"        self._timestamp \u003d None"}],"source_content_type":"text/x-python","patch_set":5,"id":"f7de3402_15137a6f","line":529,"in_reply_to":"fa7d2cc8_103b27c7","updated":"2021-01-13 19:14:16.000000000","message":"I\u0027d vote no -- while we should certainly keep that in mind for something like swob.Request (it\u0027s part of why I finally settled on WSGI strings for the interfaces there), I consider S3Request an internal detail of s3api. I can\u0027t really imagine any code outside of this translation layer wanting to instantiate or otherwise use an S3Request.","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":528,"context_line":"    def __init__(self, env, conf, app\u003dNone):"},{"line_number":529,"context_line":"        # NOTE: app is not used by this class, need for compatibility of S3acl"},{"line_number":530,"context_line":"        swob.Request.__init__(self, env)"},{"line_number":531,"context_line":"        self.conf \u003d conf"},{"line_number":532,"context_line":"        self._timestamp \u003d None"},{"line_number":533,"context_line":"        self.access_key, self.signature \u003d self._parse_auth_info()"},{"line_number":534,"context_line":"        self.bucket_in_host \u003d self._parse_host()"}],"source_content_type":"text/x-python","patch_set":5,"id":"421b4842_3d814dc0","line":531,"updated":"2021-01-12 14:41:00.000000000","message":"maybe raise an AttributeError if conf is None? although swob.Request seems happy to take env\u003d\u003dNone\n\n(see above) we might want to have self.conf \u003d Config(conf) so that self.conf.location can be updated","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":1017,"context_line":"        if self.is_service_request:"},{"line_number":1018,"context_line":"            return ServiceController"},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"        if not self.conf.slo_enabled:"},{"line_number":1021,"context_line":"            multi_part \u003d [\u0027partNumber\u0027, \u0027uploadId\u0027, \u0027uploads\u0027]"},{"line_number":1022,"context_line":"            if len([p for p in multi_part if p in self.params]):"},{"line_number":1023,"context_line":"                raise S3NotImplemented(\"Multi-part feature isn\u0027t support\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"dc7ef2ce_22a37ea1","line":1020,"updated":"2021-01-12 14:41:00.000000000","message":"tis condition was previously based off self.lo_enabled \u003d\u003d self.conf.allow_multipart_uploads (but possibly overridden) ?!?\n\nI couldn\u0027t find any test that drops into this clause :\u0027(","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"890e522590572e45e987e7ce484e02a75fcde54d","unresolved":false,"context_lines":[{"line_number":1017,"context_line":"        if self.is_service_request:"},{"line_number":1018,"context_line":"            return ServiceController"},{"line_number":1019,"context_line":""},{"line_number":1020,"context_line":"        if not self.conf.slo_enabled:"},{"line_number":1021,"context_line":"            multi_part \u003d [\u0027partNumber\u0027, \u0027uploadId\u0027, \u0027uploads\u0027]"},{"line_number":1022,"context_line":"            if len([p for p in multi_part if p in self.params]):"},{"line_number":1023,"context_line":"                raise S3NotImplemented(\"Multi-part feature isn\u0027t support\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"e1f5a0e3_b4b21b98","line":1020,"in_reply_to":"dc7ef2ce_22a37ea1","updated":"2021-01-13 15:35:46.000000000","message":"Done","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":1478,"context_line":"                \u0027unexpected status code %d\u0027 % info[\u0027status\u0027])"},{"line_number":1479,"context_line":""},{"line_number":1480,"context_line":"    def gen_multipart_manifest_delete_query(self, app, obj\u003dNone, version\u003dNone):"},{"line_number":1481,"context_line":"        if not self.conf.allow_multipart_uploads:"},{"line_number":1482,"context_line":"            return {}"},{"line_number":1483,"context_line":"        if not obj:"},{"line_number":1484,"context_line":"            obj \u003d self.object_name"}],"source_content_type":"text/x-python","patch_set":5,"id":"2847affb_9af786e5","line":1481,"updated":"2021-01-12 14:41:00.000000000","message":"something subtle is going on... slo_enabled vs conf.allow_multipart_uploads, but not always:\n\nhttps://github.com/openstack/swift/blob/b2efd185ce0cc794a5d94880cb6b4a46075f8db7/swift/common/middleware/s3api/s3api.py#L281","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"18188b5a4710eeccfdace298871b114000ffbe07","unresolved":true,"context_lines":[{"line_number":529,"context_line":"        # NOTE: app is not used by this class, need for compatibility of S3acl"},{"line_number":530,"context_line":"        swob.Request.__init__(self, env)"},{"line_number":531,"context_line":"        self.conf \u003d conf"},{"line_number":532,"context_line":"        self.location \u003d self.conf.location"},{"line_number":533,"context_line":"        self._timestamp \u003d None"},{"line_number":534,"context_line":"        self.access_key, self.signature \u003d self._parse_auth_info()"},{"line_number":535,"context_line":"        self.bucket_in_host \u003d self._parse_host()"}],"source_content_type":"text/x-python","patch_set":6,"id":"f93c1b59_c790d233","line":532,"updated":"2021-01-13 19:14:16.000000000","message":"Well there\u0027s our AttributeError if conf is None ;-)","commit_id":"149c0a78038a4336487f065504c7d36a2288e498"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"18188b5a4710eeccfdace298871b114000ffbe07","unresolved":true,"context_lines":[{"line_number":1146,"context_line":"                    if key.startswith(\u0027HTTP_X_OBJECT_META_\u0027):"},{"line_number":1147,"context_line":"                        del env[key]"},{"line_number":1148,"context_line":""},{"line_number":1149,"context_line":"        if self.conf.force_swift_request_proxy_log:"},{"line_number":1150,"context_line":"            env[\u0027swift.proxy_access_log_made\u0027] \u003d False"},{"line_number":1151,"context_line":"        env[\u0027swift.source\u0027] \u003d \u0027S3\u0027"},{"line_number":1152,"context_line":"        if method is not None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"4e3aa2c1_6821425a","line":1149,"updated":"2021-01-13 19:14:16.000000000","message":"Well spotted!","commit_id":"149c0a78038a4336487f065504c7d36a2288e498"}],"swift/common/middleware/s3api/utils.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class Config(dict):"},{"line_number":155,"context_line":"    DEFAULTS \u003d {"},{"line_number":156,"context_line":"        \u0027slo_enabled\u0027: True,"},{"line_number":157,"context_line":"        \u0027storage_domain\u0027: \u0027\u0027,"},{"line_number":158,"context_line":"        \u0027location\u0027: \u0027us-east-1\u0027,"},{"line_number":159,"context_line":"        \u0027force_request_log\u0027: False,"}],"source_content_type":"text/x-python","patch_set":5,"id":"158c5d88_da2e16d3","line":156,"updated":"2021-01-12 14:41:00.000000000","message":"can\u0027t see where this is ever set to anything else","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"890e522590572e45e987e7ce484e02a75fcde54d","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"class Config(dict):"},{"line_number":155,"context_line":"    DEFAULTS \u003d {"},{"line_number":156,"context_line":"        \u0027slo_enabled\u0027: True,"},{"line_number":157,"context_line":"        \u0027storage_domain\u0027: \u0027\u0027,"},{"line_number":158,"context_line":"        \u0027location\u0027: \u0027us-east-1\u0027,"},{"line_number":159,"context_line":"        \u0027force_request_log\u0027: False,"}],"source_content_type":"text/x-python","patch_set":5,"id":"6791e8f4_1fc2bf0e","line":156,"in_reply_to":"158c5d88_da2e16d3","updated":"2021-01-13 15:35:46.000000000","message":"Done","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":156,"context_line":"        \u0027slo_enabled\u0027: True,"},{"line_number":157,"context_line":"        \u0027storage_domain\u0027: \u0027\u0027,"},{"line_number":158,"context_line":"        \u0027location\u0027: \u0027us-east-1\u0027,"},{"line_number":159,"context_line":"        \u0027force_request_log\u0027: False,"},{"line_number":160,"context_line":"        \u0027dns_compliant_bucket_names\u0027: True,"},{"line_number":161,"context_line":"        \u0027allow_multipart_uploads\u0027: True,"},{"line_number":162,"context_line":"        \u0027allow_no_owner\u0027: False,"}],"source_content_type":"text/x-python","patch_set":5,"id":"f2549791_3df7dce3","line":159,"updated":"2021-01-12 14:41:00.000000000","message":"ditto - is this confused with force_swift_request_proxy_log?","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"890e522590572e45e987e7ce484e02a75fcde54d","unresolved":false,"context_lines":[{"line_number":156,"context_line":"        \u0027slo_enabled\u0027: True,"},{"line_number":157,"context_line":"        \u0027storage_domain\u0027: \u0027\u0027,"},{"line_number":158,"context_line":"        \u0027location\u0027: \u0027us-east-1\u0027,"},{"line_number":159,"context_line":"        \u0027force_request_log\u0027: False,"},{"line_number":160,"context_line":"        \u0027dns_compliant_bucket_names\u0027: True,"},{"line_number":161,"context_line":"        \u0027allow_multipart_uploads\u0027: True,"},{"line_number":162,"context_line":"        \u0027allow_no_owner\u0027: False,"}],"source_content_type":"text/x-python","patch_set":5,"id":"22530d02_087a6eb7","line":159,"in_reply_to":"f2549791_3df7dce3","updated":"2021-01-13 15:35:46.000000000","message":"Done","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"}],"test/unit/common/middleware/s3api/test_s3request.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"312b0c3cb5f170cfe2139e98f14ac82575d4f2f2","unresolved":true,"context_lines":[{"line_number":671,"context_line":"            \u0027X-Amz-Date\u0027: x_amz_date}"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        # Virtual hosted-style"},{"line_number":674,"context_line":"        self.conf.storage_domain \u003d \u0027s3.test.com\u0027"},{"line_number":675,"context_line":"        req \u003d Request.blank(\u0027/\u0027, environ\u003denviron, headers\u003dheaders)"},{"line_number":676,"context_line":"        sigv4_req \u003d SigV4Request(req.environ, Config())"},{"line_number":677,"context_line":"        uri \u003d sigv4_req._canonical_uri()"}],"source_content_type":"text/x-python","patch_set":5,"id":"d22b4716_3c2c494a","line":674,"updated":"2021-01-12 14:41:00.000000000","message":"this seems inconsequential?","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7d63dcdef91afce63676803a4eda374dd6210bad","unresolved":true,"context_lines":[{"line_number":671,"context_line":"            \u0027X-Amz-Date\u0027: x_amz_date}"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        # Virtual hosted-style"},{"line_number":674,"context_line":"        self.conf.storage_domain \u003d \u0027s3.test.com\u0027"},{"line_number":675,"context_line":"        req \u003d Request.blank(\u0027/\u0027, environ\u003denviron, headers\u003dheaders)"},{"line_number":676,"context_line":"        sigv4_req \u003d SigV4Request(req.environ, Config())"},{"line_number":677,"context_line":"        uri \u003d sigv4_req._canonical_uri()"}],"source_content_type":"text/x-python","patch_set":5,"id":"d5a7a07f_ac0c9b4a","line":674,"in_reply_to":"8aa50384_000e90e7","updated":"2021-01-14 01:36:27.000000000","message":"I stand corrected -- from https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html#example-signature-GET-object it looks like the canonical_uri really *is* /obj1 (since the host header specifying the bucket is baked into the signature elsewhere).\n\nThis test is fine. We specify the storage domain for completeness and to guard against our v4 handler piggy-backing off the v2 handler (which does it differently).","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"18188b5a4710eeccfdace298871b114000ffbe07","unresolved":true,"context_lines":[{"line_number":671,"context_line":"            \u0027X-Amz-Date\u0027: x_amz_date}"},{"line_number":672,"context_line":""},{"line_number":673,"context_line":"        # Virtual hosted-style"},{"line_number":674,"context_line":"        self.conf.storage_domain \u003d \u0027s3.test.com\u0027"},{"line_number":675,"context_line":"        req \u003d Request.blank(\u0027/\u0027, environ\u003denviron, headers\u003dheaders)"},{"line_number":676,"context_line":"        sigv4_req \u003d SigV4Request(req.environ, Config())"},{"line_number":677,"context_line":"        uri \u003d sigv4_req._canonical_uri()"}],"source_content_type":"text/x-python","patch_set":5,"id":"8aa50384_000e90e7","line":674,"in_reply_to":"d22b4716_3c2c494a","updated":"2021-01-13 19:14:16.000000000","message":"😞\n\nTest appears to be wrong/broken. Surely the assertions below ought to be more like\n\n self.assertEqual(uri, b\u0027/bucket\u0027)\n\nand\n\n self.assertEqual(uri, b\u0027/bucket/obj1\u0027)","commit_id":"899d24e130b1db22582967671964ad91bfb6e422"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"18188b5a4710eeccfdace298871b114000ffbe07","unresolved":true,"context_lines":[{"line_number":842,"context_line":"        auth \u003d (\u0027AWS4-HMAC-SHA256 \u0027"},{"line_number":843,"context_line":"                \u0027Credential\u003dtest/%s/us-east-1/s3/aws4_request,\u0027"},{"line_number":844,"context_line":"                \u0027SignedHeaders\u003dhost;x-amz-content-sha256;x-amz-date,\u0027"},{"line_number":845,"context_line":"                \u0027Signature\u003dX\u0027 % self.get_v4_amz_date_header().split(\u0027T\u0027, 1)[0])"},{"line_number":846,"context_line":"        # location lowercase matches"},{"line_number":847,"context_line":"        sigv4_req \u003d do_check_ok(Config({\u0027location\u0027: \u0027us-east-1\u0027}), auth)"},{"line_number":848,"context_line":"        self.assertEqual(\u0027us-east-1\u0027, sigv4_req.location)"}],"source_content_type":"text/x-python","patch_set":6,"id":"280303b0_9dbf00a8","line":845,"range":{"start_line":845,"start_character":32,"end_line":845,"end_character":78},"updated":"2021-01-13 19:14:16.000000000","message":"I should probably make a helper for this; something like self.get_v4_date_for_credential() maybe.","commit_id":"149c0a78038a4336487f065504c7d36a2288e498"}]}
