File size: 2,403 Bytes
5e51056 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
import streamlit as st
import os
import shutil
from git import Repo
# Set up a directory for saving files
SAVE_DIR = "saved_projects"
if not os.path.exists(SAVE_DIR):
os.makedirs(SAVE_DIR)
def save_uploaded_files(uploaded_files):
"""Save uploaded files to the SAVE_DIR."""
project_dir = os.path.join(SAVE_DIR, "uploaded_project")
if os.path.exists(project_dir):
shutil.rmtree(project_dir) # Clean up existing files
os.makedirs(project_dir)
for uploaded_file in uploaded_files:
with open(os.path.join(project_dir, uploaded_file.name), "wb") as f:
f.write(uploaded_file.getbuffer())
return project_dir
def clone_repository(repo_url):
"""Clone a GitHub repository into SAVE_DIR."""
repo_name = repo_url.split("/")[-1].replace(".git", "")
repo_dir = os.path.join(SAVE_DIR, repo_name)
if os.path.exists(repo_dir):
shutil.rmtree(repo_dir) # Clean up existing files
Repo.clone_from(repo_url, repo_dir)
return repo_dir
def main():
st.title("Project Manager App")
st.write("Upload your project files or clone a GitHub repository.")
# Sidebar for navigation
option = st.sidebar.selectbox(
"Choose an option:",
("Upload Files", "Clone GitHub Repository")
)
if option == "Upload Files":
st.header("Upload Files")
uploaded_files = st.file_uploader(
"Upload your coding project files (multiple files allowed):",
accept_multiple_files=True
)
if uploaded_files:
saved_path = save_uploaded_files(uploaded_files)
st.success(f"Files saved to {saved_path}")
elif option == "Clone GitHub Repository":
st.header("Clone GitHub Repository")
repo_url = st.text_input("Enter the GitHub repository URL:")
if repo_url:
if st.button("Clone Repository"):
try:
repo_path = clone_repository(repo_url)
st.success(f"Repository cloned to {repo_path}")
except Exception as e:
st.error(f"Error cloning repository: {e}")
# Display saved projects
st.header("Saved Projects")
if os.listdir(SAVE_DIR):
for project in os.listdir(SAVE_DIR):
st.write(f"- {project}")
else:
st.write("No projects saved yet.")
if __name__ == "__main__":
main()
|