)]}'
{"swift/common/constraints.py":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"344360df9b9e881f9567546d54a8db1552f271e6","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    if req.content_length is None and \\"},{"line_number":133,"context_line":"            req.headers.get(\u0027transfer-encoding\u0027) !\u003d \u0027chunked\u0027:"},{"line_number":134,"context_line":"        return HTTPLengthRequired(request\u003dreq)"},{"line_number":135,"context_line":"    if (\u0027X-Copy-From\u0027 in req.headers or \u0027X-Copy-From-Account\u0027 in req.headers) \\"},{"line_number":136,"context_line":"            and req.content_length:"},{"line_number":137,"context_line":"        return HTTPBadRequest(body\u003d\u0027Copy requests require a zero byte body\u0027,"},{"line_number":138,"context_line":"                              request\u003dreq, content_type\u003d\u0027text/plain\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2FaTA%3D","line":135,"updated":"2014-02-26 20:06:48.000000000","message":"there\u0027s no test coverage for X-Copy-From-Account here; I took it out and neither unit nor functional tests failed","commit_id":"ce4e2289f5cfba97c333fa1449f47eca911888ec"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"344360df9b9e881f9567546d54a8db1552f271e6","unresolved":false,"context_lines":[{"line_number":273,"context_line":"    \"\"\""},{"line_number":274,"context_line":"    if isinstance(account, unicode):"},{"line_number":275,"context_line":"        account \u003d account.encode(\u0027utf-8\u0027)"},{"line_number":276,"context_line":"    if \u0027/\u0027 in account:"},{"line_number":277,"context_line":"        raise HTTPPreconditionFailed("},{"line_number":278,"context_line":"            request\u003dreq,"},{"line_number":279,"context_line":"            body\u003d\u0027Account name cannot contain slashes\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2FaKc%3D","line":276,"updated":"2014-02-26 20:06:48.000000000","message":"it would be nice to have a unit test for this code; I see the functional test failure when I comment this out, but no unit test failure","commit_id":"ce4e2289f5cfba97c333fa1449f47eca911888ec"},{"author":{"_account_id":995,"name":"David Goetz","email":"david.goetz@rackspace.com","username":"david-goetz"},"change_message_id":"94a67003cd7a51e67a4d58e38c3bcf8d03ddd62c","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"def check_path_header(req, name, length, error_msg):"},{"line_number":252,"context_line":"    \"\"\""},{"line_number":253,"context_line":"    Validate that the value of path-like header is"},{"line_number":254,"context_line":"    well formatted. We assume the caller ensures that"},{"line_number":255,"context_line":"    specific header is present in req.headers."}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_8d71a779","line":252,"updated":"2014-09-09 21:35:12.000000000","message":"this would be a little better if it threw a KeyError saying that the\nheader wan\u0027t present instead of the AttributeError from urllib. then put\n:raise: KeyError in the docstring. just in case other people use this\nin the future","commit_id":"43ac76373a353fe74a520108a198b0b563c4f3a2"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"28ed98541211b25da6ef3947cf7f3d255a029c57","unresolved":false,"context_lines":[{"line_number":561,"context_line":"            else:"},{"line_number":562,"context_line":"                src_account_name \u003d acct"},{"line_number":563,"context_line":"            # if isinstance(src_account_name, unicode):"},{"line_number":564,"context_line":"            #         src_account_name \u003d src_account_name.encode(\u0027utf-8\u0027)"},{"line_number":565,"context_line":"            src_container_name, src_obj_name \u003d check_copy_from_header(req)"},{"line_number":566,"context_line":"            source_header \u003d \u0027/%s/%s/%s/%s\u0027 % (ver, src_account_name,"},{"line_number":567,"context_line":"                            src_container_name, src_obj_name)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2Fy0E%3D","line":564,"updated":"2014-02-24 19:08:11.000000000","message":"You\u0027ve got some commented-out code here that should be removed.","commit_id":"2f584ea86524638563f111ce335cbaa2de145e45"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"28ed98541211b25da6ef3947cf7f3d255a029c57","unresolved":false,"context_lines":[{"line_number":602,"context_line":"            # we no longer need the X-Copy-From-* headers"},{"line_number":603,"context_line":"            del new_req.headers[\u0027X-Copy-From\u0027]"},{"line_number":604,"context_line":"            if \u0027X-Copy-From-Account\u0027 in new_req.headers:"},{"line_number":605,"context_line":"                del new_req.headers[\u0027X-Copy-From-Account\u0027]"},{"line_number":606,"context_line":"            if not content_type_manually_set:"},{"line_number":607,"context_line":"                new_req.headers[\u0027Content-Type\u0027] \u003d \\"},{"line_number":608,"context_line":"                    source_resp.headers[\u0027Content-Type\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FyzY%3D","line":605,"updated":"2014-02-24 19:08:11.000000000","message":"this could be spelled\n\n    new_req.headers.pop(\u0027X-Copy-From-Account\u0027, None)\n\n(not essential, but nice to have)","commit_id":"2f584ea86524638563f111ce335cbaa2de145e45"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"28ed98541211b25da6ef3947cf7f3d255a029c57","unresolved":false,"context_lines":[{"line_number":850,"context_line":"            dest_account \u003d req.headers.get(\u0027Destination-Account\u0027)"},{"line_number":851,"context_line":"            dest_account \u003d check_account_format(req, dest_account)"},{"line_number":852,"context_line":"            # if isinstance(dest_account, unicode):"},{"line_number":853,"context_line":"            #     dest_account \u003d dest_account.decode(\u0027utf-8\u0027)"},{"line_number":854,"context_line":"            req.headers[\u0027X-Copy-From-Account\u0027] \u003d self.account_name"},{"line_number":855,"context_line":"            self.account_name \u003d dest_account"},{"line_number":856,"context_line":"            del req.headers[\u0027Destination-Account\u0027]"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAU3%2F%2FyzM%3D","line":853,"updated":"2014-02-24 19:08:11.000000000","message":"More commented-out code","commit_id":"2f584ea86524638563f111ce335cbaa2de145e45"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"344360df9b9e881f9567546d54a8db1552f271e6","unresolved":false,"context_lines":[{"line_number":561,"context_line":"            else:"},{"line_number":562,"context_line":"                src_account_name \u003d acct"},{"line_number":563,"context_line":"            # if isinstance(src_account_name, unicode):"},{"line_number":564,"context_line":"            #         src_account_name \u003d src_account_name.encode(\u0027utf-8\u0027)"},{"line_number":565,"context_line":"            src_container_name, src_obj_name \u003d check_copy_from_header(req)"},{"line_number":566,"context_line":"            source_header \u003d \u0027/%s/%s/%s/%s\u0027 % (ver, src_account_name,"},{"line_number":567,"context_line":"                            src_container_name, src_obj_name)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2FaGs%3D","line":564,"updated":"2014-02-26 20:06:48.000000000","message":"commented-out code should be removed","commit_id":"ce4e2289f5cfba97c333fa1449f47eca911888ec"},{"author":{"_account_id":2622,"name":"Samuel Merritt","email":"spam+launchpad@andcheese.org","username":"torgomatic"},"change_message_id":"344360df9b9e881f9567546d54a8db1552f271e6","unresolved":false,"context_lines":[{"line_number":850,"context_line":"            dest_account \u003d req.headers.get(\u0027Destination-Account\u0027)"},{"line_number":851,"context_line":"            dest_account \u003d check_account_format(req, dest_account)"},{"line_number":852,"context_line":"            # if isinstance(dest_account, unicode):"},{"line_number":853,"context_line":"            #     dest_account \u003d dest_account.decode(\u0027utf-8\u0027)"},{"line_number":854,"context_line":"            req.headers[\u0027X-Copy-From-Account\u0027] \u003d self.account_name"},{"line_number":855,"context_line":"            self.account_name \u003d dest_account"},{"line_number":856,"context_line":"            del req.headers[\u0027Destination-Account\u0027]"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAU3%2F%2FaGg%3D","line":853,"updated":"2014-02-26 20:06:48.000000000","message":"commented-out code should be removed","commit_id":"ce4e2289f5cfba97c333fa1449f47eca911888ec"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"fa31aab8b6cd238c205656985e83b6b597e600ea","unresolved":false,"context_lines":[{"line_number":570,"context_line":"                src_account_name \u003d check_account_format(req, src_account_name)"},{"line_number":571,"context_line":"            else:"},{"line_number":572,"context_line":"                src_account_name \u003d acct"},{"line_number":573,"context_line":"            src_container_name, src_obj_name \u003d check_copy_from_header(req)"},{"line_number":574,"context_line":"            source_header \u003d \u0027/%s/%s/%s/%s\u0027 % (ver, src_account_name,"},{"line_number":575,"context_line":"                            src_container_name, src_obj_name)"},{"line_number":576,"context_line":"            source_req \u003d req.copy_get()"}],"source_content_type":"text/x-python","patch_set":15,"id":"1ae5cdf2_ae42f00c","line":573,"updated":"2014-06-25 02:45:38.000000000","message":"I don\u0027t like that method names starting with check are used to get/process information, and rely on throwing exceptions which don\u0027t seem to be caught to deal with the check part.. but the other methods in constraints already exist do the same so I guess it\u0027s not something to block on.","commit_id":"89999ced1fdbb5f77bd4906b00852459b82beb8d"},{"author":{"_account_id":7233,"name":"Matthew Oliver","email":"matt@oliver.net.au","username":"mattoliverau"},"change_message_id":"97541fd9d0dc5ddf598834cacf0d2ce7fe38a9c4","unresolved":false,"context_lines":[{"line_number":893,"context_line":"        dest \u003d req.headers.get(\u0027Destination\u0027)"},{"line_number":894,"context_line":"        if not dest:"},{"line_number":895,"context_line":"            return HTTPPreconditionFailed(request\u003dreq,"},{"line_number":896,"context_line":"                                          body\u003d\u0027Destination header required\u0027)"},{"line_number":897,"context_line":"        dest_account \u003d self.account_name"},{"line_number":898,"context_line":"        if \u0027Destination-Account\u0027 in req.headers:"},{"line_number":899,"context_line":"            dest_account \u003d req.headers.get(\u0027Destination-Account\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_74d2b3fe","line":896,"updated":"2014-08-13 05:22:48.000000000","message":"Now that you have changed below from using the dest variable to dest_account and dest_object, creating the dest variable is now not required. \n\nSo how about merging the above 2 lines:\n\n  if not req.headers.get(\u0027Destination\u0027):\n      return HTTPPreconditionFailed(request\u003dreq,\n                                    body\u003d\u0027Destination header required\u0027)","commit_id":"9e3d4dacf1ac16d6b13b1738da1109b93d0f4543"},{"author":{"_account_id":5410,"name":"Constantine Peresypkin","email":"constantine.peresypk@rackspace.com","username":"constantine-q"},"change_message_id":"8ea3b9606eaaf94e1bdaf251e6982043a9b77052","unresolved":false,"context_lines":[{"line_number":893,"context_line":"        dest \u003d req.headers.get(\u0027Destination\u0027)"},{"line_number":894,"context_line":"        if not dest:"},{"line_number":895,"context_line":"            return HTTPPreconditionFailed(request\u003dreq,"},{"line_number":896,"context_line":"                                          body\u003d\u0027Destination header required\u0027)"},{"line_number":897,"context_line":"        dest_account \u003d self.account_name"},{"line_number":898,"context_line":"        if \u0027Destination-Account\u0027 in req.headers:"},{"line_number":899,"context_line":"            dest_account \u003d req.headers.get(\u0027Destination-Account\u0027)"}],"source_content_type":"text/x-python","patch_set":18,"id":"baada198_517befbe","line":896,"in_reply_to":"baada198_74d2b3fe","updated":"2014-08-13 12:45:56.000000000","message":"Done","commit_id":"9e3d4dacf1ac16d6b13b1738da1109b93d0f4543"},{"author":{"_account_id":9625,"name":"Thiago da Silva","email":"thiagodasilva@gmail.com","username":"thiago"},"change_message_id":"836652112080406c981079a34cc11e5b17b4b067","unresolved":false,"context_lines":[{"line_number":900,"context_line":"                                          body\u003d\u0027Destination header required\u0027)"},{"line_number":901,"context_line":"        dest_account \u003d self.account_name"},{"line_number":902,"context_line":"        if \u0027Destination-Account\u0027 in req.headers:"},{"line_number":903,"context_line":"            dest_account \u003d req.headers.get(\u0027Destination-Account\u0027)"},{"line_number":904,"context_line":"            dest_account \u003d check_account_format(req, dest_account)"},{"line_number":905,"context_line":"            req.headers[\u0027X-Copy-From-Account\u0027] \u003d self.account_name"},{"line_number":906,"context_line":"            self.account_name \u003d dest_account"}],"source_content_type":"text/x-python","patch_set":19,"id":"1abeadc6_cbd95e58","line":903,"updated":"2014-08-22 16:43:49.000000000","message":"wondering if you also need to unquote Destination-Account","commit_id":"43ac76373a353fe74a520108a198b0b563c4f3a2"}],"test/functional/swift_test_client.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"bf38e3913489d9e13018e5274f9ad8887007b808","unresolved":false,"context_lines":[{"line_number":172,"context_line":"        # unicode and this would cause troubles when doing"},{"line_number":173,"context_line":"        # no_safe_quote query."},{"line_number":174,"context_line":"        self.storage_url \u003d str(\u0027/%s/%s\u0027 % (x[3], x[4]))"},{"line_number":175,"context_line":"        self.account_name \u003d x[4]"},{"line_number":176,"context_line":"        self.storage_token \u003d storage_token"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"        self.http_connect()"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUX%2F%2Frys%3D","line":175,"updated":"2014-02-11 14:33:30.000000000","message":"self.account_name \u003d str(x[4]) fixed functional tests on devstack for me","commit_id":"f67c54b1c7a479008748b0f3fbc9c8d07d17ebfe"},{"author":{"_account_id":1179,"name":"Clay Gerrard","email":"clay.gerrard@gmail.com","username":"clay-gerrard"},"change_message_id":"3b29d7e15b1301d434cb33e4f9c3508871d40c52","unresolved":false,"context_lines":[{"line_number":592,"context_line":"                                      parms\u003dparms) \u003d\u003d 201"},{"line_number":593,"context_line":""},{"line_number":594,"context_line":"    def copy_account(self, dest_account, dest_cont, dest_file,"},{"line_number":595,"context_line":"                     hdrs\u003d{}, parms\u003d{}, cfg\u003d{}):"},{"line_number":596,"context_line":"        if \u0027destination\u0027 in cfg:"},{"line_number":597,"context_line":"            headers \u003d {\u0027Destination\u0027: cfg[\u0027destination\u0027]}"},{"line_number":598,"context_line":"        elif cfg.get(\u0027no_destination\u0027):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7adec928_e57436ff","line":595,"updated":"2014-05-09 08:26:50.000000000","message":"can you use immutable defaults here, BC is trying to clean stuff like this up over in https://review.openstack.org/#/c/87490/","commit_id":"ba8444c79af2d29826d52685c96f11af59a31970"}],"test/functional/tests.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"b21123d3463281276cf5493de550e5607068e9ea","unresolved":false,"context_lines":[{"line_number":931,"context_line":"        file_item \u003d self.env.container.file(source_filename)"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"        metadata \u003d {}"},{"line_number":934,"context_line":"        for i in range(1):"},{"line_number":935,"context_line":"            metadata[Utils.create_ascii_name()] \u003d Utils.create_name()"},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"        data \u003d file_item.write_random()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2FuD8%3D","line":934,"updated":"2014-03-04 14:32:28.000000000","message":"I think you can safely remove this line","commit_id":"44181219921a0cac90267500474ad69233b57ec9"},{"author":{"_account_id":5410,"name":"Constantine Peresypkin","email":"constantine.peresypk@rackspace.com","username":"constantine-q"},"change_message_id":"f2ab1c92c115b57c5fe5fb87d382f4e5f6489435","unresolved":false,"context_lines":[{"line_number":931,"context_line":"        file_item \u003d self.env.container.file(source_filename)"},{"line_number":932,"context_line":""},{"line_number":933,"context_line":"        metadata \u003d {}"},{"line_number":934,"context_line":"        for i in range(1):"},{"line_number":935,"context_line":"            metadata[Utils.create_ascii_name()] \u003d Utils.create_name()"},{"line_number":936,"context_line":""},{"line_number":937,"context_line":"        data \u003d file_item.write_random()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2Fg7A%3D","line":934,"in_reply_to":"AAAAVn%2F%2FuD8%3D","updated":"2014-03-05 16:58:17.000000000","message":"Done","commit_id":"44181219921a0cac90267500474ad69233b57ec9"}],"test/unit/proxy/test_server.py":[{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"a78b9da7bcc5b4d3d1c394447c51b7f1bd4f47f9","unresolved":false,"context_lines":[{"line_number":160,"context_line":"                                                        {\u0027X-Timestamp\u0027: ts,"},{"line_number":161,"context_line":"                                                         \u0027x-trans-id\u0027: \u0027test\u0027})"},{"line_number":162,"context_line":"        resp \u003d conn.getresponse()"},{"line_number":163,"context_line":"        assert(resp.status \u003d\u003d 201)"},{"line_number":164,"context_line":"    ts \u003d normalize_timestamp(time.time())"},{"line_number":165,"context_line":"    partition, nodes \u003d prosrv.account_ring.get_nodes(\u0027a1\u0027)"},{"line_number":166,"context_line":"    for node in nodes:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2FkzA%3D","line":163,"updated":"2014-02-12 09:04:12.000000000","message":"Maybe add a comment here that this creates the second account account required for account copy tests?","commit_id":"924083bbcf7c1d59ab7117ef218728de96ef3dc5"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"a78b9da7bcc5b4d3d1c394447c51b7f1bd4f47f9","unresolved":false,"context_lines":[{"line_number":2450,"context_line":"            self.assertEquals(resp.headers[\u0027x-copied-from-account\u0027], \u0027a\u0027)"},{"line_number":2451,"context_line":"            self.assertEquals(resp.headers[\u0027x-copied-from\u0027], \u0027c/o/o2\u0027)"},{"line_number":2452,"context_line":""},{"line_number":2453,"context_line":"            # space in soure path"},{"line_number":2454,"context_line":"            req \u003d Request.blank(\u0027/v1/a/c/o\u0027, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":2455,"context_line":"                                headers\u003d{\u0027Content-Length\u0027: \u00270\u0027,"},{"line_number":2456,"context_line":"                                         \u0027X-Copy-From-Account\u0027: \u0027a\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2Fkxo%3D","line":2453,"updated":"2014-02-12 09:04:12.000000000","message":"soure -\u003e source","commit_id":"924083bbcf7c1d59ab7117ef218728de96ef3dc5"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"a78b9da7bcc5b4d3d1c394447c51b7f1bd4f47f9","unresolved":false,"context_lines":[{"line_number":2579,"context_line":"            resp \u003d controller.PUT(req)"},{"line_number":2580,"context_line":"            self.assertEquals(resp.status_int, 413)"},{"line_number":2581,"context_line":""},{"line_number":2582,"context_line":"    def test_copy_from_account_different(self):"},{"line_number":2583,"context_line":"        with save_globals():"},{"line_number":2584,"context_line":"            controller \u003d proxy_server.ObjectController(self.app, \u0027account\u0027,"},{"line_number":2585,"context_line":"                                                       \u0027container\u0027, \u0027object\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2Fku4%3D","line":2582,"updated":"2014-02-12 09:04:12.000000000","message":"Did a quick diff to test_copy_from_account_same() and the only difference to test_copy_from_account_same() seems to be the different account and container name. Maybe you could combine both in a common method that will be called by test_copy_from_account_same and test_copy_from_account_different with two different args? This would avoid ~190 lines of duplicated code.","commit_id":"924083bbcf7c1d59ab7117ef218728de96ef3dc5"},{"author":{"_account_id":6968,"name":"Christian Schwede","email":"cschwede@nvidia.com","username":"cschwede"},"change_message_id":"a78b9da7bcc5b4d3d1c394447c51b7f1bd4f47f9","unresolved":false,"context_lines":[{"line_number":2635,"context_line":"            self.assertEquals(resp.headers[\u0027x-copied-from-account\u0027], \u0027a\u0027)"},{"line_number":2636,"context_line":"            self.assertEquals(resp.headers[\u0027x-copied-from\u0027], \u0027c/o/o2\u0027)"},{"line_number":2637,"context_line":""},{"line_number":2638,"context_line":"            # space in soure path"},{"line_number":2639,"context_line":"            req \u003d Request.blank(\u0027/v1/a1/c1/o\u0027,"},{"line_number":2640,"context_line":"                                environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":2641,"context_line":"                                headers\u003d{\u0027Content-Length\u0027: \u00270\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2FkxA%3D","line":2638,"updated":"2014-02-12 09:04:12.000000000","message":"soure -\u003e source","commit_id":"924083bbcf7c1d59ab7117ef218728de96ef3dc5"},{"author":{"_account_id":5410,"name":"Constantine Peresypkin","email":"constantine.peresypk@rackspace.com","username":"constantine-q"},"change_message_id":"054dba1544a93fe4e43a562bb2e773afd91c6517","unresolved":false,"context_lines":[{"line_number":2433,"context_line":"                self.assertEquals(resp.headers[\u0027x-copied-from-account\u0027], \u0027a\u0027)"},{"line_number":2434,"context_line":"                self.assertEquals(resp.headers[\u0027x-copied-from\u0027], \u0027c/o\u0027)"},{"line_number":2435,"context_line":""},{"line_number":2436,"context_line":"                # non-zero content length"},{"line_number":2437,"context_line":"                req \u003d Request.blank(path, environ\u003d{\u0027REQUEST_METHOD\u0027: \u0027PUT\u0027},"},{"line_number":2438,"context_line":"                                    headers\u003d{\u0027Content-Length\u0027: \u00275\u0027,"},{"line_number":2439,"context_line":"                                             \u0027X-Copy-From-Account\u0027: \u0027a\u0027,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAVn%2F%2FvRY%3D","line":2436,"updated":"2014-03-04 11:30:24.000000000","message":"Here\u0027s the test","commit_id":"44181219921a0cac90267500474ad69233b57ec9"}]}
