From de906e9be0767994aa49a36ebb5de362ef40ce31 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 27 Jan 2026 16:24:20 -0600 Subject: [PATCH 1/2] Improve some template filter registrations --- course/templatetags/coursetags.py | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/course/templatetags/coursetags.py b/course/templatetags/coursetags.py index 044666284..41462d109 100644 --- a/course/templatetags/coursetags.py +++ b/course/templatetags/coursetags.py @@ -23,10 +23,17 @@ THE SOFTWARE. """ +from typing import TYPE_CHECKING + from django.template import Library, Node, TemplateSyntaxError from django.utils import translation +if TYPE_CHECKING: + from course.datespec import Datespec + from course.models import Course, Participation + + register = Library() @@ -73,8 +80,8 @@ def do_get_current_js_lang_name(parser, token): # {{{ filter for participation.has_permission() -@register.filter(name="has_permission") -def has_permission(participation, arg): +@register.filter +def has_permission(participation: Participation, arg: str): """ Check if a participation instance has specific permission. :param participation: a :class:`participation:` instance @@ -98,7 +105,7 @@ def has_permission(participation, arg): # }}} -@register.filter(name="may_set_fake_time") +@register.filter def may_set_fake_time(user): """ Check if a user may set fake time. @@ -109,7 +116,7 @@ def may_set_fake_time(user): return msf(user) -@register.filter(name="may_set_pretend_facility") +@register.filter def may_set_pretend_facility(user): """ Check if a user may set pretend_facility @@ -120,22 +127,22 @@ def may_set_pretend_facility(user): return mspf(user) -@register.filter(name="commit_message_as_html") +@register.filter def commit_message_as_html(commit_sha, repo): from course.versioning import _get_commit_message_as_html return _get_commit_message_as_html(repo, commit_sha) -@register.filter(name="get_item") +@register.filter def get_item(dictionary, key): return dictionary.get(key, None) -@register.filter(name="get_item_or_key") +@register.filter def get_item_or_key(dictionary, key): return dictionary.get(key, key) -@register.filter(name="startswith") -def startswith(s, arg): +@register.filter +def startswith(s: str, arg: str): return s.startswith(arg) From 2de45a698b371049ffd34d3696ee47a7b3ab5ee3 Mon Sep 17 00:00:00 2001 From: Andreas Kloeckner Date: Tue, 27 Jan 2026 16:25:06 -0600 Subject: [PATCH 2/2] Fix rendering of due date on flow start page --- course/flow.py | 1 + course/templates/course/flow-start.html | 4 ++-- course/templatetags/coursetags.py | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/course/flow.py b/course/flow.py index b9ebfa4fa..da91df8c7 100644 --- a/course/flow.py +++ b/course/flow.py @@ -1476,6 +1476,7 @@ def view_start_flow(pctx: CoursePageContext, flow_id: str) -> http.HttpResponse: "grade_aggregation_strategy_descr": grade_aggregation_strategy_descr, "start_may_decrease_grade": start_may_decrease_grade, "past_sessions_and_properties": past_sessions_and_properties, + "course": fctx.course, }, allow_instant_flow_requests=False) diff --git a/course/templates/course/flow-start.html b/course/templates/course/flow-start.html index 287317b3c..efd386d51 100644 --- a/course/templates/course/flow-start.html +++ b/course/templates/course/flow-start.html @@ -101,8 +101,8 @@

{% trans "Past sessions" %}

{% endif %} {% if new_session_grading_rule.due %}
  • - {% blocktrans trimmed with due=new_session_grading_rule.due %} - Your session will be due on {{ due }}. + {% blocktrans trimmed with due=new_session_grading_rule.due|eval_datespec:course %} + Your session will be due on {{ due}}. {% endblocktrans %}
  • {% endif %} diff --git a/course/templatetags/coursetags.py b/course/templatetags/coursetags.py index 41462d109..4993c98b0 100644 --- a/course/templatetags/coursetags.py +++ b/course/templatetags/coursetags.py @@ -146,3 +146,8 @@ def get_item_or_key(dictionary, key): @register.filter def startswith(s: str, arg: str): return s.startswith(arg) + + +@register.filter +def eval_datespec(dspec: Datespec, course: Course): + return dspec.eval(course)