0

I am using python social auth for login. After user is created I want to send the user a email. For this I am writing a custom pipeline

def send_confirmation_email(strategy, details, response, user=None, *args, **kwargs):
if user:
    if kwargs['is_new']:
        template = "email/social_registration_confirm.html"
        subject = "Account Confirmation"
        email = user.email
        print(user.username)
        username = user.username
        kwargs.update(subject=subject, email=email, username=username)
        notification_email.delay(template, **kwargs)

I am using celery to send email. When I send email it gives me error saying <UserSocialAuth: some_username> is not JSON serializable

Why I am getting this error. notification_email works for other email sending functionality.

Need suggestion. Thank you

varad
  • 7,309
  • 20
  • 60
  • 112

1 Answers1

0

JSON accepts only a few datatypes: null, arrays, booleans, numbers, strings, and objects.

So, anything else should be expressed as one of these types.

My guess is that **kwargs that you are sending in to notification_email contains a data type that cannot be expressed as JSON.

To solve this problem, send only needed arguments, not the whole **kwargs.

I would create a dictionary and include everything there:

var args = dict()

args['username'] = username
args['template'] = template
# other arguments

notification_email.delay(args)

I hope it helps.

Jahongir Rahmonov
  • 13,083
  • 10
  • 47
  • 91