sync-cut: skip errors, display in verbose mode

This commit is contained in:
Frédéric Péters 2018-03-08 18:24:42 +01:00
parent a917556ff5
commit 674354c12c
1 changed files with 16 additions and 2 deletions

View File

@ -17,6 +17,7 @@
import requests
import sys
import django.db
from django.conf import settings
from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand
@ -31,6 +32,8 @@ class Command(BaseCommand):
User = get_user_model()
OU = get_ou_model()
verbose = int(options['verbosity']) > 0
cut_agents = OIDCProvider.objects.get(name='cut-agents')
ou_mapping = settings.CUT_GNM_OU_MAPPING
@ -47,13 +50,18 @@ class Command(BaseCommand):
# fallback to getting the user from its (email, ou)
try:
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:
# uuid?
try:
user = User.objects.get(uuid=cut_user_data['sub'])
except User.DoesNotExist:
# at last, create new user
print 'creating', cut_user_data['email']
if verbose:
print 'creating', cut_user_data['email']
user = User()
if (user.uuid != cut_user_data['sub'] or
@ -61,6 +69,8 @@ class Command(BaseCommand):
user.email != cut_user_data['email'] or
user.first_name != cut_user_data['first_name'] or
user.last_name != cut_user_data['last_name']):
if verbose:
print 'updating', user.email, '->', ou_gnm
# only touch user if there are changes
user.uuid = cut_user_data['sub']
user.ou = ou_gnm
@ -69,4 +79,8 @@ class Command(BaseCommand):
user.last_name = cut_user_data['last_name']
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']