From d87d260a1ca1eba4a150f4666f46ab6f9c4cd8e0 Mon Sep 17 00:00:00 2001 From: Dominik Roth Date: Sat, 30 Oct 2021 17:37:27 +0200 Subject: [PATCH] Bug Fix: Exchange-Rate for future years was wrong --- meuro.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/meuro.py b/meuro.py index c256015..02f9bba 100755 --- a/meuro.py +++ b/meuro.py @@ -4,6 +4,7 @@ from datetime import datetime from dateutil import relativedelta from dateutil import parser as dparser from dateutil.parser._parser import ParserError as DateParserError +from collections import defaultdict _years = None @@ -15,7 +16,7 @@ def _loadYearsTable(maxCacheSeconds=3600): if (datetime.now() - dparser.isoparse(cacheUpdate)).total_seconds() < maxCacheSeconds: # JSON does not allow integers as keys; so we convert them back here... cacheYears = {int(y):{int(m):float(n) for m,n in ms.items()} for y,ms in cacheYears.items()} - _years = cacheYears + _years = defaultdict(lambda: {m:1 + 0.02/12 for m in range(1,13)}, cacheYears) return _years = _loadYearsTableWeb() @@ -24,14 +25,12 @@ def _loadYearsTableWeb(): url = 'https://sdw.ecb.europa.eu/quickviewexport.do?SERIES_KEY=122.ICP.M.U2.N.000000.4.ANR&type=csv' resp = requests.get(url) lines = resp.text.split('\n')[6:] - years = {} # Will later contain the monthly factor of inflation (~1.0016667) for every month + years = defaultdict(lambda: {m:1 + 0.02/12 for m in range(1,13)}) for line in lines: vals = line.split(',') year = int(vals[0][:4]) month = datetime.strptime(vals[0][4:],'%b').month inflation = float(vals[1]) - if not year in years: - years[year] = {} years[year][month] = 1 + (inflation/100)/12 for year in years: