rbx.cp 0.5.61__py3-none-any.whl → 0.5.63__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- rbx/box/cd.py +14 -0
- rbx/box/cli.py +6 -0
- rbx/box/code.py +34 -5
- rbx/box/contest/main.py +6 -2
- rbx/box/git_utils.py +28 -0
- rbx/box/package.py +23 -0
- rbx/box/packaging/boca/packager.py +3 -18
- rbx/box/packaging/moj/packager.py +1 -1
- rbx/box/packaging/polygon/upload.py +7 -5
- rbx/box/presets/__init__.py +80 -6
- rbx/box/presets/fetch.py +18 -1
- rbx/box/retries.py +2 -0
- rbx/box/solutions.py +242 -114
- rbx/box/solutions_test.py +3 -1
- rbx/box/tasks.py +6 -1
- rbx/box/testcase_utils.py +3 -0
- rbx/box/ui/css/app.tcss +14 -2
- rbx/box/ui/main.py +3 -5
- rbx/box/ui/screens/error.py +19 -0
- rbx/box/ui/screens/run.py +4 -12
- rbx/box/ui/screens/run_explorer.py +77 -1
- rbx/box/ui/screens/run_test_explorer.py +166 -0
- rbx/box/ui/screens/selector.py +26 -0
- rbx/box/ui/screens/test_explorer.py +33 -5
- rbx/box/ui/utils/__init__.py +0 -0
- rbx/box/ui/utils/run_ui.py +95 -0
- rbx/box/ui/widgets/__init__.py +0 -0
- rbx/box/ui/widgets/file_log.py +3 -1
- rbx/box/ui/widgets/interaction_box.py +59 -0
- rbx/box/ui/widgets/test_output_box.py +113 -0
- rbx/box/ui/widgets/two_sided_test_output_box.py +60 -0
- rbx/grading/steps.py +1 -0
- rbx/resources/packagers/boca/compile/java +55 -59
- rbx/resources/packagers/boca/interactive/java +2 -2
- rbx/resources/packagers/boca/run/java +2 -2
- {rbx_cp-0.5.61.dist-info → rbx_cp-0.5.63.dist-info}/METADATA +1 -1
- {rbx_cp-0.5.61.dist-info → rbx_cp-0.5.63.dist-info}/RECORD +40 -30
- {rbx_cp-0.5.61.dist-info → rbx_cp-0.5.63.dist-info}/LICENSE +0 -0
- {rbx_cp-0.5.61.dist-info → rbx_cp-0.5.63.dist-info}/WHEEL +0 -0
- {rbx_cp-0.5.61.dist-info → rbx_cp-0.5.63.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,113 @@
|
|
1
|
+
import dataclasses
|
2
|
+
import pathlib
|
3
|
+
from typing import Optional
|
4
|
+
|
5
|
+
from textual.app import ComposeResult
|
6
|
+
from textual.containers import Vertical
|
7
|
+
from textual.reactive import reactive
|
8
|
+
from textual.widget import Widget
|
9
|
+
from textual.widgets import ContentSwitcher
|
10
|
+
|
11
|
+
from rbx.box.ui.widgets.file_log import FileLog
|
12
|
+
from rbx.box.ui.widgets.interaction_box import InteractionBox
|
13
|
+
from rbx.box.ui.widgets.rich_log_box import RichLogBox
|
14
|
+
|
15
|
+
|
16
|
+
@dataclasses.dataclass
|
17
|
+
class TestcaseRenderingData:
|
18
|
+
input_path: Optional[pathlib.Path] = None
|
19
|
+
output_path: Optional[pathlib.Path] = None
|
20
|
+
stderr_path: Optional[pathlib.Path] = None
|
21
|
+
interaction_path: Optional[pathlib.Path] = None
|
22
|
+
log_path: Optional[pathlib.Path] = None
|
23
|
+
rich_content: Optional[str] = None
|
24
|
+
|
25
|
+
@classmethod
|
26
|
+
def from_one_path(cls, path: pathlib.Path) -> 'TestcaseRenderingData':
|
27
|
+
return cls(
|
28
|
+
input_path=path.with_suffix('.in'),
|
29
|
+
output_path=path.with_suffix('.out'),
|
30
|
+
stderr_path=path.with_suffix('.err'),
|
31
|
+
log_path=path.with_suffix('.log'),
|
32
|
+
interaction_path=path.with_suffix('.pio'),
|
33
|
+
)
|
34
|
+
|
35
|
+
|
36
|
+
class TestBoxWidget(Widget, can_focus=False):
|
37
|
+
data: reactive[TestcaseRenderingData] = reactive(
|
38
|
+
default=lambda: TestcaseRenderingData(),
|
39
|
+
bindings=True,
|
40
|
+
)
|
41
|
+
|
42
|
+
@dataclasses.dataclass
|
43
|
+
class Logs:
|
44
|
+
output: FileLog
|
45
|
+
stderr: FileLog
|
46
|
+
log: FileLog
|
47
|
+
interaction: FileLog
|
48
|
+
|
49
|
+
def logs(self) -> Logs:
|
50
|
+
return self.Logs(
|
51
|
+
output=self.query_one('#test-box-output', FileLog),
|
52
|
+
stderr=self.query_one('#test-box-stderr', FileLog),
|
53
|
+
log=self.query_one('#test-box-log', FileLog),
|
54
|
+
interaction=self.query_one('#test-box-interaction', InteractionBox),
|
55
|
+
)
|
56
|
+
|
57
|
+
def compose(self) -> ComposeResult:
|
58
|
+
with Vertical():
|
59
|
+
with ContentSwitcher(initial='test-box-output', id='test-box-switcher'):
|
60
|
+
yield FileLog(id='test-box-output')
|
61
|
+
yield FileLog(id='test-box-stderr')
|
62
|
+
yield FileLog(id='test-box-log')
|
63
|
+
yield InteractionBox(id='test-box-interaction')
|
64
|
+
yield RichLogBox(id='test-box-metadata')
|
65
|
+
|
66
|
+
def on_mount(self):
|
67
|
+
logs = self.logs()
|
68
|
+
logs.output.border_title = 'Output'
|
69
|
+
logs.stderr.border_title = 'Stderr'
|
70
|
+
logs.log.border_title = 'Log'
|
71
|
+
logs.interaction.border_title = 'Interaction'
|
72
|
+
metadata = self.query_one('#test-box-metadata', RichLogBox)
|
73
|
+
metadata.display = False
|
74
|
+
metadata.border_title = 'Metadata'
|
75
|
+
metadata.wrap = True
|
76
|
+
metadata.markup = True
|
77
|
+
metadata.clear()
|
78
|
+
metadata.write('No metadata')
|
79
|
+
|
80
|
+
self.watch_data(self.data)
|
81
|
+
|
82
|
+
def watch_data(self, data: TestcaseRenderingData):
|
83
|
+
logs = self.logs()
|
84
|
+
logs.output.path = data.output_path
|
85
|
+
logs.stderr.path = data.stderr_path
|
86
|
+
logs.log.path = data.log_path
|
87
|
+
logs.interaction.path = data.interaction_path
|
88
|
+
metadata = self.query_one('#test-box-metadata', RichLogBox)
|
89
|
+
metadata.clear()
|
90
|
+
if data.rich_content is not None:
|
91
|
+
metadata.write(data.rich_content)
|
92
|
+
else:
|
93
|
+
metadata.write('No metadata')
|
94
|
+
|
95
|
+
def reset(self):
|
96
|
+
self.data = TestcaseRenderingData()
|
97
|
+
|
98
|
+
def show_output(self):
|
99
|
+
self.query_one(ContentSwitcher).current = 'test-box-output'
|
100
|
+
|
101
|
+
def show_stderr(self):
|
102
|
+
self.query_one(ContentSwitcher).current = 'test-box-stderr'
|
103
|
+
|
104
|
+
def show_log(self):
|
105
|
+
self.query_one(ContentSwitcher).current = 'test-box-log'
|
106
|
+
|
107
|
+
def show_interaction(self):
|
108
|
+
self.query_one(ContentSwitcher).current = 'test-box-interaction'
|
109
|
+
|
110
|
+
def toggle_metadata(self):
|
111
|
+
metadata = self.query_one('#test-box-metadata', RichLogBox)
|
112
|
+
metadata.display = not metadata.display
|
113
|
+
metadata.refresh()
|
@@ -0,0 +1,60 @@
|
|
1
|
+
from typing import Optional
|
2
|
+
|
3
|
+
from textual.app import ComposeResult
|
4
|
+
from textual.containers import Horizontal
|
5
|
+
from textual.reactive import reactive
|
6
|
+
from textual.widget import Widget
|
7
|
+
|
8
|
+
from rbx.box.ui.widgets.test_output_box import TestBoxWidget, TestcaseRenderingData
|
9
|
+
|
10
|
+
|
11
|
+
class TwoSidedTestBoxWidget(Widget, can_focus=False):
|
12
|
+
data: reactive[TestcaseRenderingData] = reactive(
|
13
|
+
default=lambda: TestcaseRenderingData(),
|
14
|
+
bindings=True,
|
15
|
+
)
|
16
|
+
diff_with_data: reactive[Optional[TestcaseRenderingData]] = reactive(
|
17
|
+
default=None,
|
18
|
+
bindings=True,
|
19
|
+
)
|
20
|
+
|
21
|
+
def compose(self) -> ComposeResult:
|
22
|
+
with Horizontal(id='two-sided-test-box'):
|
23
|
+
yield TestBoxWidget(id='test-box-1')
|
24
|
+
diff_box = TestBoxWidget(id='test-box-2')
|
25
|
+
diff_box.display = False
|
26
|
+
yield diff_box
|
27
|
+
|
28
|
+
def watch_data(self, data: TestcaseRenderingData):
|
29
|
+
self.query_one('#test-box-1', TestBoxWidget).data = data
|
30
|
+
|
31
|
+
def watch_diff_with_data(self, diff_with_data: Optional[TestcaseRenderingData]):
|
32
|
+
if diff_with_data is None:
|
33
|
+
self.query_one('#test-box-2', TestBoxWidget).display = False
|
34
|
+
else:
|
35
|
+
self.query_one('#test-box-2', TestBoxWidget).display = True
|
36
|
+
self.query_one('#test-box-2', TestBoxWidget).data = diff_with_data
|
37
|
+
|
38
|
+
def reset(self):
|
39
|
+
self.query_one('#test-box-1', TestBoxWidget).reset()
|
40
|
+
self.query_one('#test-box-2', TestBoxWidget).reset()
|
41
|
+
|
42
|
+
def show_output(self):
|
43
|
+
self.query_one('#test-box-1', TestBoxWidget).show_output()
|
44
|
+
self.query_one('#test-box-2', TestBoxWidget).show_output()
|
45
|
+
|
46
|
+
def show_stderr(self):
|
47
|
+
self.query_one('#test-box-1', TestBoxWidget).show_stderr()
|
48
|
+
self.query_one('#test-box-2', TestBoxWidget).show_stderr()
|
49
|
+
|
50
|
+
def show_log(self):
|
51
|
+
self.query_one('#test-box-1', TestBoxWidget).show_log()
|
52
|
+
self.query_one('#test-box-2', TestBoxWidget).show_log()
|
53
|
+
|
54
|
+
def show_interaction(self):
|
55
|
+
self.query_one('#test-box-1', TestBoxWidget).show_interaction()
|
56
|
+
self.query_one('#test-box-2', TestBoxWidget).show_interaction()
|
57
|
+
|
58
|
+
def toggle_metadata(self):
|
59
|
+
self.query_one('#test-box-1', TestBoxWidget).toggle_metadata()
|
60
|
+
self.query_one('#test-box-2', TestBoxWidget).toggle_metadata()
|
rbx/grading/steps.py
CHANGED
@@ -234,6 +234,7 @@ class TestcaseLog(RunLog):
|
|
234
234
|
stdout_absolute_path: Optional[pathlib.Path] = None
|
235
235
|
stderr_absolute_path: Optional[pathlib.Path] = None
|
236
236
|
log_absolute_path: Optional[pathlib.Path] = None
|
237
|
+
eval_absolute_path: Optional[pathlib.Path] = None
|
237
238
|
|
238
239
|
|
239
240
|
class CheckerResult(BaseModel):
|
@@ -41,50 +41,50 @@
|
|
41
41
|
|
42
42
|
umask 0022
|
43
43
|
if [ "$1" == "" ]; then
|
44
|
-
|
45
|
-
|
44
|
+
echo "parameter problem"
|
45
|
+
exit 43
|
46
46
|
fi
|
47
47
|
name="$1"
|
48
48
|
if [ ! -r "$1" ]; then
|
49
|
-
|
50
|
-
|
49
|
+
echo "$1 not found or it's not readable"
|
50
|
+
exit 44
|
51
51
|
fi
|
52
52
|
id -u bocajail >/dev/null 2>/dev/null
|
53
53
|
if [ $? == 0 ]; then
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
bocau=$(id -u bocajail)
|
55
|
+
bocag=$(id -g bocajail)
|
56
|
+
chown bocajail.nogroup .
|
57
57
|
else
|
58
|
-
|
59
|
-
|
60
|
-
|
58
|
+
bocau=$(id -u nobody)
|
59
|
+
bocag=$(id -g nobody)
|
60
|
+
chown nobody.nogroup .
|
61
61
|
fi
|
62
62
|
if [ "$bocau" == "" -o "$bocag" == "" ]; then
|
63
|
-
|
64
|
-
|
63
|
+
echo "error finding user to run script"
|
64
|
+
exit 43
|
65
65
|
fi
|
66
66
|
|
67
67
|
mkdir -p src
|
68
68
|
if [ "${name##*.}" == "zip" -o "${name##*.}" == "ZIP" ]; then
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
69
|
+
unzip "$name" -d src
|
70
|
+
if [ "${name##*.}" == "zip" ]; then
|
71
|
+
name=$(basename $name .zip)
|
72
|
+
else
|
73
|
+
name=$(basename $name .ZIP)
|
74
|
+
fi
|
75
75
|
else
|
76
|
-
|
76
|
+
cp "$name" src
|
77
77
|
fi
|
78
78
|
chown -R $bocau src
|
79
79
|
chmod -R 700 src
|
80
80
|
|
81
81
|
# this script makes use of safeexec to execute the code with less privilegies
|
82
82
|
# make sure that directories below are correct.
|
83
|
-
sf
|
83
|
+
sf=$(which safeexec)
|
84
84
|
[ -x "$sf" ] || sf=/usr/bin/safeexec
|
85
85
|
if [ ! -x $sf ]; then
|
86
|
-
|
87
|
-
|
86
|
+
echo "$sf not found or it's not executable"
|
87
|
+
exit 46
|
88
88
|
fi
|
89
89
|
|
90
90
|
# setting up the timelimit according to the problem
|
@@ -98,31 +98,27 @@ time=30
|
|
98
98
|
|
99
99
|
maxm=512
|
100
100
|
if [ "$4" != "" -a "$4" -gt "512" ]; then
|
101
|
-
maxm=$4
|
101
|
+
maxm=$4
|
102
102
|
fi
|
103
103
|
|
104
|
-
|
105
|
-
jarfile=run.jar
|
106
|
-
else
|
107
|
-
jarfile=$2
|
108
|
-
fi
|
104
|
+
jarfile=run.jar
|
109
105
|
|
110
|
-
cdir
|
106
|
+
cdir=$(pwd)
|
111
107
|
echo "Current directory is $cdir" >&2
|
112
|
-
mainname=`echo $name | cut -d'.' -f1`
|
113
|
-
if [ "$mainname" == "" ]; then
|
114
|
-
mainname=Main
|
115
|
-
fi
|
116
108
|
|
117
|
-
|
109
|
+
# Make sure the class name is Main.
|
110
|
+
mv "src/$name" "src/Main.java"
|
111
|
+
sed -i -E "s/public[[:space:]]+class[[:space:]]+[A-Za-z0-9_\\$]+([^A-Za-z0-9_\\$])/public class Main\1/" src/Main.java
|
112
|
+
|
113
|
+
cat <<EOF >compileit.sh
|
118
114
|
#!/bin/bash
|
119
|
-
javac
|
115
|
+
javac=$(which javac)
|
120
116
|
[ -x "\$javac" ] || javac=/usr/bin/javac
|
121
117
|
if [ ! -x \$javac ]; then
|
122
118
|
echo "\$javac not found or it's not executable"
|
123
119
|
exit 47
|
124
120
|
fi
|
125
|
-
jar
|
121
|
+
jar=$(which jar)
|
126
122
|
[ -x "\$jar" ] || jar=/usr/bin/jar
|
127
123
|
if [ ! -x \$jar ]; then
|
128
124
|
echo "\$jar not found or it's not executable"
|
@@ -130,8 +126,8 @@ if [ ! -x \$jar ]; then
|
|
130
126
|
fi
|
131
127
|
export CLASSPATH=.:\$CLASSPATH
|
132
128
|
cd src
|
133
|
-
if [ -r "
|
134
|
-
\$javac
|
129
|
+
if [ -r "Main.java" ]; then
|
130
|
+
\$javac Main.java
|
135
131
|
echo \$? > ../compileit.retcode
|
136
132
|
fi
|
137
133
|
find . -name "*.java" | while read lin; do
|
@@ -139,15 +135,15 @@ find . -name "*.java" | while read lin; do
|
|
139
135
|
echo \$? > ../compileit.retcode
|
140
136
|
done
|
141
137
|
rm -f ../$jarfile
|
142
|
-
\$jar cvfe ../$jarfile
|
138
|
+
\$jar cvfe ../$jarfile Main *
|
143
139
|
exit 0
|
144
140
|
EOF
|
145
141
|
chmod 755 compileit.sh
|
146
142
|
|
147
143
|
echo $cdir | grep -q "/bocajail"
|
148
144
|
if [ $? == 0 ]; then
|
149
|
-
|
150
|
-
|
145
|
+
cdir=$(echo $cdir | sed "s/.*\/bocajail//")
|
146
|
+
cat <<EOF >runit.sh
|
151
147
|
#!/bin/bash
|
152
148
|
cd "$cdir"
|
153
149
|
[ -f /proc/cpuinfo ] || /bin/mount -t proc proc /proc
|
@@ -162,33 +158,33 @@ if [ ! -d /bocajail ]; then
|
|
162
158
|
/bin/umount /sys 2>/dev/null
|
163
159
|
fi
|
164
160
|
EOF
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
161
|
+
chmod 755 runit.sh
|
162
|
+
chroot /bocajail "$cdir/runit.sh"
|
163
|
+
if [ -r runit.retcode ]; then
|
164
|
+
ret=$(cat runit.retcode)
|
165
|
+
else
|
166
|
+
ret=99
|
167
|
+
fi
|
172
168
|
else
|
173
|
-
|
174
|
-
# $javac "$name"
|
175
|
-
|
176
|
-
|
169
|
+
echo "COMPILATION IS NOT BEING CHROOTED -- THIS IS NOT AN IDEAL SETTING"
|
170
|
+
# $javac "$name"
|
171
|
+
$sf -r1 -t$time -T$ttime -F256 -u256 -U$bocau -G$bocag -ostdout0 -estderr0 -n0 -C. -d20000000 -m20000000 ./compileit.sh
|
172
|
+
ret=$?
|
177
173
|
fi
|
178
174
|
if [ -f "stdout0" ]; then
|
179
|
-
|
175
|
+
cat "stdout0"
|
180
176
|
fi
|
181
177
|
if [ -f "stderr0" ]; then
|
182
|
-
|
178
|
+
cat "stderr0"
|
183
179
|
fi
|
184
180
|
rm -rf src/
|
185
181
|
if [ "$ret" != "0" ]; then
|
186
|
-
|
187
|
-
|
182
|
+
echo "Compilation Error: $ret"
|
183
|
+
exit $ret
|
188
184
|
fi
|
189
|
-
ret
|
185
|
+
ret=$(cat compileit.retcode)
|
190
186
|
if [ "$ret" != "0" ]; then
|
191
|
-
|
192
|
-
|
187
|
+
echo "Compilation Error: $ret"
|
188
|
+
ret=1
|
193
189
|
fi
|
194
190
|
exit $ret
|
@@ -197,7 +197,7 @@ if [ $? -eq 0 ]; then
|
|
197
197
|
exit 47
|
198
198
|
fi
|
199
199
|
export CLASSPATH=.:./run.jar:$CLASSPATH
|
200
|
-
"$sf" -r$nruns -t$time -T$ttime -istdin0 -F256 -u256 -ostdout0 -estderr0 -U$bocau -G$bocag -n0 -C. -f20000 -d20000000 -m20000000 -- ./runit.sh "\$java" -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K
|
200
|
+
"$sf" -r$nruns -t$time -T$ttime -istdin0 -F256 -u256 -ostdout0 -estderr0 -U$bocau -G$bocag -n0 -C. -f20000 -d20000000 -m20000000 -- ./runit.sh "\$java" -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K Main
|
201
201
|
retval=\$?
|
202
202
|
echo \$retval > runch.exitcode
|
203
203
|
if [ ! -d /bocajail ]; then
|
@@ -224,7 +224,7 @@ else
|
|
224
224
|
echo "$java not found or it's not executable"
|
225
225
|
exit 47
|
226
226
|
fi
|
227
|
-
"$sf" -r$nruns -t$time -T$ttime -istdin0 -F256 -u256 -U$bocau -G$bocag -ostdout0 -estderr0 -n0 -C. -d20000000 -m20000000 -- ./runit.sh "$java" -cp run.jar -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K
|
227
|
+
"$sf" -r$nruns -t$time -T$ttime -istdin0 -F256 -u256 -U$bocau -G$bocag -ostdout0 -estderr0 -n0 -C. -d20000000 -m20000000 -- ./runit.sh "$java" -cp run.jar -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K Main
|
228
228
|
ret=$?
|
229
229
|
fi
|
230
230
|
### END OF BOCA RUN COMMAND
|
@@ -146,7 +146,7 @@ if [ ! -x "\$java" ]; then
|
|
146
146
|
exit 47
|
147
147
|
fi
|
148
148
|
export CLASSPATH=.:./run.jar:$CLASSPATH
|
149
|
-
"$sf" -r$nruns -t$time -T$ttime -istdin0 -F256 -u256 -ostdout0 -estderr0 -U$bocau -G$bocag -n0 -C. -f20000 -d20000000 -m20000000 -- "\$java" -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K
|
149
|
+
"$sf" -r$nruns -t$time -T$ttime -istdin0 -F256 -u256 -ostdout0 -estderr0 -U$bocau -G$bocag -n0 -C. -f20000 -d20000000 -m20000000 -- "\$java" -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K Main
|
150
150
|
retval=\$?
|
151
151
|
echo \$retval > runit.retcode
|
152
152
|
if [ ! -d /bocajail ]; then
|
@@ -174,7 +174,7 @@ else
|
|
174
174
|
echo "$java not found or it's not executable"
|
175
175
|
exit 47
|
176
176
|
fi
|
177
|
-
"$sf" -r$nruns -t$time -T$ttime -istdin0 -F256 -u256 -U$bocau -G$bocag -ostdout0 -estderr0 -n0 -C. -d20000000 -m20000000 -- "$java" -cp run.jar -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K
|
177
|
+
"$sf" -r$nruns -t$time -T$ttime -istdin0 -F256 -u256 -U$bocau -G$bocag -ostdout0 -estderr0 -n0 -C. -d20000000 -m20000000 -- "$java" -cp run.jar -Xmx${maxm}K -Xss${maxms}K -Xms${maxm}K Main
|
178
178
|
ret=$?
|
179
179
|
fi
|
180
180
|
if [ $ret -gt 10 ]; then
|
@@ -3,17 +3,17 @@ rbx/annotations.py,sha256=LXbVOSkE9kwcxEirsOMo10cEnvol854QvaCBIjhWyE8,3047
|
|
3
3
|
rbx/autoenum.py,sha256=cusv8ClXRlDVvhZ8eDrtYcL_2peXlHugAey_ht8roXk,12025
|
4
4
|
rbx/box/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
5
|
rbx/box/builder.py,sha256=MDm2qqmhedAbhn3rWP6cDwbBsGhV6sz_2sg1zLkPDw0,3613
|
6
|
-
rbx/box/cd.py,sha256=
|
6
|
+
rbx/box/cd.py,sha256=KGaqXHnv2hCumZS2VdMezFfwFEQcSq0rt05_KZtuQAo,1570
|
7
7
|
rbx/box/checkers.py,sha256=aGciafGNQ39UqndTEJRT3J8ngv_UigYxOT30yMzCwEI,12752
|
8
|
-
rbx/box/cli.py,sha256=
|
9
|
-
rbx/box/code.py,sha256=
|
8
|
+
rbx/box/cli.py,sha256=mockAftbBYRt587_Fjbkpk7GZtj0MxcRJGoHBQxfTXE,27139
|
9
|
+
rbx/box/code.py,sha256=2oC1JbZiwfeg53ZICPig-KJYchqFRIZz-inlM-cLc7Q,19911
|
10
10
|
rbx/box/compile.py,sha256=OJLthDQ921w9vyoE6Gk1Df54i5RwtRJ2YG-8XEfefcs,2489
|
11
11
|
rbx/box/conftest.py,sha256=sEmciXSeDC-wmrZ1JSxbsUenKNP_VWW32mrCun2pY3I,1070
|
12
12
|
rbx/box/contest/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
13
13
|
rbx/box/contest/build_contest_statements.py,sha256=H2MwmkiPO_cHUEenzfPxHuJ3XcwjHakGZwKojNJQt74,11380
|
14
14
|
rbx/box/contest/contest_package.py,sha256=OaUbpBtkhkgOPzJ1ccI_Vq4FMSaJvZm3gMOKfVY8oy4,3032
|
15
15
|
rbx/box/contest/contest_utils.py,sha256=TDE7I6YQJlu4dQd68wzOp019bNgqiT0RlM-LMQMjL9w,301
|
16
|
-
rbx/box/contest/main.py,sha256=
|
16
|
+
rbx/box/contest/main.py,sha256=u76kAQSVWEuyGLqVgyjXwYxJwHXAeEHMwbM7MfenKvE,7574
|
17
17
|
rbx/box/contest/schema.py,sha256=OOoQUPYAHzu78aQfRbrqGepiUdGxSVRR1VQKFbKHjkE,6111
|
18
18
|
rbx/box/contest/statements.py,sha256=Or8gFb6P_oViGdeiVgepXsvd_W84mA7LRaVmiAXWWSg,2977
|
19
19
|
rbx/box/creation.py,sha256=Evz7K6JoarD-4JJQsZsgoxU9FgCF9Z7-LfuroG4Cqls,2444
|
@@ -25,34 +25,35 @@ rbx/box/extensions.py,sha256=Von8kIeXvNFTkGlMRMTvL2HIHPwlkuiMswr-ydbGV1w,519
|
|
25
25
|
rbx/box/formatting.py,sha256=3phFRHzqVXj4Ok1yDhCq6Clbw6KlqwJNpMhs--oTWFI,405
|
26
26
|
rbx/box/generators.py,sha256=RE0-D91BB-3rNDQXvCFWzU9iMhKIc_ALp960oGfM-rY,13780
|
27
27
|
rbx/box/generators_test.py,sha256=J7aBfuJhU84MWDWzgReRoOuQw_hVa09B8gTKAvL2XVo,1987
|
28
|
+
rbx/box/git_utils.py,sha256=VlUgzuHOCnrjjiJQnDB32qDHbHw_zkwgA7wm4bloibc,750
|
28
29
|
rbx/box/header.py,sha256=ifErXcIxG5lM5AyRiHDr7JE401vR4ORNXCNpHXxN_ls,2001
|
29
30
|
rbx/box/lazy_importing_main.py,sha256=6Z8As7qVFFT619xHH9Xt8VCH57NjC4aDxfAgkWiUwT8,116
|
30
31
|
rbx/box/lazy_importing_test.py,sha256=B0-b3y_DkxEmtVfu4NfmVsgVdFl6kRCsEL6GLMHJISo,628
|
31
32
|
rbx/box/main.py,sha256=a8CYi77kOywPFly4-ucEIJLXQW-1NFp91kK2fA42YTE,86
|
32
33
|
rbx/box/naming.py,sha256=pOG37X_wQM9CCSYwJIUf-b-ZHEs_nchO7wQEdP_quJg,1367
|
33
|
-
rbx/box/package.py,sha256=
|
34
|
+
rbx/box/package.py,sha256=pRsA5UsKNnD2uJcm8x01uQHUbCxoLbJvhoeqf3nyrew,14290
|
34
35
|
rbx/box/packaging/boca/extension.py,sha256=EQALNEOv4zVDXSKs_dk11n92y7cBZVn8TogIK683lE0,890
|
35
|
-
rbx/box/packaging/boca/packager.py,sha256=
|
36
|
+
rbx/box/packaging/boca/packager.py,sha256=kiCcP9roRCiDU0Xr5PDKO83W1yN6cyg-EKMF9fxE0EY,11950
|
36
37
|
rbx/box/packaging/boca/upload.py,sha256=ORJytNTZ5uZw9Tk2cEhXa9UItGloFmC5pytsZavP6V8,8871
|
37
38
|
rbx/box/packaging/contest_main.py,sha256=UsRfIdNmOf0iLUbzgjxzyECfMuCQINstG1SCClGHaUQ,2808
|
38
39
|
rbx/box/packaging/main.py,sha256=b7DAotZkn1EO6_2cSHoGegMqHa4ZE3moWncGXkF7f3c,3797
|
39
|
-
rbx/box/packaging/moj/packager.py,sha256=
|
40
|
+
rbx/box/packaging/moj/packager.py,sha256=FjghOe5CPlaF1GqK0NZgWVV_eYWpdTmz88bh04yeAyI,8708
|
40
41
|
rbx/box/packaging/packager.py,sha256=da2haC1L9cG30myneMrRIAdGubtid0Xmy38BHKPCZZ4,3633
|
41
42
|
rbx/box/packaging/polygon/packager.py,sha256=GfZ-Dc2TDKkb3QNnfOy8yxldho2L401Ao06oWg--Gcs,11714
|
42
43
|
rbx/box/packaging/polygon/polygon_api.py,sha256=mPKEqiwANJ1nr-JhOgzGMaDhnbljsAgzzPHW6kkf7R4,41016
|
43
44
|
rbx/box/packaging/polygon/test.py,sha256=bgEju5PwudgyfwxXJagm8fM6CJVlWM6l_-2q1V-oKaQ,3069
|
44
|
-
rbx/box/packaging/polygon/upload.py,sha256=
|
45
|
+
rbx/box/packaging/polygon/upload.py,sha256=UpZpVvbd0WO3y4MQdFdIwsHCu2dinfcXaIDB3smWanQ,11930
|
45
46
|
rbx/box/packaging/polygon/xml_schema.py,sha256=ZgcLyvxggMUccbTNdzflue5G-FTN2_ZmOGGF7FD0Y5A,2851
|
46
|
-
rbx/box/presets/__init__.py,sha256=
|
47
|
-
rbx/box/presets/fetch.py,sha256=
|
47
|
+
rbx/box/presets/__init__.py,sha256=G-oXgBnmwetolgh2TstlSCwxUBwvyDYAOZlHFhnIP9o,21311
|
48
|
+
rbx/box/presets/fetch.py,sha256=900aq9S8e12TlgSenG0iHgtF4OWgqavZsptgI_a1YKM,2508
|
48
49
|
rbx/box/presets/lock_schema.py,sha256=6sRPnyePOC8yy-5WcD5JRZdDJHf8loqbvpQ1IPiOU9s,349
|
49
50
|
rbx/box/presets/schema.py,sha256=mZmSPkQsw7eQM0lQN6er1MO_LiW1ObwwAZFDK0F5fxE,1962
|
50
|
-
rbx/box/retries.py,sha256=
|
51
|
+
rbx/box/retries.py,sha256=cZcNYLVHFDbhbeqMzxITgo8SYY8qzyxm0tIYcmWl1Ek,4877
|
51
52
|
rbx/box/sanitizers/warning_stack.py,sha256=RI97_GJgdjTKIXY_r0EKp5h0qQQSDSdNDh5K7zINrqs,2861
|
52
53
|
rbx/box/schema.py,sha256=y736-wZdGw56T6eDC_m7NAm2XRUdauBXJRQkQO79fpc,16264
|
53
54
|
rbx/box/setter_config.py,sha256=s53talhwM6FTGDCcBhY7IlZ6_6mJ3PMp6V4kTtaSs50,4262
|
54
|
-
rbx/box/solutions.py,sha256=
|
55
|
-
rbx/box/solutions_test.py,sha256=
|
55
|
+
rbx/box/solutions.py,sha256=tMG72QbdexEsfiw70Ryn6hcnXiiNbHIKMAZX0_6uYEY,49078
|
56
|
+
rbx/box/solutions_test.py,sha256=PX1TQoRzNd9mi1SGsG7WFrpqFgNrNX5Kwt0mkwFdoOA,1749
|
56
57
|
rbx/box/state.py,sha256=MMf3DvfQji0jKEliCHct2Tpp_0epL1tvP8HbHNArQIc,166
|
57
58
|
rbx/box/statements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
58
59
|
rbx/box/statements/build_statements.py,sha256=6przkQWy70ixDbqWMZmBgncaoWg67RY1gPdQ4TPjaTE,12150
|
@@ -65,23 +66,32 @@ rbx/box/stresses.py,sha256=k-m8Q2IVd5dap2fSDCbVqLj2LKqXzz6rIR8j9F8sLhY,12310
|
|
65
66
|
rbx/box/stressing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
66
67
|
rbx/box/stressing/finder_parser.py,sha256=jXpYNa4FyugzmHi3r96Uv4rU1krRQJc5Ihr9jf1cvNo,11918
|
67
68
|
rbx/box/stressing/generator_parser.py,sha256=oHZryjR3YohgaSO9WEirQ7b2e-98WgZStF0N99W4Thw,7380
|
68
|
-
rbx/box/tasks.py,sha256=
|
69
|
+
rbx/box/tasks.py,sha256=sVPR6a3CSU28pN6bMjZcZATYZBV7JlZvhvxcPRH8-MI,10514
|
69
70
|
rbx/box/testcase_extractors.py,sha256=J43eG7vpxc5nP_2yhrXJODkd4EYlV4WiYVbM6hzipY4,11944
|
70
|
-
rbx/box/testcase_utils.py,sha256=
|
71
|
+
rbx/box/testcase_utils.py,sha256=lvQ58D-R8vYx5AFA9sJ9xMIZJvtjYjisTpAjMIoyG4Y,7686
|
71
72
|
rbx/box/testcases/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
72
73
|
rbx/box/testcases/main.py,sha256=_I7h_obRcpNLRQ6dDJDIE5NAvTyn5nBOhdsBhRA_PvU,5442
|
73
74
|
rbx/box/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
74
75
|
rbx/box/ui/captured_log.py,sha256=HPoV6LZohuECmjoqOdM_xFZbpICzQnI4n3rF-lf_b1Q,11634
|
75
|
-
rbx/box/ui/css/app.tcss,sha256=
|
76
|
-
rbx/box/ui/main.py,sha256=
|
76
|
+
rbx/box/ui/css/app.tcss,sha256=LuP8dRgjk8zg68AV0cIty8RepGkTXR264AxRpflsSto,1845
|
77
|
+
rbx/box/ui/main.py,sha256=0PENSCpk3zLLiG39lfdPSdLx3lCEIAXM_xpzyaDnQKs,1144
|
77
78
|
rbx/box/ui/screens/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
78
79
|
rbx/box/ui/screens/build.py,sha256=DtABbf8mJNLn0tCjs5SA9wYBlbxble5-1JKQDlqzphk,156
|
79
80
|
rbx/box/ui/screens/command.py,sha256=s29xHhvdQhgr9_E7LjggoKmSw3UuQQrJV3UQNnK97Mk,976
|
80
|
-
rbx/box/ui/screens/
|
81
|
-
rbx/box/ui/screens/
|
82
|
-
rbx/box/ui/screens/
|
83
|
-
rbx/box/ui/
|
81
|
+
rbx/box/ui/screens/error.py,sha256=k6Rs5maR_APKepMtPcDMSXo6BDKrP-pAnFFJgqmXDKE,496
|
82
|
+
rbx/box/ui/screens/run.py,sha256=eKIfFRi-VbqKDxlhZDuOEdVl91XCndnmNIZyj_LMV0c,6028
|
83
|
+
rbx/box/ui/screens/run_explorer.py,sha256=Q6VUhiqBaKr70bqA7pV5qKIQamLqUBCtxZnX2tDkap0,2651
|
84
|
+
rbx/box/ui/screens/run_test_explorer.py,sha256=rnO2uIeG_7_vZ_HrRwtNSrDkcyo6RU5hITtcG2HSt0w,6001
|
85
|
+
rbx/box/ui/screens/selector.py,sha256=BmzyEVeBKD9IEUiEea-Y04HnNLzDYQJxAj7Jm-s-D3I,753
|
86
|
+
rbx/box/ui/screens/test_explorer.py,sha256=p_MQmTvmNsB5j2E-CwN8G1mS756aWSMWGonkwMXym2I,4595
|
87
|
+
rbx/box/ui/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
88
|
+
rbx/box/ui/utils/run_ui.py,sha256=457xNZteBTb82Rcg5Cr3AmgBIHLOmRrF4BKmCRyxq3Q,3113
|
89
|
+
rbx/box/ui/widgets/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
90
|
+
rbx/box/ui/widgets/file_log.py,sha256=3wlrmkWR-EMibwlwXOJ5sGpTFwFEkRaGYo5fdmf8L3w,1704
|
91
|
+
rbx/box/ui/widgets/interaction_box.py,sha256=WDHmpO5ck21y6hNdUVxvJ81jEg9TVJh39hFJUc5-Dos,1572
|
84
92
|
rbx/box/ui/widgets/rich_log_box.py,sha256=mF565c_Y3RYUZ_GJEFj5Eb86SFjsib31wE5qu1K0UBM,91
|
93
|
+
rbx/box/ui/widgets/test_output_box.py,sha256=yqeAb-JFvVx1Q7w_qJbDMWQigyGy4ofGECDxQ7P0_2s,3864
|
94
|
+
rbx/box/ui/widgets/two_sided_test_output_box.py,sha256=L-ORiDwd6CP5DFpavrKGBaX0ZHkSoQqbJrGZ4BdFUWc,2289
|
85
95
|
rbx/box/unit.py,sha256=PY96t8qnsHLsoJVanbDnrIx-s8Dada9Fj_v375MhvTw,6477
|
86
96
|
rbx/box/validators.py,sha256=oqlNhw7jivbbH5l8g3xwihPRy76AM7MA3G4A8nyI_V0,10416
|
87
97
|
rbx/box/validators_test.py,sha256=WY4Ho-wlsPHc0YNuz0KFVd6KQ9ouuiou3w5_zMOZ4Fs,362
|
@@ -108,7 +118,7 @@ rbx/grading/judge/test.py,sha256=ll0Iw7zyOpGdKPD_PGH7dvUkb4stQLu-ikbQnqJvuAc,944
|
|
108
118
|
rbx/grading/judge/testiso.py,sha256=v14DtkWiZFJ9AKMzrb0_vZKPWDt8jz8iIw1Z2O-Advk,1397
|
109
119
|
rbx/grading/limits.py,sha256=ev312UTOo8S4-3AAVibQdXZclWCxS96CdbZxqW4y1kE,770
|
110
120
|
rbx/grading/processing_context.py,sha256=EOxsRTKB_JEgcKNodDWPIYaBramANU-6QnDkqdF8tEk,2556
|
111
|
-
rbx/grading/steps.py,sha256=
|
121
|
+
rbx/grading/steps.py,sha256=gR7GpiV1ZamJ9rZ8WvdmSA32XLl5kfC6j-jzJrQdwIM,27313
|
112
122
|
rbx/grading/steps_with_caching.py,sha256=nez2YwgauGXKRjhk6tQxTDGQ-HEk7KfZOeAPhsxi5iw,3150
|
113
123
|
rbx/grading/steps_with_caching_run_test.py,sha256=mh4DRInrOGhnQFWD1SlcjDm_HvcSDFTDMSpAlG-Q5SI,15570
|
114
124
|
rbx/grading_utils.py,sha256=lL2KtSkOsMElqrRoApQTbFcqVOeHVWUDTMCa3IsLpC4,4484
|
@@ -129,7 +139,7 @@ rbx/resources/packagers/boca/compare.sh,sha256=a6AmQqwrIq616DHjp_S2l95wO7UiMVy0L
|
|
129
139
|
rbx/resources/packagers/boca/compile/c,sha256=lHLvxzkG_he5jmxWrix0WT80ipMWWUZdOgOQMSpj8oo,4507
|
130
140
|
rbx/resources/packagers/boca/compile/cc,sha256=B_18QkUGcjUg6yrTFlTQuMWnHpTWUKPZmFuk7Y0l1VA,4561
|
131
141
|
rbx/resources/packagers/boca/compile/cpp,sha256=_1pJTSC7uADu-IIdQCaZyMbH8x01wfgxcdZ36oxXncI,4496
|
132
|
-
rbx/resources/packagers/boca/compile/java,sha256=
|
142
|
+
rbx/resources/packagers/boca/compile/java,sha256=to0u-Yv-WHeYyhAMsJAwfU28HvdIi0w9jweWr_th95k,5047
|
133
143
|
rbx/resources/packagers/boca/compile/kt,sha256=3B900QSD4jSXnX91gJbvI4ZmNELHSiBb584Tmx7XtOc,4026
|
134
144
|
rbx/resources/packagers/boca/compile/pas,sha256=C5IwZzmZpIos49FrLGafRbdGPODNJn7N5JbnLX_FT_4,4576
|
135
145
|
rbx/resources/packagers/boca/compile/py2,sha256=On76To8Zv3z117JiuxjF1pGnq6tKKT4l-FddlP-iQFc,4546
|
@@ -137,7 +147,7 @@ rbx/resources/packagers/boca/compile/py3,sha256=6C0n2hy6Pu5kJzkYTuwiCaBB8OrV35nT
|
|
137
147
|
rbx/resources/packagers/boca/interactive/c,sha256=7AgLVL8TO0vGgpAyNVC08ceG83-_yPO7BIPHGLTerck,5720
|
138
148
|
rbx/resources/packagers/boca/interactive/cc,sha256=7AgLVL8TO0vGgpAyNVC08ceG83-_yPO7BIPHGLTerck,5720
|
139
149
|
rbx/resources/packagers/boca/interactive/cpp,sha256=BdyAz61YV1ojQGTKOXJXrMfN9zA9r4X3NnCRb4vJIEE,5719
|
140
|
-
rbx/resources/packagers/boca/interactive/java,sha256=
|
150
|
+
rbx/resources/packagers/boca/interactive/java,sha256=FpupDwYVYja9sTgtWn4tc9aHNqUt1RT4iRgt1klCrSQ,6725
|
141
151
|
rbx/resources/packagers/boca/interactive/kt,sha256=n32qFNKjiov49ABnbGPJUVc-yd66o-OtQhcSYQl5nV0,6621
|
142
152
|
rbx/resources/packagers/boca/interactive/py2,sha256=Ml0oE-xWnGFLkpns8fkTMbpC0UqIOThMoC1i6oL_xJk,5884
|
143
153
|
rbx/resources/packagers/boca/interactive/py3,sha256=EfbjcrISSdLp6W46tlk77d69jdrdw9z6rD8hBYaMHuQ,5848
|
@@ -146,7 +156,7 @@ rbx/resources/packagers/boca/run/bkp,sha256=xyDkZDaxgUrW-K2I0YJs8a8dJMuF-k8_ganD
|
|
146
156
|
rbx/resources/packagers/boca/run/c,sha256=s-Krq9mqJf587HEO0px2K2b4I0Gp4_vp-wZnJB6dsK4,3689
|
147
157
|
rbx/resources/packagers/boca/run/cc,sha256=s-Krq9mqJf587HEO0px2K2b4I0Gp4_vp-wZnJB6dsK4,3689
|
148
158
|
rbx/resources/packagers/boca/run/cpp,sha256=s-Krq9mqJf587HEO0px2K2b4I0Gp4_vp-wZnJB6dsK4,3689
|
149
|
-
rbx/resources/packagers/boca/run/java,sha256=
|
159
|
+
rbx/resources/packagers/boca/run/java,sha256=CNqQENEHTFemQgCJn9OjNIDYFSde629flcokK7r8h0U,5616
|
150
160
|
rbx/resources/packagers/boca/run/kt,sha256=JmnCGuGacFj2PJAGir9qSi31fXBuZd8ESkhxYIir-o8,4675
|
151
161
|
rbx/resources/packagers/boca/run/py2,sha256=PGQC9wX_Gh_kcSC8oEMrO9dyibrw6iqZKo0UAoIP5Mo,4919
|
152
162
|
rbx/resources/packagers/boca/run/py3,sha256=MyOvtoQAz76hw8Ut-8X9w5uvDbipzJ_XoZQww35ZYWQ,4919
|
@@ -202,8 +212,8 @@ rbx/testcase.py,sha256=yKOq3CAJZ1YTmInvnoIs0u1iJnRj_X85XiWbLI-p9d8,1951
|
|
202
212
|
rbx/testcase_rendering.py,sha256=nfmv6dSEqd4aR3TsaODwkKGK6AXty_DDKtWf_ejiQpI,2084
|
203
213
|
rbx/testing_utils.py,sha256=x_PqD8Zd2PkN91NxVHUnSTs044-1WK5KKtttKQBXpFs,2083
|
204
214
|
rbx/utils.py,sha256=SfR844_i0ebRDMkmS_w1YdZiWPc6h2RGADygewlWRbA,4845
|
205
|
-
rbx_cp-0.5.
|
206
|
-
rbx_cp-0.5.
|
207
|
-
rbx_cp-0.5.
|
208
|
-
rbx_cp-0.5.
|
209
|
-
rbx_cp-0.5.
|
215
|
+
rbx_cp-0.5.63.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
216
|
+
rbx_cp-0.5.63.dist-info/METADATA,sha256=dgNReBRlMvN09iAcedaaGLwPJ69PEfhET7Ml9yaGwpo,3604
|
217
|
+
rbx_cp-0.5.63.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
|
218
|
+
rbx_cp-0.5.63.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
|
219
|
+
rbx_cp-0.5.63.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|