From dbc12adb3d35f64cd8d8c88f57c1f87f0f638b72 Mon Sep 17 00:00:00 2001 From: Edward Betts Date: Sat, 20 Apr 2024 07:52:00 +0100 Subject: [PATCH] Rewrite update code to use flask app_context() --- update.py | 57 ++++++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 28 deletions(-) diff --git a/update.py b/update.py index c322387..bae4304 100755 --- a/update.py +++ b/update.py @@ -10,6 +10,7 @@ from email.message import EmailMessage from email.utils import formatdate, make_msgid from time import time +import flask import requests import agenda.fx @@ -18,14 +19,13 @@ import agenda.types import agenda.uk_holiday import agenda.waste_schedule from agenda import gwr - -config = __import__("config.default", fromlist=[""]) +from web_view import app -async def update_bank_holidays() -> None: +async def update_bank_holidays(config: flask.config.Config) -> None: """Update cached copy of UK Bank holidays.""" t0 = time() - events = await agenda.uk_holiday.get_holiday_list(config.DATA_DIR) + events = await agenda.uk_holiday.get_holiday_list(config["DATA_DIR"]) time_taken = time() - t0 if not sys.stdin.isatty(): return @@ -33,11 +33,11 @@ async def update_bank_holidays() -> None: print(f"took {time_taken:.1f} seconds") -async def update_bristol_bins() -> None: +async def update_bristol_bins(config: flask.config.Config) -> None: """Update waste schedule from Bristol City Council.""" t0 = time() events = await agenda.waste_schedule.get_bristol_gov_uk( - date.today(), config.DATA_DIR, config.BRISTOL_UPRN, refresh=True + date.today(), config["DATA_DIR"], config["BRISTOL_UPRN"], refresh=True ) time_taken = time() - t0 if not sys.stdin.isatty(): @@ -47,30 +47,30 @@ async def update_bristol_bins() -> None: print(f"took {time_taken:.1f} seconds") -def send_mail(subject: str, body: str) -> None: +def send_mail(config: flask.config.Config, subject: str, body: str) -> None: """Send an e-mail.""" msg = EmailMessage() msg["Subject"] = subject - msg["To"] = f"{config.NAME} <{config.MAIL_TO}>" - msg["From"] = f"{config.NAME} <{config.MAIL_FROM}>" + msg["To"] = f"{config['NAME']} <{config['MAIL_TO']}>" + msg["From"] = f"{config['NAME']} <{config['MAIL_FROM']}>" msg["Date"] = formatdate() msg["Message-ID"] = make_msgid() # Add extra mail headers - for header, value in config.MAIL_HEADERS: + for header, value in config["MAIL_HEADERS"]: msg[header] = value msg.set_content(body) - s = smtplib.SMTP(config.SMTP_HOST) - s.sendmail(config.MAIL_TO, [config.MAIL_TO], msg.as_string()) + s = smtplib.SMTP(config["SMTP_HOST"]) + s.sendmail(config["MAIL_TO"], [config["MAIL_TO"]], msg.as_string()) s.quit() -def update_gwr_advance_ticket_date() -> None: +def update_gwr_advance_ticket_date(config: flask.config.Config) -> None: """Update GWR advance ticket date cache.""" - filename = os.path.join(config.DATA_DIR, "advance-tickets.html") + filename = os.path.join(config["DATA_DIR"], "advance-tickets.html") existing_html = open(filename).read() existing_date = gwr.extract_weekday_date(existing_html) @@ -92,12 +92,12 @@ New date: {new_date} Agenda: https://edwardbetts.com/agenda/ """ - send_mail(subject, body) + send_mail(config, subject, body) -def update_thespacedevs() -> None: +def update_thespacedevs(config: flask.config.Config) -> None: """Update cache of space launch API.""" - rocket_dir = os.path.join(config.DATA_DIR, "thespacedevs") + rocket_dir = os.path.join(config["DATA_DIR"], "thespacedevs") t0 = time() rockets = agenda.thespacedevs.next_launch_api(rocket_dir) @@ -108,11 +108,11 @@ def update_thespacedevs() -> None: print(f"took {time_taken:.1f} seconds") -def update_gandi() -> None: +def update_gandi(config: flask.config.Config) -> None: """Retrieve list of domains from gandi.net.""" url = "https://api.gandi.net/v5/domain/domains" - headers = {"authorization": "Bearer " + config.GANDI_TOKEN} - filename = os.path.join(config.DATA_DIR, "gandi_domains.json") + headers = {"authorization": "Bearer " + config["GANDI_TOKEN"]} + filename = os.path.join(config["DATA_DIR"], "gandi_domains.json") r = requests.request("GET", url, headers=headers) items = r.json() @@ -127,16 +127,17 @@ def main() -> None: now = datetime.now() hour = now.hour - if hour % 3 == 0: - asyncio.run(update_bank_holidays()) - asyncio.run(update_bristol_bins()) - update_gwr_advance_ticket_date() - update_gandi() + with app.app_context(): + if hour % 3 == 0: + asyncio.run(update_bank_holidays(app.config)) + asyncio.run(update_bristol_bins(app.config)) + update_gwr_advance_ticket_date(app.config) + update_gandi(app.config) - if hour % 12 == 0: - agenda.fx.get_exchange_rates(config) + if hour % 12 == 0: + agenda.fx.get_rates(app.config) - update_thespacedevs() + update_thespacedevs(app.config) if __name__ == "__main__":