rbx.cp 0.5.6__tar.gz → 0.5.9__tar.gz

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.
Files changed (163) hide show
  1. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/PKG-INFO +1 -1
  2. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/pyproject.toml +1 -1
  3. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/contest/main.py +22 -13
  4. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/creation.py +1 -0
  5. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/presets/__init__.py +2 -0
  6. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/LICENSE +0 -0
  7. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/README.md +0 -0
  8. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/__init__.py +0 -0
  9. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/annotations.py +0 -0
  10. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/autoenum.py +0 -0
  11. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/__init__.py +0 -0
  12. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/builder.py +0 -0
  13. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/cd.py +0 -0
  14. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/checkers.py +0 -0
  15. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/code.py +0 -0
  16. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/compile.py +0 -0
  17. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/conftest.py +0 -0
  18. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/contest/__init__.py +0 -0
  19. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/contest/build_contest_statements.py +0 -0
  20. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/contest/contest_package.py +0 -0
  21. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/contest/contest_utils.py +0 -0
  22. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/contest/schema.py +0 -0
  23. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/contest/statements.py +0 -0
  24. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/download.py +0 -0
  25. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/environment.py +0 -0
  26. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/extensions.py +0 -0
  27. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/generators.py +0 -0
  28. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/generators_test.py +0 -0
  29. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/main.py +0 -0
  30. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/package.py +0 -0
  31. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/packaging/boca/extension.py +0 -0
  32. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/packaging/boca/packager.py +0 -0
  33. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/packaging/contest_main.py +0 -0
  34. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/packaging/main.py +0 -0
  35. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/packaging/packager.py +0 -0
  36. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/packaging/polygon/packager.py +0 -0
  37. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/packaging/polygon/test.py +0 -0
  38. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/packaging/polygon/xml_schema.py +0 -0
  39. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/presets/fetch.py +0 -0
  40. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/presets/lock_schema.py +0 -0
  41. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/presets/schema.py +0 -0
  42. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/schema.py +0 -0
  43. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/solutions.py +0 -0
  44. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/solutions_test.py +0 -0
  45. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/statements/__init__.py +0 -0
  46. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/statements/build_statements.py +0 -0
  47. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/statements/builders.py +0 -0
  48. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/statements/joiners.py +0 -0
  49. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/statements/latex.py +0 -0
  50. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/statements/latex_jinja.py +0 -0
  51. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/statements/schema.py +0 -0
  52. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/stresses.py +0 -0
  53. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/stressing/__init__.py +0 -0
  54. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/stressing/finder_parser.py +0 -0
  55. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/stressing/generator_parser.py +0 -0
  56. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/testcases.py +0 -0
  57. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/ui/__init__.py +0 -0
  58. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/ui/captured_log.py +0 -0
  59. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/ui/css/app.tcss +0 -0
  60. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/ui/main.py +0 -0
  61. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/ui/run.py +0 -0
  62. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/validators.py +0 -0
  63. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/box/validators_test.py +0 -0
  64. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/checker.py +0 -0
  65. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/clone.py +0 -0
  66. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/config.py +0 -0
  67. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/conftest.py +0 -0
  68. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/console.py +0 -0
  69. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/create.py +0 -0
  70. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/edit.py +0 -0
  71. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/__init__.py +0 -0
  72. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/caching.py +0 -0
  73. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/conftest.py +0 -0
  74. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/judge/__init__.py +0 -0
  75. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/judge/cacher.py +0 -0
  76. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/judge/digester.py +0 -0
  77. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/judge/sandbox.py +0 -0
  78. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/judge/sandboxes/__init__.py +0 -0
  79. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/judge/sandboxes/isolate.py +0 -0
  80. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/judge/sandboxes/stupid_sandbox.py +0 -0
  81. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/judge/sandboxes/timeit.py +0 -0
  82. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/judge/storage.py +0 -0
  83. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/judge/test.py +0 -0
  84. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/judge/testiso.py +0 -0
  85. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/steps.py +0 -0
  86. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/steps_with_caching.py +0 -0
  87. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading/steps_with_caching_run_test.py +0 -0
  88. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/grading_utils.py +0 -0
  89. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/hydration.py +0 -0
  90. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/main.py +0 -0
  91. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/metadata.py +0 -0
  92. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/providers/__init__.py +0 -0
  93. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/providers/codeforces.py +0 -0
  94. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/providers/provider.py +0 -0
  95. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/checkers/boilerplate.cpp +0 -0
  96. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/default_config.json +0 -0
  97. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/envs/default.rbx.yml +0 -0
  98. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/envs/isolate.rbx.yml +0 -0
  99. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/checker.sh +0 -0
  100. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/compare +0 -0
  101. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/compile/c +0 -0
  102. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/compile/cc +0 -0
  103. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/compile/cpp +0 -0
  104. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/compile/java +0 -0
  105. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/compile/kt +0 -0
  106. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/compile/pas +0 -0
  107. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/compile/py2 +0 -0
  108. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/compile/py3 +0 -0
  109. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/run/c +0 -0
  110. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/run/cc +0 -0
  111. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/run/cpp +0 -0
  112. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/run/java +0 -0
  113. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/run/kt +0 -0
  114. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/run/py2 +0 -0
  115. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/packagers/boca/run/py3 +0 -0
  116. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/contest/contest.rbx.yml +0 -0
  117. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/contest/statement/contest.rbx.tex +0 -0
  118. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/contest/statement/olymp.sty +0 -0
  119. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/contest/statement/template.rbx.tex +0 -0
  120. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/preset.rbx.yml +0 -0
  121. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/.gitignore +0 -0
  122. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/gen.cpp +0 -0
  123. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/problem.rbx.yml +0 -0
  124. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/random.py +0 -0
  125. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/random.txt +0 -0
  126. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/sols/main.cpp +0 -0
  127. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/sols/slow.cpp +0 -0
  128. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/sols/wa.cpp +0 -0
  129. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/statement/olymp.sty +0 -0
  130. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/statement/projecao.png +0 -0
  131. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/statement/statement.rbx.tex +0 -0
  132. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/statement/template.rbx.tex +0 -0
  133. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/tests/samples/000.in +0 -0
  134. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/tests/samples/001.in +0 -0
  135. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/validator.cpp +0 -0
  136. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/presets/default/problem/wcmp.cpp +0 -0
  137. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/resources/templates/template.cpp +0 -0
  138. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/run.py +0 -0
  139. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/schema.py +0 -0
  140. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/submit.py +0 -0
  141. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/submitors/__init__.py +0 -0
  142. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/submitors/codeforces.py +0 -0
  143. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/submitors/submitor.py +0 -0
  144. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/test.py +0 -0
  145. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testcase.py +0 -0
  146. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testcase_rendering.py +0 -0
  147. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/gen1.cpp +0 -0
  148. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/gen2.cpp +0 -0
  149. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/genScript.py +0 -0
  150. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/hard-tle.sol.cpp +0 -0
  151. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/ole.cpp +0 -0
  152. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/problem.rbx.yml +0 -0
  153. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/re.sol.cpp +0 -0
  154. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/sol.cpp +0 -0
  155. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/tests/1.in +0 -0
  156. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/tle-and-incorrect.sol.cpp +0 -0
  157. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/tle.sol.cpp +0 -0
  158. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/validator.cpp +0 -0
  159. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/box1/wa.sol.cpp +0 -0
  160. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/caching/executable.py +0 -0
  161. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testdata/compatible +0 -0
  162. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/testing_utils.py +0 -0
  163. {rbx_cp-0.5.6 → rbx_cp-0.5.9}/rbx/utils.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: rbx.cp
3
- Version: 0.5.6
3
+ Version: 0.5.9
4
4
  Summary:
5
5
  Author: Roberto Sales
6
6
  Requires-Python: >=3.9,<4.0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "rbx.cp"
3
- version = "0.5.6"
3
+ version = "0.5.9"
4
4
  description = ""
5
5
  packages = [
6
6
  {include = "rbx"}
@@ -3,6 +3,7 @@ import shutil
3
3
  import subprocess
4
4
  from typing import Annotated, Optional
5
5
 
6
+ import rich.prompt
6
7
  import typer
7
8
 
8
9
  from rbx import annotations, console, utils
@@ -38,7 +39,7 @@ app.add_typer(
38
39
 
39
40
  @app.command('create, c', help='Create a new contest package.')
40
41
  def create(
41
- name: str,
42
+ path: str,
42
43
  preset: Annotated[
43
44
  str,
44
45
  typer.Option(
@@ -54,7 +55,7 @@ def create(
54
55
  help='Whether to inline the installed preset within the contest folder.',
55
56
  ),
56
57
  ):
57
- console.console.print(f'Creating new contest [item]{name}[/item]...')
58
+ console.console.print(f'Creating new contest at [item]{path}[/item]...')
58
59
 
59
60
  fetch_info = get_preset_fetch_info(preset)
60
61
  if fetch_info is None:
@@ -85,17 +86,24 @@ def create(
85
86
  )
86
87
  raise typer.Exit(1)
87
88
 
88
- dest_path = pathlib.Path(name)
89
+ dest_path = pathlib.Path(path)
89
90
 
90
91
  if dest_path.exists():
91
- console.console.print(
92
- f'[error]Directory [item]{dest_path}[/item] already exists.[/error]'
93
- )
94
- raise typer.Exit(1)
95
-
96
- shutil.copytree(str(contest_path), str(dest_path))
92
+ if not rich.prompt.Confirm.ask(
93
+ f'Directory [item]{dest_path}[/item] already exists. Create contest in it? This might be destructive.',
94
+ show_default=False,
95
+ console=console.console,
96
+ ):
97
+ console.console.print(
98
+ f'[error]Directory [item]{dest_path}[/item] already exists.[/error]'
99
+ )
100
+ raise typer.Exit(1)
101
+
102
+ dest_path.mkdir(parents=True, exist_ok=True)
103
+ shutil.copytree(str(contest_path), str(dest_path), dirs_exist_ok=True)
97
104
  shutil.rmtree(str(dest_path / 'build'), ignore_errors=True)
98
105
  shutil.rmtree(str(dest_path / '.box'), ignore_errors=True)
106
+ shutil.rmtree(str(dest_path / '.local.rbx'), ignore_errors=True)
99
107
  # TODO: consider clearing build and .box recursively for nested problem directories
100
108
  for lock in dest_path.rglob('.preset-lock.yml'):
101
109
  lock.unlink(missing_ok=True)
@@ -120,7 +128,8 @@ def edit():
120
128
 
121
129
  @app.command('add, a', help='Add new problem to contest.')
122
130
  @within_contest
123
- def add(name: str, short_name: str, preset: Optional[str] = None):
131
+ def add(path: str, short_name: str, preset: Optional[str] = None):
132
+ name = pathlib.Path(path).stem
124
133
  utils.validate_field(ContestProblem, 'short_name', short_name)
125
134
  utils.validate_field(Package, 'name', name)
126
135
 
@@ -133,21 +142,21 @@ def add(name: str, short_name: str, preset: Optional[str] = None):
133
142
  preset_lock = presets.get_preset_lock()
134
143
  if preset is None and preset_lock is not None:
135
144
  preset = preset_lock.preset_name
136
- creation.create(name, preset=preset, path=pathlib.Path(name))
145
+ creation.create(name, preset=preset, path=pathlib.Path(path))
137
146
 
138
147
  contest = find_contest_package_or_die()
139
148
  # Reassign mutable object before saving.
140
149
  contest.problems = sorted(
141
150
  [
142
151
  *contest.problems,
143
- ContestProblem(short_name=short_name, path=pathlib.Path(name)),
152
+ ContestProblem(short_name=short_name, path=pathlib.Path(path)),
144
153
  ],
145
154
  key=lambda p: p.short_name,
146
155
  )
147
156
 
148
157
  save_contest(contest)
149
158
  console.console.print(
150
- f'Problem [item]{name} ({short_name})[/item] added to contest.'
159
+ f'Problem [item]{name} ({short_name})[/item] added to contest at [item]{path}[/item].'
151
160
  )
152
161
 
153
162
 
@@ -61,6 +61,7 @@ def create(
61
61
  )
62
62
  raise typer.Exit(1)
63
63
 
64
+ dest_path.mkdir(parents=True, exist_ok=True)
64
65
  shutil.copytree(str(problem_path), str(dest_path))
65
66
 
66
67
  # Remove a few left overs.
@@ -334,6 +334,8 @@ def _install(root: pathlib.Path = pathlib.Path(), force: bool = False):
334
334
  shutil.copytree(str(root), str(installation_path))
335
335
  shutil.rmtree(str(installation_path / 'build'), ignore_errors=True)
336
336
  shutil.rmtree(str(installation_path / '.box'), ignore_errors=True)
337
+ shutil.rmtree(str(installation_path / '.local.rbx'), ignore_errors=True)
338
+ shutil.rmtree(str(installation_path / '.git'), ignore_errors=True)
337
339
 
338
340
 
339
341
  def install_from_remote(fetch_info: PresetFetchInfo, force: bool = False) -> str:
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes