Newer
Older
from django.core.management.base import BaseCommand
from opentech.apply.users.groups import STAFF_GROUP_NAME
class Command(BaseCommand):
help = "User migration script. Requires a source JSON file."
parser.add_argument('source', nargs='?', type=argparse.FileType('r'), help='Migration source JSON file')
def handle(self, *args, **options):
with options['source'] as json_data:
User = get_user_model()
users = json.load(json_data)
for uid in users:
user = users[uid]
full_name = self.get_full_name(user)
user_object, created = User.objects.get_or_create(
email=user.get('mail'),
defaults={'full_name': full_name}
)
if created:
print("Imported user %s (%s)" % (uid, full_name))
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
for group in self.get_user_groups(user):
user_object.groups.add(group)
user_object.save()
def get_full_name(self, user):
full_name = user.get('field_otf_real_name', None)
try:
full_name = full_name['und'][0]['safe_value']
except (KeyError, TypeError):
full_name = user.get('name')
return full_name
def get_user_groups(self, user):
groups = []
role_map = {
'proposer': 'Applicant',
'council': 'Advisor',
'administrator': 'Administrator',
'dev': 'Administrator',
}
_, email_domain = user.get('mail').split('@')
if email_domain in settings.STAFF_EMAIL_DOMAINS:
groups.append(self.groups.filter(name=STAFF_GROUP_NAME).first())
roles = [role for role in user.get('roles').values() if role != "authenticated user"]
for role in roles:
group_name = role_map.get(role)
if group_name:
groups.append(self.groups.filter(name=group_name).first())
return groups