Spaces:
Build error
Build error
import streamlit as st | |
import streamlit_antd_components as sac | |
import pandas as pd | |
from st_aggrid import AgGrid | |
import time | |
import json | |
def files(): | |
st.title('Files') | |
col = st.columns([4, 1]) | |
with col[0]: | |
st.subheader("Below are the files that are uploaded for current session.") | |
with st.expander('Upload', False): | |
uploaded_file = st.file_uploader("Choose a file", type=['xlsx'], accept_multiple_files=False) | |
if uploaded_file is not None: | |
st.session_state.sna.add_file(uploaded_file) | |
st.info("File uploaded successfully.") | |
uploaded_file = None | |
with st.expander('Files', True): | |
files = st.session_state.sna.get_files() | |
file_tree_items = [] | |
for file in files: | |
parts = file.split('/') | |
file_tree_items.append(sac.TreeItem(parts[-1])) | |
selected_files = sac.tree(items=file_tree_items,checkbox=True) | |
raw_selected_files = None | |
if len(selected_files) == 1: | |
for file in selected_files: | |
for raw_file in files: | |
if raw_file.endswith(file): | |
raw_selected_files = raw_file | |
st.write("Selected file: ",raw_file) | |
if raw_selected_files is not None: | |
if str(raw_selected_files).endswith(".json"): | |
with st.expander('View', False): | |
with open(raw_selected_files) as f: | |
data = json.load(f) | |
st.json(data) | |
else: | |
with st.expander('View', False): | |
all_sheets = pd.read_excel(raw_selected_files,sheet_name=None, engine='openpyxl') | |
tab_items = [] | |
for sheet_name, df in all_sheets.items(): | |
tab_items.append(sac.TabsItem(label=sheet_name)) | |
tab = sac.tabs(tab_items,key="view",index=None) | |
if tab is not None: | |
for sheet_name, df in all_sheets.items(): | |
if sheet_name == tab: | |
st.dataframe(df) | |
break | |
with st.expander('Load', True): | |
data_loading_response = None | |
generate_helper = st.session_state.sna.generate_data_dictionary(raw_selected_files) | |
generate_helper_reset = generate_helper.copy() | |
load_action_controls = st.columns([1,1,1,1,1,1,1,1,1,1,1,1,1]) | |
with load_action_controls[-3]: | |
if st.button("Save",type="primary"): | |
st.rerun() | |
with load_action_controls[-2]: | |
if st.button("Reset",type="primary"): | |
st.session_state[raw_selected_files] = generate_helper_reset.copy() | |
generate_helper = generate_helper_reset.copy() | |
st.rerun() | |
with load_action_controls[-1]: | |
if st.button("Load",type="primary"): | |
print("Loading") | |
load_response = st.session_state.sna.load_data(raw_selected_files,st.session_state[raw_selected_files]) | |
data_loading_response = load_response | |
if data_loading_response is not None: | |
container_message = st.empty() | |
if data_loading_response["status"]: | |
container_message.success(data_loading_response["message"]) | |
time.sleep(3) | |
container_message.empty() | |
else: | |
container_message.error(data_loading_response["message"]) | |
time.sleep(3) | |
container_message.empty() | |
if raw_selected_files in st.session_state: | |
generate_helper = st.session_state[raw_selected_files] | |
else: | |
st.session_state[raw_selected_files] = generate_helper.copy() | |
tab_items_load = [] | |
for sheet_name in generate_helper: | |
tab_items_load.append(sac.TabsItem(label=sheet_name)) | |
tab_load = sac.tabs(tab_items_load,key='load') | |
if tab_load is not None: | |
for sheet_name in generate_helper: | |
if sheet_name == tab_load: | |
loading_columns = st.columns([1,1,1]) | |
with loading_columns[0]: | |
if generate_helper[sheet_name]["isTable"]: | |
st.write("Columns") | |
if "columns" in generate_helper[sheet_name]: | |
for column in generate_helper[sheet_name]["columns"]: | |
data_type_stg = 0 | |
if generate_helper[sheet_name]["columns"][column] == "STRING": | |
data_type_stg = 0 | |
elif generate_helper[sheet_name]["columns"][column] == "INT64": | |
data_type_stg = 1 | |
elif generate_helper[sheet_name]["columns"][column] == "FLOAT": | |
data_type_stg = 2 | |
value = st.radio(column,["STRING","INT64","FLOAT"],index=data_type_stg,horizontal=True,key=f"{sheet_name}_{column}") | |
if value is not None: | |
generate_helper[sheet_name]["columns"][column] = value | |
st.session_state[raw_selected_files] = generate_helper.copy() | |
elif generate_helper[sheet_name]["isRelationship"]: | |
tables = [] | |
for table in generate_helper: | |
if "isTable" in generate_helper[table]: | |
if generate_helper[table]["isTable"]: | |
tables.append(table) | |
st.write("Relationship") | |
source_stg = 0 | |
target_stg = 0 | |
if "source" in generate_helper[sheet_name]: | |
if generate_helper[sheet_name]["source"] in tables: | |
source_stg = tables.index(generate_helper[sheet_name]["source"]) | |
if "target" in generate_helper[sheet_name]: | |
if generate_helper[sheet_name]["target"] in tables: | |
target_stg = tables.index(generate_helper[sheet_name]["target"]) | |
source = st.selectbox("Source",tables,index=source_stg,key=f"source_{sheet_name}") | |
target = st.selectbox("Target",tables,index=target_stg,key=f"target_{sheet_name}") | |
if source is not None: | |
generate_helper[sheet_name]["source"] = source | |
st.session_state[raw_selected_files] = generate_helper.copy() | |
if target is not None: | |
generate_helper[sheet_name]["target"] = target | |
st.session_state[raw_selected_files] = generate_helper.copy() | |
else: | |
st.write("Ignored") | |
with loading_columns[1]: | |
st.write("Object Properties") | |
if generate_helper[sheet_name]["isTable"]: | |
object_type_stg = 0 | |
elif generate_helper[sheet_name]["isRelationship"]: | |
object_type_stg = 1 | |
else: | |
object_type_stg = 2 | |
object_type = st.radio("Object Type",["Table","Relationship","Ignore"],index=object_type_stg,horizontal=True,key=f"object_type_{sheet_name}") | |
if object_type == "Table": | |
if not generate_helper[sheet_name]["isTable"]: | |
generate_helper[sheet_name]["isTable"] = True | |
generate_helper[sheet_name]["isRelationship"] = False | |
st.session_state[raw_selected_files] = generate_helper.copy() | |
st.rerun() | |
elif object_type == "Relationship": | |
if not generate_helper[sheet_name]["isRelationship"]: | |
generate_helper[sheet_name]["isTable"] = False | |
generate_helper[sheet_name]["isRelationship"] = True | |
st.session_state[raw_selected_files] = generate_helper.copy() | |
st.rerun() | |
else: | |
if generate_helper[sheet_name]["isTable"] or generate_helper[sheet_name]["isRelationship"]: | |
generate_helper[sheet_name]["isTable"] = False | |
generate_helper[sheet_name]["isRelationship"] = False | |
st.session_state[raw_selected_files] = generate_helper.copy() | |
st.rerun() | |
object_name = st.text_input("Object Name",generate_helper[sheet_name]["object_name"]) | |
if object_name is not None: | |
generate_helper[sheet_name]["object_name"] = object_name | |
st.session_state[raw_selected_files] = generate_helper.copy() | |
if generate_helper[sheet_name]["isTable"]: | |
int_64_keys = [] | |
if "columns" in generate_helper[sheet_name]: | |
for column in generate_helper[sheet_name]["columns"]: | |
if generate_helper[sheet_name]["columns"][column] == "INT64": | |
int_64_keys.append(column) | |
primary_key_staging = 0 | |
if generate_helper[sheet_name]["primary_key"] in int_64_keys: | |
primary_key_staging = int_64_keys.index(generate_helper[sheet_name]["primary_key"]) | |
primary_key = st.selectbox("Primary Key",int_64_keys,index=primary_key_staging,key=f"primary_key_{sheet_name}") | |
if primary_key is not None: | |
generate_helper[sheet_name]["primary_key"] = primary_key | |
st.session_state[raw_selected_files] = generate_helper.copy() | |
with loading_columns[2]: | |
st.write("Helper Object") | |
st.write(generate_helper[sheet_name]) | |
break | |