)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"c4bf6ed52ac29a8d0e3734b75817a5cadff1dd66","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"9abc2dc1_14ff6c18","updated":"2025-01-04 16:52:42.000000000","message":"I don\u0027t think you need those XXX.","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7b79361999c26c1e973ba3cd6eece15f8a81b604","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"dc1ab913_d4d2c8d7","updated":"2025-01-06 22:11:15.000000000","message":"Reviewing my own code a little, I might be trying to boil the ocean.... yeesh, this is a big patch.","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"2c45dce6bb35a88ece2d5d1a8e46c614a13efae9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"d0db990c_9e5569bc","updated":"2025-01-08 18:24:50.000000000","message":"It appears that absolutely nothing was changed since patch 12.","commit_id":"d2166720e5f58b9b36fab7042faa9981928e1f39"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"f8cd6bc6f406dbbecaf518da625db93133911414","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"35a0505d_b576278c","in_reply_to":"d0db990c_9e5569bc","updated":"2025-01-08 19:21:21.000000000","message":"Gerrit was complaining about a merge conflict once https://review.opendev.org/c/openstack/swift/+/937189 merged. Pretty sure it was just to do with the proximity of import changes in `test/unit/common/test_statsd_client.py`","commit_id":"d2166720e5f58b9b36fab7042faa9981928e1f39"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"ab45839e_a3c0d698","updated":"2025-01-09 00:25:58.000000000","message":"I at least want to resolve\n\n- the unnecessary `with_traceback` in `proxy/controllers/obj.py` and\n- the missing `with_traceback` in `test/__init__.py`","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"9bd56770_d7e8b8b3","updated":"2025-01-09 16:11:02.000000000","message":"Wow, thanks Tim for this!\n\nMy comments are mostly nits. There\u0027s some suggestions here https://review.opendev.org/c/openstack/swift/+/938821 that you might want to squash in.\n\nI think I\u0027d feel more comfortable with the switch from built in filter to list iteration being separate. Despite it being apparently obviously better, it is a potentially significant change lost in an enormous diff. \n\nThere\u0027s one place where the encoding seems to have changed (logs.py) w.r.t. six.\n\nI think it\u0027d be good to merge this ASAP so I\u0027d suggest letting nits be nits: let\u0027s get the big bang done and follow up with polishing.","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a4c9fe0c5ebd70b78535759c697ff06b26013683","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"a551730b_056b7255","updated":"2025-01-15 08:59:08.000000000","message":"phew, finally got through them all!\n\nIt\u0027s all looking really good. Looks like a try/except was removed. Not sure if it was intentional, so will give a -1. But happy to be corrected and change my vote.","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"27cc4ffa6aeea62e11d447f45a7dab79808206b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"34778f12_c84bac86","updated":"2025-01-15 09:46:05.000000000","message":"@Matt I can answer a couple of your queries cos I had similar queries :)","commit_id":"128124cdd8ca09136d4988affd1bb8c5c1361fc1"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5abff0aea11a6f01496b288f59fa21a99c736e32","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"893a61d2_3c5dbfa0","updated":"2025-01-15 21:08:47.000000000","message":"Still a few questions but not blockers, great work!","commit_id":"128124cdd8ca09136d4988affd1bb8c5c1361fc1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"eb2f5400887c29d55d74904942296af0d98e4936","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"6e4aff34_b2ed4e4b","updated":"2025-01-14 16:00:33.000000000","message":"recheck\n\ngate fixed by https://review.opendev.org/c/openstack/swift/+/939184","commit_id":"128124cdd8ca09136d4988affd1bb8c5c1361fc1"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"26a2f2e8abcb0e488b579e803eb29a077acc1456","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"2e89aba6_9a5b84fe","updated":"2025-01-14 09:48:53.000000000","message":"this will need recheck once https://review.opendev.org/c/openstack/swift/+/939184 lands","commit_id":"128124cdd8ca09136d4988affd1bb8c5c1361fc1"}],"doc/source/development_middleware.rst":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7b79361999c26c1e973ba3cd6eece15f8a81b604","unresolved":true,"context_lines":[{"line_number":80,"context_line":"    from swift.common.request_helpers import get_sys_meta_prefix"},{"line_number":81,"context_line":"    from swift.proxy.controllers.base import get_container_info"},{"line_number":82,"context_line":"    from eventlet import Timeout"},{"line_number":83,"context_line":"    from eventlet.green.urllib import request as urllib2"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    # x-container-sysmeta-webhook"},{"line_number":86,"context_line":"    SYSMETA_WEBHOOK \u003d get_sys_meta_prefix(\u0027container\u0027) + \u0027webhook\u0027"}],"source_content_type":"text/x-rst","patch_set":11,"id":"807e39ec_71703836","line":83,"range":{"start_line":83,"start_character":24,"end_line":83,"end_character":56},"updated":"2025-01-06 22:11:15.000000000","message":"Should probably just update the code below to use `request.Request`/`request.urlopen`\n\nMight also want to sanity check that this is all actually py3 compatible... *looks* all right, but I don\u0027t think I\u0027ve ever actually tried it.","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":false,"context_lines":[{"line_number":80,"context_line":"    from swift.common.request_helpers import get_sys_meta_prefix"},{"line_number":81,"context_line":"    from swift.proxy.controllers.base import get_container_info"},{"line_number":82,"context_line":"    from eventlet import Timeout"},{"line_number":83,"context_line":"    from eventlet.green.urllib import request as urllib2"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    # x-container-sysmeta-webhook"},{"line_number":86,"context_line":"    SYSMETA_WEBHOOK \u003d get_sys_meta_prefix(\u0027container\u0027) + \u0027webhook\u0027"}],"source_content_type":"text/x-rst","patch_set":11,"id":"735d93c6_4c7bbbc3","line":83,"range":{"start_line":83,"start_character":24,"end_line":83,"end_character":56},"in_reply_to":"807e39ec_71703836","updated":"2025-01-09 00:25:58.000000000","message":"Done","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"}],"swift/cli/recon.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7b79361999c26c1e973ba3cd6eece15f8a81b604","unresolved":true,"context_lines":[{"line_number":31,"context_line":"import sys"},{"line_number":32,"context_line":"import os"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from eventlet.green.urllib import request as urllib2"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def seconds2timeunit(seconds):"}],"source_content_type":"text/x-python","patch_set":11,"id":"bb43cba3_a7693fa7","line":34,"range":{"start_line":34,"start_character":34,"end_line":34,"end_character":52},"updated":"2025-01-06 22:11:15.000000000","message":"Should probably skip the aliasing here.","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":false,"context_lines":[{"line_number":31,"context_line":"import sys"},{"line_number":32,"context_line":"import os"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"from eventlet.green.urllib import request as urllib2"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"def seconds2timeunit(seconds):"}],"source_content_type":"text/x-python","patch_set":11,"id":"e758f8bb_533d35af","line":34,"range":{"start_line":34,"start_character":34,"end_line":34,"end_character":52},"in_reply_to":"bb43cba3_a7693fa7","updated":"2025-01-09 00:25:58.000000000","message":"Done","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"}],"swift/common/bufferedhttp.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7b79361999c26c1e973ba3cd6eece15f8a81b604","unresolved":true,"context_lines":[{"line_number":164,"context_line":"        #  # XXX It would be nice to have readline and __iter__ for this,"},{"line_number":165,"context_line":"        #  # too."},{"line_number":166,"context_line":"        #"},{"line_number":167,"context_line":"        # Yes, it certainly would."},{"line_number":168,"context_line":"        while (b\u0027\\n\u0027 not in self._readline_buffer"},{"line_number":169,"context_line":"               and len(self._readline_buffer) \u003c size):"},{"line_number":170,"context_line":"            read_size \u003d size - len(self._readline_buffer)"}],"source_content_type":"text/x-python","patch_set":11,"id":"b8125590_fca1c9c1","side":"PARENT","line":167,"updated":"2025-01-06 22:11:15.000000000","message":"Resolved in https://github.com/python/cpython/commit/b353c12a9caa20e90466af6a8f17a227b72e4f23 (so, 2.7.4 / 3.1)","commit_id":"95b9e6e335878c8bc97088543a630cb9f67e7262"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":false,"context_lines":[{"line_number":164,"context_line":"        #  # XXX It would be nice to have readline and __iter__ for this,"},{"line_number":165,"context_line":"        #  # too."},{"line_number":166,"context_line":"        #"},{"line_number":167,"context_line":"        # Yes, it certainly would."},{"line_number":168,"context_line":"        while (b\u0027\\n\u0027 not in self._readline_buffer"},{"line_number":169,"context_line":"               and len(self._readline_buffer) \u003c size):"},{"line_number":170,"context_line":"            read_size \u003d size - len(self._readline_buffer)"}],"source_content_type":"text/x-python","patch_set":11,"id":"48054713_ea242f45","side":"PARENT","line":167,"in_reply_to":"b8125590_fca1c9c1","updated":"2025-01-09 00:25:58.000000000","message":"Done","commit_id":"95b9e6e335878c8bc97088543a630cb9f67e7262"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7b79361999c26c1e973ba3cd6eece15f8a81b604","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        if self._real_socket:"},{"line_number":149,"context_line":"            # Hopefully this is equivalent to py2\u0027s _real_socket.close()?"},{"line_number":150,"context_line":"            # TODO: verify that this does everything ^^^^ does for py2"},{"line_number":151,"context_line":"            self._real_socket._real_close()"},{"line_number":152,"context_line":"        self._real_socket \u003d None"},{"line_number":153,"context_line":"        self.close()"}],"source_content_type":"text/x-python","patch_set":11,"id":"1a0b1819_6d26f9b5","line":150,"updated":"2025-01-06 22:11:15.000000000","message":"I\u0027m a little annoyed that I still don\u0027t feel like I know how to test for this.","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a4c9fe0c5ebd70b78535759c697ff06b26013683","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        \"\"\""},{"line_number":148,"context_line":"        if self._real_socket:"},{"line_number":149,"context_line":"            # Hopefully this is equivalent to py2\u0027s _real_socket.close()?"},{"line_number":150,"context_line":"            # TODO: verify that this does everything ^^^^ does for py2"},{"line_number":151,"context_line":"            self._real_socket._real_close()"},{"line_number":152,"context_line":"        self._real_socket \u003d None"},{"line_number":153,"context_line":"        self.close()"}],"source_content_type":"text/x-python","patch_set":11,"id":"10dd34e6_843c1869","line":150,"in_reply_to":"1a0b1819_6d26f9b5","updated":"2025-01-15 08:59:08.000000000","message":"Well it\u0027s going to be even harder to test/compare to py2\u0027s since we\u0027re removing py2 support. Or will we still have some limitted py2 testing","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":157,"context_line":"            self._readline_buffer \u003d b\u0027\u0027"},{"line_number":158,"context_line":"            return buf + HTTPResponse.read(self, smaller_amt)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def readline(self, size\u003d1024):"},{"line_number":161,"context_line":"        # You\u0027d think Python\u0027s httplib would provide this, but it doesn\u0027t."},{"line_number":162,"context_line":"        # It does, however, provide a comment in the HTTPResponse class:"},{"line_number":163,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":14,"id":"b2b5c471_e829cf6b","side":"PARENT","line":160,"updated":"2025-01-09 16:11:02.000000000","message":"IIUC this is now provided by eventlet\u0027s HTTPResponse - has that been true for all py3 versions?","commit_id":"4d4e65904a8d34f2f3386a0e69c27b03d40d1b1c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":true,"context_lines":[{"line_number":157,"context_line":"            self._readline_buffer \u003d b\u0027\u0027"},{"line_number":158,"context_line":"            return buf + HTTPResponse.read(self, smaller_amt)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def readline(self, size\u003d1024):"},{"line_number":161,"context_line":"        # You\u0027d think Python\u0027s httplib would provide this, but it doesn\u0027t."},{"line_number":162,"context_line":"        # It does, however, provide a comment in the HTTPResponse class:"},{"line_number":163,"context_line":"        #"}],"source_content_type":"text/x-python","patch_set":14,"id":"4f573803_358463cb","side":"PARENT","line":160,"in_reply_to":"b2b5c471_e829cf6b","updated":"2025-01-10 01:44:51.000000000","message":"Since 3.1.0 (and 2.7.4!), [as best I can tell](https://github.com/python/cpython/commit/b353c12a9caa20e90466af6a8f17a227b72e4f23)","commit_id":"4d4e65904a8d34f2f3386a0e69c27b03d40d1b1c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    HTTPResponse, HTTPSConnection, _UNKNOWN, ImproperConnectionState"},{"line_number":37,"context_line":"from urllib.parse import quote, parse_qsl, urlencode"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from eventlet.green.http import client as green_client"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# Apparently http.server uses this to decide when/whether to send a 431."},{"line_number":42,"context_line":"# Give it some slack, so the app is more likely to get the chance to reject"}],"source_content_type":"text/x-python","patch_set":14,"id":"6a840781_f30a4279","line":39,"range":{"start_line":39,"start_character":42,"end_line":39,"end_character":54},"updated":"2025-01-09 16:11:02.000000000","message":"in logs.py it\u0027s called it green_http_client - opportunity for consistent naming?","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":true,"context_lines":[{"line_number":36,"context_line":"    HTTPResponse, HTTPSConnection, _UNKNOWN, ImproperConnectionState"},{"line_number":37,"context_line":"from urllib.parse import quote, parse_qsl, urlencode"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from eventlet.green.http import client as green_client"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# Apparently http.server uses this to decide when/whether to send a 431."},{"line_number":42,"context_line":"# Give it some slack, so the app is more likely to get the chance to reject"}],"source_content_type":"text/x-python","patch_set":14,"id":"8e4f42f6_7a95b525","line":39,"range":{"start_line":39,"start_character":42,"end_line":39,"end_character":54},"in_reply_to":"6a840781_f30a4279","updated":"2025-01-10 01:44:51.000000000","message":"Sure, but which way? Elsewhere (http_protocol, internal_client) we just call it http_client.\n\nThis one\u0027s definitely an oldball, though -- mostly had to do with the httplib context I was working from...","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9971e071221f112717b02507f1288dda2956db1c","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    HTTPResponse, HTTPSConnection, _UNKNOWN, ImproperConnectionState"},{"line_number":37,"context_line":"from urllib.parse import quote, parse_qsl, urlencode"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from eventlet.green.http import client as green_client"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"# Apparently http.server uses this to decide when/whether to send a 431."},{"line_number":42,"context_line":"# Give it some slack, so the app is more likely to get the chance to reject"}],"source_content_type":"text/x-python","patch_set":14,"id":"95c72e85_1ab72a32","line":39,"range":{"start_line":39,"start_character":42,"end_line":39,"end_character":54},"in_reply_to":"8e4f42f6_7a95b525","updated":"2025-01-10 09:52:04.000000000","message":"I also noticed the discrepancy w.r.t. http_client elsewhere but figured it\u0027 s worth it to avoid having ``http_client`` and ``http.client`` in the same file.\n\n``green_http_client`` in both files seems good to me.","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a4c9fe0c5ebd70b78535759c697ff06b26013683","unresolved":true,"context_lines":[{"line_number":27,"context_line":"\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from swift.common import constraints"},{"line_number":30,"context_line":"import http.client"},{"line_number":31,"context_line":"import logging"},{"line_number":32,"context_line":"import time"},{"line_number":33,"context_line":"import socket"}],"source_content_type":"text/x-python","patch_set":16,"id":"ee605662_03c13ebc","line":30,"updated":"2025-01-15 08:59:08.000000000","message":"So previously we were using the grabbing the patched version via `eventlet.import_patched(\u0027http.client\u0027)` and know we\u0027re just getting `http.client`. Which might or might not have already been patched.. I assume this doesn\u0027t matter, but it obviously mattered in the past.. or did it?","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"34badcea7e4be03597feec7d417db3230d330562","unresolved":true,"context_lines":[{"line_number":27,"context_line":"\"\"\""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from swift.common import constraints"},{"line_number":30,"context_line":"import http.client"},{"line_number":31,"context_line":"import logging"},{"line_number":32,"context_line":"import time"},{"line_number":33,"context_line":"import socket"}],"source_content_type":"text/x-python","patch_set":16,"id":"5fc3dc14_da224b93","line":30,"in_reply_to":"ee605662_03c13ebc","updated":"2025-01-15 21:14:29.000000000","message":"So back on patchset 8 I had it more like master:\n```\nhttplib \u003d eventlet.import_patched(\u0027http.client\u0027)\nfrom eventlet.green.http import client as green_httplib\n# Apparently http.server uses this to decide when/whether to send a 431.\n# Give it some slack, so the app is more likely to get the chance to reject\n# with a 400 instead.\nhttplib._MAXHEADERS \u003d constraints.MAX_HEADER_COUNT * 1.6\ngreen_httplib._MAXHEADERS \u003d constraints.MAX_HEADER_COUNT * 1.6\n```\n... but func tests would always fail because we were sending too many headers! The `_MAXHEADERS` used down in the server somewhere was still at the default 100.\n\nI still don\u0027t understand exactly what changed to make the old code break, but this has tests passing.","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"}],"swift/common/db.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7b79361999c26c1e973ba3cd6eece15f8a81b604","unresolved":true,"context_lines":[{"line_number":24,"context_line":"import sys"},{"line_number":25,"context_line":"import time"},{"line_number":26,"context_line":"import errno"},{"line_number":27,"context_line":"import pickle  # nosec: B403"},{"line_number":28,"context_line":"from tempfile import mkstemp"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from eventlet import sleep, Timeout"}],"source_content_type":"text/x-python","patch_set":11,"id":"37a6cb34_b1104cc4","line":27,"range":{"start_line":27,"start_character":17,"end_line":27,"end_character":28},"updated":"2025-01-06 22:11:15.000000000","message":"FWIW, https://review.opendev.org/c/openstack/swift/+/758638 provides a path toward removing these `# nosec`s","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7b79361999c26c1e973ba3cd6eece15f8a81b604","unresolved":true,"context_lines":[{"line_number":513,"context_line":"        elif \u0027disk I/O error\u0027 in str(exc_value):"},{"line_number":514,"context_line":"            exc_hint \u003d \u0027disk error while accessing database\u0027"},{"line_number":515,"context_line":"        else:"},{"line_number":516,"context_line":"            # XXX: is with_traceback actually needed?"},{"line_number":517,"context_line":"            raise exc_value.with_traceback(exc_traceback)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        self.quarantine(exc_hint)"}],"source_content_type":"text/x-python","patch_set":11,"id":"5294832e_3e891d74","line":516,"updated":"2025-01-06 22:11:15.000000000","message":"Should clean this one up, too.","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":false,"context_lines":[{"line_number":513,"context_line":"        elif \u0027disk I/O error\u0027 in str(exc_value):"},{"line_number":514,"context_line":"            exc_hint \u003d \u0027disk error while accessing database\u0027"},{"line_number":515,"context_line":"        else:"},{"line_number":516,"context_line":"            # XXX: is with_traceback actually needed?"},{"line_number":517,"context_line":"            raise exc_value.with_traceback(exc_traceback)"},{"line_number":518,"context_line":""},{"line_number":519,"context_line":"        self.quarantine(exc_hint)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7353c1db_1f786b4a","line":516,"in_reply_to":"5294832e_3e891d74","updated":"2025-01-09 00:25:58.000000000","message":"Done","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"}],"swift/common/digest.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":139,"context_line":"        try:"},{"line_number":140,"context_line":"            binascii.unhexlify(value)  # make sure it decodes"},{"line_number":141,"context_line":"        except TypeError:"},{"line_number":142,"context_line":"            # This is just for py2"},{"line_number":143,"context_line":"            raise ValueError(\u0027Non-hexadecimal digit found\u0027)"},{"line_number":144,"context_line":"        algo \u003d {"},{"line_number":145,"context_line":"            40: \u0027sha1\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"c7f9688b_a2cdbb6b","side":"PARENT","line":142,"updated":"2025-01-09 16:11:02.000000000","message":"ok, presumably py2 binascii raised a TypeError","commit_id":"4d4e65904a8d34f2f3386a0e69c27b03d40d1b1c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        try:"},{"line_number":140,"context_line":"            binascii.unhexlify(value)  # make sure it decodes"},{"line_number":141,"context_line":"        except TypeError:"},{"line_number":142,"context_line":"            # This is just for py2"},{"line_number":143,"context_line":"            raise ValueError(\u0027Non-hexadecimal digit found\u0027)"},{"line_number":144,"context_line":"        algo \u003d {"},{"line_number":145,"context_line":"            40: \u0027sha1\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"a94a8004_46fe34d3","side":"PARENT","line":142,"in_reply_to":"c7f9688b_a2cdbb6b","updated":"2025-01-10 01:44:51.000000000","message":"Acknowledged","commit_id":"4d4e65904a8d34f2f3386a0e69c27b03d40d1b1c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":53,"context_line":"        parts.insert(0, ip_range)"},{"line_number":54,"context_line":"        formats.insert(0, b\"ip\u003d%s\")"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    if not isinstance(key, bytes):"},{"line_number":57,"context_line":"        key \u003d key.encode(\u0027utf8\u0027)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    message \u003d b\u0027\\n\u0027.join("}],"source_content_type":"text/x-python","patch_set":14,"id":"dcddfa11_466de319","line":56,"updated":"2025-01-09 16:11:02.000000000","message":"nit: can this be reduced to ``if isinstance(key, str)``\n\noff-topic: in fact, maybe we should use a helper everywhere we make this conditional encode like we already have here\nhttps://github.com/openstack/swift/blob/master/swift/common/middleware/s3api/utils.py#L62C1-L72C1","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":53,"context_line":"        parts.insert(0, ip_range)"},{"line_number":54,"context_line":"        formats.insert(0, b\"ip\u003d%s\")"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    if not isinstance(key, bytes):"},{"line_number":57,"context_line":"        key \u003d key.encode(\u0027utf8\u0027)"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    message \u003d b\u0027\\n\u0027.join("}],"source_content_type":"text/x-python","patch_set":14,"id":"2d7ee5ef_496c82b6","line":56,"in_reply_to":"dcddfa11_466de319","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":130,"context_line":"        value \u003d binascii.hexlify("},{"line_number":131,"context_line":"            strict_b64decode(value + \u0027\u003d\u003d\u0027)).decode(\u0027ascii\u0027)"},{"line_number":132,"context_line":"    else:"},{"line_number":133,"context_line":"        binascii.unhexlify(value)  # make sure it decodes"},{"line_number":134,"context_line":"        algo \u003d {"},{"line_number":135,"context_line":"            40: \u0027sha1\u0027,"},{"line_number":136,"context_line":"            64: \u0027sha256\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"6bfe127a_43987919","line":133,"updated":"2025-01-09 16:11:02.000000000","message":"ok, binascii.Error extends ValueError\n\n```\nbinascii.unhexlify(\u0027z123\u0027)\nTraceback (most recent call last):\n  File \"/Applications/PyCharm CE.app/Contents/plugins/python-ce/helpers/pydev/pydevconsole.py\", line 364, in runcode\n    coro \u003d func()\n  File \"\u003cinput\u003e\", line 1, in \u003cmodule\u003e\nbinascii.Error: Non-hexadecimal digit found\n```","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        value \u003d binascii.hexlify("},{"line_number":131,"context_line":"            strict_b64decode(value + \u0027\u003d\u003d\u0027)).decode(\u0027ascii\u0027)"},{"line_number":132,"context_line":"    else:"},{"line_number":133,"context_line":"        binascii.unhexlify(value)  # make sure it decodes"},{"line_number":134,"context_line":"        algo \u003d {"},{"line_number":135,"context_line":"            40: \u0027sha1\u0027,"},{"line_number":136,"context_line":"            64: \u0027sha256\u0027,"}],"source_content_type":"text/x-python","patch_set":14,"id":"1e65889b_21334655","line":133,"in_reply_to":"6bfe127a_43987919","updated":"2025-01-10 01:44:51.000000000","message":"Acknowledged","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/common/direct_client.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":43,"context_line":"        # host can be used to override the node ip and port reported in"},{"line_number":44,"context_line":"        # the exception"},{"line_number":45,"context_line":"        host \u003d host if host is not None else node"},{"line_number":46,"context_line":"        if isinstance(path, bytes):"},{"line_number":47,"context_line":"            path \u003d path.decode(\"utf-8\")"},{"line_number":48,"context_line":"        full_path \u003d quote(\u0027/%s/%s%s\u0027 % (node[\u0027device\u0027], part, path))"},{"line_number":49,"context_line":"        msg \u003d \u0027%s server %s:%s direct %s %r gave status %s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":14,"id":"db416a1c_07774291","line":46,"updated":"2025-01-09 16:11:02.000000000","message":"hah! so here you did remove the `not` - 👍","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        # host can be used to override the node ip and port reported in"},{"line_number":44,"context_line":"        # the exception"},{"line_number":45,"context_line":"        host \u003d host if host is not None else node"},{"line_number":46,"context_line":"        if isinstance(path, bytes):"},{"line_number":47,"context_line":"            path \u003d path.decode(\"utf-8\")"},{"line_number":48,"context_line":"        full_path \u003d quote(\u0027/%s/%s%s\u0027 % (node[\u0027device\u0027], part, path))"},{"line_number":49,"context_line":"        msg \u003d \u0027%s server %s:%s direct %s %r gave status %s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":14,"id":"229d426d_ccc227a1","line":46,"in_reply_to":"db416a1c_07774291","updated":"2025-01-10 01:44:51.000000000","message":"Acknowledged","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/common/internal_client.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7b79361999c26c1e973ba3cd6eece15f8a81b604","unresolved":true,"context_lines":[{"line_number":33,"context_line":"from swift.common.utils import quote, close_if_possible, drain_and_close"},{"line_number":34,"context_line":"from swift.common.wsgi import loadapp"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"from eventlet.green.urllib import request as urllib2"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class UnexpectedResponse(Exception):"}],"source_content_type":"text/x-python","patch_set":11,"id":"76ec974d_0a01a50b","line":36,"range":{"start_line":36,"start_character":20,"end_line":36,"end_character":52},"updated":"2025-01-06 22:11:15.000000000","message":"ick","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from swift.common.utils import quote, close_if_possible, drain_and_close"},{"line_number":34,"context_line":"from swift.common.wsgi import loadapp"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"from eventlet.green.urllib import request as urllib2"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class UnexpectedResponse(Exception):"}],"source_content_type":"text/x-python","patch_set":11,"id":"9000caed_6db5e60f","line":36,"range":{"start_line":36,"start_character":20,"end_line":36,"end_character":52},"in_reply_to":"76ec974d_0a01a50b","updated":"2025-01-09 00:25:58.000000000","message":"Done","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7b79361999c26c1e973ba3cd6eece15f8a81b604","unresolved":true,"context_lines":[{"line_number":252,"context_line":"            raise UnexpectedResponse(msg, resp)"},{"line_number":253,"context_line":"        if exc_value:"},{"line_number":254,"context_line":"            if exc_value.__traceback__ is not exc_traceback:"},{"line_number":255,"context_line":"                # XXX: can this ever actually happen?"},{"line_number":256,"context_line":"                raise exc_value.with_traceback(exc_traceback)"},{"line_number":257,"context_line":"            raise exc_value"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"f240d82d_e0794700","line":255,"range":{"start_line":255,"start_character":18,"end_line":255,"end_character":53},"updated":"2025-01-06 22:11:15.000000000","message":"ick","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":false,"context_lines":[{"line_number":252,"context_line":"            raise UnexpectedResponse(msg, resp)"},{"line_number":253,"context_line":"        if exc_value:"},{"line_number":254,"context_line":"            if exc_value.__traceback__ is not exc_traceback:"},{"line_number":255,"context_line":"                # XXX: can this ever actually happen?"},{"line_number":256,"context_line":"                raise exc_value.with_traceback(exc_traceback)"},{"line_number":257,"context_line":"            raise exc_value"},{"line_number":258,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"59043309_76442d9e","line":255,"range":{"start_line":255,"start_character":18,"end_line":255,"end_character":53},"in_reply_to":"f240d82d_e0794700","updated":"2025-01-09 00:25:58.000000000","message":"Done","commit_id":"ab2603a4bbeb92f7b1c955fe664c8c2aec8a8f17"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":33,"context_line":"from swift.common.utils import quote, close_if_possible, drain_and_close"},{"line_number":34,"context_line":"from swift.common.wsgi import loadapp"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"from eventlet.green.urllib import request as urllib_request"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class UnexpectedResponse(Exception):"}],"source_content_type":"text/x-python","patch_set":14,"id":"8ae47fed_f5c0df24","line":36,"updated":"2025-01-09 16:11:02.000000000","message":"nit: move to line 19","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":33,"context_line":"from swift.common.utils import quote, close_if_possible, drain_and_close"},{"line_number":34,"context_line":"from swift.common.wsgi import loadapp"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"from eventlet.green.urllib import request as urllib_request"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"class UnexpectedResponse(Exception):"}],"source_content_type":"text/x-python","patch_set":14,"id":"0ff3e504_5da673c9","line":36,"in_reply_to":"8ae47fed_f5c0df24","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/common/middleware/tempauth.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":833,"context_line":"            if cached_auth_data:"},{"line_number":834,"context_line":"                expires, old_groups \u003d cached_auth_data"},{"line_number":835,"context_line":"                old_groups \u003d [group"},{"line_number":836,"context_line":"                              for group in old_groups.split(\u0027,\u0027)]"},{"line_number":837,"context_line":"                new_groups \u003d self._get_user_groups(account, account_user,"},{"line_number":838,"context_line":"                                                   account_id)"},{"line_number":839,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"71c42a29_4c311ae3","line":836,"updated":"2025-01-09 16:11:02.000000000","message":"nit: could be on one line now","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":833,"context_line":"            if cached_auth_data:"},{"line_number":834,"context_line":"                expires, old_groups \u003d cached_auth_data"},{"line_number":835,"context_line":"                old_groups \u003d [group"},{"line_number":836,"context_line":"                              for group in old_groups.split(\u0027,\u0027)]"},{"line_number":837,"context_line":"                new_groups \u003d self._get_user_groups(account, account_user,"},{"line_number":838,"context_line":"                                                   account_id)"},{"line_number":839,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"050b70e1_b8db3cd8","line":836,"in_reply_to":"71c42a29_4c311ae3","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/common/middleware/tempurl.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":360,"context_line":"      keys \u003d get_tempurl_keys_from_metadata(meta)"},{"line_number":361,"context_line":"    \"\"\""},{"line_number":362,"context_line":"    return [value"},{"line_number":363,"context_line":"            for key, value in meta.items()"},{"line_number":364,"context_line":"            if key.lower() in (\u0027temp-url-key\u0027, \u0027temp-url-key-2\u0027)]"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"d41a9652_1f693157","line":363,"updated":"2025-01-09 16:11:02.000000000","message":"nit: could remove newline","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":360,"context_line":"      keys \u003d get_tempurl_keys_from_metadata(meta)"},{"line_number":361,"context_line":"    \"\"\""},{"line_number":362,"context_line":"    return [value"},{"line_number":363,"context_line":"            for key, value in meta.items()"},{"line_number":364,"context_line":"            if key.lower() in (\u0027temp-url-key\u0027, \u0027temp-url-key-2\u0027)]"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"6a3a73e2_c58204b2","line":363,"in_reply_to":"d41a9652_1f693157","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/common/request_helpers.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"c4bf6ed52ac29a8d0e3734b75817a5cadff1dd66","unresolved":true,"context_lines":[{"line_number":594,"context_line":"            if pending_req:"},{"line_number":595,"context_line":"                yield pending_req, pending_etag, pending_size"},{"line_number":596,"context_line":"            # XXX: is the with_traceback() actually needed?"},{"line_number":597,"context_line":"            raise e_value.with_traceback(e_traceback)"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        if pending_req:"},{"line_number":600,"context_line":"            yield pending_req, pending_etag, pending_size"}],"source_content_type":"text/x-python","patch_set":10,"id":"64c6779a_9bd6a19f","line":597,"updated":"2025-01-04 16:52:42.000000000","message":"\"If an exception e is currently handled (so exception() would return e), exc_info() returns the tuple (type(e), e, e.__traceback__)\"\n\nseems like explicit traceback is not any more necessary than the exception type.\n\nThat said, I don\u0027t understand why not use \"except ListingIterError as e\" and then raise e.","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"42b3c985046626657d600a05fdadbb4b3083d7c9","unresolved":false,"context_lines":[{"line_number":594,"context_line":"            if pending_req:"},{"line_number":595,"context_line":"                yield pending_req, pending_etag, pending_size"},{"line_number":596,"context_line":"            # XXX: is the with_traceback() actually needed?"},{"line_number":597,"context_line":"            raise e_value.with_traceback(e_traceback)"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":"        if pending_req:"},{"line_number":600,"context_line":"            yield pending_req, pending_etag, pending_size"}],"source_content_type":"text/x-python","patch_set":10,"id":"ebfb4308_67c45dbc","line":597,"in_reply_to":"64c6779a_9bd6a19f","updated":"2025-01-06 05:57:35.000000000","message":"Done.\n\nI think I\u0027ve got some paranoia regarding exception handling that goes all the way back to [my first swift commit](https://github.com/openstack/swift/commit/90b84d3a699811a99c97ebbe4f71a14d2f76a0e5) -- but now\u0027s a great time to re-evaluate old assumptions!","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":49,"context_line":"MISPLACED_OBJECTS_ACCOUNT \u003d \u0027.misplaced_objects\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"from html import escape as html_escape  # noqa: F401"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def get_param(req, name, default\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"5da9a189_497408be","line":52,"updated":"2025-01-09 16:11:02.000000000","message":"it no longer seems necessary to have this aliasing in request_helpers - we can just import html directly where it is used","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":49,"context_line":"MISPLACED_OBJECTS_ACCOUNT \u003d \u0027.misplaced_objects\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"from html import escape as html_escape  # noqa: F401"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def get_param(req, name, default\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"993c57a0_a000b8e9","line":52,"in_reply_to":"5da9a189_497408be","updated":"2025-01-10 01:44:51.000000000","message":"Good call; I\u0027ve only just now bothered to look for [the history](https://github.com/openstack/swift/commit/e3ee6ce31aed8d24fefdd20900d20688a12bb55d) -- I doubt we need to keep the name around for 3rd parties (right?)","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9971e071221f112717b02507f1288dda2956db1c","unresolved":false,"context_lines":[{"line_number":49,"context_line":"MISPLACED_OBJECTS_ACCOUNT \u003d \u0027.misplaced_objects\u0027"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"from html import escape as html_escape  # noqa: F401"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"def get_param(req, name, default\u003dNone):"}],"source_content_type":"text/x-python","patch_set":14,"id":"69657054_f612972a","line":52,"in_reply_to":"993c57a0_a000b8e9","updated":"2025-01-10 09:52:04.000000000","message":"I think if a 3rd party used this then its reasonable and simple for them to upgrade just as we have","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/common/storage_policy.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # Return the requested set of ports from our (now-freshened) cache"},{"line_number":83,"context_line":"        return six.moves.reduce(set.union,"},{"line_number":84,"context_line":"                                self.portsets_by_ring_path.values(), set())"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class PolicyError(ValueError):"}],"source_content_type":"text/x-python","patch_set":14,"id":"e8d2344a_185bba8f","side":"PARENT","line":84,"updated":"2025-01-09 16:11:02.000000000","message":"curious why this was ever necessary vs using set.update()","commit_id":"4d4e65904a8d34f2f3386a0e69c27b03d40d1b1c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":true,"context_lines":[{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        # Return the requested set of ports from our (now-freshened) cache"},{"line_number":83,"context_line":"        return six.moves.reduce(set.union,"},{"line_number":84,"context_line":"                                self.portsets_by_ring_path.values(), set())"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"class PolicyError(ValueError):"}],"source_content_type":"text/x-python","patch_set":14,"id":"d0352007_f23cdf62","side":"PARENT","line":84,"in_reply_to":"e8d2344a_185bba8f","updated":"2025-01-10 01:44:51.000000000","message":"No idea. Could probably even go a step further with something like\n```\nreturn {port for portset in self.portsets_by_ring_path.values() for port in portset}\n```\nbut maybe that\u0027s sacrificing some readability.","commit_id":"4d4e65904a8d34f2f3386a0e69c27b03d40d1b1c"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":977,"context_line":"    \"\"\""},{"line_number":978,"context_line":"    global _POLICIES"},{"line_number":979,"context_line":"    # Python 3.2 disallows section or option duplicates by default"},{"line_number":980,"context_line":"    # strict\u003dFalse allows us to preserve the older behavior"},{"line_number":981,"context_line":"    policy_conf \u003d ConfigParser(strict\u003dFalse)"},{"line_number":982,"context_line":"    policy_conf.read(utils.SWIFT_CONF_FILE)"},{"line_number":983,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1f23610e_878d345a","line":980,"range":{"start_line":980,"start_character":32,"end_line":980,"end_character":59},"updated":"2025-01-09 16:11:02.000000000","message":"nit: ``the older behavior`` is a reference to py2 that is probably no longer necessary. We just don\u0027t want strict.","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":977,"context_line":"    \"\"\""},{"line_number":978,"context_line":"    global _POLICIES"},{"line_number":979,"context_line":"    # Python 3.2 disallows section or option duplicates by default"},{"line_number":980,"context_line":"    # strict\u003dFalse allows us to preserve the older behavior"},{"line_number":981,"context_line":"    policy_conf \u003d ConfigParser(strict\u003dFalse)"},{"line_number":982,"context_line":"    policy_conf.read(utils.SWIFT_CONF_FILE)"},{"line_number":983,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"08e5272d_bf4b56c2","line":980,"range":{"start_line":980,"start_character":32,"end_line":980,"end_character":59},"in_reply_to":"1f23610e_878d345a","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/common/utils/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":69,"context_line":"from configparser import (ConfigParser, NoSectionError,"},{"line_number":70,"context_line":"                          NoOptionError)"},{"line_number":71,"context_line":"from urllib.parse import unquote"},{"line_number":72,"context_line":"from urllib.parse import urlparse"},{"line_number":73,"context_line":"from collections import UserList"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"import swift.common.exceptions"}],"source_content_type":"text/x-python","patch_set":14,"id":"6631ba1b_9d5d4dca","line":72,"updated":"2025-01-09 16:11:02.000000000","message":"nit: combine the two imports on one line","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":69,"context_line":"from configparser import (ConfigParser, NoSectionError,"},{"line_number":70,"context_line":"                          NoOptionError)"},{"line_number":71,"context_line":"from urllib.parse import unquote"},{"line_number":72,"context_line":"from urllib.parse import urlparse"},{"line_number":73,"context_line":"from collections import UserList"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"import swift.common.exceptions"}],"source_content_type":"text/x-python","patch_set":14,"id":"28f92ac0_48941a6b","line":72,"in_reply_to":"6631ba1b_9d5d4dca","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":true,"context_lines":[{"line_number":4584,"context_line":"    try:"},{"line_number":4585,"context_line":"        return base64.b64decode(value)"},{"line_number":4586,"context_line":"    except binascii.Error:"},{"line_number":4587,"context_line":"        raise ValueError"},{"line_number":4588,"context_line":""},{"line_number":4589,"context_line":""},{"line_number":4590,"context_line":"def cap_length(value, max_length):"}],"source_content_type":"text/x-python","patch_set":14,"id":"8b245bce_308040aa","line":4587,"updated":"2025-01-09 00:25:58.000000000","message":"`binascii.Error` already inherits from `ValueError` -- maybe we should just ditch this try/except...","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":4584,"context_line":"    try:"},{"line_number":4585,"context_line":"        return base64.b64decode(value)"},{"line_number":4586,"context_line":"    except binascii.Error:"},{"line_number":4587,"context_line":"        raise ValueError"},{"line_number":4588,"context_line":""},{"line_number":4589,"context_line":""},{"line_number":4590,"context_line":"def cap_length(value, max_length):"}],"source_content_type":"text/x-python","patch_set":14,"id":"bf66de44_6942b858","line":4587,"in_reply_to":"8b245bce_308040aa","updated":"2025-01-09 16:11:02.000000000","message":"+1 in one of the earlier changes binascii.Error is just allowed to raise cf.\nhttps://review.opendev.org/c/openstack/swift/+/853697/comment/6bfe127a_43987919/","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":4584,"context_line":"    try:"},{"line_number":4585,"context_line":"        return base64.b64decode(value)"},{"line_number":4586,"context_line":"    except binascii.Error:"},{"line_number":4587,"context_line":"        raise ValueError"},{"line_number":4588,"context_line":""},{"line_number":4589,"context_line":""},{"line_number":4590,"context_line":"def cap_length(value, max_length):"}],"source_content_type":"text/x-python","patch_set":14,"id":"7be940d2_88326b65","line":4587,"in_reply_to":"bf66de44_6942b858","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a4c9fe0c5ebd70b78535759c697ff06b26013683","unresolved":true,"context_lines":[{"line_number":4580,"context_line":"        strip_chars +\u003d \u0027\\r\\n\u0027"},{"line_number":4581,"context_line":"    if any(c not in valid_chars for c in value.strip(strip_chars)):"},{"line_number":4582,"context_line":"        raise ValueError"},{"line_number":4583,"context_line":"    return base64.b64decode(value)"},{"line_number":4584,"context_line":""},{"line_number":4585,"context_line":""},{"line_number":4586,"context_line":"def cap_length(value, max_length):"}],"source_content_type":"text/x-python","patch_set":16,"id":"5668dfdd_f2245d5a","line":4583,"updated":"2025-01-15 08:59:08.000000000","message":"Is there a reason we removed the try here, shouldn\u0027t we just have removed the TypeError?\n\n```\ntry:\n    return base64.b64decode(value)\nexcept binascii.Error:\n    raise ValueError\n```","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5abff0aea11a6f01496b288f59fa21a99c736e32","unresolved":false,"context_lines":[{"line_number":4580,"context_line":"        strip_chars +\u003d \u0027\\r\\n\u0027"},{"line_number":4581,"context_line":"    if any(c not in valid_chars for c in value.strip(strip_chars)):"},{"line_number":4582,"context_line":"        raise ValueError"},{"line_number":4583,"context_line":"    return base64.b64decode(value)"},{"line_number":4584,"context_line":""},{"line_number":4585,"context_line":""},{"line_number":4586,"context_line":"def cap_length(value, max_length):"}],"source_content_type":"text/x-python","patch_set":16,"id":"196bea5b_c715009f","line":4583,"in_reply_to":"52733fc5_6a08d81d","updated":"2025-01-15 21:08:47.000000000","message":"Acknowledged","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5abff0aea11a6f01496b288f59fa21a99c736e32","unresolved":false,"context_lines":[{"line_number":4580,"context_line":"        strip_chars +\u003d \u0027\\r\\n\u0027"},{"line_number":4581,"context_line":"    if any(c not in valid_chars for c in value.strip(strip_chars)):"},{"line_number":4582,"context_line":"        raise ValueError"},{"line_number":4583,"context_line":"    return base64.b64decode(value)"},{"line_number":4584,"context_line":""},{"line_number":4585,"context_line":""},{"line_number":4586,"context_line":"def cap_length(value, max_length):"}],"source_content_type":"text/x-python","patch_set":16,"id":"33579222_17c5935a","line":4583,"in_reply_to":"52733fc5_6a08d81d","updated":"2025-01-15 21:08:47.000000000","message":"Acknowledged","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"27cc4ffa6aeea62e11d447f45a7dab79808206b6","unresolved":true,"context_lines":[{"line_number":4580,"context_line":"        strip_chars +\u003d \u0027\\r\\n\u0027"},{"line_number":4581,"context_line":"    if any(c not in valid_chars for c in value.strip(strip_chars)):"},{"line_number":4582,"context_line":"        raise ValueError"},{"line_number":4583,"context_line":"    return base64.b64decode(value)"},{"line_number":4584,"context_line":""},{"line_number":4585,"context_line":""},{"line_number":4586,"context_line":"def cap_length(value, max_length):"}],"source_content_type":"text/x-python","patch_set":16,"id":"52733fc5_6a08d81d","line":4583,"in_reply_to":"5668dfdd_f2245d5a","updated":"2025-01-15 09:46:05.000000000","message":"binascii.Error extends ValueError so no need to catch and re-raise as a ValueError","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"}],"swift/common/utils/base.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":23,"context_line":"import codecs"},{"line_number":24,"context_line":"import hashlib"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from urllib.parse import quote as _quote"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"e839d2a3_667eccd1","line":26,"updated":"2025-01-09 16:11:02.000000000","message":":( that\u0027s an unfortunate name clash","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9971e071221f112717b02507f1288dda2956db1c","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import codecs"},{"line_number":24,"context_line":"import hashlib"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from urllib.parse import quote as _quote"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"try:"}],"source_content_type":"text/x-python","patch_set":14,"id":"222315cb_cf461975","line":26,"in_reply_to":"e839d2a3_667eccd1","updated":"2025-01-10 09:52:04.000000000","message":"Acknowledged","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/common/utils/config.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":17,"context_line":"import operator"},{"line_number":18,"context_line":"import re"},{"line_number":19,"context_line":"import configparser"},{"line_number":20,"context_line":"from configparser import (ConfigParser, RawConfigParser)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Used when reading config values"},{"line_number":23,"context_line":"TRUE_VALUES \u003d {\u0027true\u0027, \u00271\u0027, \u0027yes\u0027, \u0027on\u0027, \u0027t\u0027, \u0027y\u0027}"}],"source_content_type":"text/x-python","patch_set":14,"id":"c9b58499_f0c39260","line":20,"updated":"2025-01-09 16:11:02.000000000","message":"nit: unnecessary parentheses","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import operator"},{"line_number":18,"context_line":"import re"},{"line_number":19,"context_line":"import configparser"},{"line_number":20,"context_line":"from configparser import (ConfigParser, RawConfigParser)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Used when reading config values"},{"line_number":23,"context_line":"TRUE_VALUES \u003d {\u0027true\u0027, \u00271\u0027, \u0027yes\u0027, \u0027on\u0027, \u0027t\u0027, \u0027y\u0027}"}],"source_content_type":"text/x-python","patch_set":14,"id":"72570651_127584af","line":20,"in_reply_to":"c9b58499_f0c39260","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":371,"context_line":"        # it, though, so *we* got it \"for free\". Unfortunatley, since we"},{"line_number":372,"context_line":"        # \"supported\" interpolation, we have to assume there are"},{"line_number":373,"context_line":"        # deployments in the wild that use it, and try not to break them."},{"line_number":374,"context_line":"        # So, do what we can to mimic the py2 behavior of passing through"},{"line_number":375,"context_line":"        # values like \"1%\" (which we want to support for"},{"line_number":376,"context_line":"        # fallocate_reserve)."},{"line_number":377,"context_line":"        c \u003d ConfigParser(defaults, interpolation\u003dNicerInterpolation())"}],"source_content_type":"text/x-python","patch_set":14,"id":"24fed61d_609de26d","line":374,"range":{"start_line":374,"start_character":42,"end_line":374,"end_character":54},"updated":"2025-01-09 16:11:02.000000000","message":"do we want to remove this reference to py2?","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":true,"context_lines":[{"line_number":371,"context_line":"        # it, though, so *we* got it \"for free\". Unfortunatley, since we"},{"line_number":372,"context_line":"        # \"supported\" interpolation, we have to assume there are"},{"line_number":373,"context_line":"        # deployments in the wild that use it, and try not to break them."},{"line_number":374,"context_line":"        # So, do what we can to mimic the py2 behavior of passing through"},{"line_number":375,"context_line":"        # values like \"1%\" (which we want to support for"},{"line_number":376,"context_line":"        # fallocate_reserve)."},{"line_number":377,"context_line":"        c \u003d ConfigParser(defaults, interpolation\u003dNicerInterpolation())"}],"source_content_type":"text/x-python","patch_set":14,"id":"66276ded_e49de3c8","line":374,"range":{"start_line":374,"start_character":42,"end_line":374,"end_character":54},"in_reply_to":"24fed61d_609de26d","updated":"2025-01-10 01:44:51.000000000","message":"I figured there was some value in leaving as much of the history about what\u0027s going on here as I could. Longer term, we should probably just *disable interpolation* (which a whole deprecation cycle, etc)","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9971e071221f112717b02507f1288dda2956db1c","unresolved":false,"context_lines":[{"line_number":371,"context_line":"        # it, though, so *we* got it \"for free\". Unfortunatley, since we"},{"line_number":372,"context_line":"        # \"supported\" interpolation, we have to assume there are"},{"line_number":373,"context_line":"        # deployments in the wild that use it, and try not to break them."},{"line_number":374,"context_line":"        # So, do what we can to mimic the py2 behavior of passing through"},{"line_number":375,"context_line":"        # values like \"1%\" (which we want to support for"},{"line_number":376,"context_line":"        # fallocate_reserve)."},{"line_number":377,"context_line":"        c \u003d ConfigParser(defaults, interpolation\u003dNicerInterpolation())"}],"source_content_type":"text/x-python","patch_set":14,"id":"5add0c9a_703752e5","line":374,"range":{"start_line":374,"start_character":42,"end_line":374,"end_character":54},"in_reply_to":"66276ded_e49de3c8","updated":"2025-01-10 09:52:04.000000000","message":"fair point","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a4c9fe0c5ebd70b78535759c697ff06b26013683","unresolved":true,"context_lines":[{"line_number":17,"context_line":"import operator"},{"line_number":18,"context_line":"import re"},{"line_number":19,"context_line":"import configparser"},{"line_number":20,"context_line":"from configparser import ConfigParser, RawConfigParser"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"# Used when reading config values"},{"line_number":23,"context_line":"TRUE_VALUES \u003d {\u0027true\u0027, \u00271\u0027, \u0027yes\u0027, \u0027on\u0027, \u0027t\u0027, \u0027y\u0027}"}],"source_content_type":"text/x-python","patch_set":16,"id":"eb8eb944_8c22307f","line":20,"updated":"2025-01-15 08:59:08.000000000","message":"From what I can see, we only import configparser in it\u0027s entirity because of line 340 (configparser.BasicInterpolation)\n\nSo we could probably get away with:\n\n```\nfrom configparser import ConfigParser, RawConfigParser, BasicInterpolation\n```","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"}],"swift/common/utils/logs.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":40,"context_line":"# we do the same here"},{"line_number":41,"context_line":"import swift.common.exceptions"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"from eventlet.green.http import client as green_http_client"},{"line_number":44,"context_line":"import http.client"},{"line_number":45,"context_line":"from eventlet.green import threading"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"065dd71e_562aa165","line":43,"range":{"start_line":43,"start_character":42,"end_line":43,"end_character":59},"updated":"2025-01-09 16:11:02.000000000","message":"so far every other place this change was made we now import as ``http_client``. I guess there\u0027s a desire to disambiguate from ``http.client``","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9971e071221f112717b02507f1288dda2956db1c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"# we do the same here"},{"line_number":41,"context_line":"import swift.common.exceptions"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"from eventlet.green.http import client as green_http_client"},{"line_number":44,"context_line":"import http.client"},{"line_number":45,"context_line":"from eventlet.green import threading"},{"line_number":46,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"264cc361_e00dbeca","line":43,"range":{"start_line":43,"start_character":42,"end_line":43,"end_character":59},"in_reply_to":"065dd71e_562aa165","updated":"2025-01-10 09:52:04.000000000","message":"this is now at least consistent with swift/common/bufferedhttp.py","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":757,"context_line":"                h \u003d getattr(hashlib, self.method)()"},{"line_number":758,"context_line":"            if self.salt:"},{"line_number":759,"context_line":"                h.update(self.salt.encode(\u0027utf8\u0027))"},{"line_number":760,"context_line":"            h.update(self.encode(\u0027utf8\u0027))"},{"line_number":761,"context_line":"            return \u0027{%s%s}%s\u0027 % (\u0027S\u0027 if self.salt else \u0027\u0027, self.method.upper(),"},{"line_number":762,"context_line":"                                 h.hexdigest())"},{"line_number":763,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"6478508d_0bd0f996","line":760,"updated":"2025-01-09 16:11:02.000000000","message":"the coding has changed from latin to utf8?\n\n\"six.b(data)\nA “fake” bytes literal. data should always be a normal string literal. In Python 2, b() returns an 8-bit string. In Python 3, data is encoded with the latin-1 encoding to bytes.\"\nhttps://six.readthedocs.io/#six.b","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":757,"context_line":"                h \u003d getattr(hashlib, self.method)()"},{"line_number":758,"context_line":"            if self.salt:"},{"line_number":759,"context_line":"                h.update(self.salt.encode(\u0027utf8\u0027))"},{"line_number":760,"context_line":"            h.update(self.encode(\u0027utf8\u0027))"},{"line_number":761,"context_line":"            return \u0027{%s%s}%s\u0027 % (\u0027S\u0027 if self.salt else \u0027\u0027, self.method.upper(),"},{"line_number":762,"context_line":"                                 h.hexdigest())"},{"line_number":763,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"d76399df_23d94c82","line":760,"in_reply_to":"6478508d_0bd0f996","updated":"2025-01-10 01:44:51.000000000","message":"Good catch! I\u0027m a little wary of having a way in which logging might introduce UnicodeEncodeErrors, but no one has complained so far...","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a4c9fe0c5ebd70b78535759c697ff06b26013683","unresolved":true,"context_lines":[{"line_number":756,"context_line":"            else:"},{"line_number":757,"context_line":"                h \u003d getattr(hashlib, self.method)()"},{"line_number":758,"context_line":"            if self.salt:"},{"line_number":759,"context_line":"                h.update(self.salt.encode(\u0027latin1\u0027))"},{"line_number":760,"context_line":"            h.update(self.encode(\u0027latin1\u0027))"},{"line_number":761,"context_line":"            return \u0027{%s%s}%s\u0027 % (\u0027S\u0027 if self.salt else \u0027\u0027, self.method.upper(),"},{"line_number":762,"context_line":"                                 h.hexdigest())"}],"source_content_type":"text/x-python","patch_set":16,"id":"a11f54a6_0f5c40ce","line":759,"updated":"2025-01-15 08:59:08.000000000","message":"What\u0027s the default byte encoding in py3? is it latin or should be be \u0027utf-8\u0027? String encodings always confuse me :P","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"27cc4ffa6aeea62e11d447f45a7dab79808206b6","unresolved":true,"context_lines":[{"line_number":756,"context_line":"            else:"},{"line_number":757,"context_line":"                h \u003d getattr(hashlib, self.method)()"},{"line_number":758,"context_line":"            if self.salt:"},{"line_number":759,"context_line":"                h.update(self.salt.encode(\u0027latin1\u0027))"},{"line_number":760,"context_line":"            h.update(self.encode(\u0027latin1\u0027))"},{"line_number":761,"context_line":"            return \u0027{%s%s}%s\u0027 % (\u0027S\u0027 if self.salt else \u0027\u0027, self.method.upper(),"},{"line_number":762,"context_line":"                                 h.hexdigest())"}],"source_content_type":"text/x-python","patch_set":16,"id":"ce204f7f_67b1aacd","line":759,"in_reply_to":"a11f54a6_0f5c40ce","updated":"2025-01-15 09:46:05.000000000","message":"six.b encoded as latin1 so this is preserving that behaviour\nhttps://six.readthedocs.io/#six.b","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"5abff0aea11a6f01496b288f59fa21a99c736e32","unresolved":false,"context_lines":[{"line_number":756,"context_line":"            else:"},{"line_number":757,"context_line":"                h \u003d getattr(hashlib, self.method)()"},{"line_number":758,"context_line":"            if self.salt:"},{"line_number":759,"context_line":"                h.update(self.salt.encode(\u0027latin1\u0027))"},{"line_number":760,"context_line":"            h.update(self.encode(\u0027latin1\u0027))"},{"line_number":761,"context_line":"            return \u0027{%s%s}%s\u0027 % (\u0027S\u0027 if self.salt else \u0027\u0027, self.method.upper(),"},{"line_number":762,"context_line":"                                 h.hexdigest())"}],"source_content_type":"text/x-python","patch_set":16,"id":"c976d4b4_40771285","line":759,"in_reply_to":"ce204f7f_67b1aacd","updated":"2025-01-15 21:08:47.000000000","message":"Acknowledged","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"}],"swift/common/utils/timestamp.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":true,"context_lines":[{"line_number":175,"context_line":"        # method, to use the same rounding method than Python 2. Python 3"},{"line_number":176,"context_line":"        # used a different rounding method, but Python 3.4.4 and 3.5.1 use"},{"line_number":177,"context_line":"        # again ROUND_HALF_EVEN as Python 2."},{"line_number":178,"context_line":"        # See https://bugs.python.org/issue23517"},{"line_number":179,"context_line":"        frac, t \u003d math.modf(t)"},{"line_number":180,"context_line":"        us \u003d round(frac * 1e6)"},{"line_number":181,"context_line":"        if us \u003e\u003d 1000000:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1bd8fc6c_e0906a8e","line":178,"updated":"2025-01-09 00:25:58.000000000","message":"I wonder about how much we actually have to worry about this...","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/common/wsgi.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a4c9fe0c5ebd70b78535759c697ff06b26013683","unresolved":true,"context_lines":[{"line_number":514,"context_line":""},{"line_number":515,"context_line":"        for sock in self.iter_sockets():"},{"line_number":516,"context_line":"            if six.PY2:"},{"line_number":517,"context_line":"                fcntl.fcntl(sock.fileno(), fcntl.F_SETFD, fcntl.FD_CLOEXEC)"},{"line_number":518,"context_line":"            else:"},{"line_number":519,"context_line":"                # Python 3.4 and later default to sockets having close-on-exec"},{"line_number":520,"context_line":"                # set (what PEP 0446 calls \"non-inheritable\").  This new method"}],"source_content_type":"text/x-python","patch_set":16,"id":"7f947b17_b35a2475","side":"PARENT","line":517,"updated":"2025-01-15 08:59:08.000000000","message":"Ahh nice, good riddance 😊","commit_id":"06644f4e05339247e08f924867e652e9a17c2d21"}],"swift/container/backend.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":33,"context_line":"    ShardRange, renamer, MD5_OF_EMPTY_STRING, mkdirs, get_db_files, \\"},{"line_number":34,"context_line":"    parse_db_filename, make_db_file_path, split_path, RESERVED_BYTE, \\"},{"line_number":35,"context_line":"    ShardRangeList, Namespace"},{"line_number":36,"context_line":"from swift.common.db import DatabaseBroker, utf8encode, BROKER_TIMEOUT, \\"},{"line_number":37,"context_line":"    zero_like, DatabaseAlreadyExists, SQLITE_ARG_LIMIT"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"DATADIR \u003d \u0027containers\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"339a5856_c579397a","side":"PARENT","line":36,"range":{"start_line":36,"start_character":44,"end_line":36,"end_character":54},"updated":"2025-01-09 16:11:02.000000000","message":"AFAICT this function ends up being unused - see follow-up patch","commit_id":"4d4e65904a8d34f2f3386a0e69c27b03d40d1b1c"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":33,"context_line":"    ShardRange, renamer, MD5_OF_EMPTY_STRING, mkdirs, get_db_files, \\"},{"line_number":34,"context_line":"    parse_db_filename, make_db_file_path, split_path, RESERVED_BYTE, \\"},{"line_number":35,"context_line":"    ShardRangeList, Namespace"},{"line_number":36,"context_line":"from swift.common.db import DatabaseBroker, utf8encode, BROKER_TIMEOUT, \\"},{"line_number":37,"context_line":"    zero_like, DatabaseAlreadyExists, SQLITE_ARG_LIMIT"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"DATADIR \u003d \u0027containers\u0027"}],"source_content_type":"text/x-python","patch_set":14,"id":"cfbc86a0_8a80fe7c","side":"PARENT","line":36,"range":{"start_line":36,"start_character":44,"end_line":36,"end_character":54},"in_reply_to":"339a5856_c579397a","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"4d4e65904a8d34f2f3386a0e69c27b03d40d1b1c"}],"swift/container/reconciler.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":272,"context_line":"              container, obj, q_op, q_ts, q_record, and path"},{"line_number":273,"context_line":"    \"\"\""},{"line_number":274,"context_line":"    raw_obj_name \u003d obj_info[\u0027name\u0027]"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    policy_index, obj_name \u003d raw_obj_name.split(\u0027:\u0027, 1)"},{"line_number":277,"context_line":"    q_policy_index \u003d int(policy_index)"},{"line_number":278,"context_line":"    account, container, obj \u003d split_path(obj_name, 3, 3, rest_with_last\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":14,"id":"0894d9c8_4e9a05bf","line":275,"updated":"2025-01-09 16:11:02.000000000","message":"nit: we could lose this empty line","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":272,"context_line":"              container, obj, q_op, q_ts, q_record, and path"},{"line_number":273,"context_line":"    \"\"\""},{"line_number":274,"context_line":"    raw_obj_name \u003d obj_info[\u0027name\u0027]"},{"line_number":275,"context_line":""},{"line_number":276,"context_line":"    policy_index, obj_name \u003d raw_obj_name.split(\u0027:\u0027, 1)"},{"line_number":277,"context_line":"    q_policy_index \u003d int(policy_index)"},{"line_number":278,"context_line":"    account, container, obj \u003d split_path(obj_name, 3, 3, rest_with_last\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":14,"id":"e2a4fa55_a9fbe836","line":275,"in_reply_to":"0894d9c8_4e9a05bf","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/obj/diskfile.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":156,"context_line":"    def encode_str(item):"},{"line_number":157,"context_line":"        if isinstance(item, str):"},{"line_number":158,"context_line":"            return item.encode(\u0027utf8\u0027, \u0027surrogateescape\u0027)"},{"line_number":159,"context_line":"        return item"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    return dict(((encode_str(k), encode_str(v)) for k, v in metadata.items()))"},{"line_number":162,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"fe460b0f_288ba11e","line":159,"updated":"2025-01-09 16:11:02.000000000","message":"off-topic: we should have a helper like this in utils and use it everywhere.","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":1143,"context_line":"        :param path: full path to directory"},{"line_number":1144,"context_line":"        :param policy: storage policy used"},{"line_number":1145,"context_line":"        \"\"\""},{"line_number":1146,"context_line":"        class shim(object):"},{"line_number":1147,"context_line":"            def __init__(self):"},{"line_number":1148,"context_line":"                self.md5 \u003d md5(usedforsecurity\u003dFalse)"},{"line_number":1149,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1e48f99f_f9238287","line":1146,"updated":"2025-01-09 16:11:02.000000000","message":"off-topic: we could avoid this shim if we had an ``encode_str`` helper, then just call ``md5.update(encode_str(val))``","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/obj/replicator.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":554,"context_line":"                                                   node[\u0027device\u0027]))"},{"line_number":555,"context_line":"                        if success and node[\u0027region\u0027] !\u003d job[\u0027region\u0027]:"},{"line_number":556,"context_line":"                            synced_remote_regions[node[\u0027region\u0027]] \u003d set("},{"line_number":557,"context_line":"                                candidates)"},{"line_number":558,"context_line":"                        responses.append(success)"},{"line_number":559,"context_line":"                    for cand_objs in synced_remote_regions.values():"},{"line_number":560,"context_line":"                        if delete_objs is None:"}],"source_content_type":"text/x-python","patch_set":14,"id":"d4c45418_8347f150","line":557,"range":{"start_line":557,"start_character":32,"end_line":557,"end_character":42},"updated":"2025-01-09 16:11:02.000000000","message":"why not ``candidates.keys()``?","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":554,"context_line":"                                                   node[\u0027device\u0027]))"},{"line_number":555,"context_line":"                        if success and node[\u0027region\u0027] !\u003d job[\u0027region\u0027]:"},{"line_number":556,"context_line":"                            synced_remote_regions[node[\u0027region\u0027]] \u003d set("},{"line_number":557,"context_line":"                                candidates)"},{"line_number":558,"context_line":"                        responses.append(success)"},{"line_number":559,"context_line":"                    for cand_objs in synced_remote_regions.values():"},{"line_number":560,"context_line":"                        if delete_objs is None:"}],"source_content_type":"text/x-python","patch_set":14,"id":"1781fe2e_a1ca554b","line":557,"range":{"start_line":557,"start_character":32,"end_line":557,"end_character":42},"in_reply_to":"d4c45418_8347f150","updated":"2025-01-10 01:44:51.000000000","message":"I don\u0027t remember. I think I had some concern about ability to re-iterate? Or the extra memory required to keep the whole dict in memory when we only care about the keys? w/e, I\u0027ll change it.","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/obj/server.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        # network_chunk_size parameter value instead."},{"line_number":200,"context_line":"        # if six.PY2:"},{"line_number":201,"context_line":"        #    socket._fileobject.default_bufsize \u003d self.network_chunk_size"},{"line_number":202,"context_line":"        # TODO: find a way to enable similar functionality in py3"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        # Provide further setup specific to an object server implementation."},{"line_number":205,"context_line":"        self.setup(conf)"}],"source_content_type":"text/x-python","patch_set":14,"id":"12638cc5_9cfc3f4c","line":202,"updated":"2025-01-09 00:25:58.000000000","message":"Ugh, right...","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a4c9fe0c5ebd70b78535759c697ff06b26013683","unresolved":true,"context_lines":[{"line_number":199,"context_line":"        # network_chunk_size parameter value instead."},{"line_number":200,"context_line":"        # if six.PY2:"},{"line_number":201,"context_line":"        #    socket._fileobject.default_bufsize \u003d self.network_chunk_size"},{"line_number":202,"context_line":"        # TODO: find a way to enable similar functionality in py3"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"        # Provide further setup specific to an object server implementation."},{"line_number":205,"context_line":"        self.setup(conf)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7e272d4a_b7415d61","line":202,"in_reply_to":"12638cc5_9cfc3f4c","updated":"2025-01-15 08:59:08.000000000","message":"is that why it\u0027s left if, basically for the todo.. makes sense.","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/obj/ssync_sender.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"c4bf6ed52ac29a8d0e3734b75817a5cadff1dd66","unresolved":true,"context_lines":[{"line_number":308,"context_line":"            hash_gen \u003d ("},{"line_number":309,"context_line":"                (obj_hash, timestamp)"},{"line_number":310,"context_line":"                for obj_hash, timestamp in hash_gen"},{"line_number":311,"context_line":"                if obj_hash in self.remote_check_objs)"},{"line_number":312,"context_line":"        nlines \u003d 0"},{"line_number":313,"context_line":"        nbytes \u003d 0"},{"line_number":314,"context_line":"        object_hash \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"0728e29a_a877031d","line":311,"updated":"2025-01-04 16:52:42.000000000","message":"I heard that built-in functions are always faster. I\u0027d keep filter() here because there may be quite a number of objects.","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":true,"context_lines":[{"line_number":308,"context_line":"            hash_gen \u003d ("},{"line_number":309,"context_line":"                (obj_hash, timestamp)"},{"line_number":310,"context_line":"                for obj_hash, timestamp in hash_gen"},{"line_number":311,"context_line":"                if obj_hash in self.remote_check_objs)"},{"line_number":312,"context_line":"        nlines \u003d 0"},{"line_number":313,"context_line":"        nbytes \u003d 0"},{"line_number":314,"context_line":"        object_hash \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"7baec7bc_633cc34c","line":311,"in_reply_to":"0728e29a_a877031d","updated":"2025-01-09 00:25:58.000000000","message":"I\u0027m not sure it\u0027s a good general rule:\n```\n$ python -m timeit -s \u0027import random, functools\u0027 \u0027[x for x in range(1000) if random.random() \u003c .1]\u0027\n10000 loops, best of 5: 33.7 usec per loop\n$ python -m timeit -s \u0027import random, functools\u0027 \u0027[x for x in range(1000) if random.random() \u003c .9]\u0027\n10000 loops, best of 5: 34.8 usec per loop\n$ python -m timeit -s \u0027import random, functools\u0027 \u0027list(filter(lambda _: random.random() \u003c .1, range(1000)))\u0027\n5000 loops, best of 5: 53 usec per loop\n$ python -m timeit -s \u0027import random, functools\u0027 \u0027list(filter(lambda _: random.random() \u003c .9, range(1000)))\u0027\n5000 loops, best of 5: 57.8 usec per loop\n```\nThough it looks like the benefit is somewhat split between the `list(generator)` vs list comprehension and getting away from filter/lambda:\n```\n$ python -m timeit -s \u0027import random, functools\u0027 \u0027list(x for x in range(1000) if random.random() \u003c .1)\u0027\n10000 loops, best of 5: 34.9 usec per loop\n$ python -m timeit -s \u0027import random, functools\u0027 \u0027list(x for x in range(1000) if random.random() \u003c .9)\u0027\n5000 loops, best of 5: 45.9 usec per loop\n```","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":308,"context_line":"            hash_gen \u003d ("},{"line_number":309,"context_line":"                (obj_hash, timestamp)"},{"line_number":310,"context_line":"                for obj_hash, timestamp in hash_gen"},{"line_number":311,"context_line":"                if obj_hash in self.remote_check_objs)"},{"line_number":312,"context_line":"        nlines \u003d 0"},{"line_number":313,"context_line":"        nbytes \u003d 0"},{"line_number":314,"context_line":"        object_hash \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"91bad0ba_40b4840a","line":311,"in_reply_to":"7baec7bc_633cc34c","updated":"2025-01-09 16:11:02.000000000","message":"ok but there is a conflation of dropping py2 and optimising code in this patch - maybe a follow-up patch where the performance benefit can be documented in the commit message?","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":308,"context_line":"            hash_gen \u003d ("},{"line_number":309,"context_line":"                (obj_hash, timestamp)"},{"line_number":310,"context_line":"                for obj_hash, timestamp in hash_gen"},{"line_number":311,"context_line":"                if obj_hash in self.remote_check_objs)"},{"line_number":312,"context_line":"        nlines \u003d 0"},{"line_number":313,"context_line":"        nbytes \u003d 0"},{"line_number":314,"context_line":"        object_hash \u003d None"}],"source_content_type":"text/x-python","patch_set":10,"id":"1c5108cd_e422d83d","line":311,"in_reply_to":"91bad0ba_40b4840a","updated":"2025-01-10 01:44:51.000000000","message":"At least half my reason for doing it was to make it more readable instead of having a lambda spread across three lines like\n```\nfilter(\n    lambda x:\n    x[0] in\n    set, iter)\n```\nbut sure, w/e.","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"}],"swift/proxy/controllers/base.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"c4bf6ed52ac29a8d0e3734b75817a5cadff1dd66","unresolved":true,"context_lines":[{"line_number":1425,"context_line":"                        # Tried to find a new node from which to"},{"line_number":1426,"context_line":"                        # finish the GET, but failed. There\u0027s"},{"line_number":1427,"context_line":"                        # nothing more we can do here."},{"line_number":1428,"context_line":"                        # XXX: is the with_traceback() needed?"},{"line_number":1429,"context_line":"                        raise exc_value.with_traceback(exc_traceback)"},{"line_number":1430,"context_line":"                    part_file \u003d ByteCountEnforcer(part_file, nbytes)"},{"line_number":1431,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"0762a01a_3608910f","line":1428,"updated":"2025-01-04 16:52:42.000000000","message":"same comment, why not \"as e\".","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"42b3c985046626657d600a05fdadbb4b3083d7c9","unresolved":false,"context_lines":[{"line_number":1425,"context_line":"                        # Tried to find a new node from which to"},{"line_number":1426,"context_line":"                        # finish the GET, but failed. There\u0027s"},{"line_number":1427,"context_line":"                        # nothing more we can do here."},{"line_number":1428,"context_line":"                        # XXX: is the with_traceback() needed?"},{"line_number":1429,"context_line":"                        raise exc_value.with_traceback(exc_traceback)"},{"line_number":1430,"context_line":"                    part_file \u003d ByteCountEnforcer(part_file, nbytes)"},{"line_number":1431,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":10,"id":"55b3825a_08edcff1","line":1428,"in_reply_to":"0762a01a_3608910f","updated":"2025-01-06 05:57:35.000000000","message":"Done","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":627,"context_line":"    def to_native(s):"},{"line_number":628,"context_line":"        if s is None or isinstance(s, str):"},{"line_number":629,"context_line":"            return s"},{"line_number":630,"context_line":"        return s.decode(\u0027utf8\u0027, \u0027surrogateescape\u0027)"},{"line_number":631,"context_line":""},{"line_number":632,"context_line":"    account \u003d to_native(account)"},{"line_number":633,"context_line":"    container \u003d to_native(container)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9b2a0469_abda1927","line":630,"updated":"2025-01-09 16:11:02.000000000","message":"off-topic: another place where generic [de|en]code_str helpers would be useful!","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":true,"context_lines":[{"line_number":2492,"context_line":"                    self.fast_forward(self.bytes_used_from_backend)"},{"line_number":2493,"context_line":"                except (HTTPException, ValueError):"},{"line_number":2494,"context_line":"                    self.logger.exception(\u0027Unable to fast forward\u0027)"},{"line_number":2495,"context_line":"                    # XXX: is the with_traceback() needed?"},{"line_number":2496,"context_line":"                    raise exc_value.with_traceback(exc_traceback)"},{"line_number":2497,"context_line":"                except RangeAlreadyComplete:"},{"line_number":2498,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":14,"id":"3c73ffaa_52fb8459","line":2495,"updated":"2025-01-09 00:25:58.000000000","message":"Oh, I missed a few!","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"e86c5125340f3f8bd396096fc1ab6137e588ada5","unresolved":true,"context_lines":[{"line_number":2492,"context_line":"                    self.fast_forward(self.bytes_used_from_backend)"},{"line_number":2493,"context_line":"                except (HTTPException, ValueError):"},{"line_number":2494,"context_line":"                    self.logger.exception(\u0027Unable to fast forward\u0027)"},{"line_number":2495,"context_line":"                    # XXX: is the with_traceback() needed?"},{"line_number":2496,"context_line":"                    raise exc_value.with_traceback(exc_traceback)"},{"line_number":2497,"context_line":"                except RangeAlreadyComplete:"},{"line_number":2498,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":14,"id":"50b838e2_4cdff205","line":2495,"in_reply_to":"3c73ffaa_52fb8459","updated":"2025-01-09 00:33:13.000000000","message":"I should\u0027ve gone a full Reagan on you here. Sorry.","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":2492,"context_line":"                    self.fast_forward(self.bytes_used_from_backend)"},{"line_number":2493,"context_line":"                except (HTTPException, ValueError):"},{"line_number":2494,"context_line":"                    self.logger.exception(\u0027Unable to fast forward\u0027)"},{"line_number":2495,"context_line":"                    # XXX: is the with_traceback() needed?"},{"line_number":2496,"context_line":"                    raise exc_value.with_traceback(exc_traceback)"},{"line_number":2497,"context_line":"                except RangeAlreadyComplete:"},{"line_number":2498,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":14,"id":"7d56e62b_9e98fdbf","line":2495,"in_reply_to":"50b838e2_4cdff205","updated":"2025-01-09 16:11:02.000000000","message":"why is sys.exc_info still used here at all? why not use ``as err`` syntax at line 2489?","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":2492,"context_line":"                    self.fast_forward(self.bytes_used_from_backend)"},{"line_number":2493,"context_line":"                except (HTTPException, ValueError):"},{"line_number":2494,"context_line":"                    self.logger.exception(\u0027Unable to fast forward\u0027)"},{"line_number":2495,"context_line":"                    # XXX: is the with_traceback() needed?"},{"line_number":2496,"context_line":"                    raise exc_value.with_traceback(exc_traceback)"},{"line_number":2497,"context_line":"                except RangeAlreadyComplete:"},{"line_number":2498,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":14,"id":"45a5ba2a_3eb0e7cd","line":2495,"in_reply_to":"607a9b38_336dbbf3","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"a8a9245f2bb49b8154b2cd88f54435c425d9eb33","unresolved":true,"context_lines":[{"line_number":2492,"context_line":"                    self.fast_forward(self.bytes_used_from_backend)"},{"line_number":2493,"context_line":"                except (HTTPException, ValueError):"},{"line_number":2494,"context_line":"                    self.logger.exception(\u0027Unable to fast forward\u0027)"},{"line_number":2495,"context_line":"                    # XXX: is the with_traceback() needed?"},{"line_number":2496,"context_line":"                    raise exc_value.with_traceback(exc_traceback)"},{"line_number":2497,"context_line":"                except RangeAlreadyComplete:"},{"line_number":2498,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":14,"id":"607a9b38_336dbbf3","line":2495,"in_reply_to":"7d56e62b_9e98fdbf","updated":"2025-01-09 16:19:01.000000000","message":"Tim did the switch to \"as e\" everywhere, but forgot this one.","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"test/__init__.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":true,"context_lines":[{"line_number":109,"context_line":"            err.args \u003d (msg, ) + err.args[1:]"},{"line_number":110,"context_line":"        else:"},{"line_number":111,"context_line":"            # workaround for some IDE\u0027s raising custom AssertionErrors"},{"line_number":112,"context_line":"            err \u003d AssertionError(\u0027%s Failed with %s\u0027 % (msg, err))"},{"line_number":113,"context_line":"        raise err"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"1914d0a4_95284983","line":112,"updated":"2025-01-09 00:25:58.000000000","message":"This seems to be losing the traceback 😕","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"e86c5125340f3f8bd396096fc1ab6137e588ada5","unresolved":true,"context_lines":[{"line_number":109,"context_line":"            err.args \u003d (msg, ) + err.args[1:]"},{"line_number":110,"context_line":"        else:"},{"line_number":111,"context_line":"            # workaround for some IDE\u0027s raising custom AssertionErrors"},{"line_number":112,"context_line":"            err \u003d AssertionError(\u0027%s Failed with %s\u0027 % (msg, err))"},{"line_number":113,"context_line":"        raise err"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"bcafb9b7_64cc7ea4","line":112,"in_reply_to":"1914d0a4_95284983","updated":"2025-01-09 00:33:13.000000000","message":"I didn\u0027t mind because I don\u0027t think I ever looked at the traceback in tests in the gate. When I\u0027m re-trying, I can modify the source of the traceback or this catch.","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":true,"context_lines":[{"line_number":109,"context_line":"            err.args \u003d (msg, ) + err.args[1:]"},{"line_number":110,"context_line":"        else:"},{"line_number":111,"context_line":"            # workaround for some IDE\u0027s raising custom AssertionErrors"},{"line_number":112,"context_line":"            err \u003d AssertionError(\u0027%s Failed with %s\u0027 % (msg, err))"},{"line_number":113,"context_line":"        raise err"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"a6a87b57_9f5ed9de","line":112,"in_reply_to":"9b14f81b_7f5b04ce","updated":"2025-01-10 01:44:51.000000000","message":"I\u0027m assuming \"some IDE\" probably means PyCharm, yeah?\n\nI don\u0027t think that alternative is really the same, though -- the problem (I\u0027m assuming) is that the custom `AssertionError` subclass doesn\u0027t populate `args`, and so doesn\u0027t _look at them_ either.\n\nOh! But it\u0027s all moot anyway! Or could/should be shortly -- what we really want is [`TestCase.subTest`](https://docs.python.org/3/library/unittest.html#distinguishing-test-iterations-using-subtests)","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9971e071221f112717b02507f1288dda2956db1c","unresolved":true,"context_lines":[{"line_number":109,"context_line":"            err.args \u003d (msg, ) + err.args[1:]"},{"line_number":110,"context_line":"        else:"},{"line_number":111,"context_line":"            # workaround for some IDE\u0027s raising custom AssertionErrors"},{"line_number":112,"context_line":"            err \u003d AssertionError(\u0027%s Failed with %s\u0027 % (msg, err))"},{"line_number":113,"context_line":"        raise err"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"d030c5ed_12d8f1e9","line":112,"in_reply_to":"a6a87b57_9f5ed9de","updated":"2025-01-10 09:52:04.000000000","message":"yeah pycharm, and I spent a little time trying to get (a much newer version of) pycharm (using ptest these days) to drop into the else clause but no success, so it\u0027s probably all moot.\n\nAnd yes, subTest is the future","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":109,"context_line":"            err.args \u003d (msg, ) + err.args[1:]"},{"line_number":110,"context_line":"        else:"},{"line_number":111,"context_line":"            # workaround for some IDE\u0027s raising custom AssertionErrors"},{"line_number":112,"context_line":"            err \u003d AssertionError(\u0027%s Failed with %s\u0027 % (msg, err))"},{"line_number":113,"context_line":"        raise err"},{"line_number":114,"context_line":""},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"9b14f81b_7f5b04ce","line":112,"in_reply_to":"bcafb9b7_64cc7ea4","updated":"2025-01-09 16:11:02.000000000","message":"I recall authoring ``annotate_failure`` but I can\u0027t find the original patch to remind me why the ``else`` clause is there :/\n\nan alternative would be:\n``err.args \u003d (msg, )``","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"test/cors/main.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a4c9fe0c5ebd70b78535759c697ff06b26013683","unresolved":true,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class CORSSite(threading.Thread):"},{"line_number":71,"context_line":"    def __init__(self, bind_port\u003d8000):"},{"line_number":72,"context_line":"        super().__init__()"},{"line_number":73,"context_line":"        self.server \u003d None"},{"line_number":74,"context_line":"        self.bind_port \u003d bind_port"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"2d6815f6_b8099f56","line":72,"updated":"2025-01-15 08:59:08.000000000","message":"Nice that we can finally do this!","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"}],"test/functional/test_container.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":70,"context_line":"            return check_response(conn)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        def delete(url, token, parsed, conn, container, obj):"},{"line_number":73,"context_line":"            obj_name \u003d obj[\u0027name\u0027]"},{"line_number":74,"context_line":"            path \u003d \u0027/\u0027.join([parsed.path, container, obj_name])"},{"line_number":75,"context_line":"            conn.request(\u0027DELETE\u0027, path, \u0027\u0027, {\u0027X-Auth-Token\u0027: token})"},{"line_number":76,"context_line":"            return check_response(conn)"}],"source_content_type":"text/x-python","patch_set":14,"id":"2e1ab753_ecd5bb75","line":73,"updated":"2025-01-09 16:11:02.000000000","message":"nit: the var isn\u0027t really needed","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            return check_response(conn)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        def delete(url, token, parsed, conn, container, obj):"},{"line_number":73,"context_line":"            obj_name \u003d obj[\u0027name\u0027]"},{"line_number":74,"context_line":"            path \u003d \u0027/\u0027.join([parsed.path, container, obj_name])"},{"line_number":75,"context_line":"            conn.request(\u0027DELETE\u0027, path, \u0027\u0027, {\u0027X-Auth-Token\u0027: token})"},{"line_number":76,"context_line":"            return check_response(conn)"}],"source_content_type":"text/x-python","patch_set":14,"id":"12caad05_cba91a6d","line":73,"in_reply_to":"2e1ab753_ecd5bb75","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"test/functional/test_object.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # delete an object"},{"line_number":108,"context_line":"        def delete(url, token, parsed, conn, container, obj):"},{"line_number":109,"context_line":"            obj_name \u003d obj[\u0027name\u0027]"},{"line_number":110,"context_line":"            path \u003d \u0027/\u0027.join([parsed.path, container, obj_name])"},{"line_number":111,"context_line":"            conn.request(\u0027DELETE\u0027, path, \u0027\u0027, {\u0027X-Auth-Token\u0027: token})"},{"line_number":112,"context_line":"            return check_response(conn)"}],"source_content_type":"text/x-python","patch_set":14,"id":"43bb2365_4cc27758","line":109,"updated":"2025-01-09 16:11:02.000000000","message":"nit: var not needed","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        # delete an object"},{"line_number":108,"context_line":"        def delete(url, token, parsed, conn, container, obj):"},{"line_number":109,"context_line":"            obj_name \u003d obj[\u0027name\u0027]"},{"line_number":110,"context_line":"            path \u003d \u0027/\u0027.join([parsed.path, container, obj_name])"},{"line_number":111,"context_line":"            conn.request(\u0027DELETE\u0027, path, \u0027\u0027, {\u0027X-Auth-Token\u0027: token})"},{"line_number":112,"context_line":"            return check_response(conn)"}],"source_content_type":"text/x-python","patch_set":14,"id":"0f74380a_4c6246aa","line":109,"in_reply_to":"43bb2365_4cc27758","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"test/functional/test_object_versioning.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":64,"context_line":"            cls.conn2.authenticate()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        prefix \u003d Utils.create_name()[:10]"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        cls.container \u003d cls.account.container(prefix + \"-objs\")"},{"line_number":69,"context_line":"        container_headers \u003d {cls.versions_header_key: \u0027True\u0027}"},{"line_number":70,"context_line":"        if not cls.container.create(hdrs\u003dcontainer_headers):"}],"source_content_type":"text/x-python","patch_set":14,"id":"b227094e_ef1de5fe","line":67,"updated":"2025-01-09 16:11:02.000000000","message":"nit: drop the blank line","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            cls.conn2.authenticate()"},{"line_number":65,"context_line":""},{"line_number":66,"context_line":"        prefix \u003d Utils.create_name()[:10]"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"        cls.container \u003d cls.account.container(prefix + \"-objs\")"},{"line_number":69,"context_line":"        container_headers \u003d {cls.versions_header_key: \u0027True\u0027}"},{"line_number":70,"context_line":"        if not cls.container.create(hdrs\u003dcontainer_headers):"}],"source_content_type":"text/x-python","patch_set":14,"id":"f258d09c_ad9abc44","line":67,"in_reply_to":"b227094e_ef1de5fe","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":2586,"context_line":"        super(TestVersionsLocationWithVersioning, self).setUp()"},{"line_number":2587,"context_line":""},{"line_number":2588,"context_line":"        prefix \u003d Utils.create_name()[:10]"},{"line_number":2589,"context_line":""},{"line_number":2590,"context_line":"        self.versions_container \u003d self.env.account.container("},{"line_number":2591,"context_line":"            prefix + \"-versions\")"},{"line_number":2592,"context_line":"        if not self.versions_container.create():"}],"source_content_type":"text/x-python","patch_set":14,"id":"4a58b2b1_544f1627","line":2589,"updated":"2025-01-09 16:11:02.000000000","message":"nit: drop blank line","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":2586,"context_line":"        super(TestVersionsLocationWithVersioning, self).setUp()"},{"line_number":2587,"context_line":""},{"line_number":2588,"context_line":"        prefix \u003d Utils.create_name()[:10]"},{"line_number":2589,"context_line":""},{"line_number":2590,"context_line":"        self.versions_container \u003d self.env.account.container("},{"line_number":2591,"context_line":"            prefix + \"-versions\")"},{"line_number":2592,"context_line":"        if not self.versions_container.create():"}],"source_content_type":"text/x-python","patch_set":14,"id":"789b4bfd_885a8cf0","line":2589,"in_reply_to":"4a58b2b1_544f1627","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"test/functional/test_versioned_writes.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":56,"context_line":"            cls.conn2.authenticate()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        prefix \u003d Utils.create_name()[:10]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        cls.versions_container \u003d cls.account.container(prefix + \"-versions\")"},{"line_number":61,"context_line":"        if not cls.versions_container.create():"},{"line_number":62,"context_line":"            raise ResponseError(cls.conn.response)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3868604e_dc669283","line":59,"updated":"2025-01-09 16:11:02.000000000","message":"nit: drop blank line","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":56,"context_line":"            cls.conn2.authenticate()"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        prefix \u003d Utils.create_name()[:10]"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"        cls.versions_container \u003d cls.account.container(prefix + \"-versions\")"},{"line_number":61,"context_line":"        if not cls.versions_container.create():"},{"line_number":62,"context_line":"            raise ResponseError(cls.conn.response)"}],"source_content_type":"text/x-python","patch_set":14,"id":"f90a68ac_5b2b5bf5","line":59,"in_reply_to":"3868604e_dc669283","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":143,"context_line":"            cls.conn2.authenticate()"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        prefix \u003d Utils.create_name()[:10]"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        cls.versions_container \u003d cls.account.container(prefix + \"-versions\")"},{"line_number":148,"context_line":"        if not cls.versions_container.create("},{"line_number":149,"context_line":"                {\u0027X-Storage-Policy\u0027: policy[\u0027name\u0027]}):"}],"source_content_type":"text/x-python","patch_set":14,"id":"d9a0c125_c173d93b","line":146,"updated":"2025-01-09 16:11:02.000000000","message":"ditto","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":143,"context_line":"            cls.conn2.authenticate()"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        prefix \u003d Utils.create_name()[:10]"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"        cls.versions_container \u003d cls.account.container(prefix + \"-versions\")"},{"line_number":148,"context_line":"        if not cls.versions_container.create("},{"line_number":149,"context_line":"                {\u0027X-Storage-Policy\u0027: policy[\u0027name\u0027]}):"}],"source_content_type":"text/x-python","patch_set":14,"id":"0261bd67_cf80ee41","line":146,"in_reply_to":"d9a0c125_c173d93b","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"test/probe/common.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":719,"context_line":"        if not require_durable:"},{"line_number":720,"context_line":"            req_headers.update("},{"line_number":721,"context_line":"                {\u0027X-Backend-Fragment-Preferences\u0027: json.dumps([])})"},{"line_number":722,"context_line":"        acc, con, obj \u003d self.account, self.container_name, self.object_name"},{"line_number":723,"context_line":"        headers, data \u003d direct_client.direct_get_object("},{"line_number":724,"context_line":"            node, part, acc, con, obj, headers\u003dreq_headers,"},{"line_number":725,"context_line":"            resp_chunk_size\u003d64 * 2 ** 20)"}],"source_content_type":"text/x-python","patch_set":14,"id":"f75d48b3_d83f8391","line":722,"updated":"2025-01-09 16:11:02.000000000","message":"nit: vars maybe no longer necessary","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":719,"context_line":"        if not require_durable:"},{"line_number":720,"context_line":"            req_headers.update("},{"line_number":721,"context_line":"                {\u0027X-Backend-Fragment-Preferences\u0027: json.dumps([])})"},{"line_number":722,"context_line":"        acc, con, obj \u003d self.account, self.container_name, self.object_name"},{"line_number":723,"context_line":"        headers, data \u003d direct_client.direct_get_object("},{"line_number":724,"context_line":"            node, part, acc, con, obj, headers\u003dreq_headers,"},{"line_number":725,"context_line":"            resp_chunk_size\u003d64 * 2 ** 20)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7b505b56_202a6ca1","line":722,"in_reply_to":"f75d48b3_d83f8391","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"test/probe/test_reconstructor_rebuild.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"42b3c985046626657d600a05fdadbb4b3083d7c9","unresolved":true,"context_lines":[{"line_number":523,"context_line":""},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"# XXX: We used to have a UTF8 version of this, but it\u0027s all busted on py3!"},{"line_number":526,"context_line":"# class TestReconstructorRebuildUTF8(TestReconstructorRebuild):"},{"line_number":527,"context_line":"#"},{"line_number":528,"context_line":"#     def _make_name(self, prefix):"},{"line_number":529,"context_line":"#         return b\u0027%s\\xc3\\xa8-%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":10,"id":"c54b772b_72914b24","line":526,"updated":"2025-01-06 05:57:35.000000000","message":"I really don\u0027t like this resolution. It\u0027s been bugging me for a while, then I\u0027d try to fix it, get frustrated with it, set it down, forget about it until I rediscover it, and the cycle would continue...","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":true,"context_lines":[{"line_number":523,"context_line":""},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"# XXX: We used to have a UTF8 version of this, but it\u0027s all busted on py3!"},{"line_number":526,"context_line":"# class TestReconstructorRebuildUTF8(TestReconstructorRebuild):"},{"line_number":527,"context_line":"#"},{"line_number":528,"context_line":"#     def _make_name(self, prefix):"},{"line_number":529,"context_line":"#         return b\u0027%s\\xc3\\xa8-%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":10,"id":"e0dbc4aa_faab5e14","line":526,"in_reply_to":"377d072d_ce6ce899","updated":"2025-01-10 01:44:51.000000000","message":"OR -- we review and merge the fix. I\u0027m sticking it in front now :P","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":523,"context_line":""},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"# XXX: We used to have a UTF8 version of this, but it\u0027s all busted on py3!"},{"line_number":526,"context_line":"# class TestReconstructorRebuildUTF8(TestReconstructorRebuild):"},{"line_number":527,"context_line":"#"},{"line_number":528,"context_line":"#     def _make_name(self, prefix):"},{"line_number":529,"context_line":"#         return b\u0027%s\\xc3\\xa8-%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":10,"id":"377d072d_ce6ce899","line":526,"in_reply_to":"b9b261c8_59cd015f","updated":"2025-01-09 16:11:02.000000000","message":"maybe have this skip rather than be commented out","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"0b4f6ee716787bb12a4f7453266bbd393424ff80","unresolved":true,"context_lines":[{"line_number":523,"context_line":""},{"line_number":524,"context_line":""},{"line_number":525,"context_line":"# XXX: We used to have a UTF8 version of this, but it\u0027s all busted on py3!"},{"line_number":526,"context_line":"# class TestReconstructorRebuildUTF8(TestReconstructorRebuild):"},{"line_number":527,"context_line":"#"},{"line_number":528,"context_line":"#     def _make_name(self, prefix):"},{"line_number":529,"context_line":"#         return b\u0027%s\\xc3\\xa8-%s\u0027 % ("}],"source_content_type":"text/x-python","patch_set":10,"id":"b9b261c8_59cd015f","line":526,"in_reply_to":"c54b772b_72914b24","updated":"2025-01-09 00:25:58.000000000","message":"I think I finally got it! https://review.opendev.org/c/openstack/swift/+/938631","commit_id":"b3d8c78567c621dbe34dcd898109ee819387ef90"},{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a4206e75908f3444bc82e9acfb473e832dd9c1bb","unresolved":true,"context_lines":[{"line_number":528,"context_line":"        # The non-ASCII chars in metadata cause test hangs in"},{"line_number":529,"context_line":"        # _assert_all_nodes_have_frag because of"},{"line_number":530,"context_line":"        # https://bugs.python.org/issue37093"},{"line_number":531,"context_line":"        raise unittest.SkipTest(\u0027This never got fixed on py3\u0027)"},{"line_number":532,"context_line":"        return b\u0027%s\\xc3\\xa8-%s\u0027 % ("},{"line_number":533,"context_line":"            prefix.encode(), str(uuid.uuid4()).encode())"},{"line_number":534,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"b5d399fa_9146cd10","line":531,"updated":"2025-01-14 09:48:17.000000000","message":"FYI self.skipTest is also available","commit_id":"128124cdd8ca09136d4988affd1bb8c5c1361fc1"}],"test/unit/__init__.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":1422,"context_line":""},{"line_number":1423,"context_line":"class ConfigAssertMixin(object):"},{"line_number":1424,"context_line":"    \"\"\""},{"line_number":1425,"context_line":"    Use this with a TestCase to get py2/3 compatible assert for DuplicateOption"},{"line_number":1426,"context_line":"    \"\"\""},{"line_number":1427,"context_line":"    def assertDuplicateOption(self, app_config, option_name, option_value):"},{"line_number":1428,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"37a562bc_7d2ebb79","line":1425,"range":{"start_line":1425,"start_character":36,"end_line":1425,"end_character":53},"updated":"2025-01-09 16:11:02.000000000","message":"nit: update docstring","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":1422,"context_line":""},{"line_number":1423,"context_line":"class ConfigAssertMixin(object):"},{"line_number":1424,"context_line":"    \"\"\""},{"line_number":1425,"context_line":"    Use this with a TestCase to get py2/3 compatible assert for DuplicateOption"},{"line_number":1426,"context_line":"    \"\"\""},{"line_number":1427,"context_line":"    def assertDuplicateOption(self, app_config, option_name, option_value):"},{"line_number":1428,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"91b323fb_fa744f98","line":1425,"range":{"start_line":1425,"start_character":36,"end_line":1425,"end_character":53},"in_reply_to":"37a562bc_7d2ebb79","updated":"2025-01-10 01:44:51.000000000","message":"Removed.","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"test/unit/common/test_daemon.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"9971e071221f112717b02507f1288dda2956db1c","unresolved":true,"context_lines":[{"line_number":266,"context_line":"                daemon.run_daemon(MyDaemon, tempdir)"},{"line_number":267,"context_line":"            msg \u003d str(ctx.exception)"},{"line_number":268,"context_line":"            self.assertIn(\u0027conn_timeout\u0027, msg)"},{"line_number":269,"context_line":"            self.assertIn(\u0027already exists\u0027, msg)"},{"line_number":270,"context_line":""},{"line_number":271,"context_line":"    @with_tempdir"},{"line_number":272,"context_line":"    def test_run_deamon_from_conf_dir(self, tempdir):"}],"source_content_type":"text/x-python","patch_set":15,"id":"020559ee_f4aaefd9","line":269,"updated":"2025-01-10 09:52:04.000000000","message":"+1 much better","commit_id":"c3be8b2351537cbbc34891c8e1ff812790a5c93d"}],"test/unit/obj/test_diskfile.py":[{"author":{"_account_id":7847,"name":"Alistair Coles","email":"alistairncoles@gmail.com","username":"acoles"},"change_message_id":"a7a30c8ae9dca90b25f7cc2cec133133da5476ae","unresolved":true,"context_lines":[{"line_number":7683,"context_line":"            df_mgr.get_hashes(\u0027sda1\u0027, \u00270\u0027, [], policy)"},{"line_number":7684,"context_line":""},{"line_number":7685,"context_line":"            open_log \u003d defaultdict(list)"},{"line_number":7686,"context_line":"            open_loc \u003d \u0027builtins.open\u0027"},{"line_number":7687,"context_line":"            with mock.patch(open_loc, watch_open):"},{"line_number":7688,"context_line":"                self.assertTrue(os.path.exists(inv_file))"},{"line_number":7689,"context_line":"                # no new suffixes get invalidated... so no write iop"}],"source_content_type":"text/x-python","patch_set":14,"id":"db98e08d_d87b27ca","line":7686,"updated":"2025-01-09 16:11:02.000000000","message":"nit: var assignment not needed","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"4402911297121a67598aafc7bbd32b504ec6d4ae","unresolved":false,"context_lines":[{"line_number":7683,"context_line":"            df_mgr.get_hashes(\u0027sda1\u0027, \u00270\u0027, [], policy)"},{"line_number":7684,"context_line":""},{"line_number":7685,"context_line":"            open_log \u003d defaultdict(list)"},{"line_number":7686,"context_line":"            open_loc \u003d \u0027builtins.open\u0027"},{"line_number":7687,"context_line":"            with mock.patch(open_loc, watch_open):"},{"line_number":7688,"context_line":"                self.assertTrue(os.path.exists(inv_file))"},{"line_number":7689,"context_line":"                # no new suffixes get invalidated... so no write iop"}],"source_content_type":"text/x-python","patch_set":14,"id":"757d4a61_ae95ca4a","line":7686,"in_reply_to":"db98e08d_d87b27ca","updated":"2025-01-10 01:44:51.000000000","message":"Done","commit_id":"6bd00b297f445f8ba402cece23121f2436e425e8"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"a4c9fe0c5ebd70b78535759c697ff06b26013683","unresolved":true,"context_lines":[{"line_number":9602,"context_line":""},{"line_number":9603,"context_line":"        class LeakTrackingHTTPResponse(BufferedHTTPResponse):"},{"line_number":9604,"context_line":"            def begin(self):"},{"line_number":9605,"context_line":"                retval \u003d super(BufferedHTTPResponse, self).begin()"},{"line_number":9606,"context_line":"                if self.status !\u003d 204:"},{"line_number":9607,"context_line":"                    # This mock is overly broad and catches account and"},{"line_number":9608,"context_line":"                    # container HEAD requests too. We don\u0027t care about"}],"source_content_type":"text/x-python","patch_set":16,"id":"a8005328_356605c4","line":9605,"updated":"2025-01-15 08:59:08.000000000","message":"Nice, so it is a new style class.. can we also just use:\n\n```\nsuper().begin() \n```\nNow?","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"34badcea7e4be03597feec7d417db3230d330562","unresolved":true,"context_lines":[{"line_number":9602,"context_line":""},{"line_number":9603,"context_line":"        class LeakTrackingHTTPResponse(BufferedHTTPResponse):"},{"line_number":9604,"context_line":"            def begin(self):"},{"line_number":9605,"context_line":"                retval \u003d super(BufferedHTTPResponse, self).begin()"},{"line_number":9606,"context_line":"                if self.status !\u003d 204:"},{"line_number":9607,"context_line":"                    # This mock is overly broad and catches account and"},{"line_number":9608,"context_line":"                    # container HEAD requests too. We don\u0027t care about"}],"source_content_type":"text/x-python","patch_set":16,"id":"4aa0d232_4b57de78","line":9605,"in_reply_to":"a8005328_356605c4","updated":"2025-01-15 21:14:29.000000000","message":"Yeah -- my plan was to do a big `s/super\\(.*,self\\)/super()/` as a separate follow-up.","commit_id":"31ccf24770b36663e7fec302ade97231c35f5d1e"}]}
