Source code for arrakis.utils.json

#!/usr/bin/env python
"""JSON utilities"""

from __future__ import annotations

import dataclasses
import json

import numpy as np
from astropy.io import fits

from arrakis.utils.fitsutils import head2dict


[docs] class MyEncoder(json.JSONEncoder): """Custom JSON encoder. Parses the data stored in source_dict to JSON without errors. """
[docs] def default(self, obj): # pylint: disable=E0202 if isinstance(obj, np.integer): return int(obj) elif isinstance(obj, np.floating): return float(obj) elif isinstance(obj, complex): return (obj.real, obj.imag) elif isinstance(obj, np.ndarray): return obj.tolist() elif isinstance(obj, fits.Header): return head2dict(obj) elif dataclasses.is_dataclass(obj): return dataclasses.asdict(obj) else: return super().default(obj)