def setup_users(self): user_dicts = self.get_user_dicts() decode = self._decode created_count, existing_count, skipped = 0, 0, [] username_pattern = re.compile("^[a-z]{2,5}[0-9]{3,3}$") for ud in user_dicts: uname = decode(ud['login']).lower() if username_pattern.match(uname) is None: skipped.append(uname) continue phone = self._get_phone(ud) first_name = decode(ud['fnamn']) last_name = decode(ud['enamn']) # Do not update the phone or name of an already imported users, we # risk overwriting updated credentials. user_exists = User.objects.filter(username__exact=uname).count() != 0 if user_exists: phone = None first_name = None last_name = None eaddr_custom = None if ud['epost']: eaddr_custom = decode(ud['epost']) u, created = get_or_create_user( username=uname, first_name=first_name, last_name=last_name, email=eaddr_custom, phone=phone, show_email=ud['ejepost'] == 0, show_profile=ud['dold'] == 0, ) p = u.get_profile() if created: log.info('created: %r %r' % (u, p)) created_count += 1 else: log.info('existing: %r %r' % (u, p)) existing_count += 1 log.info('%d/%d/%d user(s) created/existing/skipped' % ( created_count, existing_count, len(skipped))) if len(skipped): log.warning('skipped: %s' % ", ".join(skipped))
pass else: log.error(e) return None if create: # FIXME: DRY. enc = 'utf-8' if first_name is not None: first_name = first_name.decode(enc) if last_name is not None: last_name = last_name.decode(enc) user, created = get_or_create_user( username=username, first_name=first_name, last_name=last_name, ) if silent: pass else: if created: log.info('created %r' % user) else: log.info('fetched %r from directory' % user) return user return True class LDAPBackend(object):