Skip to content

Commit 2d167d6

Browse files
CMSveluca93
authored andcommitted
cmsAddSubmission: Add the --lang parameter
When multiple versions of C++ are enabled in a contest, it is impossible to guess the language by filename extension. It is not checked that the language is really enabled in the contest. We consider this a feature (and document it as such), because it allows the administrator to test languages before they are made available to the contestants.
1 parent f26a257 commit 2d167d6

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

cmscontrib/AddSubmission.py

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
ask_for_contest
3030
from cms.db.filecacher import FileCacher
3131
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
3333
from cms.io import RemoteServiceClient
3434
from cmscommon.datetime import make_datetime
3535

@@ -79,6 +79,7 @@ def add_submission(
7979
task_name: str,
8080
timestamp: float,
8181
files: dict[str, str],
82+
given_language: str | None,
8283
):
8384
file_cacher = FileCacher()
8485
with SessionGen() as session:
@@ -122,7 +123,10 @@ def add_submission(
122123
need_lang = any(element.find(".%l") != -1 for element in elements)
123124
if need_lang:
124125
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)
126130
except ValueError as e:
127131
logger.critical(e)
128132
return False
@@ -185,6 +189,11 @@ def main() -> int:
185189
parser.add_argument("-t", "--timestamp", action="store", type=int,
186190
help="timestamp of the submission in seconds from "
187191
"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.")
188197

189198
args = parser.parse_args()
190199

@@ -212,7 +221,8 @@ def main() -> int:
212221
username=args.username,
213222
task_name=args.task_name,
214223
timestamp=args.timestamp,
215-
files=files)
224+
files=files,
225+
given_language=args.language)
216226
return 0 if success is True else 1
217227

218228

0 commit comments

Comments
 (0)