Files
spothole/core/data_providers.py
T

73 lines
2.7 KiB
Python

from core.config import config, create_provider_from_config
class DataProviders:
"""Global object for storing data providers."""
def __init__(self):
self.spot_providers = []
self.alert_providers = []
self.solar_condition_providers = []
self.static_data_providers = []
self.sig_ref_data_providers = []
self.callsign_data_providers = []
def setup(self):
for entry in config["spot-providers"]:
self.spot_providers.append(create_provider_from_config("providers.spot", entry))
for entry in config["alert-providers"]:
self.alert_providers.append(create_provider_from_config("providers.alert", entry))
for entry in config.get("solar-condition-providers", []):
self.solar_condition_providers.append(create_provider_from_config("providers.solarconditions", entry))
for entry in config.get("static-data-providers", []):
self.static_data_providers.append(create_provider_from_config("providers.staticdata", entry))
for entry in config.get("sig-ref-data-providers", []):
self.sig_ref_data_providers.append(create_provider_from_config("providers.sigrefdata", entry))
for entry in config.get("callsign-data-providers", []):
self.callsign_data_providers.append(create_provider_from_config("providers.callsigndata", entry))
def start(self):
# Start data providers before spot/alert providers so the lookup data is there already for incoming spots
for p in self.static_data_providers:
if p.enabled:
p.start()
for p in self.sig_ref_data_providers:
if p.enabled:
p.start()
for p in self.callsign_data_providers:
if p.enabled:
p.start()
for p in self.spot_providers:
if p.enabled:
p.start()
for p in self.alert_providers:
if p.enabled:
p.start()
for p in self.solar_condition_providers:
if p.enabled:
p.start()
def stop(self):
for sp in self.spot_providers:
if sp.enabled:
sp.stop()
for ap in self.alert_providers:
if ap.enabled:
ap.stop()
for scp in self.solar_condition_providers:
if scp.enabled:
scp.stop()
for srdp in self.sig_ref_data_providers:
if srdp.enabled:
srdp.stop()
for sdp in self.static_data_providers:
if sdp.enabled:
sdp.stop()
for cdp in self.callsign_data_providers:
if cdp.enabled:
cdp.stop()
# Global object
DATA_PROVIDERS = DataProviders()