vsj0702 commited on
Commit
7add1f7
Β·
verified Β·
1 Parent(s): 1ab7509

Adding default code and file limit

Browse files
Files changed (1) hide show
  1. code_editor.py +34 -47
code_editor.py CHANGED
@@ -1,9 +1,9 @@
1
  import streamlit as st
2
  import streamlit_ace as st_ace
3
  import os
 
4
  from pathlib import Path
5
  from utils import execute_code
6
- import time, psutil
7
 
8
  DEFAULT_SNIPPETS = {
9
  "Python": '''# default code\na = int(input())\nb = int(input())\nprint("Sum:", a + b)''',
@@ -23,60 +23,52 @@ EXT_LANG_MAP = {
23
  ".cs": "C#"
24
  }
25
 
26
- def render_code_editor(ace_theme):
27
- # ── Language Selector ───────────────────────
28
- languages = list(DEFAULT_SNIPPETS.keys())
29
- selected_lang = st.selectbox("Language", languages, index=languages.index(st.session_state.get("language", "Python")))
30
- st.session_state.language = selected_lang
31
-
32
- # ── File Upload ─────────────────────────────
33
  uploaded_file = st.file_uploader("πŸ“€ Upload file", type=["py", "cpp", "c", "java", "js", "cs", "txt"])
34
 
35
  if uploaded_file:
36
  if uploaded_file.size > 10 * 1024 * 1024:
37
  st.error("🚫 File too large. Max allowed is 10MB.")
38
  else:
39
- file_content = uploaded_file.read().decode("utf-8", errors="ignore")
40
  filename = uploaded_file.name
41
-
42
- # Detect change: file name or content changed
43
  prev_name = st.session_state.get("uploaded_file_name")
44
  prev_content = st.session_state.get("uploaded_file_content")
45
 
46
- if file_content != prev_content or filename != prev_name:
47
- ext = Path(filename).suffix.lower()
48
- detected_lang = EXT_LANG_MAP.get(ext)
49
-
50
  st.session_state.uploaded_file_name = filename
51
- st.session_state.uploaded_file_content = file_content
52
 
 
53
  if detected_lang:
54
  st.session_state.language = detected_lang
55
  st.session_state.prev_language = detected_lang
56
- st.session_state.code = file_content
57
  st.toast(f"βœ… Auto-switched to {detected_lang}", icon="πŸ”„")
58
  st.rerun()
59
  elif ext == ".txt":
60
- st.session_state.code = file_content
61
  st.toast("πŸ“„ Loaded text file", icon="πŸ“„")
62
  else:
63
  st.error("❌ Unsupported file format.")
64
-
65
- # ── Reset Language if Needed ─────────────────
66
- selected_lang = st.session_state.language
67
- default_code = DEFAULT_SNIPPETS[selected_lang]
68
- previous_lang = st.session_state.get("prev_language")
69
-
70
- if (
71
- st.session_state.get("code") is None
72
- or st.session_state.code.strip() == ""
73
- or selected_lang != previous_lang
74
- or st.session_state.code.strip() == DEFAULT_SNIPPETS.get(previous_lang, "")
75
- ):
76
- st.session_state.code = default_code
77
- st.session_state.prev_language = selected_lang
78
-
79
- # ── Code Editor ─────────────────────────────
80
  code = st_ace.st_ace(
81
  value=st.session_state.code,
82
  placeholder=f"Start typing your {selected_lang} code…",
@@ -88,13 +80,13 @@ def render_code_editor(ace_theme):
88
  show_gutter=True,
89
  wrap=True,
90
  auto_update=True,
91
- key=f"editor_{selected_lang}"
92
  )
93
 
94
  if code != st.session_state.code:
95
  st.session_state.code = code
96
 
97
- # ── Stdin ─────────────────────────────
98
  user_input = st.text_area(
99
  "πŸ“₯ Input (stdin)",
100
  value=st.session_state.stdin,
@@ -105,7 +97,7 @@ def render_code_editor(ace_theme):
105
  if user_input != st.session_state.stdin:
106
  st.session_state.stdin = user_input
107
 
108
- # ── Run Button ─────────────────────────────
109
  if st.button("▢️ Run"):
110
  start_time = time.perf_counter()
111
  process = psutil.Process()
@@ -127,21 +119,16 @@ def render_code_editor(ace_theme):
127
  st.text_area("πŸ“€ Output", out or "(no output)", height=120)
128
  if err or exc:
129
  st.error(err or exc)
130
-
131
  st.markdown(f"⏱️ **Execution Time:** `{exec_time:.4f}s`")
132
  st.markdown(f"πŸ’Ύ **Memory Used:** `{mem_used:.2f} KB`")
133
 
134
- # ── Download Button ─────────────────────────────
135
  if st.session_state.code:
136
- lang_extension = {
137
- "Python": "py",
138
- "C": "c",
139
- "C++": "cpp",
140
- "Java": "java",
141
- "JavaScript": "js",
142
- "C#": "cs"
143
  }
144
- ext = lang_extension.get(selected_lang, "txt")
145
 
146
  st.download_button(
147
  label="πŸ’Ύ Download Code",
 
1
  import streamlit as st
2
  import streamlit_ace as st_ace
3
  import os
4
+ import time, psutil
5
  from pathlib import Path
6
  from utils import execute_code
 
7
 
8
  DEFAULT_SNIPPETS = {
9
  "Python": '''# default code\na = int(input())\nb = int(input())\nprint("Sum:", a + b)''',
 
23
  ".cs": "C#"
24
  }
25
 
26
+ def render_code_editor(selected_lang, ace_theme, editor_key):
 
 
 
 
 
 
27
  uploaded_file = st.file_uploader("πŸ“€ Upload file", type=["py", "cpp", "c", "java", "js", "cs", "txt"])
28
 
29
  if uploaded_file:
30
  if uploaded_file.size > 10 * 1024 * 1024:
31
  st.error("🚫 File too large. Max allowed is 10MB.")
32
  else:
33
+ content = uploaded_file.read().decode("utf-8", errors="ignore")
34
  filename = uploaded_file.name
35
+ ext = Path(filename).suffix.lower()
36
+
37
  prev_name = st.session_state.get("uploaded_file_name")
38
  prev_content = st.session_state.get("uploaded_file_content")
39
 
40
+ if content != prev_content or filename != prev_name:
 
 
 
41
  st.session_state.uploaded_file_name = filename
42
+ st.session_state.uploaded_file_content = content
43
 
44
+ detected_lang = EXT_LANG_MAP.get(ext)
45
  if detected_lang:
46
  st.session_state.language = detected_lang
47
  st.session_state.prev_language = detected_lang
48
+ st.session_state.code = content
49
  st.toast(f"βœ… Auto-switched to {detected_lang}", icon="πŸ”„")
50
  st.rerun()
51
  elif ext == ".txt":
52
+ st.session_state.code = content
53
  st.toast("πŸ“„ Loaded text file", icon="πŸ“„")
54
  else:
55
  st.error("❌ Unsupported file format.")
56
+ return
57
+
58
+ # Handle default fallback (only if no upload or no valid code set)
59
+ previous_lang = st.session_state.get("prev_language")
60
+ default_code = DEFAULT_SNIPPETS[selected_lang]
61
+
62
+ if (
63
+ st.session_state.get("code") is None
64
+ or st.session_state.code.strip() == ""
65
+ or selected_lang != previous_lang
66
+ or st.session_state.code.strip() == DEFAULT_SNIPPETS.get(previous_lang, "")
67
+ ):
68
+ st.session_state.code = default_code
69
+ st.session_state.prev_language = selected_lang
70
+
71
+ # ── ACE Editor ──────────────────────────────
72
  code = st_ace.st_ace(
73
  value=st.session_state.code,
74
  placeholder=f"Start typing your {selected_lang} code…",
 
80
  show_gutter=True,
81
  wrap=True,
82
  auto_update=True,
83
+ key=editor_key
84
  )
85
 
86
  if code != st.session_state.code:
87
  st.session_state.code = code
88
 
89
+ # ── Input ──────────────────────────────
90
  user_input = st.text_area(
91
  "πŸ“₯ Input (stdin)",
92
  value=st.session_state.stdin,
 
97
  if user_input != st.session_state.stdin:
98
  st.session_state.stdin = user_input
99
 
100
+ # ── Run Button ──────────────────────────────
101
  if st.button("▢️ Run"):
102
  start_time = time.perf_counter()
103
  process = psutil.Process()
 
119
  st.text_area("πŸ“€ Output", out or "(no output)", height=120)
120
  if err or exc:
121
  st.error(err or exc)
 
122
  st.markdown(f"⏱️ **Execution Time:** `{exec_time:.4f}s`")
123
  st.markdown(f"πŸ’Ύ **Memory Used:** `{mem_used:.2f} KB`")
124
 
125
+ # ── Download ──────────────────────────────
126
  if st.session_state.code:
127
+ lang_ext = {
128
+ "Python": "py", "C": "c", "C++": "cpp", "Java": "java",
129
+ "JavaScript": "js", "C#": "cs"
 
 
 
 
130
  }
131
+ ext = lang_ext.get(selected_lang, "txt")
132
 
133
  st.download_button(
134
  label="πŸ’Ύ Download Code",