From 639db76723fe82d489f0b61506802331970854bf Mon Sep 17 00:00:00 2001 From: April Date: Sun, 13 Nov 2022 16:08:10 -0700 Subject: [PATCH] TideForecast to asynchronous --- recordGenerators/TideForecast.py | 45 ++++++++++++++++---------------- 1 file changed, 23 insertions(+), 22 deletions(-) diff --git a/recordGenerators/TideForecast.py b/recordGenerators/TideForecast.py index 72d535a..bb69863 100644 --- a/recordGenerators/TideForecast.py +++ b/recordGenerators/TideForecast.py @@ -1,6 +1,4 @@ import shutil -from xmlrpc.client import DateTime -import requests import logging,coloredlogs import datetime from py2Lib import bit @@ -9,6 +7,7 @@ import records.LFRecord as LFR import gzip from os import remove import xml.dom.minidom +import aiohttp, aiofiles l = logging.getLogger(__name__) coloredlogs.install() @@ -22,31 +21,33 @@ for i in MPC.getTideStations(): apiKey = "21d8a80b3d6b444998a80b3d6b1449d3" -def getData(tideStation, geocode): +async def getData(tideStation, geocode): today = datetime.date.today() startDate = today.strftime('%Y%m%d') endDate_unformatted = datetime.datetime.strptime(startDate, '%Y%m%d') + datetime.timedelta(days=5) endDate = endDate_unformatted.strftime('%Y%m%d') + data = "" fetchUrl = f"https://api.weather.com/v1/geocode/{geocode}/forecast/tides.xml?language=en-US&units=e&startDate={startDate}&endDate={endDate}&apiKey={apiKey}" - res = requests.get(fetchUrl) + async with aiohttp.ClientSession() as s: + async with s.get(fetchUrl) as r: + if r.status != 200: + l.error(f"Failed to write TideForecast -- status code {r.status}") + return + + data = await r.text() + - if res.status_code != 200: - l.error("DO NOT REPORT THE ERROR BELOW") - l.error(f"Failed to write TidesForecast record -- Status code {res.status_code}") - return - - data = res.text newData = data[53:-16] i2Doc = f'\n \n {newData}\n {tideStation}\n ' - f = open('./.temp/TidesForecast.i2m', 'a') - f.write(i2Doc) - f.close() + async with aiofiles.open('./.temp/TidesForecast.i2m', 'a') as f: + await f.write(i2Doc) + await f.close() -def makeRecord(): +async def makeRecord(): if len(tideStations) < 1: l.debug("Skipping TidesForecast -- No locations.") return @@ -56,21 +57,21 @@ def makeRecord(): header = '' footer = '' - with open('./.temp/TidesForecast.i2m', 'a') as doc: - doc.write(header) + async with aiofiles.open('./.temp/TidesForecast.i2m', 'a') as doc: + await doc.write(header) for (x, y) in zip(tideStations, geocodes): - getData(x,y) + await getData(x,y) - with open('./.temp/TidesForecast.i2m', 'a') as end: - end.write(footer) + async with aiofiles.open('./.temp/TidesForecast.i2m', 'a') as end: + await end.write(footer) dom = xml.dom.minidom.parse('./.temp/TidesForecast.i2m') xmlPretty = dom.toprettyxml(indent= " ") - with open('./.temp/TidesForecast.i2m', 'w') as g: - g.write(xmlPretty[23:]) - g.close() + async with aiofiles.open('./.temp/TidesForecast.i2m', 'w') as g: + await g.write(xmlPretty[23:]) + await g.close() # Compresss i2m to gzip