@@ -28,6 +28,8 @@ def __init__(self, tiger, func=None, args=None, kwargs=None, queue=None,
2828 self ._state = _state
2929 self ._ts = _ts
3030 self ._executions = _executions or []
31+ self .json_encoder = self .tiger .config .get ('JSON_ENCODER' )
32+ self .json_decoder = self .tiger .config .get ('JSON_DECODER' )
3133
3234 # Internal initialization based on raw data.
3335 if _data is not None :
@@ -57,7 +59,7 @@ def __init__(self, tiger, func=None, args=None, kwargs=None, queue=None,
5759 retry_method = getattr (func , '_task_retry_method' , None )
5860
5961 if unique :
60- task_id = gen_unique_id (serialized_name , args , kwargs )
62+ task_id = gen_unique_id (serialized_name , args , kwargs , cls = self . json_encoder )
6163 else :
6264 task_id = gen_id ()
6365
@@ -280,7 +282,7 @@ def delay(self, when=None):
280282
281283 # When using ALWAYS_EAGER, make sure we have serialized the task to
282284 # ensure there are no serialization errors.
283- serialized_task = json .dumps (self ._data )
285+ serialized_task = json .dumps (self ._data , cls = self . json_encoder )
284286
285287 if tiger .config ['ALWAYS_EAGER' ] and state == QUEUED :
286288 return self .execute ()
@@ -341,8 +343,9 @@ def from_id(self, tiger, queue, state, task_id, load_executions=0):
341343 serialized_executions = []
342344 # XXX: No timestamp for now
343345 if serialized_data :
344- data = json .loads (serialized_data )
345- executions = [json .loads (e ) for e in serialized_executions if e ]
346+ json_decoder = tiger .config .get ('JSON_DECODER' )
347+ data = json .loads (serialized_data , cls = json_decoder )
348+ executions = [json .loads (e , cls = json_decoder ) for e in serialized_executions if e ]
346349 return Task (tiger , queue = queue , _data = data , _state = state ,
347350 _executions = executions )
348351 else :
@@ -370,6 +373,8 @@ def tasks_from_queue(self, tiger, queue, state, skip=0, limit=1000,
370373
371374 tasks = []
372375
376+ json_decoder = tiger .config .get ('JSON_DECODER' )
377+
373378 if items :
374379 tss = [datetime .datetime .utcfromtimestamp (item [1 ]) for item in items ]
375380 if load_executions :
@@ -380,8 +385,8 @@ def tasks_from_queue(self, tiger, queue, state, skip=0, limit=1000,
380385 results = pipeline .execute ()
381386
382387 for serialized_data , serialized_executions , ts in zip (results [0 ], results [1 :], tss ):
383- data = json .loads (serialized_data )
384- executions = [json .loads (e ) for e in serialized_executions if e ]
388+ data = json .loads (serialized_data , cls = json_decoder )
389+ executions = [json .loads (e , cls = json_decoder ) for e in serialized_executions if e ]
385390
386391 task = Task (tiger , queue = queue , _data = data , _state = state ,
387392 _ts = ts , _executions = executions )
@@ -390,7 +395,7 @@ def tasks_from_queue(self, tiger, queue, state, skip=0, limit=1000,
390395 else :
391396 data = tiger .connection .mget ([tiger ._key ('task' , item [0 ]) for item in items ])
392397 for serialized_data , ts in zip (data , tss ):
393- data = json .loads (serialized_data )
398+ data = json .loads (serialized_data , cls = json_decoder )
394399 task = Task (tiger , queue = queue , _data = data , _state = state ,
395400 _ts = ts )
396401 tasks .append (task )
0 commit comments