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