)]}'
{"jenkins/scripts/zuul_swift_upload.py":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"b11d6aec5247ba0cb565a7ec6b41cec2daf6b985","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        for filex, fileinfo in files.items():"},{"line_number":179,"context_line":"            kwargs[\u0027files\u0027] \u003d {filex: fileinfo}"},{"line_number":180,"context_line":"            t \u003d threading.Thread(target\u003drequests.post, name\u003dfilex,"},{"line_number":181,"context_line":"                                 args\u003dargs, kwargs\u003dkwargs)"},{"line_number":182,"context_line":"            threads.append(t)"},{"line_number":183,"context_line":"            t.start()"},{"line_number":184,"context_line":"        for t in threads:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_e23cc795","line":181,"updated":"2015-02-17 22:00:21.000000000","message":"I wonder if it would be wise to do kwargs.copy()\n\nI would hope the next iteration through the loop wouldn\u0027t affect the kwargs passed into the previous thread but I\u0027m not certain either way.","commit_id":"81b2908e0a2b5d3716b95496889ea3528e4fe81e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"7de1f749c92086a746c4f69ef0fbcbbfba994d88","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        for filex, fileinfo in files.items():"},{"line_number":179,"context_line":"            kwargs[\u0027files\u0027] \u003d {filex: fileinfo}"},{"line_number":180,"context_line":"            t \u003d threading.Thread(target\u003drequests.post, name\u003dfilex,"},{"line_number":181,"context_line":"                                 args\u003dargs, kwargs\u003dkwargs)"},{"line_number":182,"context_line":"            threads.append(t)"},{"line_number":183,"context_line":"            t.start()"},{"line_number":184,"context_line":"        for t in threads:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_e5e211d4","line":181,"in_reply_to":"da86d52c_e23cc795","updated":"2015-02-17 22:25:28.000000000","message":"Good question I can update to be on the safe side. Also need to figure out how we want to control the number of concurrent uploads as this is pretty rudimentary.","commit_id":"81b2908e0a2b5d3716b95496889ea3528e4fe81e"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"177cd361dbe6c4e40bf36c77ff743e4cdc22fe82","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        for filex, fileinfo in files.items():"},{"line_number":179,"context_line":"            kwargs[\u0027files\u0027] \u003d {filex: fileinfo}"},{"line_number":180,"context_line":"            t \u003d threading.Thread(target\u003drequests.post, name\u003dfilex,"},{"line_number":181,"context_line":"                                 args\u003dargs, kwargs\u003dkwargs)"},{"line_number":182,"context_line":"            threads.append(t)"},{"line_number":183,"context_line":"            t.start()"},{"line_number":184,"context_line":"        for t in threads:"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_c560ad37","line":181,"in_reply_to":"da86d52c_e5e211d4","updated":"2015-02-17 22:30:12.000000000","message":"What about multiprocessing.pool.ThreadPool?","commit_id":"81b2908e0a2b5d3716b95496889ea3528e4fe81e"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"8a41516dc6617df28fc09c0be107cd2f08ed3cb1","unresolved":false,"context_lines":[{"line_number":161,"context_line":"            sys.stderr.write(\u0027Warning: %s exceeds %d bytes. Skipping...\\n\u0027"},{"line_number":162,"context_line":"                             % (f[\u0027path\u0027], int(payload[\u0027max_file_size\u0027])))"},{"line_number":163,"context_line":"            continue"},{"line_number":164,"context_line":"        fileincr \u003d \u0027file%d\u0027 % (i + 1)"},{"line_number":165,"context_line":"        fileinfo \u003d {fileincr: (filename_prefix + f[\u0027relative_name\u0027],"},{"line_number":166,"context_line":"                               f[\u0027path\u0027],"},{"line_number":167,"context_line":"                               get_file_mime(f[\u0027path\u0027]))}"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_f6e2c9d3","line":164,"updated":"2015-02-17 23:48:36.000000000","message":"We don\u0027t need this here as we\u0027re only posting one file. When posting multiple files the name of the field is \u0027file01\u0027, \u0027file02\u0027 etc so we only need \u0027file01\u0027.","commit_id":"c3e3ae7feb905eac03b575cff6b63e573b150f45"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"8a41516dc6617df28fc09c0be107cd2f08ed3cb1","unresolved":false,"context_lines":[{"line_number":301,"context_line":"        if payload[\u0027expires\u0027] \u003c time.time():"},{"line_number":302,"context_line":"            raise Exception(\"Ran out of time uploading files!\")"},{"line_number":303,"context_line":"        files \u003d {}"},{"line_number":304,"context_line":"        for key in fileinfo:"},{"line_number":305,"context_line":"            files[\u0027key\u0027] \u003d (fileinfo[key][0],"},{"line_number":306,"context_line":"                            open(fileinfo[key][1], \u0027rb\u0027),"},{"line_number":307,"context_line":"                            fileinfo[key][2])"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_766a591b","line":304,"updated":"2015-02-17 23:48:36.000000000","message":"(nit) probably just me but I prefer using fileinfo.keys() to make it clear fileinfo is a dict we\u0027re looping on not a list.","commit_id":"c3e3ae7feb905eac03b575cff6b63e573b150f45"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"8a41516dc6617df28fc09c0be107cd2f08ed3cb1","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            raise Exception(\"Ran out of time uploading files!\")"},{"line_number":303,"context_line":"        files \u003d {}"},{"line_number":304,"context_line":"        for key in fileinfo:"},{"line_number":305,"context_line":"            files[\u0027key\u0027] \u003d (fileinfo[key][0],"},{"line_number":306,"context_line":"                            open(fileinfo[key][1], \u0027rb\u0027),"},{"line_number":307,"context_line":"                            fileinfo[key][2])"},{"line_number":308,"context_line":"        requests.post(url, data\u003dpayload, files\u003dfiles)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_d6c78510","line":305,"updated":"2015-02-17 23:48:36.000000000","message":"err, you\u0027re using \u0027key\u0027 here and I\u0027m not sure why - did you mean to use the variable /key/?. This should be \u0027file01\u0027 as per http://docs.openstack.org/developer/swift/middleware.html#formpost\n\n(If you hardcode it to file01 here you don\u0027t need to fix the fileincr above clearly. However, it\u0027d be better to use the variable /key/ here to support the PostThread to submit multiple files per post)","commit_id":"c3e3ae7feb905eac03b575cff6b63e573b150f45"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"8a41516dc6617df28fc09c0be107cd2f08ed3cb1","unresolved":false,"context_lines":[{"line_number":410,"context_line":"    queue \u003d swift_form_post_queue(file_list, swift_url, swift_hmac_body,"},{"line_number":411,"context_line":"                                  swift_signature)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    threads \u003d []"},{"line_number":414,"context_line":"    max_file_count \u003d swift_hmac_body.split(\u0027\\n\u0027)[3]"},{"line_number":415,"context_line":"    for x in range(max_file_count):"},{"line_number":416,"context_line":"        t \u003d PostThread(queue)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_b6ebf1a2","line":413,"updated":"2015-02-17 23:48:36.000000000","message":"(nit) This kind of feels out of place here. Maybe we could move this into its own method?","commit_id":"c3e3ae7feb905eac03b575cff6b63e573b150f45"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"8a41516dc6617df28fc09c0be107cd2f08ed3cb1","unresolved":false,"context_lines":[{"line_number":411,"context_line":"                                  swift_signature)"},{"line_number":412,"context_line":""},{"line_number":413,"context_line":"    threads \u003d []"},{"line_number":414,"context_line":"    max_file_count \u003d swift_hmac_body.split(\u0027\\n\u0027)[3]"},{"line_number":415,"context_line":"    for x in range(max_file_count):"},{"line_number":416,"context_line":"        t \u003d PostThread(queue)"},{"line_number":417,"context_line":"        threads.append(t)"}],"source_content_type":"text/x-python","patch_set":2,"id":"da86d52c_f609e995","line":414,"updated":"2015-02-17 23:48:36.000000000","message":"(nit/comment) The max file count doesn\u0027t need to come from the hmac body, but that\u0027s probably as good a place as any. We could alternatively make it an argument.","commit_id":"c3e3ae7feb905eac03b575cff6b63e573b150f45"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"eeb82a29f539433dc7869208ddf73182d2fd1e5e","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    (object_prefix,"},{"line_number":147,"context_line":"     payload[\u0027redirect\u0027],"},{"line_number":148,"context_line":"     payload[\u0027max_file_size\u0027],"},{"line_number":149,"context_line":"     payload[\u0027max_file_count\u0027],"},{"line_number":150,"context_line":"     payload[\u0027expires\u0027]) \u003d hmac_body.split(\u0027\\n\u0027)"},{"line_number":151,"context_line":"    payload[\u0027signature\u0027] \u003d signature"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_4a46817c","line":149,"updated":"2015-02-18 03:35:58.000000000","message":"we should cast what we expect to be ints here","commit_id":"3d13255dcf23f6a9d91907d2addcbab6748a95fc"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"9f43225562d1318b8dd7f8a4257a0f90da7e0848","unresolved":false,"context_lines":[{"line_number":146,"context_line":"    (object_prefix,"},{"line_number":147,"context_line":"     payload[\u0027redirect\u0027],"},{"line_number":148,"context_line":"     payload[\u0027max_file_size\u0027],"},{"line_number":149,"context_line":"     payload[\u0027max_file_count\u0027],"},{"line_number":150,"context_line":"     payload[\u0027expires\u0027]) \u003d hmac_body.split(\u0027\\n\u0027)"},{"line_number":151,"context_line":"    payload[\u0027signature\u0027] \u003d signature"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_cdfc4bb8","line":149,"in_reply_to":"da86d52c_4a46817c","updated":"2015-02-18 03:52:44.000000000","message":"Done","commit_id":"3d13255dcf23f6a9d91907d2addcbab6748a95fc"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"32d0e9f5d1b7c65d1d4f44e58ec1b41c39dd598c","unresolved":false,"context_lines":[{"line_number":294,"context_line":"class PostThread(threading.Thread):"},{"line_number":295,"context_line":"    \"\"\"Thread object to upload files to swift via form post\"\"\""},{"line_number":296,"context_line":"    def __init__(self, queue):"},{"line_number":297,"context_line":"        super(self, PostThread).__init__()"},{"line_number":298,"context_line":"        self.queue \u003d queue"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def _post_file(self, url, payload, fileinfo):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_4aada19a","line":297,"updated":"2015-02-18 03:09:45.000000000","message":"wrong way around","commit_id":"3d13255dcf23f6a9d91907d2addcbab6748a95fc"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"9f43225562d1318b8dd7f8a4257a0f90da7e0848","unresolved":false,"context_lines":[{"line_number":294,"context_line":"class PostThread(threading.Thread):"},{"line_number":295,"context_line":"    \"\"\"Thread object to upload files to swift via form post\"\"\""},{"line_number":296,"context_line":"    def __init__(self, queue):"},{"line_number":297,"context_line":"        super(self, PostThread).__init__()"},{"line_number":298,"context_line":"        self.queue \u003d queue"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def _post_file(self, url, payload, fileinfo):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_8d1df311","line":297,"in_reply_to":"da86d52c_4aada19a","updated":"2015-02-18 03:52:44.000000000","message":"Done","commit_id":"3d13255dcf23f6a9d91907d2addcbab6748a95fc"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"eeb82a29f539433dc7869208ddf73182d2fd1e5e","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        self.queue \u003d queue"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def _post_file(self, url, payload, fileinfo):"},{"line_number":301,"context_line":"        if payload[\u0027expires\u0027] \u003c time.time():"},{"line_number":302,"context_line":"            raise Exception(\"Ran out of time uploading files!\")"},{"line_number":303,"context_line":"        files \u003d {}"},{"line_number":304,"context_line":"        for key in fileinfo.keys():"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0a500931","line":301,"updated":"2015-02-18 03:35:58.000000000","message":"this expires comes from the hmac as a string so evals incorrectly. It also needs casting as an int (maybe earlier on)","commit_id":"3d13255dcf23f6a9d91907d2addcbab6748a95fc"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"9f43225562d1318b8dd7f8a4257a0f90da7e0848","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        self.queue \u003d queue"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"    def _post_file(self, url, payload, fileinfo):"},{"line_number":301,"context_line":"        if payload[\u0027expires\u0027] \u003c time.time():"},{"line_number":302,"context_line":"            raise Exception(\"Ran out of time uploading files!\")"},{"line_number":303,"context_line":"        files \u003d {}"},{"line_number":304,"context_line":"        for key in fileinfo.keys():"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_ad1637f0","line":301,"in_reply_to":"da86d52c_0a500931","updated":"2015-02-18 03:52:44.000000000","message":"Done","commit_id":"3d13255dcf23f6a9d91907d2addcbab6748a95fc"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"2ff331f84938cf7b6f506c54b7d8c9a889351608","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                return"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"def swift_form_post(queue, max_file_count):"},{"line_number":320,"context_line":"    \"\"\"Spin up thread pool to upload to swift\"\"\""},{"line_number":321,"context_line":"    threads \u003d []"},{"line_number":322,"context_line":"    for x in range(max_file_count):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_07dac54a","line":319,"updated":"2015-02-18 01:23:06.000000000","message":"(nit) technically this is more of a max threads, or max simultaneous uploads","commit_id":"3d13255dcf23f6a9d91907d2addcbab6748a95fc"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"9f43225562d1318b8dd7f8a4257a0f90da7e0848","unresolved":false,"context_lines":[{"line_number":316,"context_line":"                return"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"def swift_form_post(queue, max_file_count):"},{"line_number":320,"context_line":"    \"\"\"Spin up thread pool to upload to swift\"\"\""},{"line_number":321,"context_line":"    threads \u003d []"},{"line_number":322,"context_line":"    for x in range(max_file_count):"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_edd3cf35","line":319,"in_reply_to":"da86d52c_07dac54a","updated":"2015-02-18 03:52:44.000000000","message":"Done","commit_id":"3d13255dcf23f6a9d91907d2addcbab6748a95fc"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"32d0e9f5d1b7c65d1d4f44e58ec1b41c39dd598c","unresolved":false,"context_lines":[{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    queue \u003d swift_form_post_queue(file_list, swift_url, swift_hmac_body,"},{"line_number":422,"context_line":"                                  swift_signature)"},{"line_number":423,"context_line":"    max_file_count \u003d swift_hmac_body.split(\u0027\\n\u0027)[3]"},{"line_number":424,"context_line":"    swift_form_post(queue, max_file_count)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    print os.path.join(logserver_prefix, swift_destination_prefix,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_aac45d60","line":423,"updated":"2015-02-18 03:09:45.000000000","message":"This comes in as a string so we need to sanatise to an int (or the range on line 322 will raise)","commit_id":"3d13255dcf23f6a9d91907d2addcbab6748a95fc"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"9f43225562d1318b8dd7f8a4257a0f90da7e0848","unresolved":false,"context_lines":[{"line_number":420,"context_line":""},{"line_number":421,"context_line":"    queue \u003d swift_form_post_queue(file_list, swift_url, swift_hmac_body,"},{"line_number":422,"context_line":"                                  swift_signature)"},{"line_number":423,"context_line":"    max_file_count \u003d swift_hmac_body.split(\u0027\\n\u0027)[3]"},{"line_number":424,"context_line":"    swift_form_post(queue, max_file_count)"},{"line_number":425,"context_line":""},{"line_number":426,"context_line":"    print os.path.join(logserver_prefix, swift_destination_prefix,"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_6de7df12","line":423,"in_reply_to":"da86d52c_aac45d60","updated":"2015-02-18 03:52:44.000000000","message":"Done","commit_id":"3d13255dcf23f6a9d91907d2addcbab6748a95fc"},{"author":{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},"change_message_id":"8b1b96fcec16418e3d7bc2ff5a08fc02af5fb7a8","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            sys.stderr.write(\u0027Warning: %s exceeds %d bytes. Skipping...\\n\u0027"},{"line_number":168,"context_line":"                             % (f[\u0027path\u0027], payload[\u0027max_file_size\u0027]))"},{"line_number":169,"context_line":"            continue"},{"line_number":170,"context_line":"        fileinfo \u003d {\u0027file01\u0027: (filename_prefix + f[\u0027relative_name\u0027],"},{"line_number":171,"context_line":"                               f[\u0027path\u0027],"},{"line_number":172,"context_line":"                               get_file_mime(f[\u0027path\u0027]))}"},{"line_number":173,"context_line":"        filejob \u003d (url, payload, fileinfo)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_f346a220","line":170,"updated":"2015-02-22 15:36:56.000000000","message":"It doesnt hurt as-is, but seems like we could just get rid of the containing dict here?","commit_id":"b0546d7c0547dbd3be41d2c07bcc1aee78db6686"},{"author":{"_account_id":10035,"name":"greghaynes","email":"greg@greghaynes.net","username":"greghaynes"},"change_message_id":"cbd74a303c8fd0abf87f3ac7d2148362716eb482","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            sys.stderr.write(\u0027Warning: %s exceeds %d bytes. Skipping...\\n\u0027"},{"line_number":168,"context_line":"                             % (f[\u0027path\u0027], payload[\u0027max_file_size\u0027]))"},{"line_number":169,"context_line":"            continue"},{"line_number":170,"context_line":"        fileinfo \u003d {\u0027file01\u0027: (filename_prefix + f[\u0027relative_name\u0027],"},{"line_number":171,"context_line":"                               f[\u0027path\u0027],"},{"line_number":172,"context_line":"                               get_file_mime(f[\u0027path\u0027]))}"},{"line_number":173,"context_line":"        filejob \u003d (url, payload, fileinfo)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_b91bd9c8","line":170,"in_reply_to":"ba7be1f8_770617d0","updated":"2015-02-24 19:08:56.000000000","message":"Ah, makes sense.","commit_id":"b0546d7c0547dbd3be41d2c07bcc1aee78db6686"},{"author":{"_account_id":7069,"name":"Joshua Hesketh","email":"josh@nitrotech.org","username":"jhesketh"},"change_message_id":"72f28a52aba2f7e6e5e3b156ea2ecffbbd572ef0","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            sys.stderr.write(\u0027Warning: %s exceeds %d bytes. Skipping...\\n\u0027"},{"line_number":168,"context_line":"                             % (f[\u0027path\u0027], payload[\u0027max_file_size\u0027]))"},{"line_number":169,"context_line":"            continue"},{"line_number":170,"context_line":"        fileinfo \u003d {\u0027file01\u0027: (filename_prefix + f[\u0027relative_name\u0027],"},{"line_number":171,"context_line":"                               f[\u0027path\u0027],"},{"line_number":172,"context_line":"                               get_file_mime(f[\u0027path\u0027]))}"},{"line_number":173,"context_line":"        filejob \u003d (url, payload, fileinfo)"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_770617d0","line":170,"in_reply_to":"ba7be1f8_f346a220","updated":"2015-02-23 05:05:11.000000000","message":"The PostThread could take multiple files in one submit as per the formpost api. This gives us the flexibility of doing a mixture of multiple files in one post and multiple threads in the future if we want.","commit_id":"b0546d7c0547dbd3be41d2c07bcc1aee78db6686"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"aa057cd09f2d5f2c18613028d951e83e10ada344","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        files \u003d {}"},{"line_number":310,"context_line":"        for key in fileinfo.keys():"},{"line_number":311,"context_line":"            files[key] \u003d (fileinfo[key][0],"},{"line_number":312,"context_line":"                          open(fileinfo[key][1], \u0027rb\u0027),"},{"line_number":313,"context_line":"                          fileinfo[key][2])"},{"line_number":314,"context_line":"        requests.post(url, data\u003dpayload, files\u003dfiles)"},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_09451042","line":312,"updated":"2015-02-26 17:32:16.000000000","message":"Ya we can add another except block to the try on line 318.","commit_id":"b0546d7c0547dbd3be41d2c07bcc1aee78db6686"},{"author":{"_account_id":6987,"name":"Khai Do","email":"zaro0508@gmail.com","username":"zaro0508"},"change_message_id":"8f5797deedb3f8fed745b012635be0a340c10f25","unresolved":false,"context_lines":[{"line_number":309,"context_line":"        files \u003d {}"},{"line_number":310,"context_line":"        for key in fileinfo.keys():"},{"line_number":311,"context_line":"            files[key] \u003d (fileinfo[key][0],"},{"line_number":312,"context_line":"                          open(fileinfo[key][1], \u0027rb\u0027),"},{"line_number":313,"context_line":"                          fileinfo[key][2])"},{"line_number":314,"context_line":"        requests.post(url, data\u003dpayload, files\u003dfiles)"},{"line_number":315,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_979be716","line":312,"updated":"2015-02-26 12:31:13.000000000","message":"should this be in a try/catch for possible IOError?","commit_id":"b0546d7c0547dbd3be41d2c07bcc1aee78db6686"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"aa057cd09f2d5f2c18613028d951e83e10ada344","unresolved":false,"context_lines":[{"line_number":325,"context_line":"def swift_form_post(queue, max_threads):"},{"line_number":326,"context_line":"    \"\"\"Spin up thread pool to upload to swift\"\"\""},{"line_number":327,"context_line":"    threads \u003d []"},{"line_number":328,"context_line":"    for x in range(max_file_count):"},{"line_number":329,"context_line":"        t \u003d PostThread(queue)"},{"line_number":330,"context_line":"        threads.append(t)"},{"line_number":331,"context_line":"        t.start()"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_297734a1","line":328,"updated":"2015-02-26 17:32:16.000000000","message":"Good catch. This should indeed be updated.","commit_id":"b0546d7c0547dbd3be41d2c07bcc1aee78db6686"},{"author":{"_account_id":6987,"name":"Khai Do","email":"zaro0508@gmail.com","username":"zaro0508"},"change_message_id":"8f5797deedb3f8fed745b012635be0a340c10f25","unresolved":false,"context_lines":[{"line_number":325,"context_line":"def swift_form_post(queue, max_threads):"},{"line_number":326,"context_line":"    \"\"\"Spin up thread pool to upload to swift\"\"\""},{"line_number":327,"context_line":"    threads \u003d []"},{"line_number":328,"context_line":"    for x in range(max_file_count):"},{"line_number":329,"context_line":"        t \u003d PostThread(queue)"},{"line_number":330,"context_line":"        threads.append(t)"},{"line_number":331,"context_line":"        t.start()"}],"source_content_type":"text/x-python","patch_set":4,"id":"ba7be1f8_1711b751","line":328,"updated":"2015-02-26 12:31:13.000000000","message":"should \u0027max_file_count\u0027 be \u0027max_threads\u0027 instead?","commit_id":"b0546d7c0547dbd3be41d2c07bcc1aee78db6686"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"ae1ac31da1bcce9bce4f9627118d23ec262d6fc9","unresolved":false,"context_lines":[{"line_number":437,"context_line":""},{"line_number":438,"context_line":"    queue \u003d swift_form_post_queue(file_list, swift_url, swift_hmac_body,"},{"line_number":439,"context_line":"                                  swift_signature)"},{"line_number":440,"context_line":"    max_file_count \u003d int(swift_hmac_body.split(\u0027\\n\u0027)[3])"},{"line_number":441,"context_line":"    # Attempt to upload at least one item"},{"line_number":442,"context_line":"    items_to_upload \u003d max(queue.qsize(), 1)"},{"line_number":443,"context_line":"    # Cap number of threads to a reasonable number"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_6f568208","line":440,"updated":"2015-02-26 22:33:53.000000000","message":"Re-using this value is arbitrary, but I think it\u0027s okay; it\u0027s actually a pretty good match.","commit_id":"ad257862ebeecd2454402dda26693035ac827137"}]}
