Open dbosk opened 1 year ago
Postad på SUNET:s forum för Canvas & Ladok.
TL;DR: Vi rapporterar resultat automatiskt, med korrekt datum (inlämningsdatum, individuellt för varje student) korrekt rättande lärare (individuellt för varje student), utan dröjsmål och utan att lyfta ett finger.
Automatisk rapportering av resultat från Canvas till Ladok
På KTH har IT-avdelningen implementerat sin egen Canvas-till-Ladok-resultatrapportering. Senast jag tittade på den lämnade den dock en del att önska. Andra lärosäten verkar ha liknande situation, men förhoppningsvis migrerar fler till SUNET:s version så att alla slipper uppfinna hjulet.
Men som alltid när man tvingar dataloger att göra något för hand, så har de inom kort skrivit ett program som gör det åt dem. Jag och några andra lärare som är intresserad av automation har skrivit ihop några egna verktyg. Dessa kan vara användbara för andra lärosäten också, så jag tänkte dela dem här. Eventuellt har de några funktioner som SUNET:s resultatrapportering inte heller har. Exempelvis ställde någon en fråga i maj om hur man kan rapportera resultaten för enskilda seminariegrupper från Canvas till Ladok, med dessa verktyg kan man det. För att åstadkomma det gör man följande:
I slutet av texten ska det där förhoppningsvis vara fullt förståeligt.
Läsa ut resultat ur Canvas
Det första verktyget är
canvaslms
. Det kan användas för att interagera med Canvas. (Det använder sig av Canvas API.) Det är utvecklat för att köras i terminalen, skrivet i Python så det ska fungera på de flesta system.Installera och konfigurera
canvaslms
Vi kan installera det genom att köra
Man behöver
keyrings.alt
för att köra på WSL/Windows.Första gången man kör det behöver man fixa en logintoken från Canvas. Det räcker med att köra
och följa instruktionerna som ges. Notera att det där är något som behöver göras en gång och aldrig mer (förrän man byter dator eller liknande).
Använda
canvaslms
för att exportera resultatLåt oss titta på den första delen av koden i inledningen.
Denna specificerar vilken kurs vi vill exportera resultat ifrån,
-c kurs
. Identifieraren “kurs” kan ersättas med vilken del som helst av kursnamnet i Canvas, både det långa och det korta, och det behöver inte matcha hela. I mitt fall kan jag rapportera för alla omgångar av kursen med kurskod DD1310 genom att bara skriva-c DD1310
, men om jag bara vill ha årets skriver jag-c “DD1310 HT22”
(det är så IT döper våra kurser i Canvas på KTH). (För den tekniske läsaren:-c
tar ett reguljärt uttryck som argument.)I Canvas har jag examinationsuppgifterna grupperade i uppgiftsgrupper, en uppgiftsgrupp per modul i Ladok. Exempelvis LAB1 innehåller en serie med labbar som alla måste vara godkända för att få godkänt betyg rapporterat i Ladok.
-A
ovan specificerar vilken uppgiftsgrupp som ska rapporteras. Om vi vill rapportera LAB1 så skriver vi-A LAB1
. (För den tekniske: Även-A
tar ett reguljärt uttryck. När jag vill raportera samtliga labbserier i DD1310, som har ladokmomenten LAB1, LAB2 och LAB3, då skriver jag-A LAB[123]
; dessa slås inte ihop, utan det blir ett resultat för LAB1, ett för LAB2 och ett för LAB3.)Till sist, problemet i någons fråga: Om man inte vill rapportera alla resultat i kursen (samtliga studenter), utan bara för några (exempelvis vid delrapportering). Då kan man använda
-G “grupp 1”
för att exportera resultaten för studentgruppen som heter “grupp 1” bland grupperna i Canvas. Detta är vanliga grupper i Canvas, inte sektioner, så läraren kan skapa dem utan särskild behörighet.Kör vi den här raden
får vi en CSV-fil (tabbseparerad) som innehåller kolumnerna: kursnamn (DD1310 HT22 i exemplet ovan), ladokmoment (LAB1), studentidentifierare, betyg, inlämnings- eller rättningsdatum, rättande lärare 1, …, rättande lärare N. Studentidentifieraren är vad Canvas kallar “integration ID”, vilket i KTH:s fall är samma som det unika ID varje student har i Ladok. (Därav behöver jag aldrig personnumret för studenten.) Datumet är inlämningsdatum om det finns, annars rättningsdatum om studenten inte har lämnat in något (exempelvis vid muntlig examination). Sist är en lista med alla lärare/assistenter som rättat någon version av inlämningsuppgiften.
Rapportera resultat till Ladok
För att kunna rapportera resultaten vi precis har exporterat från Canvas ovan, behöver vi verktyget
ladok
.Installera och ställa in
ladok
Detta kan vi göra på följande sätt:
Notera att paketet heter “ladok3” medan kommandot heter “ladok”.
Även här behöver vi logga in. Detta görs en gång för alla, eller tills att man måste byta lösenord.
Rapportera resultat
För att rapportera resultat med
ladok
kan vi köraDå kommer
ladok
att förvänta sig CSV-data som har samma kolumner som de som exporterades avcanvaslms
ovan. Det man behöver tänka på här är den där delen från ovan{gör om canvaskursnamn till bara kurskod}
.canvaslms
exporterar namnet på canvasrummet, medanladok
bara bryr sig om kurskoden. Så vi måste göra om rumsnamnet till kurskoden. I exemplet ovan behöver vi köra om “DD1310 HT22” till “DD1310”. En enkel lösning i terminalen är att körased “s/ HT22//”
, som tar bort “ HT22” och kvar blir då bara kurskoden. Allt som allt blir det dåVad betyder då
-fv
?-f
betyder att vi vill klarmarkera resultaten.-v
betyder att vi vill skriva ut vad som rapporteras, annars skrivs något ut bara om ett fel inträffar. Ett fel som kan inträffa är att studenten redan har ett resultat (plussning är tillåtet på KTH) eller att studenten registrerat avbrott på utbildningen innan resultaten hann rapporteras.Slutsats
Det vi åstadkommer är att vi kan rapportera resultat från Canvas till Ladok. Då vi kan göra det med ett kommandoradsgränssnitt betyder det att vi kan automatisera det så att det kör i bakgrunden. Jag kör det i bakgrunden några dagar i veckan och får ett mail när det finns något nytt att attestera.
Fördelarna är att studenterna får rätt datum i Ladok, dvs inlämningsdatum om det finns. Vi registrerar även samtliga som deltagit i rättningen. Studenterna får dessutom resultaten med minimalt dröjsmål.
För de tekniskt intresserade
Verktygen finns tillgängliga på GitHub:
https://github.com/dbosk/canvaslms
https://github.com/dbosk/ladok3
En detaljerad översikt av implementationen ges i den dokumenterade källkoden för respektive paket:
canvaslms.pdf
ladok3.pdf