from fractions import Fraction from uuid import UUID import numpy as np from labthings.json import LabThingsJSONEncoder class JSONEncoder(LabThingsJSONEncoder): """ A custom JSON encoder, with type conversions for PiCamera fractions, Numpy integers, and Numpy arrays """ def default(self, o): if isinstance(o, UUID): return str(o) # PiCamera fractions elif isinstance(o, Fraction): return float(o) # Numpy integers elif isinstance(o, np.integer): return int(o) # Numpy arrays elif isinstance(o, np.ndarray): return o.tolist() # UUIDs elif isinstance(o, UUID): return str(o) else: # call base class implementation which takes care of # raising exceptions for unsupported types return LabThingsJSONEncoder.default(self, o)