Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 4 additions & 33 deletions course/analytics.py
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,8 @@
from django.utils.translation import gettext as _, pgettext
from pytools import not_none

from course.constants import FlowPermission, ParticipationPermission as PPerm
from course.content import FlowDesc, get_flow_desc
from course.constants import ParticipationPermission as PPerm
from course.content import get_flow_desc
from course.models import FlowPageVisit, FlowSession
from course.utils import (
CoursePageContext,
Expand All @@ -49,7 +49,6 @@
if TYPE_CHECKING:
from collections.abc import Callable

from course.page.base import PageBase
from course.utils import CoursePageContext


Expand Down Expand Up @@ -235,29 +234,6 @@ def html(self):
# }}}


def is_flow_multiple_submit(flow_desc: FlowDesc):
return any(FlowPermission.change_answer in rule.permissions
for rule in flow_desc.rules.access)


def is_page_multiple_submit(flow_desc: FlowDesc, page: PageBase):
result = is_flow_multiple_submit(flow_desc)

page_rules = page.access_rules
if page_rules is None:
return result

if result:
if FlowPermission.change_answer in page_rules.remove_permissions:
result = False

else:
if FlowPermission.change_answer in page_rules.add_permissions:
result = True

return result


# {{{ flow analytics

def make_grade_histogram(pctx: CoursePageContext, flow_id: str):
Expand Down Expand Up @@ -370,7 +346,7 @@ def make_page_answer_stats_list(
.distinct("flow_session__participation__id")
.order_by("flow_session__participation__id",
"visit_time"))
elif is_page_multiple_submit(flow_desc, page_desc):
else:
visits = (visits
.distinct("page_data__id")
.order_by("page_data__id", "-visit_time"))
Expand Down Expand Up @@ -528,9 +504,6 @@ def page_analytics(pctx: CoursePageContext, flow_id: str, group_id: str, page_id
if not pctx.has_permission(PPerm.view_analytics):
raise PermissionDenied(_("may not view analytics"))

flow_desc = get_flow_desc(pctx.repo, pctx.course, flow_id,
pctx.course_commit_sha)

restrict_to_first_attempt = int(
bool(pctx.request.GET.get("restrict_to_first_attempt") == "1"))

Expand All @@ -549,13 +522,11 @@ def page_analytics(pctx: CoursePageContext, flow_id: str, group_id: str, page_id

if connection.features.can_distinct_on_fields:

is_multiple_submit = is_flow_multiple_submit(flow_desc)

if restrict_to_first_attempt:
visits = (visits
.distinct("flow_session__participation__id")
.order_by("flow_session__participation__id", "visit_time"))
elif is_multiple_submit:
else:
visits = (visits
.distinct("page_data__id")
.order_by("page_data__id", "-visit_time"))
Expand Down
21 changes: 1 addition & 20 deletions course/constants.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,13 +25,8 @@


from enum import StrEnum
from typing import TYPE_CHECKING

from django.utils.translation import gettext, pgettext_lazy


if TYPE_CHECKING:
from collections.abc import Set
from django.utils.translation import pgettext_lazy


# Allow 10x extra credit at the very most.
Expand Down Expand Up @@ -304,20 +299,6 @@ class FlowSessionExpirationMode(StrEnum):
)


def is_expiration_mode_allowed(
expmode: str, permissions: Set[FlowPermission]
) -> bool:
if expmode == FlowSessionExpirationMode.roll_over:
if (FlowPermission.set_roll_over_expiration_mode
in permissions):
return True
elif expmode == FlowSessionExpirationMode.end:
return True
else:
raise ValueError(gettext("unknown expiration mode"))

return False

# }}}


Expand Down
Loading
Loading