def import_admins(self): """ save admins to local DB """ self.message('saving admins into local DB') saved_admins = [] for olduser in OldUser.objects.all(): try: user = User.objects.get( Q(username=olduser.username) | Q(email=olduser.email)) except User.DoesNotExist: user = User() except User.MultipleObjectsReturned: continue user.username = olduser.username user.password = olduser.password user.first_name = olduser.first_name user.last_name = olduser.last_name user.email = olduser.email user.is_active = olduser.is_active user.is_staff = olduser.is_staff user.is_superuser = olduser.is_superuser user.date_joined = olduser.date_joined user.full_clean() user.save(sync_emailaddress=False) saved_admins.append(user) # mark email address as confirmed if feature is enabled if EMAIL_CONFIRMATION and EmailAddress.objects.filter( email=user.email).count() is 0: try: email_address = EmailAddress(user=user, email=user.email, verified=True, primary=True) email_address.full_clean() email_address.save() except Exception: tb = traceback.format_exc() self.message( 'Could not save email address for user %s, got exception:\n\n%s' % (user.username, tb)) self.message('saved %d admins into local DB' % len(saved_admins)) self.saved_admins = saved_admins
def import_users(self): """ save users to local DB """ self.message('saving users into local DB') saved_users = [] # loop over all extracted unique email addresses for email in self.email_set: owner = self.users_dict[email].get('owner') # if owner is not specified, build username from email if owner.strip() == '': owner, domain = email.split('@') # replace any points with a space owner = owner.replace('.', ' ') # if owner has a space, assume he specified first and last name if ' ' in owner: owner_parts = owner.split(' ') first_name = owner_parts[0] last_name = owner_parts[1] else: first_name = owner last_name = '' # username must be slugified otherwise won't get into the DB username = slugify(owner) # check if user exists first try: # try looking by email user = User.objects.get(email=email) except User.DoesNotExist: try: # try looking by username user = User.objects.get(username=username) except User.DoesNotExist: # otherwise init new user = User() # generate new password only for new users user.password = self.generate_random_password() # we'll create one user for each unique email address we've got user.username = username user.first_name = first_name.capitalize() user.last_name = last_name.capitalize() user.email = email user.is_active = True # extract date joined from old nodes # find the oldest node of this user oldest_node = OldNode.objects.filter( email=email).order_by('added')[0] user.date_joined = oldest_node.added # be sure username is unique counter = 1 original_username = username while True: # do this check only if user is new if not user.pk and User.objects.filter( username=user.username).count() > 0: counter += 1 user.username = '******' % (original_username, counter) else: break try: # validate data and save user.full_clean() user.save(sync_emailaddress=False) except Exception: # if user already exists use that instance if (User.objects.filter(email=email).count() == 1): user = User.objects.get(email=email) # otherwise report error else: user = None tb = traceback.format_exc() self.message( 'Could not save user %s, got exception:\n\n%s' % (user.username, tb)) # if we got a user to add if user is not None: # store id self.users_dict[email]['id'] = user.id # append to saved users saved_users.append(user) self.verbose('Saved user %s (%s) with email <%s>' % (user.username, user.get_full_name(), user.email)) # mark email address as confirmed if feature is enabled if EMAIL_CONFIRMATION and EmailAddress.objects.filter( email=user.email).count() is 0: try: email_address = EmailAddress(user=user, email=user.email, verified=True, primary=True) email_address.full_clean() email_address.save() except Exception: tb = traceback.format_exc() self.message( 'Could not save email address for user %s, got exception:\n\n%s' % (user.username, tb)) self.message('saved %d users into local DB' % len(saved_users)) self.saved_users = saved_users