Source code for bismuthclient.bismuthapi

"""
Wrapper around the official Bismuth API from api.bismuth.live

WIP
"""

import logging
import requests
import time

# Light wallet benchmark and helpers
from bismuthclient import lwbench

__version__ = '0.0.1'


[docs]def get_wallet_servers_legacy(light_ip_list='', app_log=None): """ Use different methods to return the best possible list of wallet servers, sorted ip:port""" if not app_log: app_log = logging while True: # If we have 127.0.0.1 in the list, first try it if '127.0.0.1:5658' in light_ip_list or '127.0.0.1' in light_ip_list: if lwbench.connectible('127.0.0.1:5658'): # No need to go further. return ['127.0.0.1:5658'] # Then try the new API wallets = [] try: rep = requests.get("http://api.bismuth.live/servers/wallet/legacy.json") if rep.status_code == 200: wallets = rep.json() except Exception as e: app_log.warning("Error {} getting Server list from API, using lwbench instead".format(e)) if not wallets: # no help from api, use previous benchmark ipport_list = lwbench.time_measure(light_ip_list, app_log) return ipport_list # We have a server list, order by load sorted_wallets = sorted([wallet for wallet in wallets if wallet['active']], key=lambda k: (k['clients']+1)/(k['total_slots']+2)) if sorted_wallets: return ["{}:{}".format(wallet['ip'], wallet['port']) for wallet in sorted_wallets] # If we get here, all hope is lost! app_log.warning("No connectible server... let try again in a few sec") time.sleep(10)