示例#1
0
def retrive_and_insert_rate_from_provider(currency: Text, date: datetime) -> Tuple[Rate, bool]:
    created = False
    rate = None
    currency = currency.upper()
    prov = provider(settings.CURRENCY_PROVIDER, base=settings.CURRENCY_BASE)
    result, amount, milestone = prov.rates(currency=currency, date=date)
    logger.info("{} {} {}".format(result, amount, milestone))
    if result:
        currency_object, _ = Currency.objects.get_or_create(code=currency)
        base_object, _ = Currency.objects.get_or_create(code=settings.CURRENCY_BASE)

        try:
            rate = Rate.objects.get(
                base=base_object,
                currency=currency_object,
                milestone=milestone,
                amount=amount,
                provider=settings.CURRENCY_PROVIDER
            )
            created = False
        except Rate.DoesNotExist:
            rate = Rate(
                base=base_object,
                currency=currency_object,
                milestone=milestone,
                amount=amount,
                provider=settings.CURRENCY_PROVIDER
            )
            created = True

        rate.save()

    return rate, created
示例#2
0
    def test_rate_object_is_serialized(self, serializer, currency, table):
        rate = Rate(currency=currency, rate=Decimal('12.34'), table=table)
        rate.save()

        assert serializer(rate).data == {
            'currency': currency.code,
            'rate': '{0:.4f}'.format(rate.rate),
            'name': currency.name,
            'date': table.date,
            'relative_change': '0.0000',
            'country': CODE_TO_COUNTRY[currency.code]
        }
示例#3
0
def home(request):
    context = {}
    links = getLinks()
    for link in links:
        # 1.9558 BGN = 1 EUR 2019-03-12 ECB Reference rate <- this is simple output of getRate(), we need currency rate and currency name, so we split the output
        splited = getRate(link).split()
        key = splited[1]
        context[key] = float(splited[0])
        rate = Rate(currency=key, cost=context[key])
        rate.save()
    #After we created dictonairy of up-to-date currency rates we can parse it to our render function.

    return render(request, 'home.html', {"context": context})
示例#4
0
def create_rate(ccy_from=None, ccy_to=None, rate_value=Decimal('0'), last_rate=None):
    """
    Create a rate instance if there is no currency pair in database
    :param ccy_from: string (max_length=3)
    :param ccy_to: string (max_length=3)
    :param rate_value: Decimal
    :param last_rate: datetime
    :return:
    """
    rate = Rate()
    rate.ccy_from = Currency.objects.get(symbol=ccy_from)
    rate.ccy_to = Currency.objects.get(symbol=ccy_to)
    rate.rate = rate_value
    rate.last_rate = datetime.datetime.now()
    rate.save()

    return rate
示例#5
0
 def save(self, **kwargs):
     """Override save."""
     validated_data = dict(
         list(self.validated_data.items()) +
         list(kwargs.items())
     )
     obj, _ = Inventory.objects.get_or_create(
         date=validated_data.get('date')
     )
     rate = Rate(
         price=validated_data['price'],
         room_id=validated_data['room'].get('id'),
         inventory=obj,
         name=validated_data['name']
     )
     rate.save()
     return rate
示例#6
0
def create_rate(ccy_from=None,
                ccy_to=None,
                rate_value=Decimal('0'),
                last_rate=None):
    """
    Create a rate instance if there is no currency pair in database
    :param ccy_from: string (max_length=3)
    :param ccy_to: string (max_length=3)
    :param rate_value: Decimal
    :param last_rate: datetime
    :return:
    """
    rate = Rate()
    rate.ccy_from = Currency.objects.get(symbol=ccy_from)
    rate.ccy_to = Currency.objects.get(symbol=ccy_to)
    rate.rate = rate_value
    rate.last_rate = datetime.datetime.now()
    rate.save()

    return rate
示例#7
0
 def saved_rate(self, saved_currency, saved_table):
     rate = Rate(rate=Decimal('12.34'),
                 table=saved_table,
                 currency=saved_currency)
     rate.save()
     return rate