Spaces:
Runtime error
Runtime error
Update app.py
Browse files
app.py
CHANGED
@@ -6,6 +6,7 @@ import base64
|
|
6 |
from bs4 import BeautifulSoup
|
7 |
import hashlib
|
8 |
import json
|
|
|
9 |
|
10 |
EXCLUDED_FILES = ['app.py', 'requirements.txt', 'pre-requirements.txt', 'packages.txt', 'README.md','.gitattributes', "backup.py","Dockerfile"]
|
11 |
|
@@ -55,22 +56,38 @@ def get_download_link(file):
|
|
55 |
href = f'<a href="data:file/octet-stream;base64,{b64}" download=\'{os.path.basename(file)}\'>Click to download {os.path.basename(file)}</a>'
|
56 |
return href
|
57 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
58 |
def file_expander(file_path):
|
59 |
with st.expander(os.path.basename(file_path)):
|
60 |
-
#
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
else:
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
st.
|
|
|
|
|
|
|
|
|
|
|
74 |
|
75 |
# Download link
|
76 |
st.markdown(get_download_link(file_path), unsafe_allow_html=True)
|
|
|
6 |
from bs4 import BeautifulSoup
|
7 |
import hashlib
|
8 |
import json
|
9 |
+
import mimetypes
|
10 |
|
11 |
EXCLUDED_FILES = ['app.py', 'requirements.txt', 'pre-requirements.txt', 'packages.txt', 'README.md','.gitattributes', "backup.py","Dockerfile"]
|
12 |
|
|
|
56 |
href = f'<a href="data:file/octet-stream;base64,{b64}" download=\'{os.path.basename(file)}\'>Click to download {os.path.basename(file)}</a>'
|
57 |
return href
|
58 |
|
59 |
+
|
60 |
+
def is_binary(file_path):
|
61 |
+
"""Determine if the given file is binary or text-based."""
|
62 |
+
try:
|
63 |
+
with open(file_path, 'rb') as f:
|
64 |
+
textchars = bytearray({7,8,9,10,12,13,27} | set(range(0x20, 0x100)) - {0x7f})
|
65 |
+
is_binary_string = lambda bytes: bool(bytes.translate(None, textchars))
|
66 |
+
return is_binary_string(f.read(1024))
|
67 |
+
except:
|
68 |
+
return True
|
69 |
+
|
70 |
def file_expander(file_path):
|
71 |
with st.expander(os.path.basename(file_path)):
|
72 |
+
# Check if file is binary
|
73 |
+
if is_binary(file_path):
|
74 |
+
st.info("This is a binary file and cannot be edited.")
|
75 |
+
# Only display download and delete options for binary files
|
76 |
else:
|
77 |
+
# Text editing functionality for non-binary files
|
78 |
+
file_content = ''
|
79 |
+
if 'edit_content' in st.session_state and st.session_state['edit_content'][0] == file_path:
|
80 |
+
file_content = st.session_state['edit_content'][1]
|
81 |
+
else:
|
82 |
+
with open(file_path, "r") as f:
|
83 |
+
file_content = f.read()
|
84 |
+
|
85 |
+
edited_content = st.text_area("Edit file content:", value=file_content, height=250, key=f"textarea_{file_path}")
|
86 |
+
if st.button("💾 Save", key=f"save_{file_path}"):
|
87 |
+
with open(file_path, "w") as f:
|
88 |
+
f.write(edited_content)
|
89 |
+
st.success(f"File {os.path.basename(file_path)} saved!")
|
90 |
+
st.session_state['edit_content'] = (file_path, edited_content)
|
91 |
|
92 |
# Download link
|
93 |
st.markdown(get_download_link(file_path), unsafe_allow_html=True)
|