I agree with Carter that we're missing a lot of negative testing here; any time we make a call to a remote system we should make sure that we handle the cases where the server's slow or unavailable, or if it chokes and returns an internal error. The majority of the logic for the error handling belongs in the canvas_utils.py file, and that's where the errors are being swallowed (which is almost always a bad thing).

The Impediments team have a research spike this sprint to look into how we should fix the canvas_utils interface to clean this up and make errors more transparent, so I'd say to bite the bullet for now and use the method as-is, with the understanding that we'll be going back to fix it in a few weeks anyway once we have that new interface in place.