示例#1
0
def test_cache():
    with patch('djmoney.contrib.exchange.models._get_rate',
               wraps=_get_rate) as original:
        assert get_rate('USD', 'USD') == 1
        assert original.call_count == 1
        assert get_rate('USD', 'USD') == 1
        assert original.call_count == 1
示例#2
0
def test_cache():
    with patch("djmoney.contrib.exchange.models._get_rate",
               wraps=_get_rate) as original:
        assert get_rate("USD", "USD") == 1
        assert original.call_count == 1
        assert get_rate("USD", "USD") == 1
        assert original.call_count == 1
def test_two_backends():
    """
    Two different backends should not interfere with each other.
    """
    for backend in (FixedOneBackend, FixedTwoBackend):
        assert Rate.objects.filter(backend__name=backend.name).count() == 1
    assert get_rate('USD', 'EUR', backend=FixedOneBackend.name) == 1
    assert get_rate('USD', 'EUR', backend=FixedTwoBackend.name) == 2
示例#4
0
def test_two_backends():
    """
    Two different backends should not interfere with each other.
    """
    for backend in (FixedOneBackend, FixedTwoBackend):
        assert Rate.objects.filter(backend__name=backend.name).count() == 1
    assert get_rate("USD", "EUR", backend=FixedOneBackend.name) == 1
    assert get_rate("USD", "EUR", backend=FixedTwoBackend.name) == 2
示例#5
0
def get_currencies():
    properties = get_tenant_properties()

    currencies = set(
        itertools.chain(*[
            list(method['currencies'].keys())
            for method in properties.PAYMENT_METHODS
        ]))
    min_amounts = get_min_amounts(properties.PAYMENT_METHODS)

    currencies = [{
        'code': code,
        'name': get_currency_name(code),
        'symbol': get_currency_symbol(code).replace('US$', '$')
    } for code in currencies]

    for currency in currencies:
        if currency['code'] in min_amounts:
            currency['minAmount'] = min_amounts[currency['code']]
        try:
            currency['rate'] = get_rate(properties.DEFAULT_CURRENCY,
                                        currency['code'])
        except (MissingRate, ProgrammingError):
            currency['rate'] = 1

    return currencies
def get_exchange_rate(base_currency: str,
                      target_currency: str) -> Optional[Decimal]:
    """
    Get an exchange rate
    """
    try:

        return get_rate(base_currency, target_currency)
    except MissingRate as e:
        logger.error('Exchange rates error: {}'.format(str(e)))
    return None
示例#7
0
 def check_balance(
     self, task: models.Task
 ) -> typing.Tuple[bool, typing.Union[int, decimal.Decimal]]:
     checksum_address = Web3.toChecksumAddress(task.user.username)
     response = self.contract.functions.lookupTask(
         str(task.uuid or ''),
         checksum_address,
     ).call()
     task_budget, task_reward, current_budget, url, is_active, *_ = response
     current_budget_eth = self.web3.fromWei(current_budget, 'ether')
     current_budget_usd = get_rate(source=self.currency,
                                   target='USD') * current_budget_eth
     return is_active, current_budget_usd
示例#8
0
def get_exchange_rates(user_id: int, base_currency: str) -> list:
    """
    Returns an exchange rate between `base_currency` and all user's currencies.
    Uses data ************* if the base_currency is not specified.
    get_rate
    """
    result = list()

    currencies = get_currencies_by_user(user_id)

    for currency in currencies:
        # skip base currency
        if currency['code'] == base_currency:
            continue

        rate = get_rate(currency['code'], base_currency)
        currency['rate'] = round(rate, 4)

        result.append(currency)

    return result
示例#9
0
 def push_underlying_usd_price(self):
     rate = get_rate(source=self.currency, target='USD')
     value_uint = self.web3.toWei(rate, 'ether')
     estimated_gas = self.admin_contract.functions.adminPushUnderlyingUSDPrice(
         value_uint).estimateGas({'from': self.public_key})
     w3_transaction = self.admin_contract.functions.adminPushUnderlyingUSDPrice(
         value_uint).buildTransaction({
             'chainId':
             self.chain_id,
             'gas':
             estimated_gas,
             'nonce':
             self.web3.eth.getTransactionCount(self.public_key)
         })
     txn_signed = self.web3.eth.account.sign_transaction(
         w3_transaction, private_key=self.private_key)
     tx_hash_hex = self.web3.eth.sendRawTransaction(
         txn_signed.rawTransaction)  # tx_hash
     tx_hash = tx_hash_hex.hex()
     result = self.admin_contract.functions.getUnderlyingUsdPriceFeed(
     ).call()
     return value_uint, result, tx_hash
示例#10
0
def test_get_rate(source, target, expected):
    assert get_rate(source, target) == expected
示例#11
0
def test_rates_via_base(source, target, expected, django_assert_num_queries):
    with django_assert_num_queries(1):
        assert get_rate(source, target) == expected
示例#12
0
def test_unknown_currency():
    with pytest.raises(MissingRate, matches='Rate USD -> EUR does not exist'):
        get_rate('USD', 'EUR')
示例#13
0
def test_unknown_currency(source, target):
    with pytest.raises(MissingRate, match='Rate %s \\-\\> %s does not exist' % (source, target)):
        get_rate(source, target)
示例#14
0
def test_rates_via_base(source, target, expected, django_assert_num_queries):
    with django_assert_num_queries(1):
        assert get_rate(source, target) == expected
示例#15
0
def test_get_rate(source, target, expected, django_assert_num_queries, queries):
    with django_assert_num_queries(queries):
        assert get_rate(source, target) == expected
示例#16
0
def test_unknown_currency(source, target):
    with pytest.raises(MissingRate,
                       match="Rate %s \\-\\> %s does not exist" %
                       (source, target)):
        get_rate(source, target)
示例#17
0
def test_get_rate(backend, source, target, expected):
    Rate.objects.create(currency='EUR', value=2, backend=backend)
    assert get_rate(source, target) == expected
示例#18
0
def test_cache():
    with patch('djmoney.contrib.exchange.models._get_rate', wraps=_get_rate) as original:
        assert get_rate('USD', 'USD') == 1
        assert original.call_count == 1
        assert get_rate('USD', 'USD') == 1
        assert original.call_count == 1
示例#19
0
def test_get_rate(source, target, expected, django_assert_num_queries, queries):
    with django_assert_num_queries(queries):
        assert get_rate(source, target) == expected
示例#20
0
def test_unknown_currency(source, target):
    with pytest.raises(MissingRate,
                       match=f"Rate {source} \\-\\> {target} does not exist"):
        get_rate(source, target)
示例#21
0
def test_unknown_currency(source, target):
    with pytest.raises(MissingRate, match="Rate {} \\-\\> {} does not exist".format(source, target)):
        get_rate(source, target)
示例#22
0
def test_unknown_currency_with_partially_exiting_currencies(source, target):
    with pytest.raises(MissingRate,
                       match='Rate %s \\-\\> %s does not exist' %
                       (source, target)):
        get_rate(source, target)