Skip to content

Server returns 500 error when no tokens available #1548

@OmeletWithoutEgg

Description

@OmeletWithoutEgg

Issue template

Description: The server returns 500 error when user has no tokens available on the task.

Steps to reproduce:

  1. Create a contest with a finite-token task (I followed the instructions to import con_test)
  2. Adjust the tokens parameters of the task as follows, so that it is easier to run out of tokens:
    Token mode: finite
    Maximum number of tokens:
    Minimum interval between tokens: 10
    Initial number of tokens: 2
    Token generation number: 1
    Token generation period: 1
    Maximum accumulated tokens: 2
  3. Login as user, submit at least 3 submissions, and try to run out of tokens.

Expected: It should show the submissions page as before, and tell user that no tokens available now.

Actual: A 500 error.

Logs

~/cms/log/ContestWebServer-0/2025-09-07-09-12-21.log

Relevant lines:

2025-09-07 09:16:12,560 - ERROR [Contest,0 9 base::write_error] Uncaught exception (UndefinedError("'tokens_info' is undefined")) while processing a request: Traceback (most recent call last):
  File "/home/cmsuser/cms/lib/python3.12/site-packages/tornado/web.py", line 1510, in _execute
    result = method(*self.path_args, **self.path_kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/tornado/web.py", line 2898, in wrapper
    return method(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/contest/phase_management.py", line 240, in wrapped
    return func(self, *args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/util.py", line 64, in wrapped_f
    f(self, *args)
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/contest/handlers/tasksubmission.py", line 179, in get
    self.render("task_submissions.html",
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/contest/handlers/base.py", line 91, in render
    for chunk in t.generate(**params):
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/environment.py", line 1045, in generate
    yield self.environment.handle_exception(exc_info, True)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/environment.py", line 780, in handle_exception
    reraise(exc_type, exc_value, tb)
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/_compat.py", line 37, in reraise
    raise value.with_traceback(tb)
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/contest/templates/task_submissions.html", line 24, in <module>
    {% set can_play_token_now = can_play_token and tokens_info[2] is none %}
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/environment.py", line 1039, in generate
    for event in self.root_render_func(self.new_context(vars)):
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/contest/templates/task_submissions.html", line 46, in root
    return;
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/contest/templates/contest.html", line 14, in root
    {% for extension in (lang|to_language).source_extensions %}
        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/contest/templates/base.html", line 27, in root
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/contest/templates/contest.html", line 315, in block_body
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/contest/templates/task_submissions.html", line 315, in block_core
    {% endif %}
                
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/runtime.py", line 262, in call
    return __obj(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/runtime.py", line 570, in __call__
    return self._invoke(arguments, autoescape)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/asyncsupport.py", line 110, in _invoke
    return original_invoke(self, arguments, autoescape)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/runtime.py", line 574, in _invoke
    rv = self._func(*arguments)
         ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/contest/templates/macro/submission.html", line 215, in macro
    {% endif %}
               ^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/runtime.py", line 262, in call
    return __obj(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/runtime.py", line 570, in __call__
    return self._invoke(arguments, autoescape)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/asyncsupport.py", line 110, in _invoke
    return original_invoke(self, arguments, autoescape)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/runtime.py", line 574, in _invoke
    rv = self._func(*arguments)
         ^^^^^^^^^^^^^^^^^^^^^^
  File "/home/cmsuser/cms/lib/python3.12/site-packages/cms/server/contest/templates/macro/submission.html", line 499, in macro
  File "/home/cmsuser/cms/lib/python3.12/site-packages/jinja2/environment.py", line 411, in getitem
    return obj[argument]
           ~~~^^^^^^^^^^
jinja2.exceptions.UndefinedError: 'tokens_info' is undefined

2025-09-07 09:16:12,560 - ERROR [Contest,0 9 web::log_request] 500 GET /tasks/batch/submissions?submission_id=3ZBQOjcz2LQJ17g05Rl7JbX4xTFFU6cU0mfB0askSK0. (172.18.0.1) 25.79ms

It seems to be related with https://github.com/cms-dev/cms/blob/main/cms/server/contest/templates/macro/submission.html#L239

System Information

CMS version: main
How was CMS installed: docker

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions