)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":22042,"name":"Chris Smart","email":"distroguy@gmail.com","username":"csmart"},"change_message_id":"2a0a602c22694e289e84fa98389e46a7674296fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7193e855_395a8f73","updated":"2023-10-03 04:52:43.000000000","message":"LGTM, thanks Matt. Nit, commit message needs a couple of fix ups 😊","commit_id":"4f533a1399ed806fca95bba8be00fc4927aa4f56"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"d0bccb4d33070b0283b866dab3522041a1054528","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"46014e5e_db8d37fe","updated":"2023-10-03 05:36:45.000000000","message":"Seems promising:\n\n    vagrant@saio8:~$ aws s3 mb s3://bucket\n    make_bucket: bucket\n    vagrant@saio8:~$ swift stat\n                           Account: AUTH_test\n                        Containers: 3\n                           Objects: 1\n                             Bytes: 20\n    Containers in policy \"default\": 3\n       Objects in policy \"default\": 1\n         Bytes in policy \"default\": 20\n                      Content-Type: text/plain; charset\u003dutf-8\n                       X-Timestamp: 1692168594.67808\n                     Accept-Ranges: bytes\n                              Vary: Accept\n                        X-Trans-Id: tx5a68f2d3b19f415494f5b-00651ba78c\n            X-Openstack-Request-Id: tx5a68f2d3b19f415494f5b-00651ba78c\n    vagrant@saio8:~$ swift list\n    bucket\n    test\n    test_segments\n    vagrant@saio8:~$ aws s3api get-object-lock-configuration --bucket bucket\n    {\n        \"ObjectLockConfiguration\": {\n            \"ObjectLockEnabled\": \"Disabled\"\n        }\n    }","commit_id":"4f533a1399ed806fca95bba8be00fc4927aa4f56"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b3816f02fa367c832b6229bb2b0c47888252482","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1b08e74a_49a39d9e","updated":"2023-10-03 15:51:06.000000000","message":"Maybe we should rethink `ALLOWED_SUB_RESOURCES` for sig v2...","commit_id":"ac77e3fd85bb923d841538d29272a78904956fcf"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"bcee69931bc2e5c76d1bbb5bd67162d073ede77c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"049ac570_9ca1b7bc","updated":"2023-10-03 19:15:53.000000000","message":"please a cross-compat test to test/s3api so we can assert our response matches the real s3\n\na func test for \"enable object lock returns not implemeted\" will obviously not be able to go in the cross-compat suite (since AWS *has* implemented per-object-WORM)","commit_id":"ac77e3fd85bb923d841538d29272a78904956fcf"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"cf9111b49183ea7ce28d3cac45d7f618d17aedfe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"c23a24c9_9f85f133","updated":"2023-10-04 03:18:37.000000000","message":"OK pushed a new version of the patch that mimics exactly the same as s3. So I hope ansible respects what s3 does.\n\nHere is an example from a VSAIO:\n\n    2023-10-04 03:15:43,399 - MainThread - urllib3.connectionpool - DEBUG - http://saio8:8080 \"GET /bucket?object-lock HTTP/1.1\" 404 None\n    2023-10-04 03:15:43,400 - MainThread - botocore.parsers - DEBUG - Response headers: {\u0027Content-Type\u0027: \u0027application/xml\u0027, \u0027x-amz-id-2\u0027: \u0027txc085bbc6bc6942a2a7469-00651cd8df\u0027, \u0027x-amz-request-id\u0027: \u0027txc085bbc6bc6942a2a7469-00651cd8df\u0027, \u0027X-Trans-Id\u0027: \u0027txc085bbc6bc6942a2a7469-00651cd8df\u0027, \u0027X-Openstack-Request-Id\u0027: \u0027txc085bbc6bc6942a2a7469-00651cd8df\u0027, \u0027Date\u0027: \u0027Wed, 04 Oct 2023 03:15:43 GMT\u0027, \u0027Transfer-Encoding\u0027: \u0027chunked\u0027}\n    2023-10-04 03:15:43,400 - MainThread - botocore.parsers - DEBUG - Response body:\n    b\"\u003c?xml version\u003d\u00271.0\u0027 encoding\u003d\u0027UTF-8\u0027?\u003e\\n\u003cError\u003e\u003cCode\u003eObjectLockConfigurationNotFoundError\u003c/Code\u003e\u003cMessage\u003eObject Lock configuration does not exist for this bucket\u003c/Message\u003e\u003cRequestId\u003etxc085bbc6bc6942a2a7469-00651cd8df\u003c/RequestId\u003e\u003cBucketName\u003ebucket\u003c/BucketName\u003e\u003c/Error\u003e\"","commit_id":"203b9d7d85673c1198878bb04f9b001821da70b3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4ba6c6c3cbcc2c79582d8b82276aad1bc5b15327","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"c64cf9ca_aa2eb4f1","updated":"2023-10-04 18:16:33.000000000","message":"This is shaping up nicely! Looks like `doc/s3api/conf/ceph-known-failures-tempauth.yaml` could use some updates, though:\n```NEW_FAILURE:\ns3tests_boto3.functional.test_s3.test_object_lock_put_obj_lock_with_days_and_years\ns3tests_boto3.functional.test_s3.test_object_lock_put_obj_lock_invalid_years\ns3tests_boto3.functional.test_s3.test_object_lock_put_obj_lock_invalid_status\n\nUNEXPECTED_PASS:\ns3tests_boto3.functional.test_s3.test_object_lock_get_obj_lock_invalid_bucket\n```\n(Those new failures were previously passing for all the wrong reasons... Might be easy enough to get them passing for the *right* reasons while still leaving valid requests to 501, but I\u0027d be fine with us just updating our expectations.)","commit_id":"543458b762e26e008027026e3cff87354e72bf0c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"490b53169878641d28bd9afdeb39424d665587c5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"88d75438_fa94a2a8","updated":"2023-10-12 05:21:25.000000000","message":"Ben, one of our awesome SRE\u0027s tested this patch with against anisble. And our roles that were failing now pass poining to swift this is patch. So I think it\u0027s good to go!","commit_id":"0996433fe5fb8590eda1111e88ba74ab28d4508a"}],"swift/common/middleware/s3api/controllers/object_lock.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"4e02671c152d1ede7bf842cca6fdbc436d5908c7","unresolved":true,"context_lines":[{"line_number":24,"context_line":"class ObjectLockController(Controller):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    Handles GET object-lock request, which always returns"},{"line_number":27,"context_line":"    \"ObjectLockEnabled\": false"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":"    @public"},{"line_number":30,"context_line":"    @bucket_operation"}],"source_content_type":"text/x-python","patch_set":2,"id":"96d28191_cdbe7497","line":27,"range":{"start_line":27,"start_character":25,"end_line":27,"end_character":30},"updated":"2023-10-03 04:58:59.000000000","message":"This is actually incorrect, it returns \u0027Disabled\u0027.. because XML. and Enabled is what s3 returns when its enabled... so I assume Disabled is the reverse.","commit_id":"4f533a1399ed806fca95bba8be00fc4927aa4f56"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0c5ab1f29051dd54b404419dd7777d47e72a9731","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class ObjectLockController(Controller):"},{"line_number":25,"context_line":"    \"\"\""},{"line_number":26,"context_line":"    Handles GET object-lock request, which always returns"},{"line_number":27,"context_line":"    \"ObjectLockEnabled\": false"},{"line_number":28,"context_line":"    \"\"\""},{"line_number":29,"context_line":"    @public"},{"line_number":30,"context_line":"    @bucket_operation"}],"source_content_type":"text/x-python","patch_set":2,"id":"55a50d55_9e255527","line":27,"range":{"start_line":27,"start_character":25,"end_line":27,"end_character":30},"in_reply_to":"96d28191_cdbe7497","updated":"2023-10-03 05:49:10.000000000","message":"Done","commit_id":"4f533a1399ed806fca95bba8be00fc4927aa4f56"}],"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"4e02671c152d1ede7bf842cca6fdbc436d5908c7","unresolved":true,"context_lines":[{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    Set and retrieve the acl in self.headers"},{"line_number":105,"context_line":"    \"\"\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def getter(self):"},{"line_number":108,"context_line":"        return getattr(self, \u0027_%s\u0027 % resource)"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"6de2e2c7_e42b7880","line":106,"updated":"2023-10-03 04:58:59.000000000","message":"Sigh, I guess vscode went and \"fixed\" the spacing.. might leave it unless everyone complains.","commit_id":"4f533a1399ed806fca95bba8be00fc4927aa4f56"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"ff1c4a94af1a7d7a85e84b3dd0e645e4c24fce15","unresolved":false,"context_lines":[{"line_number":103,"context_line":"    \"\"\""},{"line_number":104,"context_line":"    Set and retrieve the acl in self.headers"},{"line_number":105,"context_line":"    \"\"\""},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"    def getter(self):"},{"line_number":108,"context_line":"        return getattr(self, \u0027_%s\u0027 % resource)"},{"line_number":109,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"0761e687_fdde53f8","line":106,"in_reply_to":"6de2e2c7_e42b7880","updated":"2023-10-12 05:08:29.000000000","message":"Ack","commit_id":"4f533a1399ed806fca95bba8be00fc4927aa4f56"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b3816f02fa367c832b6229bb2b0c47888252482","unresolved":true,"context_lines":[{"line_number":75,"context_line":"    \u0027response-cache-control\u0027, \u0027response-content-disposition\u0027,"},{"line_number":76,"context_line":"    \u0027response-content-encoding\u0027, \u0027response-content-language\u0027,"},{"line_number":77,"context_line":"    \u0027response-content-type\u0027, \u0027response-expires\u0027, \u0027cors\u0027, \u0027tagging\u0027, \u0027restore\u0027"},{"line_number":78,"context_line":"])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"MAX_32BIT_INT \u003d 2147483647"}],"source_content_type":"text/x-python","patch_set":3,"id":"20daace2_c6f96725","line":78,"updated":"2023-10-03 15:51:06.000000000","message":"You\u0027re going to want to update this list IIRC.","commit_id":"ac77e3fd85bb923d841538d29272a78904956fcf"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"cb39ce95d5f6d19e202965f822ad5eabe349d22c","unresolved":true,"context_lines":[{"line_number":75,"context_line":"    \u0027response-cache-control\u0027, \u0027response-content-disposition\u0027,"},{"line_number":76,"context_line":"    \u0027response-content-encoding\u0027, \u0027response-content-language\u0027,"},{"line_number":77,"context_line":"    \u0027response-content-type\u0027, \u0027response-expires\u0027, \u0027cors\u0027, \u0027tagging\u0027, \u0027restore\u0027"},{"line_number":78,"context_line":"])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"MAX_32BIT_INT \u003d 2147483647"}],"source_content_type":"text/x-python","patch_set":3,"id":"58b2896b_b4d13d41","line":78,"in_reply_to":"20daace2_c6f96725","updated":"2023-10-04 01:43:58.000000000","message":"ok, good spot. Not going to lie, s3api has always been a mystery to me. Might need to spend more time learning about it now that it\u0027s the main way our users interact with swift.","commit_id":"ac77e3fd85bb923d841538d29272a78904956fcf"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"ff1c4a94af1a7d7a85e84b3dd0e645e4c24fce15","unresolved":false,"context_lines":[{"line_number":75,"context_line":"    \u0027response-cache-control\u0027, \u0027response-content-disposition\u0027,"},{"line_number":76,"context_line":"    \u0027response-content-encoding\u0027, \u0027response-content-language\u0027,"},{"line_number":77,"context_line":"    \u0027response-content-type\u0027, \u0027response-expires\u0027, \u0027cors\u0027, \u0027tagging\u0027, \u0027restore\u0027"},{"line_number":78,"context_line":"])"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"MAX_32BIT_INT \u003d 2147483647"}],"source_content_type":"text/x-python","patch_set":3,"id":"9c75c05a_16185cbe","line":78,"in_reply_to":"58b2896b_b4d13d41","updated":"2023-10-12 05:08:29.000000000","message":"Done","commit_id":"ac77e3fd85bb923d841538d29272a78904956fcf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b3816f02fa367c832b6229bb2b0c47888252482","unresolved":true,"context_lines":[{"line_number":1004,"context_line":"            path, args \u003d path.split(\u0027?\u0027, 1)"},{"line_number":1005,"context_line":"            for key, value in sorted(self.params.items()):"},{"line_number":1006,"context_line":"                if key in ALLOWED_SUB_RESOURCES:"},{"line_number":1007,"context_line":"                    params.append(\u0027%s\u003d%s\u0027 % (key, value) if value else key)"},{"line_number":1008,"context_line":"        if params:"},{"line_number":1009,"context_line":"            buf.append(swob.wsgi_to_bytes(\u0027%s?%s\u0027 % (path, \u0027\u0026\u0027.join(params))))"},{"line_number":1010,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"45393042_a62baa6b","line":1007,"updated":"2023-10-03 15:51:06.000000000","message":"Pretty sure we\u0027d get some v2 signature errors if there was a func test for it.","commit_id":"ac77e3fd85bb923d841538d29272a78904956fcf"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"ff1c4a94af1a7d7a85e84b3dd0e645e4c24fce15","unresolved":false,"context_lines":[{"line_number":1004,"context_line":"            path, args \u003d path.split(\u0027?\u0027, 1)"},{"line_number":1005,"context_line":"            for key, value in sorted(self.params.items()):"},{"line_number":1006,"context_line":"                if key in ALLOWED_SUB_RESOURCES:"},{"line_number":1007,"context_line":"                    params.append(\u0027%s\u003d%s\u0027 % (key, value) if value else key)"},{"line_number":1008,"context_line":"        if params:"},{"line_number":1009,"context_line":"            buf.append(swob.wsgi_to_bytes(\u0027%s?%s\u0027 % (path, \u0027\u0026\u0027.join(params))))"},{"line_number":1010,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"f6fa7eeb_544df020","line":1007,"in_reply_to":"45393042_a62baa6b","updated":"2023-10-12 05:08:29.000000000","message":"Ack","commit_id":"ac77e3fd85bb923d841538d29272a78904956fcf"}],"swift/common/middleware/s3api/schema/object_lock_configuration.rng":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"4e02671c152d1ede7bf842cca6fdbc436d5908c7","unresolved":true,"context_lines":[{"line_number":5,"context_line":"      \u003celement name\u003d\"ObjectLockEnabled\"\u003e"},{"line_number":6,"context_line":"        \u003cdata type\u003d\"string\"/\u003e"},{"line_number":7,"context_line":"      \u003c/element\u003e"},{"line_number":8,"context_line":"      \u003coptional\u003e"},{"line_number":9,"context_line":"        \u003celement name\u003d\"Rule\"\u003e"},{"line_number":10,"context_line":"          \u003celement name\u003d\"DefaultRetention\"\u003e"},{"line_number":11,"context_line":"            \u003celement name\u003d\"Days\"\u003e"},{"line_number":12,"context_line":"              \u003cdata type\u003d\"int\"/\u003e"}],"source_content_type":"application/xml","patch_set":2,"id":"7e22ebda_f80bc74a","line":9,"range":{"start_line":8,"start_character":6,"end_line":9,"end_character":29},"updated":"2023-10-03 04:58:59.000000000","message":"Not sure if there is strictly optional. But I don\u0027t want to return it.. so lets just say it is for now.","commit_id":"4f533a1399ed806fca95bba8be00fc4927aa4f56"}],"test/functional/s3api/test_bucket.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4ba6c6c3cbcc2c79582d8b82276aad1bc5b15327","unresolved":true,"context_lines":[{"line_number":582,"context_line":"                Bucket\u003dbucket)"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        self.assertEqual("},{"line_number":585,"context_line":"            str(ce.exception),"},{"line_number":586,"context_line":"            \u0027An error occurred (ObjectLockConfigurationNotFoundError) when \u0027"},{"line_number":587,"context_line":"            \u0027calling the GetObjectLockConfiguration operation: Object Lock \u0027"},{"line_number":588,"context_line":"            \u0027configuration does not exist for this bucket\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"f867cb0b_b1a9dc41","line":585,"updated":"2023-10-04 18:16:33.000000000","message":"FWIW, a reasonably common pattern is to dig into the exception a little and make assertions on `ce.exception.response[\u0027ResponseMetadata\u0027][\u0027HTTPStatusCode\u0027]` and `ce.exception.response[\u0027Error\u0027][\u0027Code\u0027]`\n\nThis\u0027ll do, though!","commit_id":"543458b762e26e008027026e3cff87354e72bf0c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"ff1c4a94af1a7d7a85e84b3dd0e645e4c24fce15","unresolved":false,"context_lines":[{"line_number":582,"context_line":"                Bucket\u003dbucket)"},{"line_number":583,"context_line":""},{"line_number":584,"context_line":"        self.assertEqual("},{"line_number":585,"context_line":"            str(ce.exception),"},{"line_number":586,"context_line":"            \u0027An error occurred (ObjectLockConfigurationNotFoundError) when \u0027"},{"line_number":587,"context_line":"            \u0027calling the GetObjectLockConfiguration operation: Object Lock \u0027"},{"line_number":588,"context_line":"            \u0027configuration does not exist for this bucket\u0027)"}],"source_content_type":"text/x-python","patch_set":6,"id":"a50aab00_c2aaef98","line":585,"in_reply_to":"f867cb0b_b1a9dc41","updated":"2023-10-12 05:08:29.000000000","message":"I can add more asserts, that\u0027s pretty easy :)","commit_id":"543458b762e26e008027026e3cff87354e72bf0c"}],"test/unit/common/middleware/s3api/test_object_lock.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"4e02671c152d1ede7bf842cca6fdbc436d5908c7","unresolved":true,"context_lines":[{"line_number":40,"context_line":"        self.assertEqual(sub_element.tag, \u0027ObjectLockEnabled\u0027)"},{"line_number":41,"context_line":"        self.assertEqual(sub_element.text, \u0027Disabled\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        # because its always the same response body as it currently stands"},{"line_number":44,"context_line":"        elem \u003d Element(\u0027ObjectLockConfiguration\u0027)"},{"line_number":45,"context_line":"        object_lock_enabled \u003d SubElement(elem, \u0027ObjectLockEnabled\u0027)"},{"line_number":46,"context_line":"        object_lock_enabled.text \u003d \u0027Disabled\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"89b24269_6f1a60e9","line":43,"range":{"start_line":43,"start_character":11,"end_line":43,"end_character":74},"updated":"2023-10-03 04:58:59.000000000","message":"I feel like this comment just drifts off.","commit_id":"4f533a1399ed806fca95bba8be00fc4927aa4f56"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"0c5ab1f29051dd54b404419dd7777d47e72a9731","unresolved":false,"context_lines":[{"line_number":40,"context_line":"        self.assertEqual(sub_element.tag, \u0027ObjectLockEnabled\u0027)"},{"line_number":41,"context_line":"        self.assertEqual(sub_element.text, \u0027Disabled\u0027)"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"        # because its always the same response body as it currently stands"},{"line_number":44,"context_line":"        elem \u003d Element(\u0027ObjectLockConfiguration\u0027)"},{"line_number":45,"context_line":"        object_lock_enabled \u003d SubElement(elem, \u0027ObjectLockEnabled\u0027)"},{"line_number":46,"context_line":"        object_lock_enabled.text \u003d \u0027Disabled\u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"697a23a3_684da520","line":43,"range":{"start_line":43,"start_character":11,"end_line":43,"end_character":74},"in_reply_to":"89b24269_6f1a60e9","updated":"2023-10-03 05:49:10.000000000","message":"Done","commit_id":"4f533a1399ed806fca95bba8be00fc4927aa4f56"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"9b3816f02fa367c832b6229bb2b0c47888252482","unresolved":true,"context_lines":[{"line_number":27,"context_line":"    # The object-lock controller currently only returns a static response"},{"line_number":28,"context_line":"    # as disabled. Things like ansible need this. So there isn\u0027t much to test."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def test_get_object_lock(self):"},{"line_number":31,"context_line":"        req \u003d Request.blank(\u0027/bucket?object-lock\u0027,"},{"line_number":32,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027},"},{"line_number":33,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9c429a2c_d3c95a7b","line":30,"updated":"2023-10-03 15:51:06.000000000","message":"Probably would be good to also have a `test_put_object_lock` that asserts we 501.","commit_id":"ac77e3fd85bb923d841538d29272a78904956fcf"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"cb39ce95d5f6d19e202965f822ad5eabe349d22c","unresolved":false,"context_lines":[{"line_number":27,"context_line":"    # The object-lock controller currently only returns a static response"},{"line_number":28,"context_line":"    # as disabled. Things like ansible need this. So there isn\u0027t much to test."},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    def test_get_object_lock(self):"},{"line_number":31,"context_line":"        req \u003d Request.blank(\u0027/bucket?object-lock\u0027,"},{"line_number":32,"context_line":"                            environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027GET\u0027},"},{"line_number":33,"context_line":"                            headers\u003d{\u0027Authorization\u0027: \u0027AWS test:tester:hmac\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"61d41ea5_44d5c3a5","line":30,"in_reply_to":"9c429a2c_d3c95a7b","updated":"2023-10-04 01:43:58.000000000","message":"Done","commit_id":"ac77e3fd85bb923d841538d29272a78904956fcf"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4ba6c6c3cbcc2c79582d8b82276aad1bc5b15327","unresolved":true,"context_lines":[{"line_number":51,"context_line":"            elif child.tag \u003d\u003d \u0027BucketName\u0027:"},{"line_number":52,"context_line":"                self.assertEqual(child.text, \u0027bucket\u0027)"},{"line_number":53,"context_line":"            else:"},{"line_number":54,"context_line":"                self.fail(\u0027Found unkown sub entry\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_put_object_lock(self):"},{"line_number":57,"context_line":"        req \u003d Request.blank(\u0027/bucket?object-lock\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"11927ac3_c5bcad89","line":54,"range":{"start_line":54,"start_character":33,"end_line":54,"end_character":39},"updated":"2023-10-04 18:16:33.000000000","message":"\"unknown\"","commit_id":"543458b762e26e008027026e3cff87354e72bf0c"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"ff1c4a94af1a7d7a85e84b3dd0e645e4c24fce15","unresolved":false,"context_lines":[{"line_number":51,"context_line":"            elif child.tag \u003d\u003d \u0027BucketName\u0027:"},{"line_number":52,"context_line":"                self.assertEqual(child.text, \u0027bucket\u0027)"},{"line_number":53,"context_line":"            else:"},{"line_number":54,"context_line":"                self.fail(\u0027Found unkown sub entry\u0027)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def test_put_object_lock(self):"},{"line_number":57,"context_line":"        req \u003d Request.blank(\u0027/bucket?object-lock\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3cb11112_6ca5a883","line":54,"range":{"start_line":54,"start_character":33,"end_line":54,"end_character":39},"in_reply_to":"11927ac3_c5bcad89","updated":"2023-10-12 05:08:29.000000000","message":"Done","commit_id":"543458b762e26e008027026e3cff87354e72bf0c"}]}
