)]}'
{"swift/common/middleware/s3api/s3request.py":[{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"43873e201d7b1a4eff362928087f8471ad80b583","unresolved":false,"context_lines":[{"line_number":1381,"context_line":"            if isinstance(err_resp, tuple):"},{"line_number":1382,"context_line":"                raise err_resp[0](*err_resp[1:])"},{"line_number":1383,"context_line":"            elif b\u0027quota\u0027 in err_msg:"},{"line_number":1384,"context_line":"                raise err_resp(err_msg)"},{"line_number":1385,"context_line":"            else:"},{"line_number":1386,"context_line":"                raise err_resp()"},{"line_number":1387,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9f560f44_1118ae1b","line":1384,"updated":"2020-09-11 21:56:31.000000000","message":"this plus that test would be SUPER mergeable","commit_id":"c29ef7cf8b12daa7fb23d3debc6e9ffe40d99e8f"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d4e72b63fd0f3913a458a124f785e67ebf8c6199","unresolved":false,"context_lines":[{"line_number":1255,"context_line":"                    owner \u003d acl.get(\u0027Owner\u0027)"},{"line_number":1256,"context_line":"                except (ValueError, TypeError, KeyError):"},{"line_number":1257,"context_line":"                    owner \u003d None"},{"line_number":1258,"context_line":"                if owner is None or owner \u003d\u003d self.user_id:"},{"line_number":1259,"context_line":"                    raise BucketAlreadyOwnedByYou(container)"},{"line_number":1260,"context_line":"                raise BucketAlreadyExists(container)"},{"line_number":1261,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_1aa6a2ac","line":1258,"range":{"start_line":1258,"start_character":45,"end_line":1258,"end_character":49},"updated":"2020-09-02 23:03:29.000000000","message":"These could almost be top-level functions, or even pulled out to s3response (which seems like a more-fitting module)... looks like this is the only remaining reference to `self` in them.","commit_id":"63e8846f5f9906932443566c570677af5d8a27af"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"71c6088ab0da30758885c041ab0086ff4e37a17d","unresolved":false,"context_lines":[{"line_number":1286,"context_line":""},{"line_number":1287,"context_line":"        if req.method \u003d\u003d \u0027HEAD\u0027:"},{"line_number":1288,"context_line":"            if resp.status_int \u003d\u003d HTTP_NOT_FOUND:"},{"line_number":1289,"context_line":"                raise not_found_handler()"},{"line_number":1290,"context_line":"            if resp.status_int \u003d\u003d HTTP_PRECONDITION_FAILED:"},{"line_number":1291,"context_line":"                raise PreconditionFailed()"},{"line_number":1292,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_57291af0","line":1289,"updated":"2020-09-02 16:35:13.000000000","message":"if we\u0027re evaluating this closure immediately - perhaps more clear to just do the code inline","commit_id":"63e8846f5f9906932443566c570677af5d8a27af"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"71c6088ab0da30758885c041ab0086ff4e37a17d","unresolved":false,"context_lines":[{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"        elif req.method \u003d\u003d \u0027GET\u0027:"},{"line_number":1294,"context_line":"            if resp.status_int \u003d\u003d HTTP_NOT_FOUND:"},{"line_number":1295,"context_line":"                raise not_found_handler()"},{"line_number":1296,"context_line":"            if resp.status_int \u003d\u003d HTTP_PRECONDITION_FAILED:"},{"line_number":1297,"context_line":"                raise PreconditionFailed()"},{"line_number":1298,"context_line":"            if resp.status_int \u003d\u003d HTTP_REQUESTED_RANGE_NOT_SATISFIABLE:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_f7414ea8","line":1295,"updated":"2020-09-02 16:35:13.000000000","message":"oic - it\u0027s reused between GET and HEAD - that makes sense\n\nCan HEADs not respond 416?","commit_id":"63e8846f5f9906932443566c570677af5d8a27af"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7491e0159e0b6470e854cea49b5c8aadddd7ea41","unresolved":false,"context_lines":[{"line_number":1292,"context_line":""},{"line_number":1293,"context_line":"        elif req.method \u003d\u003d \u0027GET\u0027:"},{"line_number":1294,"context_line":"            if resp.status_int \u003d\u003d HTTP_NOT_FOUND:"},{"line_number":1295,"context_line":"                raise not_found_handler()"},{"line_number":1296,"context_line":"            if resp.status_int \u003d\u003d HTTP_PRECONDITION_FAILED:"},{"line_number":1297,"context_line":"                raise PreconditionFailed()"},{"line_number":1298,"context_line":"            if resp.status_int \u003d\u003d HTTP_REQUESTED_RANGE_NOT_SATISFIABLE:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_bdf17004","line":1295,"in_reply_to":"9f560f44_f7414ea8","updated":"2020-09-03 00:24:10.000000000","message":"Don\u0027t think so:\n\nvagrant@saio:~/swift$ swift stat -v  bucket tox.ini -H \u0027Range:1000000000-\u0027 --debug\nDEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): saio:443\nDEBUG:urllib3.connectionpool:https://saio:443 \"GET /auth/v1.0 HTTP/1.1\" 200 0\nDEBUG:swiftclient:REQ: curl -i https://saio/auth/v1.0 -X GET\nDEBUG:swiftclient:RESP STATUS: 200 OK\nDEBUG:swiftclient:RESP HEADERS: {u\u0027Content-Length\u0027: u\u00270\u0027, u\u0027X-Trans-Id\u0027: u\u0027tx86a2da7b45174469a9c81-005f5036c1\u0027, u\u0027X-Auth-Token-Expires\u0027: u\u002773465\u0027, u\u0027X-Auth-Token\u0027: u\u0027AUTH_tk7c6a39f5e50b4f0fa8cc41d2987a2852\u0027, u\u0027X-Storage-Token\u0027: u\u0027AUTH_tk7c6a39f5e50b4f0fa8cc41d2987a2852\u0027, u\u0027Date\u0027: u\u0027Thu, 03 Sep 2020 00:20:17 GMT\u0027, u\u0027X-Storage-Url\u0027: u\u0027https://saio/v1/AUTH_test\u0027, u\u0027Content-Type\u0027: u\u0027text/html; charset\u003dUTF-8\u0027, u\u0027X-Openstack-Request-Id\u0027: u\u0027tx86a2da7b45174469a9c81-005f5036c1\u0027}\nDEBUG:urllib3.connectionpool:Starting new HTTPS connection (1): saio:443\nDEBUG:urllib3.connectionpool:https://saio:443 \"HEAD /v1/AUTH_test/bucket/tox.ini HTTP/1.1\" 200 0\nDEBUG:swiftclient:REQ: curl -i https://saio/v1/AUTH_test/bucket/tox.ini -I -H \"Range: 1000000000-\" -H \"X-Auth-Token: AUTH_tk7c6a39f5e50b4f0fa8cc41d2987a2852\"\nDEBUG:swiftclient:RESP STATUS: 200 OK\nDEBUG:swiftclient:RESP HEADERS: {u\u0027Content-Length\u0027: u\u00274788\u0027, u\u0027Accept-Ranges\u0027: u\u0027bytes\u0027, u\u0027Last-Modified\u0027: u\u0027Wed, 02 Sep 2020 20:45:43 GMT\u0027, u\u0027Etag\u0027: u\u0027\"1d7e8e3ea431f77fa85694e5fa2e5e08\"\u0027, u\u0027X-Timestamp\u0027: u\u00271599079542.82690\u0027, u\u0027X-Trans-Id\u0027: u\u0027txce2bf01b44e34347a7013-005f5036c1\u0027, u\u0027Date\u0027: u\u0027Thu, 03 Sep 2020 00:20:17 GMT\u0027, u\u0027Content-Type\u0027: u\u0027binary/octet-stream\u0027, u\u0027X-Openstack-Request-Id\u0027: u\u0027txce2bf01b44e34347a7013-005f5036c1\u0027}\n                   URL: https://saio/v1/AUTH_test/bucket/tox.ini\n            Auth Token: AUTH_tk7c6a39f5e50b4f0fa8cc41d2987a2852\n               Account: AUTH_test\n             Container: bucket\n                Object: tox.ini\n          Content Type: binary/octet-stream\n        Content Length: 4788\n         Last Modified: Wed, 02 Sep 2020 20:45:43 GMT\n                  ETag: \"1d7e8e3ea431f77fa85694e5fa2e5e08\"\n         Accept-Ranges: bytes\n           X-Timestamp: 1599079542.82690\n            X-Trans-Id: txce2bf01b44e34347a7013-005f5036c1\nX-Openstack-Request-Id: txce2bf01b44e34347a7013-005f5036c1\n\nRFC\u0027s on our side here; server can basically disregard Range headers whenever it\u0027s convenient.","commit_id":"63e8846f5f9906932443566c570677af5d8a27af"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"71c6088ab0da30758885c041ab0086ff4e37a17d","unresolved":false,"context_lines":[{"line_number":1296,"context_line":"            if resp.status_int \u003d\u003d HTTP_PRECONDITION_FAILED:"},{"line_number":1297,"context_line":"                raise PreconditionFailed()"},{"line_number":1298,"context_line":"            if resp.status_int \u003d\u003d HTTP_REQUESTED_RANGE_NOT_SATISFIABLE:"},{"line_number":1299,"context_line":"                raise InvalidRange()"},{"line_number":1300,"context_line":""},{"line_number":1301,"context_line":"        elif req.method \u003d\u003d \u0027PUT\u0027:"},{"line_number":1302,"context_line":"            if resp.status_int \u003d\u003d HTTP_NOT_FOUND:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_9733b262","line":1299,"updated":"2020-09-02 16:35:13.000000000","message":"is there any significance to this control flow being if instead of elif?","commit_id":"63e8846f5f9906932443566c570677af5d8a27af"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"7491e0159e0b6470e854cea49b5c8aadddd7ea41","unresolved":false,"context_lines":[{"line_number":1296,"context_line":"            if resp.status_int \u003d\u003d HTTP_PRECONDITION_FAILED:"},{"line_number":1297,"context_line":"                raise PreconditionFailed()"},{"line_number":1298,"context_line":"            if resp.status_int \u003d\u003d HTTP_REQUESTED_RANGE_NOT_SATISFIABLE:"},{"line_number":1299,"context_line":"                raise InvalidRange()"},{"line_number":1300,"context_line":""},{"line_number":1301,"context_line":"        elif req.method \u003d\u003d \u0027PUT\u0027:"},{"line_number":1302,"context_line":"            if resp.status_int \u003d\u003d HTTP_NOT_FOUND:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_1de05c26","line":1299,"in_reply_to":"9f560f44_9733b262","updated":"2020-09-03 00:24:10.000000000","message":"Not really -- each case ought to raise something anyway, so it should be functionally identical either way.\n\nEvery now and then, I rather wish python had switch statements...","commit_id":"63e8846f5f9906932443566c570677af5d8a27af"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"71c6088ab0da30758885c041ab0086ff4e37a17d","unresolved":false,"context_lines":[{"line_number":1306,"context_line":"            if resp.status_int \u003d\u003d HTTP_REQUEST_ENTITY_TOO_LARGE:"},{"line_number":1307,"context_line":"                if b\u0027quota\u0027 in resp.body:"},{"line_number":1308,"context_line":"                    raise EntityTooLarge(resp.body)"},{"line_number":1309,"context_line":"                raise EntityTooLarge()"},{"line_number":1310,"context_line":"            if resp.status_int \u003d\u003d HTTP_LENGTH_REQUIRED:"},{"line_number":1311,"context_line":"                raise MissingContentLength()"},{"line_number":1312,"context_line":"            if resp.status_int \u003d\u003d HTTP_REQUEST_TIMEOUT:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_f7ecaebc","line":1309,"updated":"2020-09-02 16:35:13.000000000","message":"I strongly prefer once we get into \"this resource, this method, this status\" we can just read the code inline","commit_id":"63e8846f5f9906932443566c570677af5d8a27af"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"71c6088ab0da30758885c041ab0086ff4e37a17d","unresolved":false,"context_lines":[{"line_number":1312,"context_line":"            if resp.status_int \u003d\u003d HTTP_REQUEST_TIMEOUT:"},{"line_number":1313,"context_line":"                raise RequestTimeout()"},{"line_number":1314,"context_line":"            if resp.status_int \u003d\u003d HTTP_PRECONDITION_FAILED:"},{"line_number":1315,"context_line":"                raise PreconditionFailed()"},{"line_number":1316,"context_line":""},{"line_number":1317,"context_line":"        elif req.method \u003d\u003d \u0027POST\u0027:"},{"line_number":1318,"context_line":"            if resp.status_int \u003d\u003d HTTP_NOT_FOUND:"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_d7ceca59","line":1315,"updated":"2020-09-02 16:35:13.000000000","message":"what\u0027s the significance of not using elif here","commit_id":"63e8846f5f9906932443566c570677af5d8a27af"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"d2bb66ac17f87b10edf62a95c352847c0de738ae","unresolved":false,"context_lines":[{"line_number":1325,"context_line":"                raise NoSuchKey(obj)"},{"line_number":1326,"context_line":""},{"line_number":1327,"context_line":"        else:"},{"line_number":1328,"context_line":"            raise KeyError"},{"line_number":1329,"context_line":""},{"line_number":1330,"context_line":"    def _get_response(self, app, method, container, obj,"},{"line_number":1331,"context_line":"                      headers\u003dNone, body\u003dNone, query\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_d40b6828","line":1328,"updated":"2020-09-02 16:01:22.000000000","message":"This all turned into a much larger refactoring compared to the first patchset, but I think it\u0027s getting more reasonable? We were already running into the limitations of a lookup table with _bucket_put_accepted_error() and not_found_handler(); I think having more explicit if-this-then-raise-that will be easier to follow than the two styles of closures-getting-passed-as-immediate-callbacks that we had before.\n\nI don\u0027t really like the KeyErrors though -- it\u0027s a crap API for this -- but it matched existing behavior and I didn\u0027t have any better ideas :-(","commit_id":"63e8846f5f9906932443566c570677af5d8a27af"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"71c6088ab0da30758885c041ab0086ff4e37a17d","unresolved":false,"context_lines":[{"line_number":1325,"context_line":"                raise NoSuchKey(obj)"},{"line_number":1326,"context_line":""},{"line_number":1327,"context_line":"        else:"},{"line_number":1328,"context_line":"            raise KeyError"},{"line_number":1329,"context_line":""},{"line_number":1330,"context_line":"    def _get_response(self, app, method, container, obj,"},{"line_number":1331,"context_line":"                      headers\u003dNone, body\u003dNone, query\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"9f560f44_97e572df","line":1328,"in_reply_to":"9f560f44_d40b6828","updated":"2020-09-02 16:35:13.000000000","message":"KeyError is gross and not obvious at all","commit_id":"63e8846f5f9906932443566c570677af5d8a27af"}]}
