|
29 | 29 | ask_for_contest
|
30 | 30 | from cms.db.filecacher import FileCacher
|
31 | 31 | from cms.grading.language import Language
|
32 |
| -from cms.grading.languagemanager import filename_to_language |
| 32 | +from cms.grading.languagemanager import filename_to_language, get_language |
33 | 33 | from cms.io import RemoteServiceClient
|
34 | 34 | from cmscommon.datetime import make_datetime
|
35 | 35 |
|
@@ -79,6 +79,7 @@ def add_submission(
|
79 | 79 | task_name: str,
|
80 | 80 | timestamp: float,
|
81 | 81 | files: dict[str, str],
|
| 82 | + given_language: str | None, |
82 | 83 | ):
|
83 | 84 | file_cacher = FileCacher()
|
84 | 85 | with SessionGen() as session:
|
@@ -122,7 +123,10 @@ def add_submission(
|
122 | 123 | need_lang = any(element.find(".%l") != -1 for element in elements)
|
123 | 124 | if need_lang:
|
124 | 125 | try:
|
125 |
| - language = language_from_submitted_files(files) |
| 126 | + if given_language is not None: |
| 127 | + language = get_language(given_language) |
| 128 | + else: |
| 129 | + language = language_from_submitted_files(files) |
126 | 130 | except ValueError as e:
|
127 | 131 | logger.critical(e)
|
128 | 132 | return False
|
@@ -185,6 +189,11 @@ def main() -> int:
|
185 | 189 | parser.add_argument("-t", "--timestamp", action="store", type=int,
|
186 | 190 | help="timestamp of the submission in seconds from "
|
187 | 191 | "epoch, e.g. `date +%%s` (now if not set)")
|
| 192 | + parser.add_argument("-l", "--language", |
| 193 | + help="programming language (e.g., 'C++17 / g++'), " |
| 194 | + "default is to guess from file name extension. " |
| 195 | + "It is also possible to specify languages not enabled " |
| 196 | + "in the contest.") |
188 | 197 |
|
189 | 198 | args = parser.parse_args()
|
190 | 199 |
|
@@ -212,7 +221,8 @@ def main() -> int:
|
212 | 221 | username=args.username,
|
213 | 222 | task_name=args.task_name,
|
214 | 223 | timestamp=args.timestamp,
|
215 |
| - files=files) |
| 224 | + files=files, |
| 225 | + given_language=args.language) |
216 | 226 | return 0 if success is True else 1
|
217 | 227 |
|
218 | 228 |
|
|
0 commit comments