Here's another retry abstraction that in some ways is more general (decide whether to keep trying some other way, or sleep a bit before the next try, etc.): https://github.com/darius/sketchbook/blob/master/misc/retryi...
A couple things look wrong in the OP's last snippet: shouldn't
ignore_small = ignore(ImageTooSmall)
be ignore_small = lambda call: ignore(call, ImageTooSmall)
and similarly for the definition of http_retry?