expephalon-ratesapi/helpers.py

32 lines
No EOL
1.1 KiB
Python

from core.classes.http import HTTP
from core.models.local import Currency
import json
from logging import getLogger
from decimal import Decimal
logger = getLogger(__name__)
def update_currencies(currencies=[]):
data = HTTP("https://api.ratesapi.io/api/latest").data
loaded = json.loads(data)
base = Currency.get_base().code
if (not base == loaded["base"]) and (not base in loaded["rates"].keys()):
raise ValueError(f"Base currency {base} not supported.")
rates = {loaded["base"]: Decimal(1 if base == loaded["base"] else loaded["rates"][base])}
for currency, rate in loaded["rates"].items():
rates[currency] = Decimal(1) if base == currency else rates[loaded["base"]] / Decimal(rate)
for currency in Currency.objects.all():
if (not currencies) or (currency.code in currencies):
if currency.code in rates.keys():
currency.rate = rates[currency.code]
currency.save()
logger.info(f"Updated exchange rate for {currency.code}")
else:
logger.warn(f"Unable to set exchange rate for {currency.code} - currency not supported.")