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_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
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
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
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
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
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
def test_get_rate(source, target, expected): assert get_rate(source, target) == expected
def test_rates_via_base(source, target, expected, django_assert_num_queries): with django_assert_num_queries(1): assert get_rate(source, target) == expected
def test_unknown_currency(): with pytest.raises(MissingRate, matches='Rate USD -> EUR does not exist'): get_rate('USD', 'EUR')
def test_unknown_currency(source, target): with pytest.raises(MissingRate, match='Rate %s \\-\\> %s does not exist' % (source, target)): get_rate(source, target)
def test_get_rate(source, target, expected, django_assert_num_queries, queries): with django_assert_num_queries(queries): assert get_rate(source, target) == expected
def test_unknown_currency(source, target): with pytest.raises(MissingRate, match="Rate %s \\-\\> %s does not exist" % (source, target)): get_rate(source, target)
def test_get_rate(backend, source, target, expected): Rate.objects.create(currency='EUR', value=2, backend=backend) assert get_rate(source, target) == expected
def test_unknown_currency(source, target): with pytest.raises(MissingRate, match=f"Rate {source} \\-\\> {target} does not exist"): get_rate(source, target)
def test_unknown_currency(source, target): with pytest.raises(MissingRate, match="Rate {} \\-\\> {} does not exist".format(source, target)): get_rate(source, target)
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)