import logging from datetime import datetime from providers.base import BaseProvider, BaseCountyProvider logger = logging.getLogger(__name__) class SimpleCountyJsonProvider(BaseCountyProvider): def fetch(self): url = self.config.get('county_url') state = self.config.get('state_filter') try: resp = self.session.get(url, verify=False) if not resp.ok: return [] data = resp.json() results = [] for boundary_group in data: for item in boundary_group.get('boundaries', []): results.append({ 'outages': item.get('customersOutNow'), 'served': item.get('customersServed'), 'county': item.get('name'), 'state': state, 'company': self.name }) return results except Exception as e: logger.error(f"Error fetching {self.name}: {e}") return [] class SimpleJsonProvider(BaseProvider): def fetch(self): url = self.config.get('url') try: resp = self.session.get(url, verify=False) if not resp.ok: return [] data = resp.json() return [self._normalize(item) for item in data] except Exception as e: logger.error(f"Error fetching {self.name}: {e}") return [] def _normalize(self, item): def safe_parse(ts): if not ts: return None try: return datetime.fromisoformat(ts.replace('Z', '+00:00')) except: return None return { 'incidentid': str(item.get('outageRecID')), 'utility': self.name, 'lat': item.get('outagePoint', {}).get('lat'), 'lon': item.get('outagePoint', {}).get('lng'), 'pointgeom': f"{item.get('outagePoint', {}).get('lat')},{item.get('outagePoint', {}).get('lng')}", 'areageom': None, 'start': safe_parse(item.get('outageStartTime')), 'etr': safe_parse(item.get('outageEndTime')), 'outagen': item.get('customersOutNow'), 'cause': item.get('cause'), 'crew_status': item.get('outageWorkStatus'), 'last_change': safe_parse(item.get('outageModifiedTime')) }