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