Esempio n. 1
0
    def query_balances(self) -> Tuple[Optional[dict], str]:
        try:
            self.first_connection()
            old_balances = self.query_private('Balance', req={})
            # find USD price of EUR
            with self.lock:
                self.usdprice['EUR'] = query_fiat_pair('EUR', 'USD')
        except RemoteError as e:
            msg = (
                'Kraken API request failed. Could not reach kraken due '
                'to {}'.format(e)
            )
            logger.error(msg)
            return None, msg

        balances = dict()
        for k, v in old_balances.items():
            v = FVal(v)
            if v == FVal(0):
                continue

            common_name = KRAKEN_TO_WORLD[k]
            entry = {}
            entry['amount'] = v
            if common_name in self.usdprice:
                entry['usd_value'] = v * self.usdprice[common_name]
            else:
                entry['usd_value'] = v * self.find_fiat_price(k)

            balances[common_name] = entry
        return balances, ''
Esempio n. 2
0
    def set_settings(self, settings):
        log.info('Add new settings')

        message = ''
        with self.lock:
            if 'eth_rpc_port' in settings:
                result, msg = self.blockchain.set_eth_rpc_port(
                    settings['eth_rpc_port'])
                if not result:
                    # Don't save it in the DB
                    del settings['eth_rpc_port']
                    message += "\nEthereum RPC port not set: " + msg

            if 'main_currency' in settings:
                main_currency = settings['main_currency']
                if main_currency != 'USD':
                    self.usd_to_main_currency_rate = query_fiat_pair(
                        'USD', main_currency)

            res, msg = self.accountant.customize(settings)
            if not res:
                message += '\n' + msg
                return False, message

            _, msg, = self.data.set_settings(settings, self.accountant)
            if msg != '':
                message += '\n' + msg

            # Always return success here but with a message
            return True, message
Esempio n. 3
0
 def set_settings(self, settings):
     with self.lock:
         self.data.set_settings(settings)
         main_currency = settings['main_currency']
         if main_currency != 'USD':
             self.usd_to_main_currency_rate = query_fiat_pair(
                 'USD', main_currency)
Esempio n. 4
0
    def usd_to_main_currency(self, amount):
        main_currency = self.data.main_currency()
        if main_currency != 'USD' and not hasattr(self,
                                                  'usd_to_main_currency_rate'):
            self.usd_to_main_currency_rate = query_fiat_pair(
                'USD', main_currency)

        return self.usd_to_main_currency_rate * amount
Esempio n. 5
0
def get_fiat_usd_exchange_rates(currencies=None):
    rates = {'USD': 1}
    if not currencies:
        currencies = FIAT_CURRENCIES[1:]
    for currency in currencies:
        rates[currency] = query_fiat_pair('USD', currency)

    return rates
Esempio n. 6
0
def get_fiat_usd_exchange_rates(
    currencies: Optional[Iterable[typing.FiatAsset]] = None,
) -> Dict[typing.FiatAsset, FVal]:
    rates = {S_USD: FVal(1)}
    if not currencies:
        currencies = FIAT_CURRENCIES[1:]
    for currency in currencies:
        rates[currency] = query_fiat_pair(S_USD, currency)

    return rates
Esempio n. 7
0
    def query_fiat_balances(self):
        result = {}
        balances = self.data.get_fiat_balances()
        for currency, amount in balances.items():
            amount = FVal(amount)
            usd_rate = query_fiat_pair(currency, 'USD')
            result[currency] = {
                'amount': amount,
                'usd_value': amount * usd_rate
            }

        return result
Esempio n. 8
0
    def set_settings(self, settings):
        message = ''
        with self.lock:
            if 'eth_rpc_port' in settings:
                result, msg = self.blockchain.set_eth_rpc_port(
                    settings['eth_rpc_port'])
                if not result:
                    # Don't save it in the DB
                    del settings['eth_rpc_port']
                    message += "\nEthereum RPC port not set: " + msg

            if 'main_currency' in settings:
                main_currency = settings['main_currency']
                if main_currency != 'USD':
                    self.usd_to_main_currency_rate = query_fiat_pair(
                        'USD', main_currency)

            self.data.set_settings(settings, self.accountant)

            # Always return success but with a message
            return True, message
Esempio n. 9
0
    def query_balances(self):
        self.first_connection()
        old_balances = self.query_private('Balance', req={})
        # find USD price of EUR
        with self.lock:
            self.usdprice['EUR'] = query_fiat_pair('EUR', 'USD')

        balances = dict()
        for k, v in old_balances.items():
            v = FVal(v)
            if v == FVal(0):
                continue

            common_name = KRAKEN_TO_WORLD[k]
            entry = {}
            entry['amount'] = v
            if common_name in self.usdprice:
                entry['usd_value'] = v * self.usdprice[common_name]
            else:
                entry['usd_value'] = v * self.find_fiat_price(k)

            balances[common_name] = entry
        return balances
Esempio n. 10
0
 def set_main_currency(self, currency):
     with self.lock:
         self.data.set_main_currency(currency, self.accountant)
         if currency != 'USD':
             self.usd_to_main_currency_rate = query_fiat_pair(
                 'USD', currency)