sync-cut: skip errors, display in verbose mode
This commit is contained in:
parent
a917556ff5
commit
674354c12c
|
@ -17,6 +17,7 @@
|
||||||
import requests
|
import requests
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
|
import django.db
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth import get_user_model
|
from django.contrib.auth import get_user_model
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
@ -31,6 +32,8 @@ class Command(BaseCommand):
|
||||||
User = get_user_model()
|
User = get_user_model()
|
||||||
OU = get_ou_model()
|
OU = get_ou_model()
|
||||||
|
|
||||||
|
verbose = int(options['verbosity']) > 0
|
||||||
|
|
||||||
cut_agents = OIDCProvider.objects.get(name='cut-agents')
|
cut_agents = OIDCProvider.objects.get(name='cut-agents')
|
||||||
|
|
||||||
ou_mapping = settings.CUT_GNM_OU_MAPPING
|
ou_mapping = settings.CUT_GNM_OU_MAPPING
|
||||||
|
@ -47,13 +50,18 @@ class Command(BaseCommand):
|
||||||
# fallback to getting the user from its (email, ou)
|
# fallback to getting the user from its (email, ou)
|
||||||
try:
|
try:
|
||||||
user = User.objects.get(email=cut_user_data['email'], ou=ou_gnm)
|
user = User.objects.get(email=cut_user_data['email'], ou=ou_gnm)
|
||||||
|
except User.MultipleObjectsReturned:
|
||||||
|
if verbose:
|
||||||
|
print 'bad duplicated email', cut_user_data['email']
|
||||||
|
continue
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
# uuid?
|
# uuid?
|
||||||
try:
|
try:
|
||||||
user = User.objects.get(uuid=cut_user_data['sub'])
|
user = User.objects.get(uuid=cut_user_data['sub'])
|
||||||
except User.DoesNotExist:
|
except User.DoesNotExist:
|
||||||
# at last, create new user
|
# at last, create new user
|
||||||
print 'creating', cut_user_data['email']
|
if verbose:
|
||||||
|
print 'creating', cut_user_data['email']
|
||||||
user = User()
|
user = User()
|
||||||
|
|
||||||
if (user.uuid != cut_user_data['sub'] or
|
if (user.uuid != cut_user_data['sub'] or
|
||||||
|
@ -61,6 +69,8 @@ class Command(BaseCommand):
|
||||||
user.email != cut_user_data['email'] or
|
user.email != cut_user_data['email'] or
|
||||||
user.first_name != cut_user_data['first_name'] or
|
user.first_name != cut_user_data['first_name'] or
|
||||||
user.last_name != cut_user_data['last_name']):
|
user.last_name != cut_user_data['last_name']):
|
||||||
|
if verbose:
|
||||||
|
print 'updating', user.email, '->', ou_gnm
|
||||||
# only touch user if there are changes
|
# only touch user if there are changes
|
||||||
user.uuid = cut_user_data['sub']
|
user.uuid = cut_user_data['sub']
|
||||||
user.ou = ou_gnm
|
user.ou = ou_gnm
|
||||||
|
@ -69,4 +79,8 @@ class Command(BaseCommand):
|
||||||
user.last_name = cut_user_data['last_name']
|
user.last_name = cut_user_data['last_name']
|
||||||
user.save()
|
user.save()
|
||||||
|
|
||||||
OIDCAccount.objects.get_or_create(provider=cut_agents, user=user, sub=cut_user_data['sub'])
|
try:
|
||||||
|
OIDCAccount.objects.get_or_create(provider=cut_agents, user=user, sub=cut_user_data['sub'])
|
||||||
|
except django.db.utils.IntegrityError:
|
||||||
|
if verbose:
|
||||||
|
print 'oops duplicated email?', cut_user_data['email']
|
||||||
|
|
Reference in New Issue