Create currency exchange rate module

This commit is contained in:
Kumi 2020-06-03 12:31:43 +02:00
commit 0d2d9a491a
4 changed files with 43 additions and 0 deletions

2
.gitignore vendored Normal file
View file

@ -0,0 +1,2 @@
__pycache__/
*.pyc

0
__init__.py Normal file
View file

32
helpers.py Normal file
View file

@ -0,0 +1,32 @@
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.")

View file

@ -0,0 +1,9 @@
from django.core.management.base import BaseCommand, CommandError
from ratesapi.helpers import update_currencies
class Command(BaseCommand):
help = 'Updates exchange rates for all supported currencies'
def handle(self, *args, **options):
update_currencies()