Source code for iceprod.core.serialization

"""
Classes supporting dataset serialization.

The interface is as follows::

    class Serialization:
        def dump(config, filename, **kwargs):
            return None
        def dumps(config, **kwargs):
            return string
        def load(filename, **kwargs):
            return config
        def loads(string, **kwargs):
            return config

The kwargs for each function are optional keyword arguments to pass
to the underlying serialization library. Each function is a static method
and can be called like::

    Serialization.dump(config,filename)
"""

import os
try:
    from io import StringIO
except ImportError:
    import StringIO
import logging

from iceprod.core import dataclasses

logger = logging.getLogger('serialization')

[docs]class SerializationError(Exception): """An exception that occurs during serialization.""" def __init__(self, value=''): self.value = value def __str__(self): return self.__repr__() def __repr__(self): if self.value: return 'SerializationError(%r)'%(self.value) else: return 'SerializationError()' def __reduce__(self): return (SerializationError,(self.value,))
[docs]def dict_to_dataclasses(input_dict): """ Convert a dictionary to dataclasses objects. :param input_dict: input dictionary :returns: :class:`iceprod.core.dataclasses.Job` """ ret = dataclasses.Job(input_dict) ret.convert() return ret
import json as _json
[docs]class serialize_json(object): """ Serialize a dataset config to json. """ @staticmethod
[docs] def dump(obj, filename, **kwargs): return _json.dump(obj, open(filename,'w'), **kwargs)
@staticmethod
[docs] def dumps(obj, **kwargs): return _json.dumps(obj, **kwargs)
@staticmethod
[docs] def load(filename, **kwargs): return dict_to_dataclasses(_json.load(open(filename), **kwargs))
@staticmethod
[docs] def loads(obj, **kwargs): return dict_to_dataclasses(_json.loads(obj, **kwargs))