diff --git a/cli.py b/cli.py index 0729db8..e771252 100644 --- a/cli.py +++ b/cli.py @@ -1,6 +1,7 @@ import logging import os import sys +from datetime import datetime import click @@ -118,13 +119,13 @@ def fetch_all_prices(): @cli.command() -@click.argument("start", type=int) -@click.argument("end", type=int) -def fetch_range(start: int, end: int): +@click.argument("after", type=datetime) +@click.argument("before", type=datetime) +def fetch_range(after: datetime, before: datetime): inspect_db_session = get_inspect_session() logger.info("Fetching prices") - prices = fetch_prices_range(start, end) + prices = fetch_prices_range(after, before) logger.info("Writing prices") write_prices(inspect_db_session, prices) diff --git a/mev b/mev index 2505a3b..eb81fc6 100755 --- a/mev +++ b/mev @@ -83,11 +83,11 @@ case "$1" in poetry run fetch-all-prices ;; fetch-range) - start=$2 - end=$3 + after=$2 + before=$3 echo "Running price fetch-range" kubectl exec -ti deploy/mev-inspect -- \ - poetry run fetch-range $start $end + poetry run fetch-range $after $before ;; *) echo "prices usage: "$1" {fetch-all}" diff --git a/mev_inspect/prices.py b/mev_inspect/prices.py index 1f2c3bc..8e62169 100644 --- a/mev_inspect/prices.py +++ b/mev_inspect/prices.py @@ -1,4 +1,4 @@ -from datetime import datetime as dt +from datetime import datetime from typing import List from pycoingecko import CoinGeckoAPI @@ -11,48 +11,44 @@ def fetch_prices() -> List[Price]: prices = [] for token_address in TOKEN_ADDRESSES: - price_data = cg.get_coin_market_chart_by_id( + coingecko_price_data = cg.get_coin_market_chart_by_id( id=COINGECKO_ID_BY_ADDRESS[token_address], vs_currency="usd", days="max", interval="daily", ) - price_time_series = price_data["prices"] - - for entry in price_time_series: - timestamp = dt.fromtimestamp(entry[0] / 1000) - token_price = entry[1] - prices.append( - Price( - timestamp=timestamp, - usd_price=token_price, - token_address=token_address, - ) - ) + prices += _build_token_prices(coingecko_price_data, token_address) return prices -def fetch_prices_range(start: int, end: int) -> List[Price]: - +def fetch_prices_range(after: datetime, before: datetime) -> List[Price]: cg = CoinGeckoAPI() prices = [] + after_unix = int(after.timestamp()) + before_unix = int(before.timestamp()) for token_address in TOKEN_ADDRESSES: - price_data = cg.get_coin_market_chart_range_by_id( - COINGECKO_ID_BY_ADDRESS[token_address], "usd", start, end + coingecko_price_data = cg.get_coin_market_chart_range_by_id( + COINGECKO_ID_BY_ADDRESS[token_address], "usd", after_unix, before_unix ) - price_time_series = price_data["prices"] - for entry in price_time_series: - timestamp = dt.fromtimestamp(entry[0] / 1000) - token_price = entry[1] - prices.append( - Price( - timestamp=timestamp, - usd_price=token_price, - token_address=token_address, - ) - ) + prices += _build_token_prices(coingecko_price_data, token_address) return prices + + +def _build_token_prices(coingecko_price_data, token_address) -> List[Price]: + time_series = coingecko_price_data["prices"] + prices = [] + for entry in time_series: + timestamp = datetime.fromtimestamp(entry[0] / 1000) + token_price = entry[1] + prices.append( + Price( + timestamp=timestamp, + usd_price=token_price, + token_address=token_address, + ) + ) + return prices