Skip to content
Snippets Groups Projects
Commit 21695571 authored by Dan Braghis's avatar Dan Braghis
Browse files

Handle user roles

parent a5bdfd14
No related branches found
No related tags found
No related merge requests found
import argparse import argparse
import json import json
from django.conf import settings
from django.contrib.auth import get_user_model from django.contrib.auth import get_user_model
from django.contrib.auth.models import Group
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.db import transaction from django.db import transaction
from opentech.apply.users.groups import STAFF_GROUP_NAME
class Command(BaseCommand): class Command(BaseCommand):
help = "User migration script. Requires a source JSON file." help = "User migration script. Requires a source JSON file."
groups = Group.objects.all()
def add_arguments(self, parser): def add_arguments(self, parser):
parser.add_argument('source', nargs='?', type=argparse.FileType('r'), help='Migration source JSON file') parser.add_argument('source', nargs='?', type=argparse.FileType('r'), help='Migration source JSON file')
...@@ -27,16 +32,47 @@ class Command(BaseCommand): ...@@ -27,16 +32,47 @@ class Command(BaseCommand):
for uid in users: for uid in users:
user = users[uid] user = users[uid]
full_name = user.get('field_otf_real_name', None) full_name = self.get_full_name(user)
try: user_object, created = User.objects.get_or_create(
full_name = full_name['und'][0]['safe_value']
except (KeyError, TypeError):
full_name = user.get('name')
_, created = User.objects.get_or_create(
email=user.get('mail'), email=user.get('mail'),
defaults={'full_name': full_name} defaults={'full_name': full_name}
) )
if created: if created:
print("Imported user %s (%s)" % (uid, full_name)) print("Imported user %s (%s)" % (uid, full_name))
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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment