From 311f40a0fb85677c4726e4a8cbb732e28e5f6e09 Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Tue, 7 Nov 2023 12:10:53 +0100 Subject: [PATCH 1/4] Adds WIP on utility scripts --- src/canvaslms/cli/utils.nw | 134 +++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 src/canvaslms/cli/utils.nw diff --git a/src/canvaslms/cli/utils.nw b/src/canvaslms/cli/utils.nw new file mode 100644 index 0000000..8216966 --- /dev/null +++ b/src/canvaslms/cli/utils.nw @@ -0,0 +1,134 @@ +\chapter{Some utitlity scripts} + +\section{Grade statistics} + +<>= +#!/bin/bash + +COURSE="$1" +ASSIGNMENT="$2" +shift 2 + +results=$(mktemp) +canvaslms submissions -c $COURSE -a "$ASSIGNMENT" $@ | cut -f 4- > $results + +function get_results() { + cat $results +} + +function print_stats() { + total=$(get_results | wc -l) + echo "Total: $total (100%)" + Ps=$(get_results | grep ^P | wc -l) + echo "Ps: $Ps ($(((100 * $Ps / $total)))%)" + Fs=$(get_results | grep ^F | wc -l) + echo "Fs: $Fs ($(((100 * $Fs / $total)))%)" + remaining=$(get_results | egrep "^[^PF].*[0-9]{4}-[0-9]{2}-[0-9]{2}" | wc -l) + echo "Remaining: $remaining ($(((100 * $remaining / $total)))%)" + nothing=$(get_results | grep "^[^a-fA-F0-9]*$" | wc -l) + echo "Nothing: $nothing ($(((100 * $nothing / $total)))%)" +} + +print_stats +<>= +#!/bin/bash + +COURSE="$1" +ASSIGNMENT="$2" +shift 2 + +results=$(mktemp) +canvaslms submissions -c $COURSE -a "$ASSIGNMENT" $@ | cut -f 4- > $results + +function get_results() { + cat $results +} + +function print_stats() { + total=$(get_results | wc -l) + echo "Total: $total (100%)" + As=$(get_results | grep ^A | wc -l) + echo "As: $As ($(((100 * $As / $total)))%)" + Bs=$(get_results | grep ^B | wc -l) + echo "Bs: $Bs ($(((100 * $Bs / $total)))%)" + Cs=$(get_results | grep ^C | wc -l) + echo "Cs: $Cs ($(((100 * $Cs / $total)))%)" + Ds=$(get_results | grep ^D | wc -l) + echo "Ds: $Ds ($(((100 * $Ds / $total)))%)" + Es=$(get_results | grep ^E | wc -l) + echo "Es: $Es ($(((100 * $Es / $total)))%)" + Fs=$(get_results | grep ^F | wc -l) + echo "Fs: $Fs ($(((100 * $Fs / $total)))%)" + remaining=$(get_results | egrep "^[^A-F].*[0-9]{4}-[0-9]{2}-[0-9]{2}" | wc -l) + echo "Remaining: $remaining ($(((100 * $remaining / $total)))%)" + nothing=$(get_results | grep "^[^a-fA-F0-9]*$" | wc -l) + echo "Nothing: $nothing ($(((100 * $nothing / $total)))%)" +} + +print_stats +@ + +\section{List user's group memberships} + +<>= +#!/bin/bash + +course="$1" +user="$2" + +users="/tmp/users-$course.csv" + +if test "$#" -lt 2; then + echo "$0 course user [group prefix]" + exit 1 +fi + +group_prefix="$3" +if test -z "$group_prefix"; then + group_prefix=".*" +fi + +test -e "$users" || \ + canvaslms users -sc "$course" -G "$group_prefix" | cut -f 2- > "$users" + +groups="$(egrep "$group_prefix" "$users" | egrep "$user" | cut -f 1)" +if test -z "$groups"; then + echo "User $user is in no group" + exit 1 +else + IFS=$'\n' + for group in $groups; do + egrep "^$group" "$users" + done +fi +@ + +\section{Results statistics for OLI tests} + +<>= +#!/bin/bash + +COURSE="$1" +ASSIGNMENT="$2" +shift 2 + +results=$(mktemp) +canvaslms submissions -c $COURSE -a "Test:.*$ASSIGNMENT" $@ | \ + cut -f 4- > $results + +function get_results() { + cat $results +} + +function print_stats() { + total=$(get_results | wc -l) + echo "Total: $total (100%)" + year=$(date +%Y) + done=$(get_results | grep $year- | wc -l) + echo "done: $done ($(((100 * $done / $total)))%)" + nothing=$(get_results | grep "^[^a-fA-F0-9]*$" | wc -l) + echo "Nothing: $nothing ($(((100 * $nothing / $total)))%)" +} + +print_stats + From 79918118f2c68363ef19098cfe9e1333b21633fc Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Tue, 7 Nov 2023 23:34:48 +0100 Subject: [PATCH 2/4] Adds Fx to {af,pf}stats --- src/canvaslms/cli/utils.nw | 24 ++++++++++++++---------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/src/canvaslms/cli/utils.nw b/src/canvaslms/cli/utils.nw index 8216966..bed2ecb 100644 --- a/src/canvaslms/cli/utils.nw +++ b/src/canvaslms/cli/utils.nw @@ -20,9 +20,11 @@ function print_stats() { total=$(get_results | wc -l) echo "Total: $total (100%)" Ps=$(get_results | grep ^P | wc -l) - echo "Ps: $Ps ($(((100 * $Ps / $total)))%)" - Fs=$(get_results | grep ^F | wc -l) - echo "Fs: $Fs ($(((100 * $Fs / $total)))%)" + echo "P: $Ps ($(((100 * $Ps / $total)))%)" + Fxs=$(get_results | grep ^Fx | wc -l) + echo "Fx: $Fxs ($(((100 * $Fxs / $total)))%)" + Fs=$(get_results | grep ^F[^x] | wc -l) + echo "F: $Fs ($(((100 * $Fs / $total)))%)" remaining=$(get_results | egrep "^[^PF].*[0-9]{4}-[0-9]{2}-[0-9]{2}" | wc -l) echo "Remaining: $remaining ($(((100 * $remaining / $total)))%)" nothing=$(get_results | grep "^[^a-fA-F0-9]*$" | wc -l) @@ -48,17 +50,19 @@ function print_stats() { total=$(get_results | wc -l) echo "Total: $total (100%)" As=$(get_results | grep ^A | wc -l) - echo "As: $As ($(((100 * $As / $total)))%)" + echo "A: $As ($(((100 * $As / $total)))%)" Bs=$(get_results | grep ^B | wc -l) - echo "Bs: $Bs ($(((100 * $Bs / $total)))%)" + echo "B: $Bs ($(((100 * $Bs / $total)))%)" Cs=$(get_results | grep ^C | wc -l) - echo "Cs: $Cs ($(((100 * $Cs / $total)))%)" + echo "C: $Cs ($(((100 * $Cs / $total)))%)" Ds=$(get_results | grep ^D | wc -l) - echo "Ds: $Ds ($(((100 * $Ds / $total)))%)" + echo "D: $Ds ($(((100 * $Ds / $total)))%)" Es=$(get_results | grep ^E | wc -l) - echo "Es: $Es ($(((100 * $Es / $total)))%)" - Fs=$(get_results | grep ^F | wc -l) - echo "Fs: $Fs ($(((100 * $Fs / $total)))%)" + echo "E: $Es ($(((100 * $Es / $total)))%)" + Fxs=$(get_results | grep ^Fx | wc -l) + echo "Fx: $Fxs ($(((100 * $Fxs / $total)))%)" + Fs=$(get_results | grep ^F[^x] | wc -l) + echo "F: $Fs ($(((100 * $Fs / $total)))%)" remaining=$(get_results | egrep "^[^A-F].*[0-9]{4}-[0-9]{2}-[0-9]{2}" | wc -l) echo "Remaining: $remaining ($(((100 * $remaining / $total)))%)" nothing=$(get_results | grep "^[^a-fA-F0-9]*$" | wc -l) From 48b4af1a6964bf53fcf8b58e5735540c3b35c6bd Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Tue, 7 Nov 2023 23:41:21 +0100 Subject: [PATCH 3/4] Adds utils to the documentation and building --- doc/Makefile | 1 + doc/canvaslms.tex | 1 + src/canvaslms/cli/.gitignore | 6 ++++++ src/canvaslms/cli/Makefile | 5 +++++ 4 files changed, 13 insertions(+) diff --git a/doc/Makefile b/doc/Makefile index ed38f57..31f7af1 100644 --- a/doc/Makefile +++ b/doc/Makefile @@ -22,6 +22,7 @@ canvaslms.pdf: ${SRC_DIR}/cli/submissions.tex canvaslms.pdf: ${SRC_DIR}/cli/grade.tex canvaslms.pdf: ${SRC_DIR}/cli/results.tex canvaslms.pdf: ${SRC_DIR}/grades/grades.tex +canvaslms.pdf: ${SRC_DIR}/cli/utils.tex ${SRC_DIR}/%.tex: ${SRC_DIR}/%.nw ${MAKE} -C $(dir $@) $(notdir $@) diff --git a/doc/canvaslms.tex b/doc/canvaslms.tex index 36574b6..f0102d7 100644 --- a/doc/canvaslms.tex +++ b/doc/canvaslms.tex @@ -106,6 +106,7 @@ \part{The command-line interface} \input{../src/canvaslms/cli/grade.tex} \input{../src/canvaslms/cli/results.tex} \input{../src/canvaslms/grades/grades.tex} +\input{../src/canvaslms/cli/utils.tex} \printbibliography diff --git a/src/canvaslms/cli/.gitignore b/src/canvaslms/cli/.gitignore index 45f1e61..b298bd9 100644 --- a/src/canvaslms/cli/.gitignore +++ b/src/canvaslms/cli/.gitignore @@ -20,3 +20,9 @@ login.py login.tex results.py results.tex +utils.tex +OLIstats +afstats +lsgroup +pfstats + diff --git a/src/canvaslms/cli/Makefile b/src/canvaslms/cli/Makefile index f12b7b1..f1a8648 100644 --- a/src/canvaslms/cli/Makefile +++ b/src/canvaslms/cli/Makefile @@ -9,6 +9,11 @@ MODULES+= submissions.py submissions.tex MODULES+= grade.py grade.tex MODULES+= results.py results.tex +MODULES+= utils.tex +MODULES+= afstats pfstats +MODULES+= lsgroup +MODULES+= OLIstats + .PHONY: all all: ${MODULES} From 0c8d457078c686a127d4015a6f3a0c4229e29317 Mon Sep 17 00:00:00 2001 From: Daniel Bosk Date: Thu, 22 Feb 2024 14:58:25 +0100 Subject: [PATCH 4/4] Improves utilities documentation --- src/canvaslms/cli/utils.nw | 77 ++++++++++++++++++++++++-------------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/src/canvaslms/cli/utils.nw b/src/canvaslms/cli/utils.nw index bed2ecb..48970f1 100644 --- a/src/canvaslms/cli/utils.nw +++ b/src/canvaslms/cli/utils.nw @@ -2,6 +2,13 @@ \section{Grade statistics} +We have different scripts for assignments with P/F and A-F grading scales. +For these scripts, we simply count how many have each certain grade. +We also output how many have not been graded yet, and how many have not +submitted anything. + +\subsection{Statistics for P/F grading scale} + <>= #!/bin/bash @@ -32,6 +39,10 @@ function print_stats() { } print_stats +@ + +\subsection{Statistics for A-F grading scale} + <>= #!/bin/bash @@ -72,8 +83,45 @@ function print_stats() { print_stats @ +\subsection{Results statistics for OLI tests} + +We want to see how many students have taken the OLI tests. +We can't tell if they've passed or failed them without additional information. +If they have submitted them, we consider them done. +<>= +#!/bin/bash + +COURSE="$1" +ASSIGNMENT="$2" +shift 2 + +results=$(mktemp) +canvaslms submissions -c $COURSE -a "Test:.*$ASSIGNMENT" $@ | \ + cut -f 4- > $results + +function get_results() { + cat $results +} + +function print_stats() { + total=$(get_results | wc -l) + echo "Total: $total (100%)" + year=$(date +%Y) + done=$(get_results | grep $year- | wc -l) + echo "done: $done ($(((100 * $done / $total)))%)" + nothing=$(get_results | grep "^[^a-fA-F0-9]*$" | wc -l) + echo "Nothing: $nothing ($(((100 * $nothing / $total)))%)" +} + +print_stats +@ + + \section{List user's group memberships} +When we grade someone and report their result to Canvas, we want to check if +they're in the same group as someone else. +If so, we can't report a grade without reporting for the other student too. <>= #!/bin/bash @@ -107,32 +155,3 @@ else fi @ -\section{Results statistics for OLI tests} - -<>= -#!/bin/bash - -COURSE="$1" -ASSIGNMENT="$2" -shift 2 - -results=$(mktemp) -canvaslms submissions -c $COURSE -a "Test:.*$ASSIGNMENT" $@ | \ - cut -f 4- > $results - -function get_results() { - cat $results -} - -function print_stats() { - total=$(get_results | wc -l) - echo "Total: $total (100%)" - year=$(date +%Y) - done=$(get_results | grep $year- | wc -l) - echo "done: $done ($(((100 * $done / $total)))%)" - nothing=$(get_results | grep "^[^a-fA-F0-9]*$" | wc -l) - echo "Nothing: $nothing ($(((100 * $nothing / $total)))%)" -} - -print_stats -