From 1492965cfc4901f110443d07996aa742e1e4e397 Mon Sep 17 00:00:00 2001
From: Owen Graham <ohgraham1@madisoncollege.edu>
Date: Thu, 30 Jun 2022 15:13:32 -0500
Subject: [PATCH] Read `amrdcrecords.json` only once per invocation

---
 visualizer/plotting.py | 5 ++---
 visualizer/records.py  | 8 ++++----
 2 files changed, 6 insertions(+), 7 deletions(-)

diff --git a/visualizer/plotting.py b/visualizer/plotting.py
index 6166b97..a9ac17b 100644
--- a/visualizer/plotting.py
+++ b/visualizer/plotting.py
@@ -10,7 +10,7 @@ import numpy as np
 
 from .data import read_data
 from .parameters import get_param, meas_type, year_type
-from .records import get_station, read_stations
+from .records import get_station
 
 plt.style.use('ggplot')
 plt.rcParams['axes.xmargin'] = 0
@@ -129,11 +129,10 @@ class Overlay(Plotter):
     def plot(cls):
         num_datasets = 2
         datasets = tuple(SimpleNamespace() for _ in range(num_datasets))
-        stations = read_stations()
         for n, dset in enumerate(datasets, start=1):
             dset.station_id = get_param(f'station{n}')
             dset.year = get_param(f'year{n}', to=year_type)
-            dset.station = get_station(dset.station_id, stations=stations)
+            dset.station = get_station(dset.station_id)
             dset.name = dset.station['name']
         meas = get_param('measurement', to=meas_type)
 
diff --git a/visualizer/records.py b/visualizer/records.py
index 779f509..44d709d 100644
--- a/visualizer/records.py
+++ b/visualizer/records.py
@@ -1,24 +1,24 @@
 """Read and parse records of station data."""
 
+from functools import lru_cache
 import json
 
 from flask import abort
 
 
+@lru_cache(maxsize=None)
 def read_stations():
     """Read amrdcrecords.json."""
     with open('amrdcrecords.json') as f:
         return json.load(f)
 
 
-def get_station(station_id, stations=None):
+def get_station(station_id):
     """Get a station record by ID.
 
     Calls `abort(404)` if none is found.
     """
-    if stations is None:
-        stations = read_stations()
-    for station in stations:
+    for station in read_stations():
         if station['id'] == station_id:
             return station
     abort(404)
-- 
GitLab