diff --git a/agenda/data.py b/agenda/data.py index c0f2712..25eca11 100644 --- a/agenda/data.py +++ b/agenda/data.py @@ -1,13 +1,13 @@ """Agenda data.""" import asyncio -import configparser import os import typing from datetime import date, datetime, timedelta import dateutil.rrule import dateutil.tz +import flask import holidays # type: ignore import isodate # type: ignore import lxml @@ -185,23 +185,11 @@ def read_events_yaml(data_dir: str, start: date, end: date) -> list[Event]: return events -def get_config() -> configparser.ConfigParser: - """Load config file.""" - config_filename = os.path.join(os.path.dirname(__file__), "..", "config") - - assert os.path.exists(config_filename) - - config = configparser.ConfigParser() - config.read(config_filename) - - return config - - -async def get_data(now: datetime) -> typing.Mapping[str, str | object]: +async def get_data( + now: datetime, config: flask.config.Config +) -> typing.Mapping[str, str | object]: """Get data to display on agenda dashboard.""" - config = get_config() - - data_dir = config.get("data", "dir") + data_dir = config["DATA_DIR"] rocket_dir = os.path.join(data_dir, "thespacedevs") today = now.date() @@ -237,7 +225,7 @@ async def get_data(now: datetime) -> typing.Mapping[str, str | object]: "gwr_advance_tickets": gwr_advance_tickets, } - my_data = config["data"]["personal-data"] + my_data = config["PERSONAL_DATA"] events = ( [ Event(name="mothers_day", date=uk_holiday.get_mothers_day(today)), @@ -254,7 +242,7 @@ async def get_data(now: datetime) -> typing.Mapping[str, str | object]: events += combine_holidays(bank_holiday + get_us_holidays(last_year, next_year)) events += birthday.get_birthdays(last_year, os.path.join(my_data, "entities.yaml")) events += accommodation.get_events(os.path.join(my_data, "accommodation.yaml")) - events += travel.all_events(config["data"]["personal-data"]) + events += travel.all_events(my_data) events += conference.get_list(os.path.join(my_data, "conferences.yaml")) events += backwell_bins + bristol_bins events += read_events_yaml(my_data, last_year, next_year) diff --git a/agenda/fx.py b/agenda/fx.py index 34a7eac..1d48e49 100644 --- a/agenda/fx.py +++ b/agenda/fx.py @@ -1,19 +1,19 @@ """Currency exchange rates.""" -import configparser import json import os import typing from datetime import datetime, timedelta from decimal import Decimal +import flask import httpx -async def get_gbpusd(config: configparser.ConfigParser) -> Decimal: +async def get_gbpusd(config: flask.config.Config) -> Decimal: """Get the current value for GBPUSD, with caching.""" - access_key = config.get("exchangerate", "access_key") - data_dir = config.get("data", "dir") + access_key = config["EXCHANGERATE_ACCESS_KEY"] + data_dir = config["DATA_DIR"] now = datetime.now() now_str = now.strftime("%Y-%m-%d_%H:%M") diff --git a/web_view.py b/web_view.py index 0bcfe69..65cfe0f 100755 --- a/web_view.py +++ b/web_view.py @@ -19,6 +19,7 @@ import agenda.travel app = flask.Flask(__name__) app.debug = False +app.config.from_object("config.default") @app.errorhandler(werkzeug.exceptions.InternalServerError) @@ -52,7 +53,7 @@ def exception_handler(e: werkzeug.exceptions.InternalServerError) -> tuple[str, async def index() -> str: """Index page.""" now = datetime.now() - data = await agenda.data.get_data(now) + data = await agenda.data.get_data(now, app.config) return flask.render_template("index.html", today=now.date(), **data) @@ -60,8 +61,7 @@ async def index() -> str: @app.route("/travel") def travel_list() -> str: """Page showing a list of upcoming travel.""" - config = agenda.data.get_config() - data_dir = config["data"]["personal-data"] + data_dir = app.config["PERSONAL_DATA"] flights = agenda.travel.parse_yaml("flights", data_dir) trains = agenda.travel.parse_yaml("trains", data_dir) @@ -76,8 +76,7 @@ def as_date(d: date | datetime) -> date: @app.route("/conference") def conference_list() -> str: """Page showing a list of conferences.""" - config = agenda.data.get_config() - data_dir = config["data"]["personal-data"] + data_dir = app.config["PERSONAL_DATA"] filepath = os.path.join(data_dir, "conferences.yaml") item_list = yaml.safe_load(open(filepath))["conferences"] today = date.today()