app / src /data_sources /cryptocompare.py
lemdaddy's picture
second commit
d068566
raw
history blame
2.41 kB
import os
from dotenv import load_dotenv
import httpx
from src.libs.helper_functions import convert_to_snakecase
from src.databases.redis import REDIS_CACHED
from src.libs.constants import ONE_MINUTE_IN_SECONDS
from src.libs.constants import CRYPTO_COMPARE_BASE_URL
from src.libs.logger import logger
load_dotenv()
redis_cache = REDIS_CACHED
class CryptoCompare:
def __init__(self, base_url: str = None) -> None:
self.CRYPTO_COMPARE_BASE_URL = base_url or CRYPTO_COMPARE_BASE_URL
@redis_cache(ttl=ONE_MINUTE_IN_SECONDS)
@logger.instrument()
def get_all_coins(self) -> dict:
url = f"{self.CRYPTO_COMPARE_BASE_URL}data/all/coinlist"
logger.debug(url)
params = {"api_key": os.getenv("CRYPTOCOMPARE_API_KEY")}
logger.debug(params)
headers = {"Content-type":"application/json; charset=UTF-8"}
logger.debug(headers)
try:
with httpx.Client(timeout=30.0) as client:
response = client.get(url, params=params, headers=headers)
response.raise_for_status() # Raise an exception if the request was unsuccessful
return convert_to_snakecase(response.json())
except httpx.HTTPError as e:
print(f"An error occurred while making the request: {e}")
return None
@redis_cache(ttl=ONE_MINUTE_IN_SECONDS)
@logger.instrument()
def get_coin_price(self, ids: list[str], vs_currencies: list[str], cache_ttl: int = None) -> dict:
url = f"{self.CRYPTO_COMPARE_BASE_URL}data/pricemulti"
# logger.debug(url)
params = {
"api_key": os.getenv("CRYPTOCOMPARE_API_KEY"),
"fsyms": ",".join(ids),
"tsyms": ",".join(vs_currencies)
}
# logger.debug(f"{params}")
headers = {"Content-type":"application/json; charset=UTF-8"}
# logger.debug(f"{headers}")
try:
with httpx.Client(timeout=30.0) as client:
response = client.get(url, params=params, headers=headers)
response.raise_for_status() # Raise an exception if the request was unsuccessful
return response.json()
except httpx.HTTPError as e:
# logger.debug(f"An error occurred while making the request: {e}")
print(f"An error occurred while making the request: {e}")
return None