Source code for rt_eqcorrscan.database.client_emulation
"""
Utilities for emulating obspy clients using local data. Relies on obsplus
"""
import logging
from typing import Union
from obspy.clients.fdsn import Client
from obsplus.bank import WaveBank, EventBank, StationBank
Logger = logging.getLogger(__name__)
[docs]class ClientBank(object):
"""
Thin routing wrapper for obsplus Banks to act as a client.
Parameters
----------
wave_bank
WaveBank with seismic data
event_bank
EventBank with event data
station_bank
StationBank with station data. Note that as of 16/07/2019 StationBank
was incomplete
Notes
-----
All attributes can be substituted for different (or the same) client.
"""
def __init__(
self,
wave_bank: Union[Client, WaveBank] = None,
event_bank: Union[Client, EventBank] = None,
station_bank: Union[Client, StationBank] = None,
):
self.wave_bank = wave_bank
self.station_bank = station_bank
self.event_bank = event_bank
self.base_url = "I'm not a real client!"
def get_stations(self, *args, **kwargs):
if self.station_bank is None:
raise NotImplementedError("No station_bank provided")
return self.station_bank.get_stations(*args, **kwargs)
def get_stations_bulk(self, *args, **kwargs):
if self.station_bank is None:
raise NotImplementedError("No station_bank provided")
return self.station_bank.get_stations_bulk(*args, **kwargs)
def get_waveforms(self, *args, **kwargs):
if self.wave_bank is None:
raise NotImplementedError("No wave_bank provided")
return self.wave_bank.get_waveforms(*args, **kwargs)
def get_waveforms_bulk(self, *args, **kwargs):
if self.wave_bank is None:
raise NotImplementedError("No wave_bank provided")
return self.wave_bank.get_waveforms_bulk(*args, **kwargs)
def get_events(self, *args, **kwargs):
if self.event_bank is None:
raise NotImplementedError("No event_bank provided")
return self.event_bank.get_events(*args, **kwargs)
if __name__ == "__main__":
import doctest
doctest.testmod()