{# Macro: kubespawner_override(role) Generates a collapsible
block showing any Kubespawner override values defined on the role (image, CPU guarantees/limits, and memory guarantees/limits). #} {% macro kubespawner_override(role) -%} {% if role.kubespawner_override and not role.omit_details %}
Details for {{ role.display_name }} {% if role.kubespawner_override.image %}

Image: {{ role.kubespawner_override.image }}

{% endif %} {% if role.kubespawner_override.cpu_guarantee or role.kubespawner_override.cpu_limit %}

CPU: {% if role.kubespawner_override.cpu_guarantee %}guarantee {{ role.kubespawner_override.cpu_guarantee }}{% endif %} {% if role.kubespawner_override.cpu_limit %}, limit {{ role.kubespawner_override.cpu_limit }}{% endif %}

{% endif %} {% if role.kubespawner_override.mem_guarantee or role.kubespawner_override.mem_limit %}

Memory: {% if role.kubespawner_override.mem_guarantee %}guarantee {{ role.kubespawner_override.mem_guarantee }}{% endif %} {% if role.kubespawner_override.mem_limit %}, limit {{ role.kubespawner_override.mem_limit }}{% endif %}

{% endif %}
{% endif %} {%- endmacro %} {# Macro: launch_role_buttons(profile) Creates buttons to launch a role for all roles in a profile #} {% macro launch_role_buttons(profile) -%}
{% for role_slug, role in profile.profile_options['profile-slug'].choices|dictsort %}
{% endfor %}
{%- endmacro %} {# Macro course_card(profile) Create a card for a profile, complete with launch buttons and overrides #} {% macro course_card(profile) -%}
{{ profile.display_name }}
{% if profile.metadata and profile.metadata.course_name %}

{{ profile.metadata.course_name }}

{% endif %} {% if profile.metadata and profile.metadata.description %}

{{ profile.metadata.description }}

{% endif %} {% if profile.profile_options and profile.profile_options['profile-slug'] %} {{ launch_role_buttons(profile) }} {# Show details only if kubespawner_override exists #} {% for role_slug, role in profile.profile_options['profile-slug'].choices.items() %} {{ kubespawner_override(role) }} {% endfor %} {% else %} {% endif %}
{%- endmacro %}
{% set grouped = {} %} {% set term_label = {} %} {% if not profile_list %}

No Courses Available

You are not a member of any course yet.

{% endif %} {# Make sure all profiles are sorted by sort key #} {% for profile in profile_list %} {% set sort_key = profile.sort_key if profile.sort_key else "Other" %} {% if grouped.setdefault(sort_key, []).append(profile) %}{% endif %} {% set _dummy = term_label.update({sort_key: profile.term}) %} {% endfor %} {% set _dummy = term_label.update({'Other': 'Other'}) %} {% set sorted_terms = grouped.keys() | list | sort(reverse=True) %} {% set sorted_terms = sorted_terms | reject('equalto', 'Other') | list + (['Other'] if 'Other' in grouped else []) %} {% for term in sorted_terms %} {% if term in grouped %}

{% for profile in grouped[term] | sort(attribute='metadata.course_id') %}{{ course_card(profile) }}{% endfor %}
No courses found in {{ term }}.
{% endif %} {% endfor %}