refactor: Enhance watchlist debugging with detailed logging and Streamlit output

This commit is contained in:
Bobby (aider) 2025-02-17 16:39:37 -08:00
parent e1a01a6f97
commit 8649949278
2 changed files with 136 additions and 123 deletions

View File

@ -227,19 +227,18 @@ def trading_system_page():
# Move Add to Watch List button outside of columns
if st.button("Add to Watch List", key="add_to_watchlist"):
try:
# Debug information
debug_info = {
# Create a container for debug output
debug_container = st.container()
with debug_container:
st.write("=== PRE-WATCHLIST ITEM CREATION ===")
st.json({
"Ticker": ticker,
"Entry Price": entry_price,
"Target Price": target_price,
"Stop Loss": position['stop_loss'],
"Notes": notes,
"Selected Watchlist ID": selected_list[0]
}
st.write("=== PRE-WATCHLIST ITEM CREATION ===")
st.write(debug_info)
st.write("=====================================")
})
item = WatchlistItem(
ticker=ticker,
@ -250,22 +249,14 @@ def trading_system_page():
)
st.write("=== WATCHLIST ITEM DETAILS ===")
st.write(vars(item))
st.write("==============================")
# Add 2 second delay to ensure debug info is visible
time.sleep(2)
st.json(vars(item))
success = add_to_watchlist(selected_list[0], item)
# Show the result and wait before rerun
st.write(f"Add to watchlist result: {success}")
time.sleep(2)
if success:
st.success(f"Added {ticker} to watch list!")
time.sleep(1)
st.rerun()
time.sleep(3) # Give time to see success message
st.experimental_rerun()
else:
st.error("Failed to add to watch list. Check the details above.")

View File

@ -38,31 +38,41 @@ def get_watchlists() -> List[dict]:
def add_to_watchlist(watchlist_id: int, item: WatchlistItem) -> bool:
with create_client() as client:
try:
# Debug output using st.write
st.write("\n=== WATCHLIST INSERT ATTEMPT ===")
st.write("Input parameters:")
st.write(f"Watchlist ID: {watchlist_id}")
st.write("Item details:", {
"Ticker": item.ticker,
"Entry Price": item.entry_price,
"Target Price": item.target_price,
"Stop Loss": item.stop_loss,
"Notes": item.notes
})
# Debug output using both logger and st.write
debug_msg = f"""
=== WATCHLIST INSERT ATTEMPT ===
Watchlist ID: {watchlist_id}
Item details:
- Ticker: {item.ticker}
- Entry Price: {item.entry_price}
- Target Price: {item.target_price}
- Stop Loss: {item.stop_loss}
- Notes: {item.notes}
==============================
"""
logger.info(debug_msg)
st.code(debug_msg) # Using st.code for better formatting
# Force a container to stay visible
placeholder = st.empty()
with placeholder.container():
# Check if watchlist exists
check_watchlist_query = f"SELECT * FROM stock_db.watchlists WHERE id = {watchlist_id}"
watchlist_result = client.query(check_watchlist_query)
logger.info(f"Watchlist check result: {watchlist_result.result_rows}")
st.write("Watchlist check result:", watchlist_result.result_rows)
if not watchlist_result.result_rows:
st.error(f"Watchlist ID {watchlist_id} not found")
error_msg = f"Watchlist ID {watchlist_id} not found"
logger.error(error_msg)
st.error(error_msg)
return False
# Get next ID
id_query = "SELECT max(id) + 1 as next_id FROM stock_db.watchlist_items"
result = client.query(id_query)
next_id = result.first_row[0] if result.first_row[0] is not None else 1
logger.info(f"Next ID: {next_id}")
st.write(f"Next ID: {next_id}")
# Prepare data
@ -88,10 +98,12 @@ def add_to_watchlist(watchlist_id: int, item: WatchlistItem) -> bool:
]
# Show insert details
st.write("\n=== DATABASE INSERT ATTEMPT ===")
st.write("Data to insert:", data)
st.write("Column names:", column_names)
st.write("Column types:", column_types)
logger.info(f"Data to insert: {data}")
logger.info(f"Column names: {column_names}")
logger.info(f"Column types: {column_types}")
st.write("=== DATABASE INSERT ATTEMPT ===")
st.json({"data": str(data), "columns": column_names, "types": column_types})
# Perform insert
try:
@ -101,9 +113,13 @@ def add_to_watchlist(watchlist_id: int, item: WatchlistItem) -> bool:
column_names=column_names,
column_types=column_types
)
st.write("Insert operation completed successfully")
success_msg = "Insert operation completed successfully"
logger.info(success_msg)
st.success(success_msg)
except Exception as insert_error:
st.error(f"Insert error: {insert_error}")
error_msg = f"Insert error: {insert_error}"
logger.error(error_msg)
st.error(error_msg)
raise
# Verify the insert
@ -114,13 +130,19 @@ def add_to_watchlist(watchlist_id: int, item: WatchlistItem) -> bool:
AND watchlist_id = {watchlist_id}
AND ticker = '{item.ticker}'
"""
logger.info(f"Verification query: {verify_query}")
verify_result = client.query(verify_query)
logger.info(f"Verification result: {verify_result.result_rows}")
st.write("Verification result:", verify_result.result_rows)
if not verify_result.result_rows:
st.error("Verification failed - no rows found after insert")
error_msg = "Verification failed - no rows found after insert"
logger.error(error_msg)
st.error(error_msg)
return False
st.success("Watchlist item added successfully!")
time.sleep(3) # Give time to see the messages
return True
except Exception as e:
logger.error(f"Error adding to watchlist: {e}", exc_info=True)