Skip to content

Commit 255df2c

Browse files
mkrimaveluca93
authored andcommitted
Guess language based on available languages in the contest
1 parent 2d167d6 commit 255df2c

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

cms/grading/languagemanager.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ def get_language(name: str) -> Language:
5050
return _BY_NAME[name]
5151

5252

53-
def filename_to_language(filename: str) -> Language | None:
53+
def filename_to_language(filename: str, available_languages: list[Language] | None=None) -> Language | None:
5454
"""Return one of the languages inferred from the given filename.
5555
5656
filename: the file to test.
@@ -59,12 +59,14 @@ def filename_to_language(filename: str) -> Language | None:
5959
matching the given filename, or None if none match.
6060
6161
"""
62+
if available_languages is None:
63+
available_languages = LANGUAGES
6264
ext_index = filename.rfind(".")
6365
if ext_index == -1:
6466
return None
6567
ext = filename[ext_index:]
6668
names = sorted(language.name
67-
for language in LANGUAGES
69+
for language in available_languages
6870
if ext in language.source_extensions)
6971
return None if len(names) == 0 else get_language(names[0])
7072

cmscontrib/AddSubmission.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ def maybe_send_notification(submission_id: int):
4646
rs.disconnect()
4747

4848

49-
def language_from_submitted_files(files: dict[str, str]) -> Language | None:
49+
def language_from_submitted_files(files: dict[str, str], contest_languages: list[Language]) -> Language | None:
5050
"""Return the language inferred from the submitted files.
5151
5252
files: dictionary mapping the expected filename to a path in
@@ -61,7 +61,7 @@ def language_from_submitted_files(files: dict[str, str]) -> Language | None:
6161
# TODO: deduplicate with the code in SubmitHandler.
6262
language = None
6363
for filename in files.keys():
64-
this_language = filename_to_language(files[filename])
64+
this_language = filename_to_language(files[filename], contest_languages)
6565
if this_language is None and ".%l" in filename:
6666
raise ValueError(
6767
"Cannot recognize language for file `%s'." % filename)
@@ -126,7 +126,11 @@ def add_submission(
126126
if given_language is not None:
127127
language = get_language(given_language)
128128
else:
129-
language = language_from_submitted_files(files)
129+
contest_languages = [
130+
get_language(language)
131+
for language in task.contest.languages
132+
]
133+
language = language_from_submitted_files(files, contest_languages)
130134
except ValueError as e:
131135
logger.critical(e)
132136
return False

0 commit comments

Comments
 (0)