Source code for helium_py.api.hotspots

"""Hotspots client for Helium Blockchain API."""

from typing import Generator, List, Optional

from .api import API
from .decorators import (
    filter_modes_api,
    filter_transaction_types_api,
    limit_api,
    time_filterable_api,
)


[docs]class Hotspots(API): """Hotspots client class for Helium Blockchain API. https://docs.helium.com/api/blockchain/hotspots """ base_path = 'hotspots'
[docs] @filter_modes_api def all(self, params: Optional[dict]) -> Generator[dict, None, None]: """Yield all hotspots. Args: params: Filter mode params. """ return self.client.fetch_all(params=params if params else None)
[docs] def hotspot_for_address(self, address: str) -> dict: """Return hotspot details for a hotspot with provided address.""" return self.client.get(path=f'/{address}')
[docs] def hotspots_for_name(self, name: str) -> List[dict]: """Return hotspot details for a hotspot with provided name.""" if len(name.split(' ')) == 3: name = '-'.join(name.split(' ')).lower() return self.client.get(path=f'/name/{name}')
[docs] def hotspots_search_by_name(self, name: str) -> List[dict]: """Return search results for provided hotspot name.""" return self.client.get(path='/name', params={'search': name})
[docs] def hotspots_search_by_location_distance(self, lat: float, lon: float, distance: int) -> List[dict]: """Return hotspots that are contained within `distance` meters of point coordinates.""" return self.client.get( path='/location/distance', params={ 'lat': lat, 'lon': lon, 'distance': distance, })
[docs] def hotspots_search_by_geo(self, swlat: float, swlon: float, nelat: float, nelon: float) -> List[dict]: """Return hotspots that are contained within the box coordinates.""" return self.client.get( path='/location/box', params={ 'swlat': swlat, 'swlon': swlon, 'nelat': nelat, 'nelon': nelon, })
[docs] def hotspots_by_hex(self, h3_index: str) -> List[dict]: """Return hotspots located within hex provided by h3_index.""" return self.client.get(path=f'/hex/{h3_index}')
[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 provided 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 provided address.""" return self.client.get(path=f'/{address}/roles/count', params=params if params else None)
[docs] @time_filterable_api def get_hotspot_challenges(self, address: str, params: Optional[dict]) -> Generator[dict, None, None]: """Yield hotspot challenges for provided address.""" return self.client.fetch_all(path=f'/{address}/challenges', params=params if params else None)
[docs] @time_filterable_api def get_hotspot_rewards(self, address: str, params: Optional[dict]) -> Generator[dict, None, None]: """Yield hotspot rewards for provided address.""" return self.client.fetch_all(path=f'/{address}/rewards', params=params if params else None)
[docs] @time_filterable_api def get_hotspot_rewards_total(self, address: str, params: Optional[dict]) -> dict: """Return hotspot rewards totals for provided address.""" return self.client.get(path=f'/{address}/rewards/sum', params=params if params else None)
[docs] def get_hotspot_witnesses(self, address: str) -> List[dict]: """Return list of witnesses for a hotspot with provided address.""" return self.client.get(path=f'/{address}/witnesses')
[docs] def get_hotspot_witnessed(self, address: str) -> List[dict]: """Return list of hotspots witnessed by hotspot with provided address.""" return self.client.get(path=f'/{address}/witnessed')