IServ2LMS/convert.py

142 lines
4.0 KiB
Python
Raw Normal View History

2023-01-22 19:32:03 +01:00
#!/usr/bin/env python3
# Konvertiere IServ-Gruppenlisten in Moodle-Importdateien
# 2022 by Daniel Spittank, daniel.spittank@gymsedan.de
# Lizenz: GPLv3
# Importe
from pprint import pprint
import csv
# Schuljahr
schuljahr='22'
2023-01-22 20:20:31 +01:00
categoryid='17'
2023-01-22 19:32:03 +01:00
# Ergebnisspeicher
members = []
2023-01-22 20:20:31 +01:00
maxkurse = 0
allekurse = []
2023-01-22 19:32:03 +01:00
# Kollegium einlesen
with open('Export_Kollegium.csv', 'r', encoding='utf-8-sig') as f:
# CSV einlesen
cr = csv.DictReader(f, delimiter=';', lineterminator='\n')
for row in cr:
# Person erstellen
p = {
'firstname' : row['Vorname'],
'lastname' : row['Nachname'],
'username' : row['Account'],
'email' : row['E-Mail-Adresse'],
'profile_field_Klasse' : 'Kollegium',
'profile_field_Lehrer_in' : '1',
'idnumber' : row['Klasse/Information'], #row['Import-ID']
'password': 'oauth2'
}
# Gruppen der Person laden
gt = row['Alle Gruppen'].split(',')
# Gruppen filtern
2023-01-22 20:20:31 +01:00
gruppen = list(filter(lambda g: g.startswith('Kurs_') or g.startswith('Klasse_'), gt))
2023-01-22 19:32:03 +01:00
2023-01-22 20:20:31 +01:00
# Gruppen ins Format von Moodle bringen und Gruppen sammeln
2023-01-22 19:32:03 +01:00
for i, g in enumerate(gruppen):
p['course' + str(i+1)] = schuljahr + '_' + g
p['role' + str(i+1)] = 'editingteacher'
2023-01-22 20:20:31 +01:00
# Kurse sammeln
if g not in allekurse:
allekurse.append(g)
# Anzahl der maximalen Gruppen pro Person merken
maxkurse = max(maxkurse, len(gruppen))
2023-01-22 19:32:03 +01:00
# Person zur Liste hinzfügen
members.append(p)
# SuS einlesen
with open('Export_SuS.csv', 'r', encoding='utf-8-sig') as f:
# CSV einlesen
cr = csv.DictReader(f, delimiter=';', lineterminator='\n')
for row in cr:
# Person erstellen
p = {
'firstname' : row['Vorname'],
'lastname' : row['Nachname'],
'username' : row['Account'],
'email' : row['E-Mail-Adresse'],
'profile_field_Klasse' : row['Klasse/Information'],
'profile_field_Lehrer_in' : '0',
'idnumber' : row['Import-ID'],
'password': 'oauth2'
}
# Gruppen der Person laden
gt = row['Alle Gruppen'].split(',')
# Gruppen filtern
2023-01-22 20:20:31 +01:00
gruppen = list(filter(lambda g: g.startswith('Kurs_') or g.startswith('Klasse_'), gt))
2023-01-22 19:32:03 +01:00
2023-01-22 20:20:31 +01:00
# Gruppen ins Format von Moodle bringen und Gruppen sammeln
2023-01-22 19:32:03 +01:00
for i, g in enumerate(gruppen):
p['course' + str(i+1)] = schuljahr + '_' + g
p['role' + str(i+1)] = 'student'
2023-01-22 20:20:31 +01:00
# Kurse sammeln
if g not in allekurse:
allekurse.append(g)
maxkurse = max(maxkurse, len(gruppen))
2023-01-22 19:32:03 +01:00
# Person zur Liste hinzfügen
members.append(p)
2023-01-22 20:20:31 +01:00
# Moodle-Importdatei für User schreiben
with open('Import_Users.csv', 'w', encoding='utf-8-sig') as f:
2023-01-22 19:32:03 +01:00
# CSV DictWriter anlegen
fieldnames = [
'username',
'firstname',
'lastname',
'email',
'profile_field_Klasse',
'profile_field_Lehrer_in',
'idnumber',
'password']
2023-01-22 20:20:31 +01:00
for i in range(1,maxkurse+1):
2023-01-22 19:32:03 +01:00
fieldnames.append("course" + str(i))
fieldnames.append("role" + str(i))
cw = csv.DictWriter(f, delimiter=';', fieldnames=fieldnames)
# Datei schreiben
cw.writeheader()
for p in members:
cw.writerow(p)
2023-01-22 20:20:31 +01:00
# Moodle-Importdatei für Kurse schreiben
with open('Import_Courses.csv', 'w', encoding='utf-8-sig') as f:
# CSV DictWriter anlegen
fieldnames = [
'shortname',
'fullname',
'category',
'visible']
cw = csv.DictWriter(f, delimiter=';', fieldnames=fieldnames)
# Datei schreiben
cw.writeheader()
for c in allekurse:
cw.writerow({
'shortname' : schuljahr + '_' + c,
'fullname' : schuljahr + '_' + c,
'category' : categoryid,
'visible' : '1'
})