rbx.cp 0.5.47__py3-none-any.whl → 0.5.48__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 CHANGED
@@ -343,7 +343,7 @@ def get_extension(name: str, _: Type[T]) -> Optional[T]:
343
343
  pkg = get_environment()
344
344
  if pkg.extensions is None:
345
345
  return None
346
- if hasattr(pkg.extensions, name):
346
+ if not hasattr(pkg.extensions, name):
347
347
  return None
348
348
  return getattr(pkg.extensions, name)
349
349
 
rbx/box/naming.py ADDED
@@ -0,0 +1,22 @@
1
+ from typing import Optional
2
+
3
+ from rbx.box import package
4
+ from rbx.box.contest import contest_package
5
+
6
+
7
+ def get_problem_shortname() -> Optional[str]:
8
+ contest = contest_package.find_contest_package()
9
+ if contest is None:
10
+ return None
11
+ problem_path = package.find_problem()
12
+ contest_path = contest_package.find_contest()
13
+
14
+ for problem in contest.problems:
15
+ if problem.path is None:
16
+ continue
17
+ if (problem_path / 'problem.rbx.yml').samefile(
18
+ contest_path / problem.path / 'problem.rbx.yml'
19
+ ):
20
+ return problem.short_name
21
+
22
+ return None
@@ -11,6 +11,7 @@ class BocaExtension(BaseModel):
11
11
  languages: typing.List[BocaLanguage] = list(typing.get_args(BocaLanguage))
12
12
  flags: typing.Dict[BocaLanguage, str] = {}
13
13
  maximumTimeError: float = _MAX_REP_ERROR
14
+ preferContestLetter: bool = False
14
15
 
15
16
  def flags_with_defaults(self) -> typing.Dict[BocaLanguage, str]:
16
17
  res: typing.Dict[BocaLanguage, str] = {
@@ -6,7 +6,7 @@ from typing import List
6
6
  import typer
7
7
 
8
8
  from rbx import console
9
- from rbx.box import package
9
+ from rbx.box import naming, package
10
10
  from rbx.box.environment import get_extension_or_default
11
11
  from rbx.box.packaging.boca.extension import BocaExtension, BocaLanguage
12
12
  from rbx.box.packaging.packager import BasePackager, BuiltStatement
@@ -52,14 +52,20 @@ class BocaPackager(BasePackager):
52
52
  raise typer.Exit(1)
53
53
 
54
54
  def _get_problem_name(self) -> str:
55
- pkg = package.find_problem_package_or_die()
56
55
  # BOCA forces Java class names to be the name of the problem.
57
- return pkg.name.replace('-', '_')
56
+ return self.package_basename().replace('-', '_')
57
+
58
+ def _get_problem_basename(self) -> str:
59
+ extension = get_extension_or_default('boca', BocaExtension)
60
+ shortname = naming.get_problem_shortname()
61
+ if extension.preferContestLetter and shortname is not None:
62
+ return shortname
63
+ return self._get_problem_name()
58
64
 
59
65
  def _get_problem_info(self) -> str:
60
66
  statement = self._get_main_statement()
61
67
  return (
62
- f'basename={self._get_problem_name()}\n'
68
+ f'basename={self._get_problem_basename()}\n'
63
69
  f'fullname={statement.title}\n'
64
70
  f'descfile={self._get_problem_name()}.pdf\n'
65
71
  )
@@ -24,14 +24,6 @@ class MojPackager(BocaPackager):
24
24
  def task_types(cls) -> List[TaskType]:
25
25
  return [TaskType.COMMUNICATION, TaskType.BATCH]
26
26
 
27
- def _get_problem_info(self) -> str:
28
- statement = self._get_main_statement()
29
- return (
30
- f'basename={self._get_problem_name()}\n'
31
- f'fullname={statement.title}\n'
32
- f'descfile={self._get_problem_name()}.pdf\n'
33
- )
34
-
35
27
  def _get_tl(self) -> str:
36
28
  extension = get_extension_or_default('boca', BocaExtension)
37
29
 
@@ -237,8 +229,6 @@ class MojPackager(BocaPackager):
237
229
  (outputs_path / f'{i + 1:03d}').touch()
238
230
 
239
231
  # Zip all.
240
- shutil.make_archive(
241
- str(build_path / self._get_problem_name()), 'zip', into_path
242
- )
232
+ shutil.make_archive(str(build_path / self.package_basename()), 'zip', into_path)
243
233
 
244
- return (build_path / self._get_problem_name()).with_suffix('.zip')
234
+ return (build_path / self.package_basename()).with_suffix('.zip')
@@ -3,7 +3,7 @@ import pathlib
3
3
  from abc import ABC, abstractmethod
4
4
  from typing import List, Tuple
5
5
 
6
- from rbx.box import package
6
+ from rbx.box import naming, package
7
7
  from rbx.box.contest import contest_package
8
8
  from rbx.box.contest.schema import ContestProblem, ContestStatement
9
9
  from rbx.box.generators import get_all_built_testcases
@@ -50,6 +50,13 @@ class BasePackager(ABC):
50
50
  res.add(statement.language)
51
51
  return list(res)
52
52
 
53
+ def package_basename(self):
54
+ pkg = package.find_problem_package_or_die()
55
+ shortname = naming.get_problem_shortname()
56
+ if shortname is not None:
57
+ return f'{shortname}-{pkg.name}'
58
+ return pkg.name
59
+
53
60
  def statement_types(self) -> List[StatementType]:
54
61
  return [StatementType.PDF]
55
62
 
@@ -7,7 +7,7 @@ import syncer
7
7
  import typer
8
8
 
9
9
  from rbx import annotations, console
10
- from rbx.box import environment, package
10
+ from rbx.box import environment, naming, package
11
11
  from rbx.box.schema import Package
12
12
  from rbx.box.statements.builders import (
13
13
  BUILDER_LIST,
@@ -291,6 +291,7 @@ def build_statement(
291
291
  output_type=output_type,
292
292
  use_samples=use_samples,
293
293
  is_editorial=is_editorial,
294
+ short_name=naming.get_problem_shortname(),
294
295
  )
295
296
  statement_path = (
296
297
  package.get_build_path()
rbx/grading/steps.py CHANGED
@@ -332,7 +332,7 @@ def _expand_part(part: str, sandbox: SandboxBase) -> List[str]:
332
332
 
333
333
  def _split_and_expand(command: str, sandbox: SandboxBase) -> List[str]:
334
334
  res = []
335
- parts = shlex.split(command.format(memory=sandbox.params.address_space))
335
+ parts = shlex.split(command.format(memory=sandbox.params.address_space or 2048))
336
336
  for part in parts:
337
337
  res.extend(_expand_part(part, sandbox))
338
338
  return res
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: rbx.cp
3
- Version: 0.5.47
3
+ Version: 0.5.48
4
4
  Summary:
5
5
  Author: Roberto Sales
6
6
  Requires-Python: >=3.9,<4.0
@@ -19,7 +19,7 @@ rbx/box/contest/statements.py,sha256=Or8gFb6P_oViGdeiVgepXsvd_W84mA7LRaVmiAXWWSg
19
19
  rbx/box/creation.py,sha256=Evz7K6JoarD-4JJQsZsgoxU9FgCF9Z7-LfuroG4Cqls,2444
20
20
  rbx/box/deferred.py,sha256=II3X9e87JCOZtmspnHh-n4PFqh-FsH_oc0XJHZ9ZYVQ,691
21
21
  rbx/box/download.py,sha256=MFP-R26JiYGAP89I0TK-0fYc69Fsd20tsBqgtRCy5AE,2234
22
- rbx/box/environment.py,sha256=47NtyuVC6zSQKAtQaXPEXvqcD-KJiuWRpWF8pYvcG4c,11158
22
+ rbx/box/environment.py,sha256=S-OLvR2_Nac8m923b9AtDhOY3goRJXlPA_I3s7BeDqQ,11162
23
23
  rbx/box/extensions.py,sha256=Von8kIeXvNFTkGlMRMTvL2HIHPwlkuiMswr-ydbGV1w,519
24
24
  rbx/box/formatting.py,sha256=3phFRHzqVXj4Ok1yDhCq6Clbw6KlqwJNpMhs--oTWFI,405
25
25
  rbx/box/generators.py,sha256=5-3K0JSLR9GbV0LmOkvNsWiQaMvhFBrI56ZaV1WgodQ,13472
@@ -27,13 +27,14 @@ rbx/box/generators_test.py,sha256=J7aBfuJhU84MWDWzgReRoOuQw_hVa09B8gTKAvL2XVo,19
27
27
  rbx/box/lazy_importing_main.py,sha256=6Z8As7qVFFT619xHH9Xt8VCH57NjC4aDxfAgkWiUwT8,116
28
28
  rbx/box/lazy_importing_test.py,sha256=B0-b3y_DkxEmtVfu4NfmVsgVdFl6kRCsEL6GLMHJISo,628
29
29
  rbx/box/main.py,sha256=Imwc0ZkheOpa5r8S0Xpb8RLQzJgxb9vyuSR4_wab11g,43
30
+ rbx/box/naming.py,sha256=n3Nvw2MuWtAjywDxYDV5gg22Upf8Ap1lYavo0o46SRA,612
30
31
  rbx/box/package.py,sha256=YuX_FS6yKx6FaFz0NF0cx3v6jzhqwvsLr3Oprx_TTJA,13645
31
- rbx/box/packaging/boca/extension.py,sha256=hQhcbocNfW2ESv5RalS1wf6uvOoOfOnR_gHvbXUbSzY,852
32
- rbx/box/packaging/boca/packager.py,sha256=X21vxdl9gY53s5fJ0YMFHHQrf1Ch6-d59nAsxr1YFR8,12236
32
+ rbx/box/packaging/boca/extension.py,sha256=EQALNEOv4zVDXSKs_dk11n92y7cBZVn8TogIK683lE0,890
33
+ rbx/box/packaging/boca/packager.py,sha256=CUMoQICrkQQBFElmI9SrvXlFFnpwkTiJ9qbOSJOy6AE,12512
33
34
  rbx/box/packaging/contest_main.py,sha256=nMdgPE4OK_tsnUMdRI1cJwLpgxGrwW_mJjox0oOALWw,2757
34
35
  rbx/box/packaging/main.py,sha256=RXGcpVZTwqkdLs4wHwoHSiFTXW62jIUS5fnvSKu3Ymw,2998
35
- rbx/box/packaging/moj/packager.py,sha256=XMv7tqdrL6R7dX6ZZcNGCmqVrKhBYuMf5NW9VuE7U80,8792
36
- rbx/box/packaging/packager.py,sha256=_NqRk1u2Q8SUhad-aRJk0Vox74MjW5msGPdpWZ_LzAk,3386
36
+ rbx/box/packaging/moj/packager.py,sha256=Ro_TO3RVCCRAxNcCio0u42TLfW8FnX9IohMChmGlrvo,8499
37
+ rbx/box/packaging/packager.py,sha256=da2haC1L9cG30myneMrRIAdGubtid0Xmy38BHKPCZZ4,3633
37
38
  rbx/box/packaging/polygon/packager.py,sha256=qTGOUckevdOCt_ES63pN3uhmhDl9JuNcZ1XEnGNq-tU,10833
38
39
  rbx/box/packaging/polygon/test.py,sha256=bgEju5PwudgyfwxXJagm8fM6CJVlWM6l_-2q1V-oKaQ,3069
39
40
  rbx/box/packaging/polygon/xml_schema.py,sha256=-r24bCeRMGLrGGoT9FIgmqr87xHL-JzrFaR6bztbYtw,2703
@@ -49,7 +50,7 @@ rbx/box/solutions.py,sha256=b4P6JN4eSDFiUKjBYvI38jsf8wLxS8Wi-YwBmm25Rcg,42684
49
50
  rbx/box/solutions_test.py,sha256=TCowbxBG3SvDlFO5-qtBj_M_HrAHe0IJaI1XwoQ1d00,1718
50
51
  rbx/box/state.py,sha256=MMf3DvfQji0jKEliCHct2Tpp_0epL1tvP8HbHNArQIc,166
51
52
  rbx/box/statements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
- rbx/box/statements/build_statements.py,sha256=uHlC3y3PtKaGUd2ZS_zYxi6-AKco6v_yd-lvm6BfrNA,12091
53
+ rbx/box/statements/build_statements.py,sha256=6przkQWy70ixDbqWMZmBgncaoWg67RY1gPdQ4TPjaTE,12150
53
54
  rbx/box/statements/builders.py,sha256=6lYV-cnC-NXMnJf1wasbq_AMbjdIuPpMirm7QsjZI6s,11825
54
55
  rbx/box/statements/joiners.py,sha256=jItNXkAbTjFQpPMgfDMW86n3vMTbaE8sgo9I8Yf4Txg,2886
55
56
  rbx/box/statements/latex.py,sha256=LkcHwXjMFxbw--Gj9T1VkFKQFsXhY9dN7xZHpZycNW8,1346
@@ -94,7 +95,7 @@ rbx/grading/judge/storage.py,sha256=3vv0HvtenbUZBH33CB5ZzX66ppL22G6munBaAA9BgwQ,
94
95
  rbx/grading/judge/test.py,sha256=ll0Iw7zyOpGdKPD_PGH7dvUkb4stQLu-ikbQnqJvuAc,944
95
96
  rbx/grading/judge/testiso.py,sha256=v14DtkWiZFJ9AKMzrb0_vZKPWDt8jz8iIw1Z2O-Advk,1397
96
97
  rbx/grading/processing_context.py,sha256=2fxa610WzXGvICDVWkPCG721w-1tXDVT7w_KtSnD0OM,1213
97
- rbx/grading/steps.py,sha256=nfZpHeoWK8d9Sm-5Zi5pYYpSdYIVvpTf88A6_C3QGyU,25744
98
+ rbx/grading/steps.py,sha256=RpA6HjQ4NaZLMryyFFGBW53QojLoD9VH5yjuZMycWds,25752
98
99
  rbx/grading/steps_with_caching.py,sha256=nez2YwgauGXKRjhk6tQxTDGQ-HEk7KfZOeAPhsxi5iw,3150
99
100
  rbx/grading/steps_with_caching_run_test.py,sha256=mh4DRInrOGhnQFWD1SlcjDm_HvcSDFTDMSpAlG-Q5SI,15570
100
101
  rbx/grading_utils.py,sha256=lL2KtSkOsMElqrRoApQTbFcqVOeHVWUDTMCa3IsLpC4,4484
@@ -187,8 +188,8 @@ rbx/testcase.py,sha256=yKOq3CAJZ1YTmInvnoIs0u1iJnRj_X85XiWbLI-p9d8,1951
187
188
  rbx/testcase_rendering.py,sha256=nfmv6dSEqd4aR3TsaODwkKGK6AXty_DDKtWf_ejiQpI,2084
188
189
  rbx/testing_utils.py,sha256=ZXMysGXpTtvS1lfLL38FuD5iSIyxi3ARjQePDrUmEtc,2067
189
190
  rbx/utils.py,sha256=6e1eXRzNE-52D0UVtqclePxqR4Haiqt8qWCrSVjnGuE,4585
190
- rbx_cp-0.5.47.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
191
- rbx_cp-0.5.47.dist-info/METADATA,sha256=PDafPB7Sz8UPXRwvMQpVZ5GZuDxjyT5Nd-P7wX1lOXY,3261
192
- rbx_cp-0.5.47.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
193
- rbx_cp-0.5.47.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
194
- rbx_cp-0.5.47.dist-info/RECORD,,
191
+ rbx_cp-0.5.48.dist-info/LICENSE,sha256=QwcOLU5TJoTeUhuIXzhdCEEDDvorGiC6-3YTOl4TecE,11356
192
+ rbx_cp-0.5.48.dist-info/METADATA,sha256=LDeC-APwbLHB8kxUUmbWjS_pwbTSfIbOweMWlYRTU-M,3261
193
+ rbx_cp-0.5.48.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
194
+ rbx_cp-0.5.48.dist-info/entry_points.txt,sha256=qBTLBOeifT1F00LWaEewRRE_jQPgvH7BUdJfZ-dYsFU,57
195
+ rbx_cp-0.5.48.dist-info/RECORD,,