SDLC / src /sdlc /ui /streamlitui /display_code.py
sunithalv's picture
Updated latest code changes
c8fb072
import streamlit as st
from langgraph.types import Command
import zipfile
import io
def create_zip(generated_code):
zip_buffer = io.BytesIO()
with zipfile.ZipFile(zip_buffer, "w", zipfile.ZIP_DEFLATED) as zip_file:
for file_path, code_content in generated_code.items():
zip_file.writestr(file_path, code_content)
zip_buffer.seek(0)
return zip_buffer
def display_code_files(self, generated_code):
st.title("Generated Code Review")
st.subheader("📄 Generated Code Files")
# Display all code files
for file_path, code_content in generated_code.items():
st.markdown(f"**`{file_path}`**")
st.code(code_content, language="python") # adjust language as needed
# Create ZIP only once
if "zip_buffer" not in st.session_state:
st.session_state.zip_buffer = create_zip(generated_code)
# Download button
st.download_button(
label="⬇️ Download All as ZIP",
data=st.session_state.zip_buffer,
file_name="generated_code.zip",
mime="application/zip"
)
# Inline Approve + Feedback Form
st.divider()
with st.form(key="approve_feedback_form"):
col1, col2 = st.columns([1, 4]) # Adjust ratio as needed
with col1:
approve = st.form_submit_button("✅ Approve")
with col2:
feedback = st.text_area("Edit/Submit feedback if not approved:", value=self.feedback, height=700)
submit_feedback = st.form_submit_button("✏️ Submit Feedback")
if approve:
self.graph.invoke(Command(resume=""), config=st.session_state.thread)
if self.index < len(self.sdlc_nodes) - 1:
st.session_state.curr_state = self.sdlc_nodes[self.index + 1]
st.session_state.feedback_text = ""
st.rerun()
elif submit_feedback and feedback.strip():
st.session_state.feedback_text = feedback
self.graph.invoke(Command(resume=feedback), config=st.session_state.thread)
st.session_state.feedback_text = ""
st.rerun()