Files
3cloud-backend/streamlit_server/views/projects.py
T

65 lines
2.6 KiB
Python

import streamlit as st
import pandas as pd
from streamlit_server.utils.helpers import format_timestamp
def render_list():
st.header("Project Management")
# Create Project Form
with st.expander("Create New Project"):
with st.form("create_project"):
name = st.text_input("Project Name")
universes = st.session_state.client.get_universes()
universe_choices = {u['name']: u['id'] for u in universes} if universes else {}
selected_universe = st.selectbox("Select Universe", list(universe_choices.keys()))
submit = st.form_submit_button("Create Project")
if submit and name and selected_universe:
result = st.session_state.client.create_project(name, universe_choices[selected_universe])
if result:
st.success(f"Project '{name}' created successfully!")
# List Projects
st.subheader("Existing Projects")
projects = st.session_state.client.get_projects()
if projects:
for project in projects:
with st.container():
col1, col2, col3 = st.columns([3, 1, 1])
with col1:
st.markdown(f"### {project['name']}")
st.text(f"Created: {format_timestamp(project['created_at'])}")
with col2:
st.text(f"ID: {project['id'][:8]}...")
with col3:
if st.button("View Details", key=f"view_{project['id']}"):
st.session_state.selected_resource = project
st.session_state.view_type = 'detail'
st.session_state.selected_resource_type='project'
st.rerun() # Force Streamlit to rerun the script
def render_detail():
project = st.session_state.client.get_project(st.session_state.selected_resource['id'])
st.title(f"Project: {project['name']}")
if st.button("Back to list view"):
st.session_state.view_type = 'list'
st.rerun()
st.header("Project Details")
col1, col2 = st.columns(2)
with col1:
st.markdown(f"**ID:** `{project['id']}`")
st.markdown(f"**Created:** {format_timestamp(project['created_at'])}")
with col2:
st.markdown(f"**Universe ID:** `{project['universe_id']}`")
if project.get('updated_at'):
st.markdown(f"**Last Updated:** {format_timestamp(project['updated_at'])}")
if st.session_state.view_type == 'detail' and st.session_state.selected_resource_type=='project':
render_detail()
else:
render_list()