mirror of
https://git.ianrenton.com/ian/spothole.git
synced 2026-09-21 06:47:42 +00:00
44 lines
1.5 KiB
Python
44 lines
1.5 KiB
Python
from __future__ import annotations
|
|
|
|
import logging
|
|
from datetime import datetime
|
|
from typing import Any
|
|
|
|
import pytz
|
|
|
|
from providers.staticdata.static_data_provider import StaticDataProvider
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class LocalFileStaticDataProvider(StaticDataProvider):
|
|
"""Generic static reference data provider class for providers that fetch their data from a local file on startup."""
|
|
|
|
def __init__(self, name: str, provider_config: dict[str, Any], path: str) -> None:
|
|
super().__init__(name, provider_config)
|
|
self._path = path
|
|
self._stop = False
|
|
|
|
def start(self) -> None:
|
|
logger.debug(f"Loading {self.name} static reference data from file.")
|
|
try:
|
|
ok = self._load_data(self._path)
|
|
if ok:
|
|
self.status = "OK"
|
|
self.last_update_time = datetime.now(pytz.UTC)
|
|
logger.info(f"Updated static reference data for {self.name}")
|
|
else:
|
|
self.status = "Error"
|
|
logger.error(f"Failed to load data for {self.name}")
|
|
except Exception:
|
|
self.status = "Error"
|
|
logger.exception(f"Exception in local file Static Data Provider ({self.name})")
|
|
|
|
def stop(self) -> None:
|
|
self._stop = True
|
|
|
|
def _load_data(self, path: str) -> bool:
|
|
"""Load data from the given file path. Return true if successful, false otherwise."""
|
|
|
|
raise NotImplementedError("Subclasses must implement this method")
|