From d78c3dadca483aa6c83cdddc9789e543753d4e8d Mon Sep 17 00:00:00 2001 From: Dan Braghis <dan.braghis@torchbox.com> Date: Wed, 28 Feb 2018 10:56:30 +0000 Subject: [PATCH] Add user migration command --- opentech/apply/users/management/__init__.py | 0 .../users/management/commands/__init__.py | 0 .../management/commands/migrate_users.py | 36 +++++++++++++++++++ 3 files changed, 36 insertions(+) create mode 100644 opentech/apply/users/management/__init__.py create mode 100644 opentech/apply/users/management/commands/__init__.py create mode 100644 opentech/apply/users/management/commands/migrate_users.py diff --git a/opentech/apply/users/management/__init__.py b/opentech/apply/users/management/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/opentech/apply/users/management/commands/__init__.py b/opentech/apply/users/management/commands/__init__.py new file mode 100644 index 000000000..e69de29bb diff --git a/opentech/apply/users/management/commands/migrate_users.py b/opentech/apply/users/management/commands/migrate_users.py new file mode 100644 index 000000000..eb2bb3524 --- /dev/null +++ b/opentech/apply/users/management/commands/migrate_users.py @@ -0,0 +1,36 @@ +import argparse +import json + +from django.contrib.auth import get_user_model +from django.core.management.base import BaseCommand + + +class Command(BaseCommand): + help = "User migration script. Requires a source JSON file." + + def add_arguments(self, parser): + parser.add_argument('source', nargs='?', type=argparse.FileType('r')) + parser.add_argument( + '--dry-run', + action='store_true', + dest='dry_run', + help='Perform a run dry-run', + ) + + def handle(self, *args, **options): + with options['source'] as json_data: + User = get_user_model() + users = json.load(json_data) + + for user in users: + full_name = user.get('field_otf_real_name', None) + if not full_name: + full_name = user.get('name') + + _, created = User.objects.get_or_create( + email=user.get('mail'), + defaults={'full_name': full_name} + ) + + if created: + print("Imported user %s (%s)" % (user['uid'], full_name)) -- GitLab