Make HTTPError pickleable
According to the Celery manual:
A rarely known Python fact is that exceptions must conform to some simple rules to support being serialized by the pickle module.
Tasks that raise exceptions that aren’t pickleable won’t work properly when Pickle is used as the serializer.
To make sure that your exceptions are pickleable the exception MUST provide the original arguments it was instantiated with in its .args attribute. The simplest way to ensure this is to have the exception call Exception.init.
The class ligo.gracedb.exceptions.HTTPError
does not follow
these rules, so it is not pickleable. Here is a demonstration of
that:
>>> import pickle
>>> from ligo.gracedb.exceptions import HTTPError
>>> pickle.loads(pickle.dumps(HTTPError(404, 'foo', 'bar')))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() missing 2 required positional arguments: 'reason' and 'message'
This patch makes HTTPError
pickleable so that it can be properly
represented in Celery task stack traces.