Files
MarietjeDjango/marietje/marietje/management/commands/importusers.py
2018-08-18 21:39:04 +02:00

53 lines
2.1 KiB
Python

import json
from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from ...utils import get_first_queue
USERDB_FORMAT = b'UserID username Fullname password Level Studie\n'
class Command(BaseCommand):
help = 'Import users from a JSON file exported from a previous version of Marietje.'
def add_arguments(self, parser):
group = parser.add_mutually_exclusive_group()
group.add_argument('--json_file')
group.add_argument('--tsv_file')
def handle(self, *args, **options):
if options['json_file']:
filename = options['json_file']
User = get_user_model()
with open(filename) as fp:
for line in fp:
import_user = json.loads(line)
user = User()
user.username = import_user['_id'].lower().strip()
user.name = import_user['n'].strip()
user.email = user.username + '@science.ru.nl'
user.password = 'md5$$' + import_user['p']
user.queue = get_first_queue()
user.save()
if options['tsv_file']:
filename = options['tsv_file']
User = get_user_model()
with open(filename, 'rb') as fp:
line = fp.readline()
assert line == USERDB_FORMAT, 'bad 1st line: {}'.format(line)
for line in fp:
import_user = line.strip(b'\n').split(b'\t')
username = import_user[1].decode('utf-8', errors='strict').lower().strip()
user, created = User.objects.get_or_create(username=username)
user.name = import_user[2].decode('utf-8', errors='ignore').strip()
user.email = user.username + '@science.ru.nl'
user.password = import_user[3].decode('utf-8', errors='strict')
user.queue = get_first_queue()
user.study = import_user[5].decode('utf-8', errors='ignore').strip()
user.save()
print('Done importing users.')