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.")