Skip to content
Snippets Groups Projects
Select Git revision
  • 875432a93e08d35e879c0dfe25566a05a94c6d06
  • master default
  • object
  • develop protected
  • private_algos
  • cuisine
  • SMOTE
  • revert-76c4cca5
  • archive protected
  • no_graphviz
  • 0.0.2
  • 0.0.1
12 results

setup.py

Blame
  • serializer.py 1.63 KiB
    '''
    Created on 6 févr. 2018
    
    @author: arrivault
    '''
    
    import numpy as np
    import json
    
    class Serializer(object):
        '''
        classdocs
        '''
            
        def __serialize(self, data):
            if data is None or isinstance(data, (bool, int, float, str)):
                return data
            if isinstance(data, list):
                return [self.__serialize(val) for val in data]
            if isinstance(data, dict):
                if all(isinstance(k, str) for k in data):
                    return {k: self.__serialize(v) for k, v in data.items()}
                return {"py/dict": [[self.__serialize(k), self.__serialize(v)] for k, v in data.items()]}
            if isinstance(data, tuple):
                return {"py/tuple": [self.__serialize(val) for val in data]}
            if isinstance(data, set):
                return {"py/set": [self.__serialize(val) for val in data]}
            if isinstance(data, np.ndarray):
                return {"py/numpy.ndarray": {
                    "values": data.tolist(),
                    "dtype":  str(data.dtype)}}
            raise TypeError("Type %s not data-serializable" % type(data))
    
        def __restore(self, dct):
            if "py/dict" in dct:
                return dict(dct["py/dict"])
            if "py/tuple" in dct:
                return tuple(dct["py/tuple"])
            if "py/set" in dct:
                return set(dct["py/set"])
            if "py/numpy.ndarray" in dct:
                data = dct["py/numpy.ndarray"]
                return np.array(data["values"], dtype=data["dtype"])
            return dct
        
        def data_to_json(self, data):
            return json.dumps(self.__serialize(data))
    
        def json_to_data(self, s):
            return json.loads(s, object_hook=self.__restore)