"""CoinPaprika helpers""" __docformat__ = "numpy" from typing import Any, Optional import requests from requests.adapters import HTTPAdapter class PaprikaSession: PAPRIKA_BASE_URL = "https://api.coinpaprika.com/v1" ENDPOINTS = { "global": "/global", "coin": "/coins/{}", "coins": "/coins", "coin_tweeter": "/coins/{}/twitter", "coin_events": "/coins/{}/events", "coin_exchanges": "/coins/{}/exchanges", "coin_markets": "/coins/{}/markets", "ohlcv": "/coins/{}/ohlcv/latest", "ohlcv_hist": "/coins/{}/ohlcv/historical", "people": "/people/{}", "tickers": "/tickers", "ticker_info": "/tickers/{}", "exchanges": "/exchanges", "exchange_info": "/exchanges/{}", "exchange_markets": "/exchanges/{}/markets", "contract_platforms": "/contracts", "contract_platform_addresses": "/contracts/{}", "search": "/search", } def __init__(self, max_retries: int = 5): self.session = requests.Session() self.session.mount(self.PAPRIKA_BASE_URL, HTTPAdapter(max_retries=max_retries)) def make_request( self, endpoint: str, payload: Optional[Any] = None, **kwargs: Any ) -> dict: """Helper method that handles request for coinpaprika api. It prepares URL for given endpoint and payload if it's part of requests Parameters ---------- endpoint: str, it's an endpoint that we want to query. e.g. to get twitter data for given coin we need to use: https://api.coinpaprika.com/v1/coins/{}/twitter payload: dict the body of your request. Contains the data send to the CoinPaprika API when making an API request kwargs: additional parameters that will be added to payload Returns ---------- dict with response data """ url = f"{self.PAPRIKA_BASE_URL}{endpoint}/" if payload is None: payload = {} if kwargs: payload.update(kwargs) return self.session.get(url, params=payload).json()