)]}'
{"swift/common/middleware/s3api/controllers/multi_upload.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"a19bdedcb622c8aaf38222118a334e425dbe6a37","unresolved":false,"context_lines":[{"line_number":675,"context_line":"                                              for err in body[\u0027Errors\u0027]))"},{"line_number":676,"context_line":"                except BadSwiftRequest as e:"},{"line_number":677,"context_line":"                    msg \u003d str(e)"},{"line_number":678,"context_line":"                    print(repr(msg), type(e))"},{"line_number":679,"context_line":"                    if too_small_message in msg:"},{"line_number":680,"context_line":"                        raise EntityTooSmall(msg)"},{"line_number":681,"context_line":"                    elif \u0027, Etag Mismatch\u0027 in msg:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffb9cba7_5a56012c","line":678,"updated":"2019-04-23 04:25:40.000000000","message":"please remove print()","commit_id":"14e4d30fe097a069145470980c8688e8aa3a6ca3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fef8d8da39a45ae01a4466948e4a2e5fbfc140ed","unresolved":false,"context_lines":[{"line_number":675,"context_line":"                                              for err in body[\u0027Errors\u0027]))"},{"line_number":676,"context_line":"                except BadSwiftRequest as e:"},{"line_number":677,"context_line":"                    msg \u003d str(e)"},{"line_number":678,"context_line":"                    print(repr(msg), type(e))"},{"line_number":679,"context_line":"                    if too_small_message in msg:"},{"line_number":680,"context_line":"                        raise EntityTooSmall(msg)"},{"line_number":681,"context_line":"                    elif \u0027, Etag Mismatch\u0027 in msg:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffb9cba7_a3700dde","line":678,"in_reply_to":"ffb9cba7_5a56012c","updated":"2019-04-24 17:12:38.000000000","message":"Done","commit_id":"14e4d30fe097a069145470980c8688e8aa3a6ca3"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"a19bdedcb622c8aaf38222118a334e425dbe6a37","unresolved":false,"context_lines":[{"line_number":707,"context_line":"                # Why are we doing our own port parsing? Because py3 decided"},{"line_number":708,"context_line":"                # to start raising ValueErrors on access after parsing such"},{"line_number":709,"context_line":"                # an invalid port"},{"line_number":710,"context_line":"                netloc \u003d parsed_url.netloc.split(\u0027@\u0027)[-1].split(\u0027]\u0027)[-1]"},{"line_number":711,"context_line":"                if \u0027:\u0027 in netloc:"},{"line_number":712,"context_line":"                    port \u003d netloc.split(\u0027:\u0027, 2)[1]"},{"line_number":713,"context_line":"                    host_url +\u003d \u0027:%s\u0027 % port"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffb9cba7_157b7a8c","line":710,"updated":"2019-04-23 04:25:40.000000000","message":"Isn\u0027t it supposed to be\n  netloc \u003d parsed_url.netloc.split(\u0027@\u0027)[-1].split(\u0027:\u0027)[-1]\n?\nAnd only then you have to try and split it with \u0027]\u0027, in case of IPv6.\n\nI urge you to consider this:\n\ntry:\n    if parsed_url.port:\n        host_url +\u003d \u0027:%s\u0027 % parsed_url.port\nexcept ValueError:\n    pass","commit_id":"14e4d30fe097a069145470980c8688e8aa3a6ca3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fef8d8da39a45ae01a4466948e4a2e5fbfc140ed","unresolved":false,"context_lines":[{"line_number":707,"context_line":"                # Why are we doing our own port parsing? Because py3 decided"},{"line_number":708,"context_line":"                # to start raising ValueErrors on access after parsing such"},{"line_number":709,"context_line":"                # an invalid port"},{"line_number":710,"context_line":"                netloc \u003d parsed_url.netloc.split(\u0027@\u0027)[-1].split(\u0027]\u0027)[-1]"},{"line_number":711,"context_line":"                if \u0027:\u0027 in netloc:"},{"line_number":712,"context_line":"                    port \u003d netloc.split(\u0027:\u0027, 2)[1]"},{"line_number":713,"context_line":"                    host_url +\u003d \u0027:%s\u0027 % port"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffb9cba7_3e41963a","line":710,"in_reply_to":"ffb9cba7_157b7a8c","updated":"2019-04-24 17:12:38.000000000","message":"It\u0027s taken almost verbatim from https://github.com/python/cpython/blob/2.7/Lib/urlparse.py#L107-L117 (right down the the oddly-named netloc variable).\n\nThe try: ... except: pass won\u0027t do the same thing -- when we pass a doubled-up port, we\u0027ll get *no port* instead of just one port.\n\nI suppose we really ought to resolve the comment above and fix this in swob\u0027s host_url property... but I was kinda hoping/planning on doing it as a separate patch (similar to getting rid of get_valid_utf8_str)","commit_id":"14e4d30fe097a069145470980c8688e8aa3a6ca3"}],"swift/common/middleware/s3api/s3api.py":[{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"a19bdedcb622c8aaf38222118a334e425dbe6a37","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            resp \u003d err_resp"},{"line_number":238,"context_line":"        except Exception as e:"},{"line_number":239,"context_line":"            self.logger.exception(e)"},{"line_number":240,"context_line":"            raise"},{"line_number":241,"context_line":"            resp \u003d InternalError(reason\u003de)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        if isinstance(resp, S3ResponseBase) and \u0027swift.trans_id\u0027 in env:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffb9cba7_95668aed","line":240,"updated":"2019-04-23 04:25:40.000000000","message":"You forgot to remove this and all tests pass, nice.","commit_id":"14e4d30fe097a069145470980c8688e8aa3a6ca3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"fef8d8da39a45ae01a4466948e4a2e5fbfc140ed","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            resp \u003d err_resp"},{"line_number":238,"context_line":"        except Exception as e:"},{"line_number":239,"context_line":"            self.logger.exception(e)"},{"line_number":240,"context_line":"            raise"},{"line_number":241,"context_line":"            resp \u003d InternalError(reason\u003de)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        if isinstance(resp, S3ResponseBase) and \u0027swift.trans_id\u0027 in env:"}],"source_content_type":"text/x-python","patch_set":3,"id":"ffb9cba7_de639ab0","line":240,"in_reply_to":"ffb9cba7_95668aed","updated":"2019-04-24 17:12:38.000000000","message":"This damn catch-all is the single biggest annoyance to me when trying to resolve s3api test failures.\n\n AssertionError: 201 !\u003d 500\n\nreally isn\u0027t the useful sort of failure message...","commit_id":"14e4d30fe097a069145470980c8688e8aa3a6ca3"},{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"77b0c8da81ff6b100e28a5859ed0220ab9a68d89","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            resp \u003d err_resp"},{"line_number":238,"context_line":"        except Exception as e:"},{"line_number":239,"context_line":"            self.logger.exception(e)"},{"line_number":240,"context_line":"            resp \u003d InternalError(reason\u003dstr(e))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        if isinstance(resp, S3ResponseBase) and \u0027swift.trans_id\u0027 in env:"},{"line_number":243,"context_line":"            resp.headers[\u0027x-amz-id-2\u0027] \u003d env[\u0027swift.trans_id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"dfbec78f_a62cdf99","line":240,"updated":"2019-05-03 06:20:14.000000000","message":"This was a difference -- while I was running down a (now resolved) rebase-related failure, I saw that I\u0027d hit trouble trying to .encode(\"utf-8\") an Exception (which of course doesn\u0027t have .encode). Seems sane, though?","commit_id":"3a9f3f841957f54801c32832356c540dbef69817"},{"author":{"_account_id":597,"name":"Pete Zaitcev","email":"zaitcev@kotori.zaitcev.us","username":"zaitcev"},"change_message_id":"6d6800b6ac8a281855deb37a1de2de58574f0616","unresolved":false,"context_lines":[{"line_number":237,"context_line":"            resp \u003d err_resp"},{"line_number":238,"context_line":"        except Exception as e:"},{"line_number":239,"context_line":"            self.logger.exception(e)"},{"line_number":240,"context_line":"            resp \u003d InternalError(reason\u003dstr(e))"},{"line_number":241,"context_line":""},{"line_number":242,"context_line":"        if isinstance(resp, S3ResponseBase) and \u0027swift.trans_id\u0027 in env:"},{"line_number":243,"context_line":"            resp.headers[\u0027x-amz-id-2\u0027] \u003d env[\u0027swift.trans_id\u0027]"}],"source_content_type":"text/x-python","patch_set":5,"id":"dfbec78f_05f58e57","line":240,"in_reply_to":"dfbec78f_a62cdf99","updated":"2019-05-04 19:59:27.000000000","message":"I think it\u0027s fine. I\u0027ve seen error messages with b\u0027File not found\u0027 because of excessive str-ing, but this particular case should be fine.\n\nI wish there was a way for middleware just raise in these cases. That would make \"except Exception\" more tolerable. Your patch does not make it worse though, so whatever.","commit_id":"3a9f3f841957f54801c32832356c540dbef69817"}],"test/unit/common/middleware/s3api/helpers.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"77b0c8da81ff6b100e28a5859ed0220ab9a68d89","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            input \u003d env[\u0027wsgi.input\u0027].read()"},{"line_number":116,"context_line":"            etag \u003d md5(input).hexdigest()"},{"line_number":117,"context_line":"            if env.get(\u0027HTTP_ETAG\u0027, etag) !\u003d etag:"},{"line_number":118,"context_line":"                raise Exception(\u0027Client sent a bad ETag! Got %r, but \u0027"},{"line_number":119,"context_line":"                                \u0027md5(body) \u003d %r\u0027 % (env[\u0027HTTP_ETAG\u0027], etag))"},{"line_number":120,"context_line":"            headers.setdefault(\u0027Etag\u0027, etag)"},{"line_number":121,"context_line":"            headers.setdefault(\u0027Content-Length\u0027, len(input))"}],"source_content_type":"text/x-python","patch_set":5,"id":"dfbec78f_6626e7ba","line":118,"range":{"start_line":118,"start_character":22,"end_line":118,"end_character":31},"updated":"2019-05-03 06:20:14.000000000","message":"This should probably be raising BadDigest or something instead...","commit_id":"3a9f3f841957f54801c32832356c540dbef69817"}],"test/unit/common/middleware/s3api/test_multi_upload.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"77b0c8da81ff6b100e28a5859ed0220ab9a68d89","unresolved":false,"context_lines":[{"line_number":67,"context_line":"     (\u0027subdir/object/Z/2\u0027, \u00272014-05-07T19:47:58.592270\u0027, \u0027fedcba9876543210\u0027,"},{"line_number":68,"context_line":"      41))"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"S3_ETAG \u003d \u0027\"%s-2\"\u0027 % hashlib.md5(binascii.a2b_hex("},{"line_number":71,"context_line":"    \u00270123456789abcdef0123456789abcdef\u0027"},{"line_number":72,"context_line":"    \u0027fedcba9876543210fedcba9876543210\u0027)).hexdigest()"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"dfbec78f_2638efd1","line":70,"updated":"2019-05-03 06:20:14.000000000","message":"Bulk of the conflict was related to things like this stemming from https://review.opendev.org/#/c/656385/","commit_id":"3a9f3f841957f54801c32832356c540dbef69817"}],"test/unit/common/middleware/s3api/test_obj.py":[{"author":{"_account_id":15343,"name":"Tim Burke","email":"tburke@nvidia.com","username":"tburke"},"change_message_id":"77b0c8da81ff6b100e28a5859ed0220ab9a68d89","unresolved":false,"context_lines":[{"line_number":547,"context_line":"                     \u0027X-Amz-Copy-Source\u0027: \u0027/some/source\u0027,"},{"line_number":548,"context_line":"                     \u0027Content-MD5\u0027: content_md5,"},{"line_number":549,"context_line":"                     \u0027Date\u0027: self.get_date_header()},"},{"line_number":550,"context_line":"            body\u003dself.object_body)"},{"line_number":551,"context_line":"        req.date \u003d datetime.now()"},{"line_number":552,"context_line":"        req.content_type \u003d \u0027text/plain\u0027"},{"line_number":553,"context_line":"        status, headers, body \u003d self.call_s3api(req)"}],"source_content_type":"text/x-python","patch_set":5,"id":"dfbec78f_c63473e1","line":550,"updated":"2019-05-03 06:20:14.000000000","message":"This was the other failure I\u0027d see after the rebase -- previously we sent an ETag that I guess was getting ignored.","commit_id":"3a9f3f841957f54801c32832356c540dbef69817"}]}
