"""Accounts client for Helium Blockchain API."""
from typing import Generator, List, Optional
from .api import API
from .decorators import (
bucket_api,
filter_modes_api,
filter_transaction_types_api,
limit_api,
time_filterable_api,
)
[docs]class Accounts(API):
"""Accounts client class for Helium Blockchain API.
https://docs.helium.com/api/blockchain/accounts
"""
base_path = 'accounts'
[docs] def all(self) -> Generator[dict, None, None]:
"""Yield all accounts."""
return self.client.fetch_all()
[docs] @limit_api
def richest(self, params: Optional[dict]) -> List[dict]:
"""Return list of richest acounts."""
return self.client.get(path='/rich', params=params if params else None)
[docs] def account_for_address(self, address: str) -> dict:
"""Return account for a given address."""
return self.client.get(path=f'/{address}')
[docs] @filter_modes_api
def hotspots_for_account(self, address: str, params: Optional[dict]) -> Generator[dict, None, None]:
"""Yield all hotspots for given account address."""
return self.client.fetch_all(path=f'/{address}/hotspots', params=params if params else None)
[docs] def validators_for_account(self, address: str) -> Generator[dict, None, None]:
"""Yield all validators for given account address."""
return self.client.fetch_all(path=f'/{address}/validators')
[docs] def ouis_for_account(self, address: str) -> Generator[dict, None, None]:
"""Yield all OUIs for given account address."""
return self.client.fetch_all(path=f'/{address}/ouis')
[docs] @limit_api
@time_filterable_api
@filter_transaction_types_api
def get_roles(self, address: str, params: Optional[dict]) -> Generator[dict, None, None]:
"""Yield all roles for given account address."""
return self.client.fetch_all(path=f'/{address}/roles', params=params if params else None)
[docs] @filter_transaction_types_api
def get_roles_counts(self, address: str, params: Optional[dict]) -> dict:
"""Return account roles for given account address."""
return self.client.get(path=f'/{address}/roles/count', params=params if params else None)
[docs] @limit_api
@time_filterable_api
def get_account_elections(self, address: str, params: Optional[dict]) -> List[dict]:
"""Return account elections for given account address."""
return self.client.get(path=f'/{address}/elections', params=params if params else None)
[docs] @limit_api
@time_filterable_api
def challenges_for_account(self, address: str, params: Optional[dict]) -> Generator[dict, None, None]:
"""Yield all challenges for given account address."""
return self.client.fetch_all(path=f'/{address}/challenges', params=params if params else None)
[docs] def pending_transactions_for_account(self, address: str) -> Generator[dict, None, None]:
"""Yield all pending transactions for given account address."""
return self.client.fetch_all(path=f'/{address}/pending_transactions')
[docs] @time_filterable_api
def get_account_rewards(self, address: str, params: Optional[dict]) -> Generator[dict, None, None]:
"""Yield all account rewards for given account address."""
return self.client.fetch_all(path=f'/{address}/rewards', params=params if params else None)
[docs] @bucket_api
@time_filterable_api
def get_account_rewards_total(self, address: str, params: Optional[dict]) -> dict:
"""Return account rewards totals for given account address."""
return self.client.get(path=f'/{address}/rewards/sum', params=params if params else None)
[docs] def get_stats_for_account(self, address: str) -> dict:
"""Return stats for given account address."""
return self.client.get(path=f'/{address}/stats')