rbx.cp 0.5.13__py3-none-any.whl → 0.5.14__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/environment.py +1 -1
- rbx/box/generators.py +2 -2
- rbx/box/main.py +4 -5
- rbx/box/presets/__init__.py +18 -5
- rbx/box/solutions.py +5 -2
- rbx/box/stresses.py +2 -2
- rbx/box/stressing/finder_parser.py +2 -2
- rbx/box/validators.py +1 -1
- rbx/clone.py +1 -1
- rbx/grading/judge/digester.py +6 -0
- rbx/grading/steps.py +10 -8
- {rbx_cp-0.5.13.dist-info → rbx_cp-0.5.14.dist-info}/METADATA +4 -4
- {rbx_cp-0.5.13.dist-info → rbx_cp-0.5.14.dist-info}/RECORD +16 -16
- {rbx_cp-0.5.13.dist-info → rbx_cp-0.5.14.dist-info}/LICENSE +0 -0
- {rbx_cp-0.5.13.dist-info → rbx_cp-0.5.14.dist-info}/WHEEL +0 -0
- {rbx_cp-0.5.13.dist-info → rbx_cp-0.5.14.dist-info}/entry_points.txt +0 -0
rbx/box/environment.py
CHANGED
@@ -197,7 +197,7 @@ def get_environment(env: Optional[str] = None) -> Environment:
|
|
197
197
|
except ValidationError as e:
|
198
198
|
console.console.print(e)
|
199
199
|
console.console.print(
|
200
|
-
f'[error]Error parsing environment file [item]{env_path}[/item]
|
200
|
+
f'[error]Error parsing environment file [item]{env_path}[/item][/error]'
|
201
201
|
)
|
202
202
|
raise typer.Exit(1) from e
|
203
203
|
|
rbx/box/generators.py
CHANGED
@@ -339,7 +339,7 @@ def generate_standalone(
|
|
339
339
|
)
|
340
340
|
if not generation_log or generation_log.exitcode != 0:
|
341
341
|
console.console.print(
|
342
|
-
f'[error]Failed generating test using generator call [info]{call.name} {expanded_args_str}[/info]
|
342
|
+
f'[error]Failed generating test using generator call [info]{call.name} {expanded_args_str}[/info][/error]',
|
343
343
|
)
|
344
344
|
if generation_log is not None:
|
345
345
|
console.console.print(
|
@@ -361,7 +361,7 @@ def generate_standalone(
|
|
361
361
|
ok, message, *_ = validators.validate_test(output, validator, validator_digest)
|
362
362
|
if not ok:
|
363
363
|
console.console.print(
|
364
|
-
f'[error]Failed validating testcase generated by call [info]{call.name} {expanded_args_str}[/info]
|
364
|
+
f'[error]Failed validating testcase generated by call [info]{call.name} {expanded_args_str}[/info][/error]'
|
365
365
|
)
|
366
366
|
console.console.print(f'[error]Message:[/error] {message}')
|
367
367
|
console.console.print(f'Testcase written at [item]{output}[/item]')
|
rbx/box/main.py
CHANGED
@@ -44,7 +44,6 @@ from rbx.box.solutions import (
|
|
44
44
|
run_solutions,
|
45
45
|
)
|
46
46
|
from rbx.box.statements import build_statements
|
47
|
-
from rbx.box.ui import main as ui_pkg
|
48
47
|
|
49
48
|
app = typer.Typer(no_args_is_help=True, cls=annotations.AliasGroup)
|
50
49
|
app.add_typer(
|
@@ -73,10 +72,10 @@ app.add_typer(
|
|
73
72
|
)
|
74
73
|
|
75
74
|
|
76
|
-
@app.command('ui', hidden=True)
|
77
|
-
@package.within_problem
|
78
|
-
def ui():
|
79
|
-
|
75
|
+
# @app.command('ui', hidden=True)
|
76
|
+
# @package.within_problem
|
77
|
+
# def ui():
|
78
|
+
# ui_pkg.start()
|
80
79
|
|
81
80
|
|
82
81
|
@app.command('edit, e', help='Open problem.rbx.yml in your default editor.')
|
rbx/box/presets/__init__.py
CHANGED
@@ -4,6 +4,7 @@ import tempfile
|
|
4
4
|
from typing import Annotated, Iterable, List, Optional, Sequence, Union
|
5
5
|
|
6
6
|
import git
|
7
|
+
import questionary
|
7
8
|
import rich
|
8
9
|
import rich.prompt
|
9
10
|
import typer
|
@@ -16,7 +17,7 @@ from rbx.box.presets.fetch import PresetFetchInfo, get_preset_fetch_info
|
|
16
17
|
from rbx.box.presets.lock_schema import LockedAsset, PresetLock
|
17
18
|
from rbx.box.presets.schema import Preset, TrackedAsset
|
18
19
|
from rbx.config import get_default_app_path
|
19
|
-
from rbx.grading.judge.digester import digest_cooperatively
|
20
|
+
from rbx.grading.judge.digester import digest_cooperatively, digest_file
|
20
21
|
|
21
22
|
app = typer.Typer(no_args_is_help=True)
|
22
23
|
|
@@ -34,7 +35,7 @@ def get_preset_yaml(root: pathlib.Path = pathlib.Path()) -> Preset:
|
|
34
35
|
found = find_preset_yaml(root)
|
35
36
|
if not found:
|
36
37
|
console.console.print(
|
37
|
-
f'[error][item]preset.rbx.yml[/item] not found in [item]{root.absolute()}[/item]
|
38
|
+
f'[error][item]preset.rbx.yml[/item] not found in [item]{root.absolute()}[/item][/error]'
|
38
39
|
)
|
39
40
|
raise typer.Exit(1)
|
40
41
|
return utils.model_from_yaml(Preset, found.read_text())
|
@@ -300,10 +301,22 @@ def optionally_install_environment_from_preset(
|
|
300
301
|
if preset.env is None:
|
301
302
|
return
|
302
303
|
env_path = get_environment_path(preset.name)
|
304
|
+
preset_env_path = root / preset.env
|
303
305
|
if env_path.is_file():
|
304
|
-
|
306
|
+
if digest_file(preset_env_path) == digest_file(env_path):
|
307
|
+
return
|
308
|
+
overwrite = questionary.confirm(
|
309
|
+
'Preset environment file has changed. Overwrite?',
|
310
|
+
default=False,
|
311
|
+
).ask()
|
312
|
+
if not overwrite:
|
313
|
+
return
|
314
|
+
|
315
|
+
console.console.print(
|
316
|
+
f'[success]Overwriting the existing environment based on [item]{preset.env}[/item].'
|
317
|
+
)
|
305
318
|
env_path.parent.mkdir(parents=True, exist_ok=True)
|
306
|
-
shutil.copyfile(str(
|
319
|
+
shutil.copyfile(str(preset_env_path), env_path)
|
307
320
|
|
308
321
|
|
309
322
|
def _install(root: pathlib.Path = pathlib.Path(), force: bool = False):
|
@@ -406,7 +419,7 @@ def _sync(update: bool = False):
|
|
406
419
|
'[error]Package does not have a [item].preset.lock.yml[/item] file and thus cannot be synced.[/error]'
|
407
420
|
)
|
408
421
|
console.console.print(
|
409
|
-
'[error]Ensure this package was created through a preset, or manually associate one with [item]rbx presets lock [PRESET][/item]
|
422
|
+
'[error]Ensure this package was created through a preset, or manually associate one with [item]rbx presets lock [PRESET][/item][/error]'
|
410
423
|
)
|
411
424
|
raise typer.Exit(1)
|
412
425
|
|
rbx/box/solutions.py
CHANGED
@@ -114,7 +114,7 @@ def compile_solutions(
|
|
114
114
|
compiled_solutions[solution.path] = compile_item(solution)
|
115
115
|
except:
|
116
116
|
console.console.print(
|
117
|
-
f'[error]Failed compiling solution [item]{solution.path}[/item]
|
117
|
+
f'[error]Failed compiling solution [item]{solution.path}[/item][/error]'
|
118
118
|
)
|
119
119
|
raise
|
120
120
|
|
@@ -778,7 +778,10 @@ def print_run_report(
|
|
778
778
|
is_closing_group = last_group is not None and is_new_group
|
779
779
|
|
780
780
|
if is_closing_group:
|
781
|
-
console.print(
|
781
|
+
console.print(
|
782
|
+
f'({get_evals_formatted_time(group_evals)}, {get_evals_formatted_memory(group_evals)})',
|
783
|
+
end='',
|
784
|
+
)
|
782
785
|
console.print()
|
783
786
|
|
784
787
|
if is_new_solution:
|
rbx/box/stresses.py
CHANGED
@@ -35,7 +35,7 @@ def _compile_finder(finder: CodeItem) -> str:
|
|
35
35
|
digest = compile_item(finder)
|
36
36
|
except Exception as e:
|
37
37
|
console.console.print(
|
38
|
-
f'[error]Failed compiling checker [item]{finder.path}[/item]
|
38
|
+
f'[error]Failed compiling checker [item]{finder.path}[/item][/error]'
|
39
39
|
)
|
40
40
|
raise typer.Exit(1) from e
|
41
41
|
return digest
|
@@ -214,7 +214,7 @@ def run_stress(
|
|
214
214
|
|
215
215
|
if internal_error_results:
|
216
216
|
console.console.print(
|
217
|
-
f'[error]Checkers failed during stress test [item]{name}[/item] with args [info]{expanded_generator_call.name} {expanded_generator_call.args}[/info]
|
217
|
+
f'[error]Checkers failed during stress test [item]{name}[/item] with args [info]{expanded_generator_call.name} {expanded_generator_call.args}[/info][/error]'
|
218
218
|
)
|
219
219
|
for internal_error_result in internal_error_results:
|
220
220
|
assert internal_error_result.checker is not None
|
@@ -300,7 +300,7 @@ def validate(tree: lark.ParseTree):
|
|
300
300
|
for checker in all_checkers:
|
301
301
|
if not pathlib.Path(checker).is_file():
|
302
302
|
console.console.print(
|
303
|
-
f'[error]Finder expression references non-existing checker [item]{checker}[/item]
|
303
|
+
f'[error]Finder expression references non-existing checker [item]{checker}[/item][/error]'
|
304
304
|
)
|
305
305
|
raise typer.Exit(1)
|
306
306
|
|
@@ -308,7 +308,7 @@ def validate(tree: lark.ParseTree):
|
|
308
308
|
for solution in all_solutions:
|
309
309
|
if not pathlib.Path(solution).is_file():
|
310
310
|
console.console.print(
|
311
|
-
f'[error]Finder expression references non-existing solution [item]{solution}[/item]
|
311
|
+
f'[error]Finder expression references non-existing solution [item]{solution}[/item][/error]'
|
312
312
|
)
|
313
313
|
raise typer.Exit(1)
|
314
314
|
|
rbx/box/validators.py
CHANGED
@@ -35,7 +35,7 @@ def _compile_validator(validator: CodeItem) -> str:
|
|
35
35
|
digest = compile_item(validator)
|
36
36
|
except:
|
37
37
|
console.console.print(
|
38
|
-
f'[error]Failed compiling validator [item]{validator.path}[/item]
|
38
|
+
f'[error]Failed compiling validator [item]{validator.path}[/item][/error]'
|
39
39
|
)
|
40
40
|
raise
|
41
41
|
return digest
|
rbx/clone.py
CHANGED
@@ -158,7 +158,7 @@ def main(lang: Optional[str] = None):
|
|
158
158
|
)
|
159
159
|
else:
|
160
160
|
console.print(
|
161
|
-
f'[status][rbx]rbx[/rbx] parsed problem from [item]{problem.url}[/item]
|
161
|
+
f'[status][rbx]rbx[/rbx] parsed problem from [item]{problem.url}[/item][/status]'
|
162
162
|
)
|
163
163
|
else:
|
164
164
|
batch_to_left[problem.batch.id] -= 1
|
rbx/grading/judge/digester.py
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
import hashlib
|
2
|
+
import pathlib
|
2
3
|
from typing import IO
|
3
4
|
|
4
5
|
import gevent
|
@@ -33,3 +34,8 @@ def digest_cooperatively(f: IO[bytes], chunk_size: int = 2**20):
|
|
33
34
|
d = Digester()
|
34
35
|
digest_cooperatively_into_digester(f, d, chunk_size)
|
35
36
|
return d.digest()
|
37
|
+
|
38
|
+
|
39
|
+
def digest_file(path: pathlib.Path):
|
40
|
+
with open(path, 'rb') as f:
|
41
|
+
return digest_cooperatively(f)
|
rbx/grading/steps.py
CHANGED
@@ -132,12 +132,6 @@ class TestcaseIO(BaseModel):
|
|
132
132
|
output: Optional[pathlib.Path] = None
|
133
133
|
|
134
134
|
|
135
|
-
class PreprocessLog(BaseModel):
|
136
|
-
cmd: List[str]
|
137
|
-
exitcode: int
|
138
|
-
log: str
|
139
|
-
|
140
|
-
|
141
135
|
class RunLogMetadata(BaseModel):
|
142
136
|
language: Optional[str] = None
|
143
137
|
|
@@ -162,6 +156,11 @@ class RunLog(BaseModel):
|
|
162
156
|
return f'FAILED with exit code {self.exitcode} and sandbox status {self.exitstatus} (time: {time}s, memory: {memory//(1024*1024)}MB)'
|
163
157
|
|
164
158
|
|
159
|
+
class PreprocessLog(RunLog):
|
160
|
+
cmd: List[str]
|
161
|
+
log: str
|
162
|
+
|
163
|
+
|
165
164
|
class TestcaseLog(RunLog):
|
166
165
|
stdout_absolute_path: Optional[pathlib.Path] = None
|
167
166
|
stderr_absolute_path: Optional[pathlib.Path] = None
|
@@ -397,6 +396,9 @@ def compile(
|
|
397
396
|
log = PreprocessLog(
|
398
397
|
cmd=cmd,
|
399
398
|
exitcode=sandbox.get_exit_code(),
|
399
|
+
exitstatus=sandbox.get_exit_status(),
|
400
|
+
time=sandbox.get_execution_time(),
|
401
|
+
memory=sandbox.get_memory_used(),
|
400
402
|
log='\n'.join(std_outputs),
|
401
403
|
)
|
402
404
|
logs.append(log)
|
@@ -406,10 +408,10 @@ def compile(
|
|
406
408
|
|
407
409
|
if logs and logs[-1].exitcode != 0:
|
408
410
|
console.print(
|
409
|
-
'
|
411
|
+
'[error]FAILED[/error] Preprocessing failed with command',
|
410
412
|
utils.highlight_json_obj(logs[-1].cmd),
|
411
413
|
)
|
412
|
-
console.print(f'
|
414
|
+
console.print(f'[error]Summary:[/error] {logs[-1].get_summary()}')
|
413
415
|
console.print(Text.from_ansi(logs[-1].log), style='default')
|
414
416
|
return False
|
415
417
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: rbx.cp
|
3
|
-
Version: 0.5.
|
3
|
+
Version: 0.5.14
|
4
4
|
Summary:
|
5
5
|
Author: Roberto Sales
|
6
6
|
Requires-Python: >=3.9,<4.0
|
@@ -10,7 +10,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
10
10
|
Classifier: Programming Language :: Python :: 3.11
|
11
11
|
Classifier: Programming Language :: Python :: 3.12
|
12
12
|
Requires-Dist: chardet (>=5.2.0,<6.0.0)
|
13
|
-
Requires-Dist: fastapi (>=0.
|
13
|
+
Requires-Dist: fastapi (>=0.115.8,<0.116.0)
|
14
14
|
Requires-Dist: filelock (>=3.14.0,<4.0.0)
|
15
15
|
Requires-Dist: gevent (>=24.2.1,<25.0.0)
|
16
16
|
Requires-Dist: gitpython (>=3.1.43,<4.0.0)
|
@@ -26,9 +26,9 @@ Requires-Dist: python-iso639 (>=2024.4.27,<2025.0.0)
|
|
26
26
|
Requires-Dist: pyyaml (>=6.0.1,<7.0.0)
|
27
27
|
Requires-Dist: questionary (>=2.1.0,<3.0.0)
|
28
28
|
Requires-Dist: requests (>=2.32.3,<3.0.0)
|
29
|
-
Requires-Dist: rich (>=13.
|
29
|
+
Requires-Dist: rich (>=13.9.4,<14.0.0)
|
30
30
|
Requires-Dist: textual (>=0.79.1,<0.80.0)
|
31
|
-
Requires-Dist: typer
|
31
|
+
Requires-Dist: typer (>=0.15.1,<0.16.0)
|
32
32
|
Description-Content-Type: text/markdown
|
33
33
|
|
34
34
|
<p align="center">
|
@@ -17,11 +17,11 @@ rbx/box/contest/schema.py,sha256=rxzjJasMWPKKhvSJs4eW4A2oCiA4gXgfF-MzqsbPslQ,491
|
|
17
17
|
rbx/box/contest/statements.py,sha256=cRK5ndsywotUm66QqvtReqVAc-fW4c-2OZufK3Xd8_c,2947
|
18
18
|
rbx/box/creation.py,sha256=mVHVVj8ozX9D5qpkLewE5WSjF6HtTm74Pkwubk-bATg,2259
|
19
19
|
rbx/box/download.py,sha256=MFP-R26JiYGAP89I0TK-0fYc69Fsd20tsBqgtRCy5AE,2234
|
20
|
-
rbx/box/environment.py,sha256=
|
20
|
+
rbx/box/environment.py,sha256=GjwnJwtkTdkHmUh1b23zagjLsTiJQAOpP36A93mA-zc,11159
|
21
21
|
rbx/box/extensions.py,sha256=p0iLaU28KswOBDX2HGVO_dR2gk-JSAWb6sXC6GZ1d0w,738
|
22
|
-
rbx/box/generators.py,sha256=
|
22
|
+
rbx/box/generators.py,sha256=lKX_50Yf4bretHxgGzEZxKV7LFjpweaADC-22WEpLY4,16302
|
23
23
|
rbx/box/generators_test.py,sha256=mQqHepAMYa6zV_PseQALI0nIX6AdQktt6lh94muFhNw,1758
|
24
|
-
rbx/box/main.py,sha256=
|
24
|
+
rbx/box/main.py,sha256=id1YpYKb7GHWoEMdiRAwfT08kY-ol52ulGcaCaPhtqw,16411
|
25
25
|
rbx/box/package.py,sha256=Hds0WIvhAWXnYOmIXGULcLLVeFM1YkllOPSKHB5QSkk,10532
|
26
26
|
rbx/box/packaging/boca/extension.py,sha256=hQhcbocNfW2ESv5RalS1wf6uvOoOfOnR_gHvbXUbSzY,852
|
27
27
|
rbx/box/packaging/boca/packager.py,sha256=FOhSRg5K5Y4qNB0WyTR3DKgrpObf9I0JbyGpJHOtxpo,10673
|
@@ -31,12 +31,12 @@ rbx/box/packaging/packager.py,sha256=suCT_SLnWa915rV2j8VFqzH43HGKRTr9mGGlrvj45aw
|
|
31
31
|
rbx/box/packaging/polygon/packager.py,sha256=CcjHzDr4MwSyp270gsPY6RWoz8bUJeykDqXPvQ3XZ1U,10773
|
32
32
|
rbx/box/packaging/polygon/test.py,sha256=bgEju5PwudgyfwxXJagm8fM6CJVlWM6l_-2q1V-oKaQ,3069
|
33
33
|
rbx/box/packaging/polygon/xml_schema.py,sha256=-r24bCeRMGLrGGoT9FIgmqr87xHL-JzrFaR6bztbYtw,2703
|
34
|
-
rbx/box/presets/__init__.py,sha256=
|
34
|
+
rbx/box/presets/__init__.py,sha256=Wiegp1onXPaZs8RE1J3PKT5j3PFWKw2U2rkgOSbnYeM,17529
|
35
35
|
rbx/box/presets/fetch.py,sha256=F-BCOlvEBEyDqtOhiDuGPn4EDtA4Bwm-fqHJ7zZGlW8,1975
|
36
36
|
rbx/box/presets/lock_schema.py,sha256=6sRPnyePOC8yy-5WcD5JRZdDJHf8loqbvpQ1IPiOU9s,349
|
37
37
|
rbx/box/presets/schema.py,sha256=mZmSPkQsw7eQM0lQN6er1MO_LiW1ObwwAZFDK0F5fxE,1962
|
38
38
|
rbx/box/schema.py,sha256=RBQmFxr35LfaRwbxR6WezeQQ3twqh9VS3tn20rlRm_I,12580
|
39
|
-
rbx/box/solutions.py,sha256=
|
39
|
+
rbx/box/solutions.py,sha256=zfRawpEufWOI2uw7jNFb86bx8HwU5UaiwQMUj9KlDBE,27447
|
40
40
|
rbx/box/solutions_test.py,sha256=DetQj7ZVnV3tBXBpCrFeK_Yv3XUtdEf29y_6qnyeyfY,1496
|
41
41
|
rbx/box/statements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
42
42
|
rbx/box/statements/build_statements.py,sha256=24ZUM5H33NhmqnDL0ofA1anUKWxuZG1paA1tCV4AKns,11911
|
@@ -45,9 +45,9 @@ rbx/box/statements/joiners.py,sha256=ZbxomnMjEFT8yf5WSWUB4tBa3DL3AhjGEuh8uqHyDdg
|
|
45
45
|
rbx/box/statements/latex.py,sha256=LkcHwXjMFxbw--Gj9T1VkFKQFsXhY9dN7xZHpZycNW8,1346
|
46
46
|
rbx/box/statements/latex_jinja.py,sha256=7WBfn1h8DpqCAmSE6Av64HfURMnJ2AO4QX1CD72sz5E,7096
|
47
47
|
rbx/box/statements/schema.py,sha256=g3KgBn4nIqx-0utH8R2FCqPmJP969chhYfn96chQgd4,3851
|
48
|
-
rbx/box/stresses.py,sha256=
|
48
|
+
rbx/box/stresses.py,sha256=DUc8TWFlVXUvh-iaBnvwVNmgoCi1puOJiKTHMP8COds,10595
|
49
49
|
rbx/box/stressing/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
50
|
-
rbx/box/stressing/finder_parser.py,sha256=
|
50
|
+
rbx/box/stressing/finder_parser.py,sha256=syZGg_Wm762jAe2eN0oBCNeiM0H8lfZRWT5HKOXpkuQ,11917
|
51
51
|
rbx/box/stressing/generator_parser.py,sha256=oHZryjR3YohgaSO9WEirQ7b2e-98WgZStF0N99W4Thw,7380
|
52
52
|
rbx/box/testcases.py,sha256=bi7T5xXkwyWOkoI6ILcaf2gSSVuuNtZjhP5yL0DJAu4,1452
|
53
53
|
rbx/box/ui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -55,10 +55,10 @@ rbx/box/ui/captured_log.py,sha256=ptICDPViVnz-_2NfrcB0SSBXNW5L74zI-vAZNN7kSok,11
|
|
55
55
|
rbx/box/ui/css/app.tcss,sha256=apd5PkPEvl5jK3kE2qrxPyVED1VnvSsj08QQwzUPwEA,786
|
56
56
|
rbx/box/ui/main.py,sha256=b0rHcBF42W4AOCv7WhtiGf_rUnY0yxpqO5oj3wfR4R4,984
|
57
57
|
rbx/box/ui/run.py,sha256=wMEXrEFdQvMHz2hRKAFIithTnTtaL0kNQZu0jKmb8jI,7060
|
58
|
-
rbx/box/validators.py,sha256=
|
58
|
+
rbx/box/validators.py,sha256=pRBYCJRbA_7FrthJG9tNHQyTxq7yBNuu8lTgd7irc3s,8309
|
59
59
|
rbx/box/validators_test.py,sha256=hriR6rD32Ouu64eKYYTPLZVvqMxXj7Q2h1l_JAefL7U,344
|
60
60
|
rbx/checker.py,sha256=pj1jO3my48ru-qugbER5onccANCjoR0-PaFe3H3VGEY,4118
|
61
|
-
rbx/clone.py,sha256=
|
61
|
+
rbx/clone.py,sha256=wpHyED0_7ST7LD3vj7HjXhzqEzlwh6dRQvKQVDYhGeU,6744
|
62
62
|
rbx/config.py,sha256=2B0PwgDaLjfs5PI8-kfDia6UVOAJq4rpWvb8VmweSXg,7360
|
63
63
|
rbx/conftest.py,sha256=ouilbOIpvX8jTEdCAiWT85CbdBQKUUf41BjmDI82u-Y,967
|
64
64
|
rbx/console.py,sha256=l0iulQH3_jQEm455W66TbDtC4a8owkWTHIIQpJaXofQ,715
|
@@ -69,7 +69,7 @@ rbx/grading/caching.py,sha256=oGPnKpk9NIUJKwDMsPbEF0bMUtjHN8CEeAOvCzfM5dk,11848
|
|
69
69
|
rbx/grading/conftest.py,sha256=iN9LUG1IQqhK5JjkctcP68v6675oYsiD2sQSgyLMTqw,960
|
70
70
|
rbx/grading/judge/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
71
71
|
rbx/grading/judge/cacher.py,sha256=W4bdPIvI8tXOl8A7B4Ncuzi9-zXCp0DX40i1XKQGOAU,17761
|
72
|
-
rbx/grading/judge/digester.py,sha256=
|
72
|
+
rbx/grading/judge/digester.py,sha256=m6o-kjwyFOXKdImUXtVbdMHhwrgrXk8FDnJFVefnTIw,951
|
73
73
|
rbx/grading/judge/sandbox.py,sha256=0h3YCmGabf9OfORJgx6v2Bed4kE-i8FyuZkPux-sDVk,23569
|
74
74
|
rbx/grading/judge/sandboxes/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
75
75
|
rbx/grading/judge/sandboxes/isolate.py,sha256=9xgBuNfAvGtO2zME1FXRah2rcPvzDShsPG0TTuX_UDU,25649
|
@@ -78,7 +78,7 @@ rbx/grading/judge/sandboxes/timeit.py,sha256=rOQnxf90hhTrWOQ1Mt57HNhZAAn1jDULtMj
|
|
78
78
|
rbx/grading/judge/storage.py,sha256=FirqjwDqb0m0h2OTFyWrZL7CQ4XjZNxhqB4JpnDIhZY,9485
|
79
79
|
rbx/grading/judge/test.py,sha256=ll0Iw7zyOpGdKPD_PGH7dvUkb4stQLu-ikbQnqJvuAc,944
|
80
80
|
rbx/grading/judge/testiso.py,sha256=v14DtkWiZFJ9AKMzrb0_vZKPWDt8jz8iIw1Z2O-Advk,1397
|
81
|
-
rbx/grading/steps.py,sha256=
|
81
|
+
rbx/grading/steps.py,sha256=pJM3Xnog6ZXia2xvWMeJmNij_ipRg2hec_WBf1n5O44,18598
|
82
82
|
rbx/grading/steps_with_caching.py,sha256=C_IA_dStxp6poJyGggFFyEouU9y_739UOLKUiJITb8M,1489
|
83
83
|
rbx/grading/steps_with_caching_run_test.py,sha256=nRzB4OcXkb-kQ4WCj0iTGVfBACllxZ0Ek5RSwfoJRgo,15262
|
84
84
|
rbx/grading_utils.py,sha256=lL2KtSkOsMElqrRoApQTbFcqVOeHVWUDTMCa3IsLpC4,4484
|
@@ -157,8 +157,8 @@ rbx/testdata/caching/executable.py,sha256=WKRHNf_fprFJd1Fq1ubmQtR3mZzTYVNwKPLWuZ
|
|
157
157
|
rbx/testdata/compatible,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
158
158
|
rbx/testing_utils.py,sha256=ZZLKMUHlZ4HwsuNY50jqSBJ9HhpnFdba7opjDsvXE1U,2084
|
159
159
|
rbx/utils.py,sha256=wy8zQRb97n3lptilK7UxM4A44KjXb1W5Z1tD61a-K4A,4173
|
160
|
-
rbx_cp-0.5.
|
161
|
-
rbx_cp-0.5.
|
162
|
-
rbx_cp-0.5.
|
163
|
-
rbx_cp-0.5.
|
164
|
-
rbx_cp-0.5.
|
160
|
+
rbx_cp-0.5.14.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
|
161
|
+
rbx_cp-0.5.14.dist-info/METADATA,sha256=1dncSdLwt6q_zdoeysRdfAlZVk4wfHXA4cDojM5d3kA,3249
|
162
|
+
rbx_cp-0.5.14.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
|
163
|
+
rbx_cp-0.5.14.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
|
164
|
+
rbx_cp-0.5.14.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|