Source code for gmtasks.jsonclass
"""
GearmanWorker and GearmanClient classes that send/receive data in JSON format.
"""
import json
import decimal
import gearman
class _JSONEncoder(json.JSONEncoder):
"""
An override JSON encoder class that recognizes Decimal objects.
"""
def default(self, obj):
if isinstance(obj, decimal.Decimal):
return str(obj)
return super(_JSONEncoder, self).default(obj)
class _JSONDataEncoder(gearman.DataEncoder):
"""
An override Gearman DataEncoder class to send/receive JSON data.
"""
@classmethod
def encode(cls, encodable_object):
return json.dumps(encodable_object, cls=_JSONEncoder)
@classmethod
def decode(cls, decodable_string):
return json.loads(decodable_string)
[docs]class GearmanWorker(gearman.GearmanWorker):
"""
Extend gearman.GearmanWorker with our _JSONDataEncoder
"""
data_encoder = _JSONDataEncoder
def after_poll(self, any_activity):
return True
[docs]class GearmanClient(gearman.GearmanClient):
"""
Extend gearman.GearmanClient with our _JSONDataEncoder
"""
data_encoder = _JSONDataEncoder