import csv from tempfile import mktemp from django.conf import settings from django.contrib.auth.models import User from judge.models import Profile, Language, Organization fields = ['username', 'password', 'name', 'school', 'email', 'organizations'] descriptions = ['my_username(edit old one if exist)', '123456 (must have)', 'Le Van A (can be empty)', 'Le Quy Don (can be empty)', 'email@email.com (can be empty)', 'org1&org2&org3&... (can be empty - org slug in URL)'] def csv_to_dict(csv_file): rows = csv.reader(csv_file.read().decode().split('\n')) header = next(rows) header = [i.lower() for i in header] if 'username' not in header: return [] res = [] for row in rows: if len(row) != len(header): continue cur_dict = {i: '' for i in fields} for i in range(len(header)): if header[i] not in fields: continue cur_dict[header[i]] = row[i] if cur_dict['username']: res.append(cur_dict) return res # return result log def import_users(users): log = '' for i, row in enumerate(users): cur_log = str(i + 1) + '. ' username = row['username'] cur_log += username + ': ' pwd = row['password'] user, created = User.objects.get_or_create(username=username, defaults={ 'is_active': True, }) profile, _ = Profile.objects.get_or_create(user=user, defaults={ 'language': Language.get_python3(), 'timezone': settings.DEFAULT_USER_TIME_ZONE, }) if created: cur_log += 'Create new - ' else: cur_log += 'Edit - ' if pwd: user.set_password(pwd) elif created: user.set_password('lqdoj') cur_log += 'Missing password, set password = lqdoj - ' if 'name' in row.keys() and row['name']: user.first_name = row['name'] if 'school' in row.keys() and row['school']: user.last_name = row['school'] if row['organizations']: orgs = row['organizations'].split('&') added_orgs = [] for o in orgs: try: org = Organization.objects.get(slug=o) profile.organizations.add(org) added_orgs.append(org.name) except Organization.DoesNotExist: continue if added_orgs: cur_log += 'Added to ' + ', '.join(added_orgs) + ' - ' user.email = row['email'] user.save() profile.save() cur_log += 'Saved\n' log += cur_log log += 'FINISH' return log