)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"3de0ba1cd080bebe4e093c586ee9e318d0855c6d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1b452570_36974dc0","updated":"2026-03-16 15:50:36.000000000","message":"Sorry for reviewing maybe too early but once I got started I figured it may help you out.  If not, and you were already going to clean it up, feel free to close these out.  I am trying to get my feet wet with tempest code reviews so please pardon the interruption :-).  I used claude to help with this review.  Thank you.","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"a01e80b267f3190084cc0b2141631549bf953b2f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"c98dfb76_33e25c7f","updated":"2026-04-10 19:32:55.000000000","message":"@jparoly@redhat.com thank you for providing enhanced review 😊. I have updated my code as per the feedback. Let me know if there is anything else I can add","commit_id":"fac7b4694385a5f3c10413a40b0c33d33c1345f1"},{"author":{"_account_id":32704,"name":"Alfredo Garcia","email":"alfrgarc@redhat.com","username":"alfrgarc"},"change_message_id":"90299463f142208c115f88678fc237d35b238f21","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"482c5cfd_a871b40b","updated":"2026-04-16 13:54:41.000000000","message":"Ack, thank you for addressing my concerns. The change LGTM","commit_id":"fac7b4694385a5f3c10413a40b0c33d33c1345f1"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"5a82344e6393aade2d127db906e106c4adeb6376","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7c06ee69_89938896","updated":"2026-04-17 13:51:24.000000000","message":"looks like \"autopep8\" file was added?  looks empty.  Is this intentional, normal?","commit_id":"fac7b4694385a5f3c10413a40b0c33d33c1345f1"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"d678b20d8b04da290997747cf7bbfaf838864fed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"64c412e9_3f6fba89","in_reply_to":"7c06ee69_89938896","updated":"2026-04-17 14:04:26.000000000","message":"Done","commit_id":"fac7b4694385a5f3c10413a40b0c33d33c1345f1"},{"author":{"_account_id":32704,"name":"Alfredo Garcia","email":"alfrgarc@redhat.com","username":"alfrgarc"},"change_message_id":"64652215b882f171f4d826aec201531357f99a52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"d89c7f15_18e1d94e","updated":"2026-04-21 12:48:53.000000000","message":"Re-adding my +1. The changes still LGTM and the gates are passing","commit_id":"46b735aa0dc06dd7e689fa10eaf66267533e80ca"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0ee68602c6136f6534de56abef4e75c106ca50e0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"fc4e4f52_3371919e","updated":"2026-05-07 19:15:30.000000000","message":"also, test is skipped i tempest-full-py3 job, do you know which job enable Symlink and run these new tests.\n\nsetUpClass (tempest.api.object_storage.test_object_symlink.ObjectSymlinkTest) ... SKIPPED: Symlink not supported in this environment\n\nhttps://zuul.opendev.org/t/openstack/build/d237895635e7495fa0c2e57859562a8d/log/job-output.txt#23922","commit_id":"46b735aa0dc06dd7e689fa10eaf66267533e80ca"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"d4698ad5d4bd548ab8ae90edd9c70e73606e77c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5b1c5f75_e94a09dd","updated":"2026-04-17 16:20:53.000000000","message":"recheck network issue","commit_id":"46b735aa0dc06dd7e689fa10eaf66267533e80ca"}],"tempest/api/object_storage/test_object_symlink.py":[{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"3de0ba1cd080bebe4e093c586ee9e318d0855c6d","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 NTT Corporation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"8f2c6ca6_0559dcca","line":1,"updated":"2026-03-16 15:50:36.000000000","message":"This appears to be copy-pasted from another file. Should be updated to reflect the actual copyright holder and year (2026)","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"a01e80b267f3190084cc0b2141631549bf953b2f","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2013 NTT Corporation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":2,"id":"e05d3fc3_8eef6003","line":1,"in_reply_to":"8f2c6ca6_0559dcca","updated":"2026-04-10 19:32:55.000000000","message":"Done","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"3de0ba1cd080bebe4e093c586ee9e318d0855c6d","unresolved":true,"context_lines":[{"line_number":21,"context_line":"from tempest.lib import exceptions as lib_exc"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class SymlinkCLITest(base.BaseObjectTest):"},{"line_number":25,"context_line":"    \"\"\"Tempest test for Swift symbolic link objects (symlinks)\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"5c854b99_c3eb978c","line":24,"updated":"2026-03-16 15:50:36.000000000","message":"The class is named SymlinkCLITest but these are API tests, not CLI tests\n  - Should follow the pattern of other object storage tests: ObjectSymlinkTest or SymlinkTest   ???","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"a01e80b267f3190084cc0b2141631549bf953b2f","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from tempest.lib import exceptions as lib_exc"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"class SymlinkCLITest(base.BaseObjectTest):"},{"line_number":25,"context_line":"    \"\"\"Tempest test for Swift symbolic link objects (symlinks)\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"291d3ced_f207a975","line":24,"in_reply_to":"5c854b99_c3eb978c","updated":"2026-04-10 19:32:55.000000000","message":"Done","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"3de0ba1cd080bebe4e093c586ee9e318d0855c6d","unresolved":true,"context_lines":[{"line_number":24,"context_line":"class SymlinkCLITest(base.BaseObjectTest):"},{"line_number":25,"context_line":"    \"\"\"Tempest test for Swift symbolic link objects (symlinks)\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"},{"line_number":28,"context_line":"        super(SymlinkCLITest, self).setUp()"},{"line_number":29,"context_line":"        self.containers \u003d []"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def tearDown(self):"},{"line_number":32,"context_line":"        object_storage.delete_containers("},{"line_number":33,"context_line":"            self.containers, self.container_client, self.object_client"},{"line_number":34,"context_line":"        )"},{"line_number":35,"context_line":"        super(SymlinkCLITest, self).tearDown()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _create_container(self):"},{"line_number":38,"context_line":"        container_name \u003d data_utils.rand_name(\u0027symlink-container\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"b7168b1a_7f6aaf54","line":35,"range":{"start_line":27,"start_character":3,"end_line":35,"end_character":46},"updated":"2026-03-16 15:50:36.000000000","message":"Inefficient Resource Management ?\n  The test uses instance-level setUp()/tearDown() methods which create/delete containers for each test method. Looking at other tests like test_object_expiry.py and test_object_services.py, the pattern should\n  be:\n\n  @classmethod\n  def resource_setup(cls):\n      super(ObjectSymlinkTest, cls).resource_setup()\n      cls.container_name \u003d cls.create_container()\n\n  @classmethod\n  def resource_cleanup(cls):\n      cls.delete_containers()\n      super(ObjectSymlinkTest, cls).resource_cleanup()","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"a01e80b267f3190084cc0b2141631549bf953b2f","unresolved":false,"context_lines":[{"line_number":24,"context_line":"class SymlinkCLITest(base.BaseObjectTest):"},{"line_number":25,"context_line":"    \"\"\"Tempest test for Swift symbolic link objects (symlinks)\"\"\""},{"line_number":26,"context_line":""},{"line_number":27,"context_line":"    def setUp(self):"},{"line_number":28,"context_line":"        super(SymlinkCLITest, self).setUp()"},{"line_number":29,"context_line":"        self.containers \u003d []"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"    def tearDown(self):"},{"line_number":32,"context_line":"        object_storage.delete_containers("},{"line_number":33,"context_line":"            self.containers, self.container_client, self.object_client"},{"line_number":34,"context_line":"        )"},{"line_number":35,"context_line":"        super(SymlinkCLITest, self).tearDown()"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"    def _create_container(self):"},{"line_number":38,"context_line":"        container_name \u003d data_utils.rand_name(\u0027symlink-container\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"e9cec942_36d40f0d","line":35,"range":{"start_line":27,"start_character":3,"end_line":35,"end_character":46},"in_reply_to":"b7168b1a_7f6aaf54","updated":"2026-04-10 19:32:55.000000000","message":"Done","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"3de0ba1cd080bebe4e093c586ee9e318d0855c6d","unresolved":true,"context_lines":[{"line_number":49,"context_line":"    def test_symlink(self):"},{"line_number":50,"context_line":"        \"\"\"Test symlink creation and download\"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        # Step 1: Create container"},{"line_number":53,"context_line":"        container_name \u003d self._create_container()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # Step 2: Upload object"}],"source_content_type":"text/x-python","patch_set":2,"id":"780baf08_81121c9e","line":52,"updated":"2026-03-16 15:50:36.000000000","message":"no need for verbose comments like this.  the code speaks for itself here.\nThe \"Step 1:\", \"Step 2:\", \"Step 3:\" style comments (lines 52-101) are inconsistent with the codebase style. Other tests use simpler inline comments like # create object, # verify metadata.","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"a01e80b267f3190084cc0b2141631549bf953b2f","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def test_symlink(self):"},{"line_number":50,"context_line":"        \"\"\"Test symlink creation and download\"\"\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        # Step 1: Create container"},{"line_number":53,"context_line":"        container_name \u003d self._create_container()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"        # Step 2: Upload object"}],"source_content_type":"text/x-python","patch_set":2,"id":"d3355da3_c552a306","line":52,"in_reply_to":"780baf08_81121c9e","updated":"2026-04-10 19:32:55.000000000","message":"Acknowledged","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"3de0ba1cd080bebe4e093c586ee9e318d0855c6d","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        self.assertEqual(201, resp.status)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # Step 4: Verify symlink metadata"},{"line_number":72,"context_line":"        link_name \u003d \u0027link.txt\u0027  # the symlink object"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # Get the container listing"},{"line_number":75,"context_line":"        params \u003d {\u0027limit\u0027: 9999, \u0027format\u0027: \u0027json\u0027}"}],"source_content_type":"text/x-python","patch_set":2,"id":"501d7487_f7505ae3","line":72,"updated":"2026-03-16 15:50:36.000000000","message":"already defined in line 61","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"a01e80b267f3190084cc0b2141631549bf953b2f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        self.assertEqual(201, resp.status)"},{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        # Step 4: Verify symlink metadata"},{"line_number":72,"context_line":"        link_name \u003d \u0027link.txt\u0027  # the symlink object"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        # Get the container listing"},{"line_number":75,"context_line":"        params \u003d {\u0027limit\u0027: 9999, \u0027format\u0027: \u0027json\u0027}"}],"source_content_type":"text/x-python","patch_set":2,"id":"75e6fae0_570f7233","line":72,"in_reply_to":"501d7487_f7505ae3","updated":"2026-04-10 19:32:55.000000000","message":"Done","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":34373,"name":"Jason Paroly","email":"jparoly@redhat.com","username":"jparoly"},"change_message_id":"3de0ba1cd080bebe4e093c586ee9e318d0855c6d","unresolved":true,"context_lines":[{"line_number":139,"context_line":"    def test_broken_symlink(self):"},{"line_number":140,"context_line":"        \"\"\"Test behavior when symlink target does not exist\"\"\""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        container_name \u003d self._create_container()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        # Step 2: Create a symlink pointing to a non-existent object"},{"line_number":145,"context_line":"        link_name \u003d \"broken_link.txt\""},{"line_number":146,"context_line":"        missing_object \u003d \"missing.txt\""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        target \u003d f\"{container_name}/{missing_object}\""},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"33c4a892_a1728b8f","line":146,"range":{"start_line":142,"start_character":5,"end_line":146,"end_character":38},"updated":"2026-03-16 15:50:36.000000000","message":"There\u0027s a \"Step 2\" but no \"Step 1\" but comments do not need \"step...\" part like noted in the prior comment.","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"a01e80b267f3190084cc0b2141631549bf953b2f","unresolved":false,"context_lines":[{"line_number":139,"context_line":"    def test_broken_symlink(self):"},{"line_number":140,"context_line":"        \"\"\"Test behavior when symlink target does not exist\"\"\""},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"        container_name \u003d self._create_container()"},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"        # Step 2: Create a symlink pointing to a non-existent object"},{"line_number":145,"context_line":"        link_name \u003d \"broken_link.txt\""},{"line_number":146,"context_line":"        missing_object \u003d \"missing.txt\""},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        target \u003d f\"{container_name}/{missing_object}\""},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"14038c46_2103d6c4","line":146,"range":{"start_line":142,"start_character":5,"end_line":146,"end_character":38},"in_reply_to":"33c4a892_a1728b8f","updated":"2026-04-10 19:32:55.000000000","message":"Done","commit_id":"a354af1c1889d841b91fd243ce00001e3e065748"},{"author":{"_account_id":32704,"name":"Alfredo Garcia","email":"alfrgarc@redhat.com","username":"alfrgarc"},"change_message_id":"ad0f3fdf44ff9934179e8de536358f2921f68e97","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        self._upload_object(container_name, object_name, file_content)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        link_name \u003d \"link.txt\""},{"line_number":82,"context_line":"        target \u003d f\"{container_name}/{object_name}\""},{"line_number":83,"context_line":"        headers \u003d {\"X-Symlink-Target\": target, \"Content-Length\": \"0\"}"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        resp, _ \u003d self.object_client.create_object("}],"source_content_type":"text/x-python","patch_set":3,"id":"af991833_c04fe5a7","line":82,"updated":"2026-04-14 15:13:14.000000000","message":"Should this include an additional leading forward slash?\nf\"/{container_name}/{object_name}\"","commit_id":"fac7b4694385a5f3c10413a40b0c33d33c1345f1"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"b74626409bb925f4df4480456a73fa9f0469795d","unresolved":true,"context_lines":[{"line_number":79,"context_line":"        self._upload_object(container_name, object_name, file_content)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        link_name \u003d \"link.txt\""},{"line_number":82,"context_line":"        target \u003d f\"{container_name}/{object_name}\""},{"line_number":83,"context_line":"        headers \u003d {\"X-Symlink-Target\": target, \"Content-Length\": \"0\"}"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        resp, _ \u003d self.object_client.create_object("}],"source_content_type":"text/x-python","patch_set":3,"id":"f53bcf26_11e74274","line":82,"in_reply_to":"af991833_c04fe5a7","updated":"2026-04-16 08:11:22.000000000","message":"The Swift API requires the exact format \u003ccontainer\u003e/\u003cobject\u003e. Adding a leading / (i.e. /container/object) is invalid and causes 412 Precondition Failed.","commit_id":"fac7b4694385a5f3c10413a40b0c33d33c1345f1"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"e99fd886cc4d6247346ea045113cb56dffabf8fd","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        self._upload_object(container_name, object_name, file_content)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        link_name \u003d \"link.txt\""},{"line_number":82,"context_line":"        target \u003d f\"{container_name}/{object_name}\""},{"line_number":83,"context_line":"        headers \u003d {\"X-Symlink-Target\": target, \"Content-Length\": \"0\"}"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"        resp, _ \u003d self.object_client.create_object("}],"source_content_type":"text/x-python","patch_set":3,"id":"a6f294db_aa932410","line":82,"in_reply_to":"f53bcf26_11e74274","updated":"2026-04-16 08:11:46.000000000","message":"Done","commit_id":"fac7b4694385a5f3c10413a40b0c33d33c1345f1"},{"author":{"_account_id":32704,"name":"Alfredo Garcia","email":"alfrgarc@redhat.com","username":"alfrgarc"},"change_message_id":"ad0f3fdf44ff9934179e8de536358f2921f68e97","unresolved":true,"context_lines":[{"line_number":129,"context_line":"    def test_broken_symlink(self):"},{"line_number":130,"context_line":"        container_name \u003d self._create_container()"},{"line_number":131,"context_line":"        link_name \u003d \"broken_link.txt\""},{"line_number":132,"context_line":"        target \u003d f\"{container_name}/missing.txt\""},{"line_number":133,"context_line":"        headers \u003d {\"X-Symlink-Target\": target, \"Content-Length\": \"0\"}"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # Swift may reject broken symlinks; skip if not allowed"}],"source_content_type":"text/x-python","patch_set":3,"id":"b79cd4ba_13882418","line":132,"updated":"2026-04-14 15:13:14.000000000","message":"Same here, should there be a leading forward slash?\nf\"/{container_name}/{object_name}\"","commit_id":"fac7b4694385a5f3c10413a40b0c33d33c1345f1"},{"author":{"_account_id":38173,"name":"Tanvi Nautiyal","email":"tnautiya@redhat.com","username":"tnautiyal"},"change_message_id":"b74626409bb925f4df4480456a73fa9f0469795d","unresolved":false,"context_lines":[{"line_number":129,"context_line":"    def test_broken_symlink(self):"},{"line_number":130,"context_line":"        container_name \u003d self._create_container()"},{"line_number":131,"context_line":"        link_name \u003d \"broken_link.txt\""},{"line_number":132,"context_line":"        target \u003d f\"{container_name}/missing.txt\""},{"line_number":133,"context_line":"        headers \u003d {\"X-Symlink-Target\": target, \"Content-Length\": \"0\"}"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # Swift may reject broken symlinks; skip if not allowed"}],"source_content_type":"text/x-python","patch_set":3,"id":"8d18caf7_f18dfeea","line":132,"in_reply_to":"b79cd4ba_13882418","updated":"2026-04-16 08:11:22.000000000","message":"Done","commit_id":"fac7b4694385a5f3c10413a40b0c33d33c1345f1"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0ee68602c6136f6534de56abef4e75c106ca50e0","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Copyright 2026 NTT Corporation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":4,"id":"f65c2e93_22377d34","line":1,"range":{"start_line":1,"start_character":17,"end_line":1,"end_character":32},"updated":"2026-05-07 19:15:30.000000000","message":"is this correct?","commit_id":"46b735aa0dc06dd7e689fa10eaf66267533e80ca"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"0ee68602c6136f6534de56abef4e75c106ca50e0","unresolved":true,"context_lines":[{"line_number":50,"context_line":"            raise cls.skipException("},{"line_number":51,"context_line":"                \"Symlink not supported in this environment\")"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"        # Clean up the check container"},{"line_number":54,"context_line":"        object_storage.delete_containers("},{"line_number":55,"context_line":"            cls.containers, cls.container_client, cls.object_client)"},{"line_number":56,"context_line":"        cls.containers \u003d []"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":4,"id":"6de7ad37_7eab861e","line":55,"range":{"start_line":53,"start_character":0,"end_line":55,"end_character":68},"updated":"2026-05-07 19:15:30.000000000","message":"you are deleting the containers before test run, is that what you wanted?","commit_id":"46b735aa0dc06dd7e689fa10eaf66267533e80ca"}]}
