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. [Celery manual]: http://docs.celeryproject.org/en/latest/userguide/tasks.html#creating-pickleable-exceptions
Loading
Please register or sign in to comment