from __future__ import annotations import json import logging from typing import Any import geopandas from shapely import prepare from core.data_store import DATA_STORE from providers.staticdata.local_file_static_data_provider import ( LocalFileStaticDataProvider, ) logger = logging.getLogger(__name__) class CQZoneData(LocalFileStaticDataProvider): """Static data provider for CQ zone geodata.""" PATH = "datafiles/cqzones.geojson" def __init__(self, provider_config: dict[str, Any]) -> None: super().__init__("CQ Zone Data", provider_config, self.PATH) def _load_data(self, path: str) -> bool: try: with open(path) as f: cq_zone_data = geopandas.GeoDataFrame.from_features(json.load(f)["features"]) for idx in cq_zone_data.index: prepare(cq_zone_data.at[idx, "geometry"]) # Bail out if a stop has been requested, i.e. the program is shutting down - no need to prepare the rest # of the data in this case if self.stop: break DATA_STORE.cq_zone_data = cq_zone_data return True except Exception: logger.exception("Exception when loading CQ zone data.") return False