Source code for clove.utils.external_source

import time

import requests

from clove.exceptions import ExternalApiRequestLimitExceeded
from clove.utils.logging import logger


[docs]def clove_req_json(url: str): """ Make a request with Clove user-agent header and return json response Args: url (str): url to get data from Returns: dict: response data Raises: ExternalApiRequestLimitExceeded: if response status code is 429 Example: >>> from clove.utils.external_source import clove_req_json >>> clove_req_json('https://testnet.blockexplorer.com/api/status?q=getInfo') {'info': { 'blocks': 1414831, 'connections': 23, 'difficulty': 1, 'errors': 'Warning: unknown new rules activated (versionbit 28)', 'network': 'testnet', 'protocolversion': 70012, 'proxy': '', 'relayfee': 1e-05, 'testnet': True, 'timeoffset': 0, 'version': 120100}} """ logger.debug(' Requesting: %s', url) request_start = time.time() resp = requests.get(url, headers={'User-Agent': 'Clove'}) response_time = time.time() - request_start logger.debug('Got response: %s [%.2fs]', url, response_time) if resp.status_code == 429: logger.error(f'Requests limit exceeded when requesting url: {url}') raise ExternalApiRequestLimitExceeded(f'url: {url}') if resp.status_code != 200: logger.error(f'Unexpected status code when requesting url: {url}') return return resp.json()