Files
MarietjeDjango/marietje/marietje/management/commands/importusers.py

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.")