32 lines
No EOL
1.1 KiB
Python
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.")
|
|
|