)]}'
{"shade/__init__.py":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"1ab7c5e25b8b174ae28da403183d0f7d42c03409","unresolved":false,"context_lines":[{"line_number":557,"context_line":"                    status \u003d self.glance_client.tasks.get(task.id)"},{"line_number":558,"context_line":"                except glanceclient.exc.HTTPServiceUnavailable:"},{"line_number":559,"context_line":"                    # Intermittent failure - catch and try again"},{"line_number":560,"context_line":"                    pass"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"                if status.status \u003d\u003d \u0027success\u0027:"},{"line_number":563,"context_line":"                    # TODO: Maybe we should re-get the image here ..."}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_34a3b0b2","line":560,"updated":"2015-02-16 18:58:03.000000000","message":"Do we want \u0027continue\u0027 here instead? Otherwise, status.status may not be an actual thing in the if\u0027s below.","commit_id":"a867c6ce56101ad86513dbc357dcc1cdd6dbbc8a"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"9ed1959ce40d7684e9b75e6aee8a0323337abf5f","unresolved":false,"context_lines":[{"line_number":529,"context_line":"            name\u003dname, is_public\u003dFalse, disk_format\u003ddisk_format,"},{"line_number":530,"context_line":"            container_format\u003dcontainer_format, **image_properties)"},{"line_number":531,"context_line":"        image.update(data\u003dopen(filename, \u0027rb\u0027))"},{"line_number":532,"context_line":"        return self.get_image_dict(image.id)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def _upload_image_v2("},{"line_number":535,"context_line":"            self, name, filename, container, current_image\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_8b7b567a","line":532,"updated":"2015-02-16 19:38:46.000000000","message":"Looks like this will cause a refresh of the image object which might be unnecessary here, but also has the side effect of removing the data you just updated it with via image.update(). Likely not what you wanted.","commit_id":"6ea7ff1081d2f662ba007664cf1798eb5ffa05c0"},{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"7875d2b6375413b665e6e986fe6a756e8b687fe7","unresolved":false,"context_lines":[{"line_number":529,"context_line":"            name\u003dname, is_public\u003dFalse, disk_format\u003ddisk_format,"},{"line_number":530,"context_line":"            container_format\u003dcontainer_format, **image_properties)"},{"line_number":531,"context_line":"        image.update(data\u003dopen(filename, \u0027rb\u0027))"},{"line_number":532,"context_line":"        return self.get_image_dict(image.id)"},{"line_number":533,"context_line":""},{"line_number":534,"context_line":"    def _upload_image_v2("},{"line_number":535,"context_line":"            self, name, filename, container, current_image\u003dNone,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_ab857ad0","line":532,"in_reply_to":"da86d52c_8b7b567a","updated":"2015-02-16 19:50:00.000000000","message":"Ignore this comment. Remote object gets updated, too, and image cache is being used.","commit_id":"6ea7ff1081d2f662ba007664cf1798eb5ffa05c0"},{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"7f35b522346e7116f0f720c3e8ba67303623042c","unresolved":false,"context_lines":[{"line_number":40,"context_line":"OBJECT_MD5_KEY \u003d \u0027x-object-meta-x-shade-md5\u0027"},{"line_number":41,"context_line":"OBJECT_SHA256_KEY \u003d \u0027x-object-meta-x-shade-sha256\u0027"},{"line_number":42,"context_line":"IMAGE_MD5_KEY \u003d \u0027owner_specified.shade.md5\u0027"},{"line_number":43,"context_line":"IMAGE_SHA256_KEY \u003d \u0027owner_specified.shade.sha256\u0027"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":""},{"line_number":46,"context_line":"OBJECT_CONTAINER_ACLS \u003d {"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_117f6718","line":43,"updated":"2015-02-18 00:09:53.000000000","message":"This is the funniest thing I\u0027ve seen in a while.","commit_id":"b6662a91cf7f08886a9b8c97ba9ca4771eb3986e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"923f26e9328bc099c8cc1f50bff50a3372205b01","unresolved":false,"context_lines":[{"line_number":495,"context_line":"            return image"},{"line_number":496,"context_line":"        if getattr(image, \u0027validate\u0027, None):"},{"line_number":497,"context_line":"            return meta.warlock_to_dict(image)"},{"line_number":498,"context_line":"        return meta.obj_to_dict(image)"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    def create_image("},{"line_number":501,"context_line":"            self, name, filename, container\u003d\u0027images\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_45de4bdb","line":498,"updated":"2015-02-18 21:54:00.000000000","message":"It might be slightly more readable to do the above return in an else and add comment sfor why this is going on?","commit_id":"b6662a91cf7f08886a9b8c97ba9ca4771eb3986e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"86b4d7eda9fcf5b4ee402c66a1ce9a781ce5180a","unresolved":false,"context_lines":[{"line_number":495,"context_line":"            return image"},{"line_number":496,"context_line":"        if getattr(image, \u0027validate\u0027, None):"},{"line_number":497,"context_line":"            return meta.warlock_to_dict(image)"},{"line_number":498,"context_line":"        return meta.obj_to_dict(image)"},{"line_number":499,"context_line":""},{"line_number":500,"context_line":"    def create_image("},{"line_number":501,"context_line":"            self, name, filename, container\u003d\u0027images\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_2c5e0613","line":498,"in_reply_to":"da86d52c_45de4bdb","updated":"2015-02-23 15:55:17.000000000","message":"Done","commit_id":"b6662a91cf7f08886a9b8c97ba9ca4771eb3986e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"923f26e9328bc099c8cc1f50bff50a3372205b01","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                name, filename, container,"},{"line_number":519,"context_line":"                current_image\u003dcurrent_image,"},{"line_number":520,"context_line":"                wait\u003dwait, timeout\u003dtimeout, **kwargs)"},{"line_number":521,"context_line":"        else:"},{"line_number":522,"context_line":"            image_kwargs \u003d dict(properties\u003dkwargs)"},{"line_number":523,"context_line":"            if disk_format:"},{"line_number":524,"context_line":"                image_kwargs[\u0027disk_format\u0027] \u003d disk_format"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_65eeef8c","line":521,"updated":"2015-02-18 21:54:00.000000000","message":"Should this be an elif version \u003d\u003d \u00271\u0027? Not sure how worried we are about version 42 falling through here and trying to do direct upload with v1.","commit_id":"b6662a91cf7f08886a9b8c97ba9ca4771eb3986e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"86b4d7eda9fcf5b4ee402c66a1ce9a781ce5180a","unresolved":false,"context_lines":[{"line_number":518,"context_line":"                name, filename, container,"},{"line_number":519,"context_line":"                current_image\u003dcurrent_image,"},{"line_number":520,"context_line":"                wait\u003dwait, timeout\u003dtimeout, **kwargs)"},{"line_number":521,"context_line":"        else:"},{"line_number":522,"context_line":"            image_kwargs \u003d dict(properties\u003dkwargs)"},{"line_number":523,"context_line":"            if disk_format:"},{"line_number":524,"context_line":"                image_kwargs[\u0027disk_format\u0027] \u003d disk_format"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_0c6302dd","line":521,"in_reply_to":"da86d52c_65eeef8c","updated":"2015-02-23 15:55:17.000000000","message":"Done","commit_id":"b6662a91cf7f08886a9b8c97ba9ca4771eb3986e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"eb7e63ed96d901c8181d288190fcfe725b0604c5","unresolved":false,"context_lines":[{"line_number":597,"context_line":"        img_props \u003d {}"},{"line_number":598,"context_line":"        for k, v in properties.iteritems():"},{"line_number":599,"context_line":"            if image.get(k, None) !\u003d v:"},{"line_number":600,"context_line":"                img_props[k] \u003d str(v)"},{"line_number":601,"context_line":"        if not img_props:"},{"line_number":602,"context_line":"            return False"},{"line_number":603,"context_line":"        self.glance_client.images.update(image.id, **img_props)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_a19e02b7","line":600,"updated":"2015-02-25 23:17:24.000000000","message":"Arg I see that now. This is unfortunate but I agree pulling it out into a function likely won\u0027t make it more readable.","commit_id":"b6662a91cf7f08886a9b8c97ba9ca4771eb3986e"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"923f26e9328bc099c8cc1f50bff50a3372205b01","unresolved":false,"context_lines":[{"line_number":597,"context_line":"        img_props \u003d {}"},{"line_number":598,"context_line":"        for k, v in properties.iteritems():"},{"line_number":599,"context_line":"            if image.get(k, None) !\u003d v:"},{"line_number":600,"context_line":"                img_props[k] \u003d str(v)"},{"line_number":601,"context_line":"        if not img_props:"},{"line_number":602,"context_line":"            return False"},{"line_number":603,"context_line":"        self.glance_client.images.update(image.id, **img_props)"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_85f3e371","line":600,"updated":"2015-02-18 21:54:00.000000000","message":"Can we just coerce everything to a string type on line 588 then remove these functions and simply call glance_client.images.update() or image.update above depending on glance version? Would probably make this much simpler code to read.","commit_id":"b6662a91cf7f08886a9b8c97ba9ca4771eb3986e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"86b4d7eda9fcf5b4ee402c66a1ce9a781ce5180a","unresolved":false,"context_lines":[{"line_number":597,"context_line":"        img_props \u003d {}"},{"line_number":598,"context_line":"        for k, v in properties.iteritems():"},{"line_number":599,"context_line":"            if image.get(k, None) !\u003d v:"},{"line_number":600,"context_line":"                img_props[k] \u003d str(v)"},{"line_number":601,"context_line":"        if not img_props:"},{"line_number":602,"context_line":"            return False"},{"line_number":603,"context_line":"        self.glance_client.images.update(image.id, **img_props)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_ec630edb","line":600,"in_reply_to":"da86d52c_85f3e371","updated":"2015-02-23 15:55:17.000000000","message":"It\u0027s not just the string coersion - the location of the target to compare against is also different in v1/v2.  (note it\u0027s image.get in one and image.properties.get in the other. So we _could_ extract this into a function - but I\u0027m not sure how much that would improve readability.","commit_id":"b6662a91cf7f08886a9b8c97ba9ca4771eb3986e"}],"shade/meta.py":[{"author":{"_account_id":3099,"name":"David Shrewsbury","email":"dshrewsb@redhat.com","username":"dshrews"},"change_message_id":"1ab7c5e25b8b174ae28da403183d0f7d42c03409","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    return instance"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"def warlock_to_dict(obj):"},{"line_number":159,"context_line":"    obj_dict \u003d {}"},{"line_number":160,"context_line":"    for key in obj.keys():"},{"line_number":161,"context_line":"        obj_dict[key] \u003d obj[key]"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_b48ec030","line":158,"updated":"2015-02-16 18:58:03.000000000","message":"nit: We should document the wonkiness that is the glance object so that we know why this function is required.","commit_id":"a867c6ce56101ad86513dbc357dcc1cdd6dbbc8a"},{"author":{"_account_id":4146,"name":"Clark Boylan","email":"cboylan@sapwetik.org","username":"cboylan"},"change_message_id":"923f26e9328bc099c8cc1f50bff50a3372205b01","unresolved":false,"context_lines":[{"line_number":162,"context_line":"    obj_dict \u003d {}"},{"line_number":163,"context_line":"    for key in obj.keys():"},{"line_number":164,"context_line":"        obj_dict[key] \u003d obj[key]"},{"line_number":165,"context_line":"    return obj_dict"}],"source_content_type":"text/x-python","patch_set":6,"id":"da86d52c_25e1579b","line":165,"updated":"2015-02-18 21:54:00.000000000","message":"This is special... yay warlock I guess?","commit_id":"b6662a91cf7f08886a9b8c97ba9ca4771eb3986e"},{"author":{"_account_id":2,"name":"Monty Taylor","email":"mordred@inaugust.com","username":"mordred"},"change_message_id":"86b4d7eda9fcf5b4ee402c66a1ce9a781ce5180a","unresolved":false,"context_lines":[{"line_number":162,"context_line":"    obj_dict \u003d {}"},{"line_number":163,"context_line":"    for key in obj.keys():"},{"line_number":164,"context_line":"        obj_dict[key] \u003d obj[key]"},{"line_number":165,"context_line":"    return obj_dict"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_2cb52631","line":165,"in_reply_to":"da86d52c_25e1579b","updated":"2015-02-23 15:55:17.000000000","message":"*headdesk*","commit_id":"b6662a91cf7f08886a9b8c97ba9ca4771eb3986e"}]}
