DataScribe / views /view_and_download.py
samiee2213's picture
Upload 5 files
a207b64 verified
import streamlit as st
import gspread
from google.oauth2.service_account import Credentials
import pandas as pd
def CreatePage():
st.header("View & Download Results")
if "results" in st.session_state and st.session_state["results"]:
results_df = pd.DataFrame(st.session_state["results"])
st.write("### Results Preview")
# Display the results preview
if "Extracted Information" in results_df.columns and "Search Results" in results_df.columns:
st.dataframe(results_df.style.map(lambda val: 'background-color: #d3f4ff' if isinstance(val, str) else '', subset=["Extracted Information", "Search Results"]))
else:
st.warning("Required columns are missing in results data.")
# Download options
download_option = st.selectbox(
"Select data to download:",
["All Results", "Extracted Information", "Web Results"]
)
if download_option == "All Results":
data_to_download = results_df
elif download_option == "Extracted Information":
data_to_download = results_df[["Entity", "Extracted Information"]]
elif download_option == "Web Results":
data_to_download = results_df[["Entity", "Search Results"]]
st.download_button(
label=f"Download {download_option} as CSV",
data=data_to_download.to_csv(index=False),
file_name=f"{download_option.lower().replace(' ', '_')}.csv",
mime="text/csv"
)
# Option to update Google Sheets
update_option = st.selectbox(
"Do you want to update Google Sheets?",
["No", "Yes"]
)
if update_option == "Yes":
if 'sheet_id' not in st.session_state:
st.session_state.sheet_id = ''
if 'range_name' not in st.session_state:
st.session_state.range_name = ''
# Input fields for Google Sheets ID and Range
sheet_id = st.text_input("Enter Google Sheet ID", value=st.session_state.sheet_id)
range_name = st.text_input("Enter Range (e.g., 'Sheet1!A1')", value=st.session_state.range_name)
if sheet_id and range_name:
st.session_state.sheet_id = sheet_id
st.session_state.range_name = range_name
# Prepare data for update
data_to_update = [results_df.columns.tolist()] + results_df.values.tolist()
# Update Google Sheets button
if st.button("Update Google Sheet"):
try:
if '!' not in range_name:
st.error("Invalid range format. Please use the format 'SheetName!Range'.")
else:
sheet_name, cell_range = range_name.split('!', 1)
scopes = ["https://www.googleapis.com/auth/spreadsheets"]
creds = Credentials.from_service_account_file("/Users/sam22ridhi/Desktop/data/DataScribe/credentials/credentials.json", scopes=scopes)
client = gspread.authorize(creds)
sheet = client.open_by_key(sheet_id).worksheet(sheet_name)
sheet.clear()
sheet.update(f"{cell_range}", data_to_update)
st.success("Data updated in the Google Sheet!")
except Exception as e:
st.error(f"Error updating Google Sheet: {e}")
else:
st.warning("Please enter both the Sheet ID and Range name before updating.")
else:
st.warning("No results available to view. Please run the extraction process.")