def test_flow(pctx): if not pctx.has_permission(pperm.test_flow): raise PermissionDenied() from course.content import list_flow_ids flow_ids = list_flow_ids(pctx.repo, pctx.course_commit_sha) request = pctx.request if request.method == "POST": form = FlowTestForm(flow_ids, request.POST, request.FILES) if "test" not in request.POST: raise SuspiciousOperation(_("invalid operation")) if form.is_valid(): return redirect("relate-view_start_flow", pctx.course.identifier, form.cleaned_data["flow_id"]) else: form = FlowTestForm(flow_ids) return render_course_page(pctx, "course/generic-course-form.html", { "form": form, "form_description": _("Test Flow"), })
def grant_exception(pctx): if pctx.role not in [ participation_role.instructor, participation_role.teaching_assistant ]: raise PermissionDenied( _("must be instructor or TA to grant exceptions")) from course.content import list_flow_ids flow_ids = list_flow_ids(pctx.repo, pctx.course_commit_sha) request = pctx.request if request.method == "POST": form = ExceptionStage1Form(pctx.course, flow_ids, request.POST) if form.is_valid(): return redirect("relate-grant_exception_stage_2", pctx.course.identifier, form.cleaned_data["participation"].id, form.cleaned_data["flow_id"]) else: form = ExceptionStage1Form(pctx.course, flow_ids) return render_course_page(pctx, "course/generic-course-form.html", { "form": form, "form_description": _("Grant Exception"), })
def grant_exception(pctx): if pctx.role not in [ participation_role.instructor, participation_role.teaching_assistant]: raise PermissionDenied("must be instructor or TA to grant exceptions") from course.content import list_flow_ids flow_ids = list_flow_ids(pctx.repo, pctx.course_commit_sha) request = pctx.request if request.method == "POST": form = ExceptionStage1Form(pctx.course, flow_ids, request.POST) if form.is_valid(): return redirect("course.views.grant_exception_stage_2", pctx.course.identifier, form.cleaned_data["participation"].id, form.cleaned_data["flow_id"]) else: form = ExceptionStage1Form(pctx.course, flow_ids) return render_course_page(pctx, "course/generic-course-form.html", { "form": form, "form_description": "Grant Exception", })
def test_flow(pctx): if pctx.role not in [ participation_role.instructor, participation_role.teaching_assistant]: raise PermissionDenied("must be instructor or TA to test flows") from course.content import list_flow_ids flow_ids = list_flow_ids(pctx.repo, pctx.course_commit_sha) request = pctx.request if request.method == "POST": form = FlowTestForm(flow_ids, request.POST, request.FILES) if "test" not in request.POST: raise SuspiciousOperation("invalid operation") if form.is_valid(): return redirect("course.flow.view_start_flow", pctx.course.identifier, form.cleaned_data["flow_id"]) else: form = FlowTestForm(flow_ids) return render_course_page(pctx, "course/generic-course-form.html", { "form": form, "form_description": "Test Flow", })
def manage_instant_flow_requests(pctx): if pctx.role != participation_role.instructor: raise PermissionDenied( _("must be instructor to manage instant flow requests")) from course.content import list_flow_ids flow_ids = list_flow_ids(pctx.repo, pctx.course_commit_sha) request = pctx.request if request.method == "POST": form = InstantFlowRequestForm(flow_ids, request.POST, request.FILES) if "add" in request.POST: op = "add" elif "cancel" in request.POST: op = "cancel" else: raise SuspiciousOperation(_("invalid operation")) now_datetime = get_now_or_fake_time(pctx.request) if form.is_valid(): if op == "add": from datetime import timedelta ifr = InstantFlowRequest() ifr.course = pctx.course ifr.flow_id = form.cleaned_data["flow_id"] ifr.start_time = now_datetime ifr.end_time = ( now_datetime + timedelta( minutes=form.cleaned_data["duration_in_minutes"])) ifr.save() elif op == "cancel": (InstantFlowRequest.objects .filter( course=pctx.course, start_time__lte=now_datetime, end_time__gte=now_datetime, cancelled=False) .order_by("start_time") .update(cancelled=True)) else: raise SuspiciousOperation(_("invalid operation")) else: form = InstantFlowRequestForm(flow_ids) return render_course_page(pctx, "course/generic-course-form.html", { "form": form, "form_description": _("Manage Instant Flow Requests"), })
def manage_instant_flow_requests(pctx): if not pctx.has_permission(pperm.manage_instant_flow_requests): raise PermissionDenied() from course.content import list_flow_ids flow_ids = list_flow_ids(pctx.repo, pctx.course_commit_sha) request = pctx.request if request.method == "POST": form = InstantFlowRequestForm(flow_ids, request.POST, request.FILES) if "add" in request.POST: op = "add" elif "cancel" in request.POST: op = "cancel" else: raise SuspiciousOperation(_("invalid operation")) now_datetime = get_now_or_fake_time(pctx.request) if form.is_valid(): if op == "add": from datetime import timedelta ifr = InstantFlowRequest() ifr.course = pctx.course ifr.flow_id = form.cleaned_data["flow_id"] ifr.start_time = now_datetime ifr.end_time = ( now_datetime + timedelta( minutes=form.cleaned_data["duration_in_minutes"])) ifr.save() elif op == "cancel": (InstantFlowRequest.objects .filter( course=pctx.course, start_time__lte=now_datetime, end_time__gte=now_datetime, cancelled=False) .order_by("start_time") .update(cancelled=True)) else: raise SuspiciousOperation(_("invalid operation")) else: form = InstantFlowRequestForm(flow_ids) return render_course_page(pctx, "course/generic-course-form.html", { "form": form, "form_description": _("Manage Instant Flow Requests"), })
def regrade_not_for_credit_flows_view(pctx): if pctx.role != participation_role.instructor: raise PermissionDenied(_("must be instructor to regrade flows")) from course.content import list_flow_ids flow_ids = list_flow_ids(pctx.repo, pctx.course_commit_sha) request = pctx.request if request.method == "POST": form = RegradeFlowForm(flow_ids, request.POST, request.FILES) if form.is_valid(): sessions = FlowSession.objects.filter(course=pctx.course, flow_id=form.cleaned_data["flow_id"]) if form.cleaned_data["access_rules_tag"]: sessions = sessions.filter(access_rules_tag=form.cleaned_data["access_rules_tag"]) inprog_value = {"any": None, "yes": True, "no": False}[form.cleaned_data["regraded_session_in_progress"]] if inprog_value is not None: sessions = sessions.filter(in_progress=inprog_value) count = _regrade_sessions(pctx.repo, pctx.course, sessions) messages.add_message(request, messages.SUCCESS, _("%d sessions regraded.") % count) else: form = RegradeFlowForm(flow_ids) return render_course_page( pctx, "course/generic-course-form.html", { "form": form, "form_text": string_concat( "<p>", _( "This regrading process is only intended for flows that do" "not show up in the grade book. If you would like to regrade" "for-credit flows, use the corresponding functionality in " "the grade book." ), "</p>", ), "form_description": _("Regrade not-for-credit Flow Sessions"), }, )
def grant_exception(pctx): if not pctx.has_permission(pperm.grant_exception): raise PermissionDenied(_("may not grant exceptions")) from course.content import list_flow_ids flow_ids = list_flow_ids(pctx.repo, pctx.course_commit_sha) request = pctx.request if request.method == "POST": form = ExceptionStage1Form(pctx.course, flow_ids, request.POST) if form.is_valid(): return redirect("relate-grant_exception_stage_2", pctx.course.identifier, form.cleaned_data["participation"].id, form.cleaned_data["flow_id"]) else: form = ExceptionStage1Form(pctx.course, flow_ids) return render_course_page(pctx, "course/generic-course-form.html", { "form": form, "form_description": _("Grant Exception"), })