diff --git a/groupimporter.py b/groupimporter.py new file mode 100644 index 0000000..756b0b9 --- /dev/null +++ b/groupimporter.py @@ -0,0 +1,71 @@ +import csv +import argparse + +from mimetypes import guess_type + + +def group_name(longname): + """Use the group number (located at start of group name)""" + + if longname in ['keine Teilnahme an den Übungen', 'keiner Funktion oder Gruppe zugeordnet', 'Gruppe']: + return None + else: + return longname.split(' ')[0] + + +def parse_groups_csv(csvfile, encoding='utf-8'): + """Reads the names of the groups from CSV file and yields the group names + """ + + with open(csvfile, 'r', encoding=encoding) as lines: + """ Get distinct values from first column (groups)""" + + reader = csv.reader(lines, delimiter=';', quotechar='"') + zipped = list(zip(*reader)) + + for groupname in set(zipped[0]): + short_name = group_name(groupname) + + """Discard groups that are None""" + if short_name: + yield(short_name) + + +def parse_users_csv(csvfile, encoding='utf-8'): + """Reads user information from a CSV file and yields each user as a dict""" + + with open(csvfile, 'r', encoding=encoding) as lines: + reader = csv.DictReader(lines, delimiter=';', quotechar='"') + + for line in reader: + yield line['Nutzernamen'], line['E-Mail'], group_name(line['Gruppe']) + + +if __name__ == '__main__': + + parser = argparse.ArgumentParser(description='Import groups and users from data source') + parser.add_argument('course', type=str, nargs=1, help='name of the course') + parser.add_argument('source', type=str, nargs=1, help='data source') + parser.add_argument('--encoding', type=str, nargs=1, help='encoding of source') + + args = parser.parse_args() + + type, _ = guess_type(args.source[0]) + + print(type) + + if type == 'text/csv': + + groupnames = parse_groups_csv(args.source[0], args.encoding[0]) + + for group in groupnames: + print(args.course[0] + ' ' + group) + + users = parse_users_csv(args.source[0], args.encoding[0]) + + for user in users: + print(user) + + elif type == None: + + print('MIME type not recognized')