Source code for obsplus.events.json
"""
Module for converting obspy object to json format
"""
import json
from typing import Union, Iterable
import obspy
from obspy.core.event import Event, Catalog
import obsplus.events.schema as event_schema
JSON_SERIALIZER_VERSION = "0.0.0" # increment when serialization changes
# -------------------- events to json functions
def _events_to_model(
catalog: Union[Catalog, Event, Iterable[Event]]
) -> event_schema.Catalog:
"""
Convert ObsPy events to Pydantic models.
"""
if isinstance(catalog, Event): # A single event was passed
catalog = Catalog(events=[catalog])
elif not isinstance(catalog, Catalog): # sequence was passed
catalog = Catalog(events=catalog)
model = event_schema.Catalog.model_validate(catalog, from_attributes=True)
return model
[docs]
def cat_to_json(catalog: Union[Catalog, Event, Iterable[Event]]) -> str:
"""
Convert events (catalog or event) to json string.
"""
model = _events_to_model(catalog)
return model.json()
[docs]
def cat_to_dict(catalog: Union[Catalog, Event, Iterable[Event]]) -> dict:
"""
Convert an event object to a dictionary.
"""
return _events_to_model(catalog).model_dump()
[docs]
def dict_to_cat(cjson: Union[dict, str]) -> Catalog:
"""Convert a dictionary to a catalog"""
if isinstance(cjson, str):
cjson = json.loads(cjson)
return event_schema.Catalog(**cjson).to_obspy()
json_to_cat = dict_to_cat
# ---------------- monkey patch json methods to events
obspy.core.event.Catalog.to_json = cat_to_json