Exemplo n.º 1
0
def satoshi_to_currency(num, currency):
    """Converts a given number of satoshi to another currency as a formatted
    string rounded down to the proper number of decimal places.

    :param num: The number of satoshi.
    :type num: ``int``
    :param currency: One of the :ref:`supported currencies`.
    :type currency: ``str``
    :rtype: ``str``
    """
    return '{:f}'.format(
        Decimal(num / Decimal(EXCHANGE_RATES[currency]())).quantize(
            Decimal('0.' + '0' * CURRENCY_PRECISION[currency]),
            rounding=ROUND_DOWN).normalize())
Exemplo n.º 2
0
def satoshi_to_currency_cached(num, currency):
    """Converts a given number of satoshi to another currency as a formatted
    string rounded down to the proper number of decimal places. Results are
    cached using a decorator for 60 seconds by default. See :ref:`cache times`.

    :param num: The number of satoshi.
    :type num: ``int``
    :param currency: One of the :ref:`supported currencies`.
    :type currency: ``str``
    :rtype: ``str``
    """
    return '{:f}'.format(
        Decimal(num /
                Decimal(currency_to_satoshi_cached(1, currency))).quantize(
                    Decimal('0.' + '0' * CURRENCY_PRECISION[currency]),
                    rounding=ROUND_DOWN).normalize())
Exemplo n.º 3
0
 def currency_to_satoshi(cls, currency):
     headers = {"x-accept-version": "2.0.0",
                "Accept": "application/json"}
     r = requests.get(cls.SINGLE_RATE + currency, headers=headers)
     r.raise_for_status()
     rate = r.json()['data']['rate']
     return int(ONE / Decimal(rate) * BCH)
Exemplo n.º 4
0
    def wrapper(amount, currency):
        now = time()

        cached_rate = cached_rates[currency]

        if not cached_rate.satoshis or now - cached_rate.last_update > DEFAULT_CACHE_TIME:
            cached_rate.satoshis = EXCHANGE_RATES[currency]()
            cached_rate.last_update = now

        return int(cached_rate.satoshis * Decimal(amount))
Exemplo n.º 5
0
def currency_to_satoshi(amount, currency):
    """Converts a given amount of currency to the equivalent number of
    satoshi. The amount can be either an int, float, or string as long as
    it is a valid input to :py:class:`decimal.Decimal`.

    :param amount: The quantity of currency.
    :param currency: One of the :ref:`supported currencies`.
    :type currency: ``str``
    :rtype: ``int``
    """
    satoshis = EXCHANGE_RATES[currency]()
    return int(satoshis * Decimal(amount))
Exemplo n.º 6
0
 def test_zero_places(self):
     assert Decimal(satoshi_to_currency(100000,
                                        "jpy")).as_tuple().exponent == 0
Exemplo n.º 7
0
 def currency_to_satoshi(cls, currency):
     r = requests.get(cls.SINGLE_RATE.format(currency))
     if r.status_code != 200:
         raise requests.exceptions.ConnectionError
     rate = r.json()['last']
     return int(ONE / Decimal(rate) * BCH)
Exemplo n.º 8
0
from collections import OrderedDict
from decimal import ROUND_DOWN
from functools import wraps
from time import time

import requests

from bitcash.utils import Decimal

DEFAULT_CACHE_TIME = 60

# Constant for use in deriving exchange
# rates when given in terms of 1 BCH.
ONE = Decimal(1)

# https://en.bitcoin.it/wiki/Units
SATOSHI = 1
uBCH = 10**2
mBCH = 10**5
BCH = 10**8

SUPPORTED_CURRENCIES = OrderedDict([('satoshi', 'Satoshi'),
                                    ('ubch', 'Microbitcoincash'),
                                    ('mbch', 'Millibitcoincash'),
                                    ('bch', 'BitcoinCash'),
                                    ('usd', 'United States Dollar'),
                                    ('eur', 'Eurozone Euro'),
                                    ('gbp', 'Pound Sterling'),
                                    ('jpy', 'Japanese Yen'),
                                    ('cny', 'Chinese Yuan'),
                                    ('cad', 'Canadian Dollar'),
Exemplo n.º 9
0
 def currency_to_satoshi(cls, currency):
     r = requests.get(cls.SINGLE_RATE.format(currency))
     r.raise_for_status()
     rate = r.json()["data"]["rates"][currency]
     return int(ONE / Decimal(rate) * BCH)
Exemplo n.º 10
0
 def currency_to_satoshi(cls, currency):
     rate = requests.get(cls.SINGLE_RATE.format(currency)).json()
     return int(Decimal(rate) * BCH)
Exemplo n.º 11
0
 def currency_to_satoshi(cls, currency):
     rate = requests.get(cls.SINGLE_RATE + currency).json()['rate']
     return int(ONE / Decimal(rate) * BCH)
Exemplo n.º 12
0
def test_decimal():
    assert Decimal(0.8) == Decimal("0.8")
Exemplo n.º 13
0
def test_decimal():
    assert Decimal(0.8) == Decimal('0.8')