# Path: botoflow/data_converter/abstract_data_converter.py
# class AbstractDataConverter(object):
#     """
#     Subclasses of this data converter are used by the framework to
#     serialize/deserialize method parameters that need to be sent over the wire.
#     """
#     __metaclass__ = abc.ABCMeta
# 
#     @abc.abstractmethod
#     def dumps(self, obj):
#         """
#         Should return serialized string data
#         """
#         raise NotImplementedError
# 
#     @abc.abstractmethod
#     def loads(self, data):
#         """
#         Should return deserialized string data
#         """
#         raise NotImplementedError


import base64
import copy
import json
import datetime
import six
from decimal import Decimal
    from collections import OrderedDict
from .abstract_data_converter import AbstractDataConverter
            raise

    # don't need an object at all
    if '__class' in dct:
        return cls
    elif '__namedtuple' in dct:
        return cls(*dct['__namedtuple'][1])

    obj = cls.__new__(cls)  # recreate an instance without calling __init__

    if hasattr(obj, '__setstate__'):
        obj.__setstate__(dct['__obj'][1])

    elif '__listclass' in dct:
        obj.extend(dct['__listclass'][1])
        obj.__dict__ = dct['__dict__']
    elif '__dictclass' in dct:
        obj.update(dct['__dictclass'][1])
        obj.__dict__ = dct['__dict__']
    else:
        obj.__dict__ = dct['__obj'][1]

    if '__exc' in dct:
        obj.args = dct['__exc'][0]
        if dct['__exc'][1] is not None:
            obj.message = dct['__exc'][1]

    return obj



# Path: botoflow/data_converter/abstract_data_converter.py
# class AbstractDataConverter(object):
#     """
#     Subclasses of this data converter are used by the framework to
#     serialize/deserialize method parameters that need to be sent over the wire.
#     """
#     __metaclass__ = abc.ABCMeta
# 
#     @abc.abstractmethod
#     def dumps(self, obj):
#         """
#         Should return serialized string data
#         """
#         raise NotImplementedError
# 
#     @abc.abstractmethod
#     def loads(self, data):
#         """
#         Should return deserialized string data
#         """
#         raise NotImplementedError


# Path: botoflow/data_converter/json_data_converter.py
import base64
import copy
import json
import datetime
import six
from decimal import Decimal
    from collections import OrderedDict
from .abstract_data_converter import AbstractDataConverter

            raise

    # don't need an object at all
    if '__class' in dct:
        return cls
    elif '__namedtuple' in dct:
        return cls(*dct['__namedtuple'][1])

    obj = cls.__new__(cls)  # recreate an instance without calling __init__

    if hasattr(obj, '__setstate__'):
        obj.__setstate__(dct['__obj'][1])

    elif '__listclass' in dct:
        obj.extend(dct['__listclass'][1])
        obj.__dict__ = dct['__dict__']
    elif '__dictclass' in dct:
        obj.update(dct['__dictclass'][1])
        obj.__dict__ = dct['__dict__']
    else:
        obj.__dict__ = dct['__obj'][1]

    if '__exc' in dct:
        obj.args = dct['__exc'][0]
        if dct['__exc'][1] is not None:
            obj.message = dct['__exc'][1]

    return obj



class JSONDataConverter(AbstractDataConverter):