)]}'
{"swift/common/middleware/slo.py":[{"author":{"_account_id":6198,"name":"Peter Portante","email":"peter.a.portante@gmail.com","username":"peter-a-portante"},"change_message_id":"2f7c0202072224bdd36baf93638c0a5b5b9c1a1a","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"This feature is very similar to Dynamic Large Object (DLO) support in that"},{"line_number":20,"context_line":"it allows the user to upload many objects concurrently and afterwards"},{"line_number":21,"context_line":"download them as a single object. It is different in that is does not rely"},{"line_number":22,"context_line":"on eventually consistent container listings to do so. Instead, a user"},{"line_number":23,"context_line":"defined manifest of the object segments is used."},{"line_number":24,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAM3%2F%2BkXA%3D","line":21,"updated":"2013-02-27 04:05:44.000000000","message":"Should that be \"in that it does not rely\"?","commit_id":"77281451fc0b6685b9df43d215d5dfa9de9184f6"},{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"11f8636c0880a0821e9df578eac87da410d238a2","unresolved":false,"context_lines":[{"line_number":155,"context_line":"        raise HTTPBadRequest(\"Manifest must be valid json.\")"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"    req_keys \u003d set([\u0027path\u0027, \u0027etag\u0027, \u0027size_bytes\u0027])"},{"line_number":158,"context_line":"    for seg_dict in parsed_data:"},{"line_number":159,"context_line":"        if set(seg_dict.keys()) !\u003d req_keys:"},{"line_number":160,"context_line":"            raise HTTPBadRequest(\u0027Invalid SLO Manifest File\u0027)"},{"line_number":161,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAANH%2F%2F8y4%3D","line":158,"updated":"2013-03-01 21:21:57.000000000","message":"This loop is going to kerplode if they upload valid json with an invalid structure.  Like \u0027[0]\u0027.","commit_id":"34e4c8e5d74f7bc48550e38fa4fda5091e6f4818"},{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"11f8636c0880a0821e9df578eac87da410d238a2","unresolved":false,"context_lines":[{"line_number":221,"context_line":"        index \u003d 0"},{"line_number":222,"context_line":"        for seg_dict in parsed_data:"},{"line_number":223,"context_line":"            obj_path \u003d \u0027/\u0027.join("},{"line_number":224,"context_line":"                [\u0027\u0027, vrs, account, seg_dict[\u0027path\u0027].lstrip(\u0027/\u0027)])"},{"line_number":225,"context_line":"            try:"},{"line_number":226,"context_line":"                seg_size \u003d int(seg_dict[\u0027size_bytes\u0027])"},{"line_number":227,"context_line":"            except (ValueError, TypeError):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAANH%2F%2F8xQ%3D","line":224,"updated":"2013-03-01 21:21:57.000000000","message":"Would this do anything hilarious if seg_dict[\u0027path\u0027] was a container?\n\nEdit: not really hilarious, but you can make it HEAD the container, then it fails with an etag mismatch.","commit_id":"34e4c8e5d74f7bc48550e38fa4fda5091e6f4818"},{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"11f8636c0880a0821e9df578eac87da410d238a2","unresolved":false,"context_lines":[{"line_number":232,"context_line":"                    \u0027Each segment, except the last, must be larger than \u0027"},{"line_number":233,"context_line":"                    \u0027%d bytes.\u0027 % self.min_segment_size)"},{"line_number":234,"context_line":""},{"line_number":235,"context_line":"            index +\u003d 1"},{"line_number":236,"context_line":"            new_env \u003d req.environ.copy()"},{"line_number":237,"context_line":"            if isinstance(obj_path, unicode):"},{"line_number":238,"context_line":"                obj_path \u003d obj_path.encode(\u0027utf-8\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAANH%2F%2F8yU%3D","line":235,"updated":"2013-03-01 21:21:57.000000000","message":"You could save like 2 lines of code with enumerate()!","commit_id":"34e4c8e5d74f7bc48550e38fa4fda5091e6f4818"},{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"ba8464c53f5014be32349a9421ef53c1ba7802f1","unresolved":false,"context_lines":[{"line_number":161,"context_line":"    for seg_dict in parsed_data:"},{"line_number":162,"context_line":"        if (not isinstance(seg_dict, dict) or"},{"line_number":163,"context_line":"                set(seg_dict.keys()) !\u003d req_keys or"},{"line_number":164,"context_line":"                \u0027/\u0027 not in seg_dict[\u0027path\u0027].lstrip(\u0027/\u0027)):"},{"line_number":165,"context_line":"            raise HTTPBadRequest(\u0027Invalid SLO Manifest File\u0027)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    return parsed_data"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAANH%2F%2F8h4%3D","line":164,"updated":"2013-03-01 23:26:11.000000000","message":"This still kerplodes if seg_dict[\u0027path\u0027] isn\u0027t a string.","commit_id":"117013cee100b56442005c5f39fd69bab3a84e67"}],"swift/proxy/controllers/obj.py":[{"author":{"_account_id":2828,"name":"Michael Barton","email":"mike@weirdlooking.com","username":"redbo"},"change_message_id":"11f8636c0880a0821e9df578eac87da410d238a2","unresolved":false,"context_lines":[{"line_number":192,"context_line":"                     \u0027obj\u0027: self.controller.object_name, \u0027err\u0027: err})"},{"line_number":193,"context_line":"                err.swift_logged \u003d True"},{"line_number":194,"context_line":"                self.response.status_int \u003d HTTP_CONFLICT"},{"line_number":195,"context_line":"            raise StopIteration(\u0027Invalid manifiest segment\u0027)"},{"line_number":196,"context_line":"        except (Exception, Timeout), err:"},{"line_number":197,"context_line":"            if not getattr(err, \u0027swift_logged\u0027, False):"},{"line_number":198,"context_line":"                self.controller.app.logger.exception(_("}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAANH%2F%2F8vM%3D","line":195,"updated":"2013-03-01 21:21:57.000000000","message":"Is this one of those things where the keepalive connection is going to get screwed up because eventlet\u0027s wsgi is lame about iterators that cut short?\n\nEdit: yes, it seems so.","commit_id":"34e4c8e5d74f7bc48550e38fa4fda5091e6f4818"}]}
