44execution settings (commands, resource multipliers, user IDs, etc.).
55"""
66
7+ import os
78from dataclasses import dataclass , field
89from typing import Dict , Optional
910
@@ -26,12 +27,33 @@ class LanguageConfig:
2627 environment : Dict [str , str ] = field (default_factory = dict )
2728
2829
30+ def _get_sandbox_user_id (default : int = 1001 ) -> int :
31+ """Read the shared sandbox UID override from the environment."""
32+ raw_value = os .getenv ("SANDBOX_UID" )
33+ if raw_value in (None , "" ):
34+ return default
35+ assert raw_value is not None
36+
37+ try :
38+ user_id = int (raw_value )
39+ except ValueError as exc :
40+ raise ValueError (f"SANDBOX_UID must be an integer, got: { raw_value } " ) from exc
41+
42+ if user_id < 0 :
43+ raise ValueError (f"SANDBOX_UID must be >= 0, got: { user_id } " )
44+
45+ return user_id
46+
47+
48+ SANDBOX_USER_ID = _get_sandbox_user_id ()
49+
50+
2951# All 13 supported languages with complete configuration
3052LANGUAGES : Dict [str , LanguageConfig ] = {
3153 "py" : LanguageConfig (
3254 code = "py" ,
3355 name = "Python" ,
34- user_id = 999 ,
56+ user_id = SANDBOX_USER_ID ,
3557 file_extension = "py" ,
3658 execution_command = "python3 -" ,
3759 uses_stdin = True ,
@@ -41,7 +63,7 @@ class LanguageConfig:
4163 "js" : LanguageConfig (
4264 code = "js" ,
4365 name = "JavaScript" ,
44- user_id = 1001 ,
66+ user_id = SANDBOX_USER_ID ,
4567 file_extension = "js" ,
4668 execution_command = "node" ,
4769 uses_stdin = True ,
@@ -51,7 +73,7 @@ class LanguageConfig:
5173 "ts" : LanguageConfig (
5274 code = "ts" ,
5375 name = "TypeScript" ,
54- user_id = 1001 ,
76+ user_id = SANDBOX_USER_ID ,
5577 file_extension = "ts" ,
5678 execution_command = "tsc code.ts --outDir . --module commonjs "
5779 "--target ES2019 && node code.js" ,
@@ -62,7 +84,7 @@ class LanguageConfig:
6284 "go" : LanguageConfig (
6385 code = "go" ,
6486 name = "Go" ,
65- user_id = 1001 ,
87+ user_id = SANDBOX_USER_ID ,
6688 file_extension = "go" ,
6789 execution_command = "go build -o code code.go && ./code" ,
6890 uses_stdin = False ,
@@ -72,7 +94,7 @@ class LanguageConfig:
7294 "java" : LanguageConfig (
7395 code = "java" ,
7496 name = "Java" ,
75- user_id = 999 ,
97+ user_id = SANDBOX_USER_ID ,
7698 file_extension = "java" ,
7799 execution_command = "javac Code.java && java Code" ,
78100 uses_stdin = False ,
@@ -82,7 +104,7 @@ class LanguageConfig:
82104 "c" : LanguageConfig (
83105 code = "c" ,
84106 name = "C" ,
85- user_id = 1001 ,
107+ user_id = SANDBOX_USER_ID ,
86108 file_extension = "c" ,
87109 execution_command = "gcc -o code code.c && ./code" ,
88110 uses_stdin = False ,
@@ -92,7 +114,7 @@ class LanguageConfig:
92114 "cpp" : LanguageConfig (
93115 code = "cpp" ,
94116 name = "C++" ,
95- user_id = 1001 ,
117+ user_id = SANDBOX_USER_ID ,
96118 file_extension = "cpp" ,
97119 execution_command = "g++ -o code code.cpp && ./code" ,
98120 uses_stdin = False ,
@@ -102,7 +124,7 @@ class LanguageConfig:
102124 "php" : LanguageConfig (
103125 code = "php" ,
104126 name = "PHP" ,
105- user_id = 1001 ,
127+ user_id = SANDBOX_USER_ID ,
106128 file_extension = "php" ,
107129 execution_command = "php" ,
108130 uses_stdin = True ,
@@ -112,7 +134,7 @@ class LanguageConfig:
112134 "rs" : LanguageConfig (
113135 code = "rs" ,
114136 name = "Rust" ,
115- user_id = 1001 ,
137+ user_id = SANDBOX_USER_ID ,
116138 file_extension = "rs" ,
117139 execution_command = "rustc code.rs -o code && ./code" ,
118140 uses_stdin = False ,
@@ -122,7 +144,7 @@ class LanguageConfig:
122144 "r" : LanguageConfig (
123145 code = "r" ,
124146 name = "R" ,
125- user_id = 1001 ,
147+ user_id = SANDBOX_USER_ID ,
126148 file_extension = "r" ,
127149 execution_command = "Rscript code.r" ,
128150 uses_stdin = False ,
@@ -132,7 +154,7 @@ class LanguageConfig:
132154 "f90" : LanguageConfig (
133155 code = "f90" ,
134156 name = "Fortran" ,
135- user_id = 1001 ,
157+ user_id = SANDBOX_USER_ID ,
136158 file_extension = "f90" ,
137159 execution_command = "gfortran -o code code.f90 && ./code" ,
138160 uses_stdin = False ,
@@ -142,7 +164,7 @@ class LanguageConfig:
142164 "d" : LanguageConfig (
143165 code = "d" ,
144166 name = "D" ,
145- user_id = 0 ,
167+ user_id = SANDBOX_USER_ID ,
146168 file_extension = "d" ,
147169 execution_command = "ldc2 code.d -of=code && ./code" ,
148170 uses_stdin = False ,
@@ -152,7 +174,7 @@ class LanguageConfig:
152174 "bash" : LanguageConfig (
153175 code = "bash" ,
154176 name = "Bash" ,
155- user_id = 1001 ,
177+ user_id = SANDBOX_USER_ID ,
156178 file_extension = "sh" ,
157179 execution_command = "bash" ,
158180 uses_stdin = True ,
0 commit comments