Update app.py
Browse files
app.py
CHANGED
@@ -93,6 +93,7 @@ def login_page():
|
|
93 |
else:
|
94 |
st.error("Please fill in all fields.")
|
95 |
|
|
|
96 |
def workspace_page():
|
97 |
# Sidebar with logout button
|
98 |
st.sidebar.title(f"Hello, {st.session_state.username}!")
|
@@ -101,6 +102,16 @@ def workspace_page():
|
|
101 |
st.session_state.username = None
|
102 |
st.session_state.page = "login"
|
103 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
104 |
# Main content area
|
105 |
st.subheader("Workspace")
|
106 |
st.write("You can create a new project by uploading files or folders, or by cloning a GitHub repository.")
|
@@ -118,12 +129,12 @@ def workspace_page():
|
|
118 |
|
119 |
if uploaded_files and project_name:
|
120 |
if st.button("Upload Project"):
|
121 |
-
|
122 |
-
os.makedirs(
|
123 |
|
124 |
for uploaded_file in uploaded_files:
|
125 |
# Save uploaded .zip files or regular files
|
126 |
-
file_path = os.path.join(
|
127 |
|
128 |
with open(file_path, "wb") as f:
|
129 |
f.write(uploaded_file.getbuffer())
|
@@ -132,13 +143,14 @@ def workspace_page():
|
|
132 |
if uploaded_file.name.endswith(".zip"):
|
133 |
try:
|
134 |
with zipfile.ZipFile(file_path, "r") as zip_ref:
|
135 |
-
zip_ref.extractall(
|
136 |
os.remove(file_path) # Remove the .zip file after extraction
|
137 |
st.success(f"Folder from {uploaded_file.name} extracted successfully!")
|
138 |
except zipfile.BadZipFile:
|
139 |
st.error(f"File {uploaded_file.name} is not a valid .zip file.")
|
140 |
else:
|
141 |
st.success(f"File {uploaded_file.name} saved successfully!")
|
|
|
142 |
|
143 |
elif action == "Clone GitHub Repository":
|
144 |
st.subheader("Clone GitHub Repository")
|
@@ -146,15 +158,40 @@ def workspace_page():
|
|
146 |
|
147 |
if repo_url and project_name:
|
148 |
if st.button("Upload Project"):
|
149 |
-
|
150 |
-
os.makedirs(
|
151 |
|
152 |
try:
|
153 |
-
Repo.clone_from(repo_url,
|
154 |
st.success(f"Project '{project_name}' cloned successfully!")
|
155 |
except Exception as e:
|
156 |
st.error(f"Failed to clone repository: {e}")
|
157 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
158 |
if __name__ == "__main__":
|
159 |
main()
|
160 |
|
|
|
93 |
else:
|
94 |
st.error("Please fill in all fields.")
|
95 |
|
96 |
+
|
97 |
def workspace_page():
|
98 |
# Sidebar with logout button
|
99 |
st.sidebar.title(f"Hello, {st.session_state.username}!")
|
|
|
102 |
st.session_state.username = None
|
103 |
st.session_state.page = "login"
|
104 |
|
105 |
+
# Display "Projects" dropdown
|
106 |
+
user_folder = os.path.join("user_projects", st.session_state.username)
|
107 |
+
os.makedirs(user_folder, exist_ok=True)
|
108 |
+
projects = [d for d in os.listdir(user_folder) if os.path.isdir(os.path.join(user_folder, d))]
|
109 |
+
selected_project = st.sidebar.selectbox("Projects", ["Select a project"] + projects)
|
110 |
+
|
111 |
+
if selected_project != "Select a project":
|
112 |
+
st.session_state.current_project = selected_project
|
113 |
+
st.session_state.page = "project_view"
|
114 |
+
|
115 |
# Main content area
|
116 |
st.subheader("Workspace")
|
117 |
st.write("You can create a new project by uploading files or folders, or by cloning a GitHub repository.")
|
|
|
129 |
|
130 |
if uploaded_files and project_name:
|
131 |
if st.button("Upload Project"):
|
132 |
+
project_folder = os.path.join(user_folder, project_name)
|
133 |
+
os.makedirs(project_folder, exist_ok=True)
|
134 |
|
135 |
for uploaded_file in uploaded_files:
|
136 |
# Save uploaded .zip files or regular files
|
137 |
+
file_path = os.path.join(project_folder, uploaded_file.name)
|
138 |
|
139 |
with open(file_path, "wb") as f:
|
140 |
f.write(uploaded_file.getbuffer())
|
|
|
143 |
if uploaded_file.name.endswith(".zip"):
|
144 |
try:
|
145 |
with zipfile.ZipFile(file_path, "r") as zip_ref:
|
146 |
+
zip_ref.extractall(project_folder)
|
147 |
os.remove(file_path) # Remove the .zip file after extraction
|
148 |
st.success(f"Folder from {uploaded_file.name} extracted successfully!")
|
149 |
except zipfile.BadZipFile:
|
150 |
st.error(f"File {uploaded_file.name} is not a valid .zip file.")
|
151 |
else:
|
152 |
st.success(f"File {uploaded_file.name} saved successfully!")
|
153 |
+
st.success(f"Project '{project_name}' uploaded successfully!")
|
154 |
|
155 |
elif action == "Clone GitHub Repository":
|
156 |
st.subheader("Clone GitHub Repository")
|
|
|
158 |
|
159 |
if repo_url and project_name:
|
160 |
if st.button("Upload Project"):
|
161 |
+
project_folder = os.path.join(user_folder, project_name)
|
162 |
+
os.makedirs(project_folder, exist_ok=True)
|
163 |
|
164 |
try:
|
165 |
+
Repo.clone_from(repo_url, project_folder)
|
166 |
st.success(f"Project '{project_name}' cloned successfully!")
|
167 |
except Exception as e:
|
168 |
st.error(f"Failed to clone repository: {e}")
|
169 |
|
170 |
+
def project_view_page():
|
171 |
+
# Sidebar with logout and return buttons
|
172 |
+
st.sidebar.title(f"Project: {st.session_state.current_project}")
|
173 |
+
if st.sidebar.button("Back to Workspace"):
|
174 |
+
st.session_state.page = "workspace"
|
175 |
+
if st.sidebar.button("Log Out"):
|
176 |
+
st.session_state.authenticated = False
|
177 |
+
st.session_state.username = None
|
178 |
+
st.session_state.page = "login"
|
179 |
+
|
180 |
+
# Display project file structure
|
181 |
+
st.subheader(f"Project: {st.session_state.current_project}")
|
182 |
+
user_folder = os.path.join("user_projects", st.session_state.username)
|
183 |
+
project_folder = os.path.join(user_folder, st.session_state.current_project)
|
184 |
+
|
185 |
+
st.write("File structure:")
|
186 |
+
for root, dirs, files in os.walk(project_folder):
|
187 |
+
level = root.replace(project_folder, "").count(os.sep)
|
188 |
+
indent = " " * 4 * level
|
189 |
+
st.text(f"{indent}{os.path.basename(root)}/")
|
190 |
+
sub_indent = " " * 4 * (level + 1)
|
191 |
+
for file in files:
|
192 |
+
st.text(f"{sub_indent}{file}")
|
193 |
+
|
194 |
+
|
195 |
if __name__ == "__main__":
|
196 |
main()
|
197 |
|