Spaces:
Runtime error
Runtime error
import logging | |
import requests | |
import pandas as pd | |
import streamlit as st | |
from constants import COIN_API_ENDPOINT, BITCOIN_DATA_ANALYSIS_TITLE, TOOL_INVITATION_DESCRIPTION | |
from market_data_calculator import MarketDataCalculator | |
from data_retriever import DataRetriever | |
import prediction | |
import visualize | |
# Logging setup | |
logging.basicConfig( | |
filename='app.log', | |
level=logging.INFO, | |
format='%(asctime)s - %(levelname)s - %(message)s' | |
) | |
def apply_market_calculations(df, calculations): | |
"""Applies a series of market calculations on the DataFrame.""" | |
for calculation in calculations: | |
df = calculation(df) | |
return df | |
def visualize_data(df): | |
"""Visualizes the market data using various methods.""" | |
visualize.market_data(df) | |
visualize.volatility(df) | |
visualize.trade_velocity(df) | |
visualize.rsi_and_macd(df) | |
def display_video(): | |
"""Displays a WEBM video.""" | |
with open('app.webm', 'rb') as video_file: | |
st.video(video_file.read(), format='video/webm') | |
def fetch_and_predict_data(api_key, period): | |
limit = DataRetriever.set_limit(period) | |
url = f"{COIN_API_ENDPOINT}?period_id={period}&limit={limit}" | |
headers = {"X-CoinAPI-Key": api_key} | |
data = DataRetriever.retrieve_data(url, headers) | |
if isinstance(data, list) and data: | |
df = pd.DataFrame(data) | |
calculations = [ | |
MarketDataCalculator.convert_to_datetime, | |
MarketDataCalculator.calculate_market_data, | |
MarketDataCalculator.calculate_volatility, | |
MarketDataCalculator.calculate_trade_velocity, | |
MarketDataCalculator.calculate_rsi, | |
MarketDataCalculator.calculate_macd | |
] | |
df = apply_market_calculations(df, calculations) | |
df = prediction.append_forecasted_data(df) | |
return df | |
else: | |
st.write(f"Unexpected response format: {data}") | |
return None | |
def main(): | |
st.title(BITCOIN_DATA_ANALYSIS_TITLE) | |
st.write(TOOL_INVITATION_DESCRIPTION) | |
display_video() | |
col1, col2 = st.columns(2) | |
api_key = col1.text_input('Enter your CoinAPI.io API Key:', type='password') | |
period = col2.selectbox('Select the time period:', ['1HRS', '4HRS', '12HRS']) | |
if api_key: | |
try: | |
df = fetch_and_predict_data(api_key, period) | |
if df is not None: | |
visualize_data(df) | |
except requests.RequestException as e: | |
logging.error(f"Request error: {e}") | |
st.write(f"Request error: {e}") | |
except Exception as e: | |
logging.error(f"An unknown error occurred: {e}") | |
st.write(f"An unknown error occurred: {e}") | |
if __name__ == "__main__": | |
main() | |