fix again
This commit is contained in:
55
providers/simple.py
Normal file
55
providers/simple.py
Normal file
@@ -0,0 +1,55 @@
|
||||
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'))
|
||||
}
|
||||
Reference in New Issue
Block a user