def update_user_details(self, user, response, details, is_new=False): """Update user details with (maybe) new data. Username is not changed if associating a new credential.""" changed = False # flag to track changes # check if values update should be left to signals handlers only if not CHANGE_SIGNAL_ONLY: for name, value in details.items(): # do not update username, it was already generated by # self.username(...) and loaded in given instance if name != USERNAME and value and value != getattr( user, name, value): setattr(user, name, value) changed = True # Fire a pre-update signal sending current backend instance, # user instance (created or retrieved from database), service # response and processed details. # # Also fire socialauth_registered signal for newly registered # users. # # Signal handlers must return True or False to signal instance # changes. Send method returns a list of tuples with receiver # and it's response. def signal_response(receiver_response): return receiver_response[1] kwargs = { 'sender': self.__class__, 'user': user, 'response': response, 'details': details } changed |= any(filter(signal_response, pre_update.send(**kwargs))) # Fire socialauth_registered signal on new user registration if is_new: changed |= any( filter(signal_response, socialauth_registered.send(**kwargs))) if changed: user.save()
def update_user_details(self, user, response, details, is_new=False): """Update user details with (maybe) new data. Username is not changed if associating a new credential.""" changed = False # flag to track changes # check if values update should be left to signals handlers only if not CHANGE_SIGNAL_ONLY: for name, value in details.iteritems(): # do not update username, it was already generated by # self.username(...) and loaded in given instance if name != USERNAME and value and value != getattr(user, name, value): setattr(user, name, value) changed = True # Fire a pre-update signal sending current backend instance, # user instance (created or retrieved from database), service # response and processed details. # # Also fire socialauth_registered signal for newly registered # users. # # Signal handlers must return True or False to signal instance # changes. Send method returns a list of tuples with receiver # and it's response. signal_response = lambda (receiver, response): response kwargs = {'sender': self.__class__, 'user': user, 'response': response, 'details': details} changed |= any(filter(signal_response, pre_update.send(**kwargs))) # Fire socialauth_registered signal on new user registration if is_new: changed |= any(filter(signal_response, socialauth_registered.send(**kwargs))) if changed: user.save()