)]}'
{"bin/glance":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"82979482a711146c43af8fcddc82471cf2dffd8c","unresolved":false,"context_lines":[{"line_number":753,"context_line":"    if not options.is_silent_upload:"},{"line_number":754,"context_line":"        return glance_client.ProgressClient(host\u003doptions.host,"},{"line_number":755,"context_line":"                                            port\u003doptions.port,"},{"line_number":756,"context_line":"                                            use_ssl\u003duse_ssl,"},{"line_number":757,"context_line":"                                            auth_tok\u003doptions.auth_token,"},{"line_number":758,"context_line":"                                            creds\u003dcreds)"},{"line_number":759,"context_line":"    else:"}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAEn%2F%2F7As%3D","line":756,"updated":"2012-02-14 15:12:45.000000000","message":"Did you mean to change:\n\n                                auth_tok\u003doptions.auth_token or \\\n                                        os.getenv(\u0027OS_TOKEN\u0027),\n\nto:\n\n                                auth_tok\u003doptions.auth_token,\n\nor did you simply collide with this recent commit?\n\nhttps://github.com/openstack/glance/commit/8df4d1df","commit_id":"20b59cb88bc299021a3267ef155cad60ee42f191"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"82979482a711146c43af8fcddc82471cf2dffd8c","unresolved":false,"context_lines":[{"line_number":760,"context_line":"        return glance_client.Client(host\u003doptions.host,"},{"line_number":761,"context_line":"                                    port\u003doptions.port,"},{"line_number":762,"context_line":"                                    use_ssl\u003duse_ssl,"},{"line_number":763,"context_line":"                                    auth_tok\u003doptions.auth_token,"},{"line_number":764,"context_line":"                                    creds\u003dcreds)"},{"line_number":765,"context_line":""},{"line_number":766,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":4,"id":"AAAAEn%2F%2F7Ao%3D","line":763,"updated":"2012-02-14 15:12:45.000000000","message":"Same comment as above.\n\nAlso to avoid duplication of the long parameter list, the return could be rationalized a bit with something like:\n\n  client \u003d glance.client.ProgressClient if option.is_silent_upload else glance.client.Client\n\n  return client(host\u003doptions.host,\n                port\u003doptions.port,\n                ....)","commit_id":"20b59cb88bc299021a3267ef155cad60ee42f191"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c5c2ce6a9b1c0b51d81b697419d3c6b1f0a532f9","unresolved":false,"context_lines":[{"line_number":750,"context_line":"        creds[\u0027auth_url\u0027] is not None and"},{"line_number":751,"context_line":"        creds[\u0027auth_url\u0027].find(\u0027https\u0027) !\u003d -1))"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"    client \u003d glance_client.ProgressClient if not options.is_silent_upload \\"},{"line_number":754,"context_line":"                                        else glance_client.Client"},{"line_number":755,"context_line":""},{"line_number":756,"context_line":"    return client(host\u003doptions.host,"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"AAAAEn%2F%2F5%2BM%3D","line":753,"updated":"2012-02-16 16:03:58.000000000","message":"I would like to see the backslash removed; it\u0027s unneeded if you surround this expression in parentheses.","commit_id":"c9ee82c6292ba91c035f649af05da7662d1709d9"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c5c2ce6a9b1c0b51d81b697419d3c6b1f0a532f9","unresolved":false,"context_lines":[{"line_number":756,"context_line":"    return client(host\u003doptions.host,"},{"line_number":757,"context_line":"                port\u003doptions.port,"},{"line_number":758,"context_line":"                use_ssl\u003duse_ssl,"},{"line_number":759,"context_line":"                auth_tok\u003doptions.auth_token or \\"},{"line_number":760,"context_line":"                os.getenv(\u0027OS_TOKEN\u0027),"},{"line_number":761,"context_line":"                creds\u003dcreds,"},{"line_number":762,"context_line":"                insecure\u003doptions.insecure)"}],"source_content_type":"application/octet-stream","patch_set":8,"id":"AAAAEn%2F%2F5%2BI%3D","line":759,"updated":"2012-02-16 16:03:58.000000000","message":"This backslash is unnecessary and should go away.","commit_id":"c9ee82c6292ba91c035f649af05da7662d1709d9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a154fabd27d3220b0a5800b9054bc40a75ae8b13","unresolved":false,"context_lines":[{"line_number":781,"context_line":""},{"line_number":782,"context_line":"    :param parser: The option parser"},{"line_number":783,"context_line":"    \"\"\""},{"line_number":784,"context_line":"    parser.add_option(\u0027--silent_upload\u0027, default\u003dFalse, action\u003d\"store_true\","},{"line_number":785,"context_line":"                      dest\u003d\"is_silent_upload\","},{"line_number":786,"context_line":"                      help\u003d\"disable progress bar animation and information \""},{"line_number":787,"context_line":"                      \"during upload\")"}],"source_content_type":"application/octet-stream","patch_set":10,"id":"AAAAEn%2F%2F3wU%3D","line":784,"updated":"2012-02-22 14:21:23.000000000","message":"Please use --silent-upload instead of --silent_upload to be consistent with other option names (we use underscores for field names, dashes for option names)","commit_id":"6c41520519f36e9ec8f1c9b5d0d08feec136d70f"}],"glance/client.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7bae63585675a838954dc0f5ea50bb89ba8081b5","unresolved":false,"context_lines":[{"line_number":346,"context_line":"        try:"},{"line_number":347,"context_line":"            transfer_info \u003d {\u0027so_far\u0027: 0L,"},{"line_number":348,"context_line":"                            \u0027size\u0027: long(headers[\u0027x-image-meta-size\u0027])"},{"line_number":349,"context_line":"                        }"},{"line_number":350,"context_line":"            pg \u003d animation.UploadProgressStatus(transfer_info)"},{"line_number":351,"context_line":"            sys.stdout.write(\"uploading image\\n\")"},{"line_number":352,"context_line":"            pg.start()"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2F48%3D","line":349,"updated":"2012-02-02 15:32:02.000000000","message":"Tiny style nit... please format the above like so:\n\n transfer_info \u003d {\n     \u0027so_far\u0027: 0L,\n     \u0027size\u0027: long(headers[\u0027x-image-meta-size\u0027])\n }","commit_id":"ad9cc5314cec438f56e9559e0873dca8b9fdb443"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ac2a5bac51070ef57784d20391da76282124e4d9","unresolved":false,"context_lines":[{"line_number":360,"context_line":"            conn.send(\u00270\\r\\n\\r\\n\u0027)"},{"line_number":361,"context_line":"            pg.join()"},{"line_number":362,"context_line":"        except:"},{"line_number":363,"context_line":"            super(V1Client, self).send_chunked_request(conn, body, headers)"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"Client \u003d V1Client"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAEn%2F%2F%2FLc%3D","line":363,"updated":"2012-02-03 11:27:56.000000000","message":"A few thoughts about this approach.\n\n1. I don\u0027t think calling send_chunked_response() on the super-class is neccessarily the best *generic* exception handling strategy, as the exception could have beeen raised from the connection send or the body iteration. In that case there wouldn\u0027t be much point in the super-class attempting to continue sending to a compromised connection.\n\n\n2. There\u0027s a different style of body iteration used in the BaseClient and ProgressClient.send_chunked_request():\n\n        for chunk in iter:\n            conn.send(...)\n\nversus:\n\n            chunk \u003d body.read(...)\n            while chunk:\n                conn.send(...)\n                chunk \u003d body.read(...)\n\nshouldn\u0027t the approach be made consistent? The for loop sytle seems more natural to me. This would require the\n\n        iter \u003d body if _iterable(body) else ImageBodyIterator(body)\n\nlogic to either be present in both super-class and sub-class implementations or be done before the method is called.\n\n\n3. Overall there\u0027s a bit too much code duplication going on here, in the sense that the _iterable() helper is repeated, as are the guts of the chunking loop logic. Would it be possible instead to keep the chunking logic \u0026 connection send centralized in BaseClient.send_chunked_request()  and just use a sub-class of ImageBodyIterator when the progress-bar is enabled? Then ProgressImageBodyIterator.__iter__() could add the *previous* chunk size to transfer_info[\u0027so_far\u0027] before reading the current chunk. So the only specialized behaviour when progress reporting is enabled would be to ensure that the correct form of body iterator is created (either from the get-go, or wrapping another iterator type).","commit_id":"462eafcd0d1aa12a4996637a38b0deb43e54be82"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"73d4e389e496f41d58d33d322b5da79ad7d86419","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        sys.stdout.write(\"uploading image \\\"%s\\\"\\n\" % \\"},{"line_number":375,"context_line":"                                    headers[\u0027x-image-meta-name\u0027] \\"},{"line_number":376,"context_line":"                                    if \u0027x-image-meta-name\u0027 in headers.keys() \\"},{"line_number":377,"context_line":"                                    else \" \")"},{"line_number":378,"context_line":"        pg.start()"},{"line_number":379,"context_line":"        return transfer_info"},{"line_number":380,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAEn%2F%2F6Zs%3D","line":377,"updated":"2012-02-15 16:45:40.000000000","message":"This would be clearer as simply:\n  \n  sys.stdout.write(\u0027uploading image \"%s\"\\n\u0027 % headers.get(\u0027x-meta-image-name\u0027, \u0027\u0027))","commit_id":"f7a209d509aa3fb88552483f45578e9d71d07e97"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"8c7508d273b171c7ebd4db6ca38ec0f4608696c9","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        pg \u003d animation.UploadProgressStatus(transfer_info)"},{"line_number":376,"context_line":"        if transfer_info[\u0027size\u0027] \u003d\u003d 0L:"},{"line_number":377,"context_line":"            sys.stdout.write(\"!!! the progressbar doesn\u0027t show-up because \" + \\"},{"line_number":378,"context_line":"            \"the headers[x-meta-size] is zero or missing !!!\\n\")"},{"line_number":379,"context_line":"        sys.stdout.write(\"uploading image \\\"%s\\\"\\n\" %"},{"line_number":380,"context_line":"                                    headers.get(\u0027x-image-meta-name\u0027, \u0027\u0027))"},{"line_number":381,"context_line":"        pg.start()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAEn%2F%2F6Bc%3D","line":378,"updated":"2012-02-16 10:45:22.000000000","message":"Note for the future ...\n\nIf and when the copy-from support (https://review.openstack.org/#change,4096) is merged, there will be a common enough case where the size is not set, yet the upload is still blocking.\n\nSo we\u0027ll probably want to polish up that error message a bit, so that it gives an indication if the \u0027x-meta-image-copy-from\u0027 header is set.\n\nAlso the leading and trailing exclamation points in the message could probably be dropped.","commit_id":"c9ee82c6292ba91c035f649af05da7662d1709d9"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c5c2ce6a9b1c0b51d81b697419d3c6b1f0a532f9","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        pg \u003d animation.UploadProgressStatus(transfer_info)"},{"line_number":376,"context_line":"        if transfer_info[\u0027size\u0027] \u003d\u003d 0L:"},{"line_number":377,"context_line":"            sys.stdout.write(\"!!! the progressbar doesn\u0027t show-up because \" + \\"},{"line_number":378,"context_line":"            \"the headers[x-meta-size] is zero or missing !!!\\n\")"},{"line_number":379,"context_line":"        sys.stdout.write(\"uploading image \\\"%s\\\"\\n\" %"},{"line_number":380,"context_line":"                                    headers.get(\u0027x-image-meta-name\u0027, \u0027\u0027))"},{"line_number":381,"context_line":"        pg.start()"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAEn%2F%2F5%2BE%3D","line":378,"in_reply_to":"AAAAEn%2F%2F6Bc%3D","updated":"2012-02-16 16:03:58.000000000","message":"I agree with dropping the exclamation points.  Also, the \u0027\\\u0027 and the \u0027+\u0027 are both unnecessary here and should be removed.","commit_id":"c9ee82c6292ba91c035f649af05da7662d1709d9"},{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c5c2ce6a9b1c0b51d81b697419d3c6b1f0a532f9","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        if transfer_info[\u0027size\u0027] \u003d\u003d 0L:"},{"line_number":377,"context_line":"            sys.stdout.write(\"!!! the progressbar doesn\u0027t show-up because \" + \\"},{"line_number":378,"context_line":"            \"the headers[x-meta-size] is zero or missing !!!\\n\")"},{"line_number":379,"context_line":"        sys.stdout.write(\"uploading image \\\"%s\\\"\\n\" %"},{"line_number":380,"context_line":"                                    headers.get(\u0027x-image-meta-name\u0027, \u0027\u0027))"},{"line_number":381,"context_line":"        pg.start()"},{"line_number":382,"context_line":"        return transfer_info"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAEn%2F%2F5%2BA%3D","line":379,"updated":"2012-02-16 16:03:58.000000000","message":"To avoid having to use \u0027\\\"\u0027, you should just wrap this string in single quotes, i.e.:\n\n    sys.stdout.write(\u0027Uploading image \"%s\"\\n\u0027 %\n                     headers.get(\u0027x-image-meta-name\u0027, \u0027\u0027))","commit_id":"c9ee82c6292ba91c035f649af05da7662d1709d9"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a154fabd27d3220b0a5800b9054bc40a75ae8b13","unresolved":false,"context_lines":[{"line_number":365,"context_line":"            return ProgressIteratorWrapper(wrapped,"},{"line_number":366,"context_line":"                                        self.start_animation(headers))"},{"line_number":367,"context_line":"        except (httplib.HTTPResponse, socket.error):"},{"line_number":368,"context_line":"            pass"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"    def start_animation(self, headers):"},{"line_number":371,"context_line":"        transfer_info \u003d {"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAEn%2F%2F3w0%3D","line":368,"updated":"2012-02-22 14:21:23.000000000","message":"Is this the appropriate action here? Should we not be raising these exceptions?","commit_id":"6c41520519f36e9ec8f1c9b5d0d08feec136d70f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a154fabd27d3220b0a5800b9054bc40a75ae8b13","unresolved":false,"context_lines":[{"line_number":374,"context_line":"        }"},{"line_number":375,"context_line":"        pg \u003d animation.UploadProgressStatus(transfer_info)"},{"line_number":376,"context_line":"        if transfer_info[\u0027size\u0027] \u003d\u003d 0L:"},{"line_number":377,"context_line":"            sys.stdout.write(\"the progressbar doesn\u0027t show-up because \""},{"line_number":378,"context_line":"            \"the headers[x-meta-size] is zero or missing\\n\")"},{"line_number":379,"context_line":"        sys.stdout.write(\"uploading image \u0027%s\u0027\\n\" %"},{"line_number":380,"context_line":"                                    headers.get(\u0027x-image-meta-name\u0027, \u0027\u0027))"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAEn%2F%2F3w8%3D","line":377,"updated":"2012-02-22 14:21:23.000000000","message":"Please capitalize The. Also, replace \"show-up\" with \"appear\"","commit_id":"6c41520519f36e9ec8f1c9b5d0d08feec136d70f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a154fabd27d3220b0a5800b9054bc40a75ae8b13","unresolved":false,"context_lines":[{"line_number":375,"context_line":"        pg \u003d animation.UploadProgressStatus(transfer_info)"},{"line_number":376,"context_line":"        if transfer_info[\u0027size\u0027] \u003d\u003d 0L:"},{"line_number":377,"context_line":"            sys.stdout.write(\"the progressbar doesn\u0027t show-up because \""},{"line_number":378,"context_line":"            \"the headers[x-meta-size] is zero or missing\\n\")"},{"line_number":379,"context_line":"        sys.stdout.write(\"uploading image \u0027%s\u0027\\n\" %"},{"line_number":380,"context_line":"                                    headers.get(\u0027x-image-meta-name\u0027, \u0027\u0027))"},{"line_number":381,"context_line":"        pg.start()"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAEn%2F%2F3w4%3D","line":378,"updated":"2012-02-22 14:21:23.000000000","message":"Please indent this string to align with the first part of the string... otherwise, it\u0027s difficult to tell this is all a single call","commit_id":"6c41520519f36e9ec8f1c9b5d0d08feec136d70f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a154fabd27d3220b0a5800b9054bc40a75ae8b13","unresolved":false,"context_lines":[{"line_number":376,"context_line":"        if transfer_info[\u0027size\u0027] \u003d\u003d 0L:"},{"line_number":377,"context_line":"            sys.stdout.write(\"the progressbar doesn\u0027t show-up because \""},{"line_number":378,"context_line":"            \"the headers[x-meta-size] is zero or missing\\n\")"},{"line_number":379,"context_line":"        sys.stdout.write(\"uploading image \u0027%s\u0027\\n\" %"},{"line_number":380,"context_line":"                                    headers.get(\u0027x-image-meta-name\u0027, \u0027\u0027))"},{"line_number":381,"context_line":"        pg.start()"},{"line_number":382,"context_line":"        return transfer_info"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAEn%2F%2F3xA%3D","line":379,"updated":"2012-02-22 14:21:23.000000000","message":"Please capitalize Uploading :)","commit_id":"6c41520519f36e9ec8f1c9b5d0d08feec136d70f"}],"glance/common/animation.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7bae63585675a838954dc0f5ea50bb89ba8081b5","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# vim: tabstop\u003d4 shiftwidth\u003d4 softtabstop\u003d4"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"# Copyright 2011 OpenStack LLC."},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2F44%3D","line":3,"updated":"2012-02-02 15:32:02.000000000","message":"s/2011/2012 ;)","commit_id":"ad9cc5314cec438f56e9559e0873dca8b9fdb443"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a154fabd27d3220b0a5800b9054bc40a75ae8b13","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                                    # considered as stalled."},{"line_number":41,"context_line":"    REFRESH_STATUS_INTERVAL \u003d 0.1   # time interval to refresh screen"},{"line_number":42,"context_line":"    MIN_SAMPLING_INTERVAL \u003d 0.15    # Minimum sampling time for data"},{"line_number":43,"context_line":"    CALC_ETA_WITH_AVE_RATE \u003d True   # calc eta with average rate"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"    def __init__(self, transfer_info):"},{"line_number":46,"context_line":"        self.current_size \u003d 0L"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAEn%2F%2F3ww%3D","line":43,"updated":"2012-02-22 14:21:23.000000000","message":"Tiny nit... please change AVE to AVG. The abbreviation for average is AVG while the abbreviation for avenue is AVE :)","commit_id":"6c41520519f36e9ec8f1c9b5d0d08feec136d70f"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a154fabd27d3220b0a5800b9054bc40a75ae8b13","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.last_bytes +\u003d transferred_bytes"},{"line_number":79,"context_line":"        self.current_size +\u003d transferred_bytes"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"        if (self.elapsed_time \u003c self.MIN_SAMPLING_INTERVAL):"},{"line_number":82,"context_line":"            return False"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        if transferred_bytes \u003d\u003d 0:"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAEn%2F%2F3ws%3D","line":81,"updated":"2012-02-22 14:21:23.000000000","message":"Please remove the parentheses in the if statement above.","commit_id":"6c41520519f36e9ec8f1c9b5d0d08feec136d70f"}],"glance/common/client.py":[{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"82979482a711146c43af8fcddc82471cf2dffd8c","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            def __init__(self, len):"},{"line_number":126,"context_line":"                self.len \u003d len"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"            def __len__(self):"},{"line_number":129,"context_line":"                return self.len"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        while self.sending:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAEn%2F%2F7Ak%3D","line":128,"updated":"2012-02-14 15:12:45.000000000","message":"Good catch! My bad.","commit_id":"20b59cb88bc299021a3267ef155cad60ee42f191"}],"glance/common/utils.py":[{"author":{"_account_id":679,"name":"Kevin L. Mitchell","email":"klmitch@mit.edu","username":"klmitch"},"change_message_id":"c5c2ce6a9b1c0b51d81b697419d3c6b1f0a532f9","unresolved":false,"context_lines":[{"line_number":318,"context_line":"            import struct"},{"line_number":319,"context_line":"            (bufx, bufy, curx, cury, wattr,"},{"line_number":320,"context_line":"            left, top, right, bottom, maxx, maxy) \\"},{"line_number":321,"context_line":"            \u003d struct.unpack(\"hhhhHhhhhhh\", csbi.raw)"},{"line_number":322,"context_line":"            height \u003d bottom - top + 1"},{"line_number":323,"context_line":"            width \u003d right - left + 1"},{"line_number":324,"context_line":"            return (height, width)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAEn%2F%2F598%3D","line":321,"updated":"2012-02-16 16:03:58.000000000","message":"We really need to figure out a way to get rid of this backslash.  Something like:\n\n    tmp \u003d struct.unpack(\u0027hhhhHhhhhhh\", csbi.raw)\n    (bufx, bufy, curx, cury, wattr, left, top, right, bottom,\n     maxx, maxy) \u003d tmp","commit_id":"c9ee82c6292ba91c035f649af05da7662d1709d9"}],"glance/tests/functional/test_bin_glance.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"7bae63585675a838954dc0f5ea50bb89ba8081b5","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            exitcode, out, err \u003d execute(cmd)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"        self.assertEqual(0, exitcode)"},{"line_number":162,"context_line":"        self.assertTrue(out.strip().startswith(\u0027uploading image\u0027))"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"        # 2. Verify image added as public image"},{"line_number":165,"context_line":"        cmd \u003d \"bin/glance --port\u003d%d index\" % api_port"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAEn%2F%2F%2F4s%3D","line":162,"updated":"2012-02-02 15:32:02.000000000","message":"Can we also verify that the Added new image with ID: also appears?","commit_id":"ad9cc5314cec438f56e9559e0873dca8b9fdb443"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"ac2a5bac51070ef57784d20391da76282124e4d9","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        self.assertEqual(0, exitcode)"},{"line_number":162,"context_line":"        msg \u003d out.split(\"\\n\")"},{"line_number":163,"context_line":"        self.assertTrue(msg[0].startswith(\u0027uploading image\u0027))"},{"line_number":164,"context_line":"        self.assertTrue(msg[1].startswith(\u0027Added new image with ID:\u0027))"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"        # 2. Verify image added as public image"},{"line_number":167,"context_line":"        cmd \u003d \"bin/glance --port\u003d%d index\" % api_port"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAEn%2F%2F%2FLQ%3D","line":164,"updated":"2012-02-03 11:27:56.000000000","message":"Another approach to testing this would be to use a fake HTTP backend store, similar to that used in BaseCacheMiddlewareTest.test_cache_remote_image().\n\nOnly in your case, you could insert sleeps in the RequestHandler.do_POST() so as to give a predictable image chunk upload cadence. That would allow you to make assertions about the expected progress \u0026 ETA being reported. Also a particularly long sleep would allow the stalling logic to be excercised.\n\nJust a thought ...","commit_id":"462eafcd0d1aa12a4996637a38b0deb43e54be82"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a154fabd27d3220b0a5800b9054bc40a75ae8b13","unresolved":false,"context_lines":[{"line_number":164,"context_line":""},{"line_number":165,"context_line":"        self.assertEqual(0, exitcode)"},{"line_number":166,"context_line":"        msg \u003d out.split(\"\\n\")"},{"line_number":167,"context_line":"        self.assertTrue(msg[0].startswith(\u0027uploading image\u0027))"},{"line_number":168,"context_line":"        self.assertTrue(msg[1].startswith(\u0027Added new image with ID:\u0027))"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"        # 2. Verify image added as public image"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAEn%2F%2F3wg%3D","line":167,"updated":"2012-02-22 14:21:23.000000000","message":"Will need to capitalize Uploading here :)","commit_id":"6c41520519f36e9ec8f1c9b5d0d08feec136d70f"}],"glance/tests/functional/test_private_images.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"a154fabd27d3220b0a5800b9054bc40a75ae8b13","unresolved":false,"context_lines":[{"line_number":764,"context_line":""},{"line_number":765,"context_line":"        self.assertEqual(0, exitcode)"},{"line_number":766,"context_line":"        msg \u003d out.split(\u0027\\n\u0027)"},{"line_number":767,"context_line":"        image_id \u003d msg[3].strip()[25:]"},{"line_number":768,"context_line":"        # Verify the attributes of the image"},{"line_number":769,"context_line":"        headers \u003d {\u0027X-Auth-Token\u0027: keystone_utils.pattieblack_token}"},{"line_number":770,"context_line":"        path \u003d \"http://%s:%d/v1/images/%s\" % (\"0.0.0.0\", self.api_port,"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAEn%2F%2F3wc%3D","line":767,"updated":"2012-02-22 14:21:23.000000000","message":"Alternately, you could pass the --silent-upload option?","commit_id":"6c41520519f36e9ec8f1c9b5d0d08feec136d70f"}]}
