vsj0702 commited on
Commit
c6c4170
Β·
verified Β·
1 Parent(s): 36e1e5a

Update code_editor.py

Browse files
Files changed (1) hide show
  1. code_editor.py +22 -16
code_editor.py CHANGED
@@ -5,7 +5,6 @@ from pathlib import Path
5
  from utils import execute_code
6
  import time, psutil
7
 
8
- # Default code snippets
9
  DEFAULT_SNIPPETS = {
10
  "Python": '''# default code\na = int(input())\nb = int(input())\nprint("Sum:", a + b)''',
11
  "C": '''// default code\n#include <stdio.h>\nint main() {\n int a, b;\n scanf("%d %d", &a, &b);\n printf("Sum: %d\\n", a + b);\n return 0;\n}''',
@@ -24,25 +23,29 @@ EXT_LANG_MAP = {
24
  ".cs": "C#"
25
  }
26
 
27
- def render_code_editor(selected_lang, ace_theme, editor_key):
28
- # ── Handle File Upload ──────────────────────────────
 
 
 
 
 
29
  uploaded_file = st.file_uploader("πŸ“€ Upload file", type=["py", "cpp", "c", "java", "js", "cs", "txt"])
 
 
 
30
 
31
- if uploaded_file:
32
  if uploaded_file.size > 10 * 1024 * 1024:
33
  st.error("🚫 File too large. Max allowed is 10MB.")
34
  else:
35
  content = uploaded_file.read().decode("utf-8", errors="ignore")
36
  ext = Path(uploaded_file.name).suffix.lower()
37
-
38
  detected_lang = EXT_LANG_MAP.get(ext)
 
39
  if detected_lang:
40
  st.session_state.language = detected_lang
41
- st.session_state.prev_language = detected_lang
42
- selected_lang = detected_lang
43
  st.toast(f"βœ… Auto-switched to {detected_lang}", icon="πŸ”„")
44
- st.rerun()
45
-
46
  elif ext == ".txt":
47
  st.toast("πŸ“„ Loaded text file", icon="πŸ“„")
48
  else:
@@ -50,8 +53,11 @@ def render_code_editor(selected_lang, ace_theme, editor_key):
50
  return
51
 
52
  st.session_state.code = content
 
 
53
 
54
- # ── Load/Reset Code ──────────────────────────────
 
55
  default_code = DEFAULT_SNIPPETS[selected_lang]
56
  previous_lang = st.session_state.get("prev_language")
57
 
@@ -64,7 +70,7 @@ def render_code_editor(selected_lang, ace_theme, editor_key):
64
  st.session_state.code = default_code
65
  st.session_state.prev_language = selected_lang
66
 
67
- # ── ACE Editor ──────────────────────────────
68
  code = st_ace.st_ace(
69
  value=st.session_state.code,
70
  placeholder=f"Start typing your {selected_lang} code…",
@@ -76,13 +82,13 @@ def render_code_editor(selected_lang, ace_theme, editor_key):
76
  show_gutter=True,
77
  wrap=True,
78
  auto_update=True,
79
- key=editor_key
80
  )
81
 
82
  if code != st.session_state.code:
83
  st.session_state.code = code
84
 
85
- # ── Input for stdin ──────────────────────────────
86
  user_input = st.text_area(
87
  "πŸ“₯ Input (stdin)",
88
  value=st.session_state.stdin,
@@ -93,7 +99,7 @@ def render_code_editor(selected_lang, ace_theme, editor_key):
93
  if user_input != st.session_state.stdin:
94
  st.session_state.stdin = user_input
95
 
96
- # ── Execute Button ──────────────────────────────
97
  if st.button("▢️ Run"):
98
  start_time = time.perf_counter()
99
  process = psutil.Process()
@@ -107,7 +113,7 @@ def render_code_editor(selected_lang, ace_theme, editor_key):
107
 
108
  exec_time = time.perf_counter() - start_time
109
  mem_after = process.memory_info().rss
110
- mem_used = (mem_after - mem_before) / 1024 # KB
111
 
112
  st.session_state.code_output = out
113
  st.session_state.error_output = err or exc
@@ -119,7 +125,7 @@ def render_code_editor(selected_lang, ace_theme, editor_key):
119
  st.markdown(f"⏱️ **Execution Time:** `{exec_time:.4f}s`")
120
  st.markdown(f"πŸ’Ύ **Memory Used:** `{mem_used:.2f} KB`")
121
 
122
- # ── Download Button ──────────────────────────────
123
  if st.session_state.code:
124
  lang_extension = {
125
  "Python": "py",
 
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)''',
10
  "C": '''// default code\n#include <stdio.h>\nint main() {\n int a, b;\n scanf("%d %d", &a, &b);\n printf("Sum: %d\\n", a + b);\n return 0;\n}''',
 
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 "file_uploaded" not in st.session_state:
36
+ st.session_state.file_uploaded = False
37
 
38
+ if uploaded_file and not st.session_state.file_uploaded:
39
  if uploaded_file.size > 10 * 1024 * 1024:
40
  st.error("🚫 File too large. Max allowed is 10MB.")
41
  else:
42
  content = uploaded_file.read().decode("utf-8", errors="ignore")
43
  ext = Path(uploaded_file.name).suffix.lower()
 
44
  detected_lang = EXT_LANG_MAP.get(ext)
45
+
46
  if detected_lang:
47
  st.session_state.language = detected_lang
 
 
48
  st.toast(f"βœ… Auto-switched to {detected_lang}", icon="πŸ”„")
 
 
49
  elif ext == ".txt":
50
  st.toast("πŸ“„ Loaded text file", icon="πŸ“„")
51
  else:
 
53
  return
54
 
55
  st.session_state.code = content
56
+ st.session_state.file_uploaded = True
57
+ st.rerun()
58
 
59
+ # ── Reset Language if Needed ─────────────────
60
+ selected_lang = st.session_state.language
61
  default_code = DEFAULT_SNIPPETS[selected_lang]
62
  previous_lang = st.session_state.get("prev_language")
63
 
 
70
  st.session_state.code = default_code
71
  st.session_state.prev_language = selected_lang
72
 
73
+ # ── Code Editor ─────────────────────────────
74
  code = st_ace.st_ace(
75
  value=st.session_state.code,
76
  placeholder=f"Start typing your {selected_lang} code…",
 
82
  show_gutter=True,
83
  wrap=True,
84
  auto_update=True,
85
+ key=f"editor_{selected_lang}"
86
  )
87
 
88
  if code != st.session_state.code:
89
  st.session_state.code = code
90
 
91
+ # ── Stdin ─────────────────────────────
92
  user_input = st.text_area(
93
  "πŸ“₯ Input (stdin)",
94
  value=st.session_state.stdin,
 
99
  if user_input != st.session_state.stdin:
100
  st.session_state.stdin = user_input
101
 
102
+ # ── Run Button ─────────────────────────────
103
  if st.button("▢️ Run"):
104
  start_time = time.perf_counter()
105
  process = psutil.Process()
 
113
 
114
  exec_time = time.perf_counter() - start_time
115
  mem_after = process.memory_info().rss
116
+ mem_used = (mem_after - mem_before) / 1024
117
 
118
  st.session_state.code_output = out
119
  st.session_state.error_output = err or exc
 
125
  st.markdown(f"⏱️ **Execution Time:** `{exec_time:.4f}s`")
126
  st.markdown(f"πŸ’Ύ **Memory Used:** `{mem_used:.2f} KB`")
127
 
128
+ # ── Download Button ─────────────────────────────
129
  if st.session_state.code:
130
  lang_extension = {
131
  "Python": "py",