def do(self):
		logger.debug("social_auth_pipeline.startPostProcessing - StartPostProcessing starts")
		pendingusers = UserProcessing.objects.filter(entryaddtime__lte=datetime.now(pytz.timezone('America/Chicago'))+timedelta(minutes=-5)).values('userloggedin','accesstoken')
		logger.debug("social_auth_pipeline.startPostProcessing - StartPostProcessing starts - length of list is " + str(len(pendingusers)))
		if len(pendingusers) > 0:
			randnum = randint(0, len(pendingusers)-1)
			userloggedin = pendingusers[randnum].get('userloggedin')
			accesstoken = pendingusers[randnum].get('accesstoken')
			
			UserProcessing.objects.filter(userloggedin = userloggedin).delete()
			userprocessing = UserProcessing()
			userprocessing.userloggedin = UserTomonotomo.objects.get(userid=userloggedin)
			userprocessing.accesstoken = accesstoken
			userprocessing.save()

			try:
				logger.debug("social_auth_pipeline.startPostProcessing - Starting Post Processing for " + str(userloggedin) + " with accesstoken " + accesstoken)
				postProcessing(userloggedin, accesstoken)
				logger.debug("social_auth_pipeline.startPostProcessing - Almost Completed Post Processing for " + str(userloggedin) + " with accesstoken " + accesstoken)
				UserProcessing.objects.filter(userloggedin = userloggedin).delete()
				logger.debug("social_auth_pipeline.startPostProcessing - Completed Post Processing for " + str(userloggedin) + " with accesstoken " + accesstoken)
			except:
				logger.exception("social_auth_pipeline.startPostProcessing - Failed Post Processing for " + str(userloggedin) + " with accesstoken " + accesstoken)

			logger.debug("social_auth_pipeline.startPostProcessing - Before this operation - length of list was " + str(len(pendingusers)))

		return
def create_custom_user(backend, details, user=None, user_exists=UserSocialAuth.simple_user_exists, *args, **kwargs):

	logger.debug("social_auth_pipeline.create_custom_user - Creating Custom User")

	## TODO: Make not updating condition stricter. stop only if (not new) and (updated in last 10 days)
	if kwargs['is_new'] == False:
		logger.debug("social_auth_pipeline.create_custom_user - Returning user " + str(user))
	else:
		logger.debug("social_auth_pipeline.create_custom_user - Getting data for first time user " + str(user))

	if user is None:
		logger.exception("social_auth_pipeline.create_custom_user - User came as None in the function create_custom_user")
		return
	if backend.__class__ != FacebookBackend:
		return

	res = kwargs['response']

	logger.debug("social_auth_pipeline.create_custom_user - Getting/Updating data for userid " + res.get('id'))
	logger.debug("social_auth_pipeline.create_custom_user - " + str(res))

	try:
		profile = UserTomonotomo.objects.get(userid=res.get('id'))
	except UserTomonotomo.DoesNotExist:
		profile = UserTomonotomo()

	profile.accesstoken = res.get('access_token')
	profile.expiresin = res.get('expires')
	if res.get('work'):
		profile.work= getSanitizedWork(res['work'])
	if res.get('education'):
		profile.education= getSanitizedEducation(res['education'])
	profile.email = res.get('email')
	if not res.get('email'):
		profile.email = str(res.get('username'))+"@facebook.com"
		logger.info("social_auth_pipeline.create_custom_user - Email not found for user " + str(res.get('id')) + ". Using " + profile.email)
		if not res.get('username'):
			logger.exception("social_auth_pipeline.create_custom_user - Critical - Could neither get email nor [email protected] for user " + str(res.get('id')))
	profile.first_name = res.get('first_name')
	profile.last_name = res.get('last_name')
	profile.gender = genderdict[res.get('gender') or "not specified"]
	if res.get('hometown'):
		profile.hometown = res.get('hometown').get('name')
	if res.get('location'):
		profile.location = res.get('location').get('name')
		saveLocation(res.get('location').get('id'))
	if res.get('relationship_status'):
		profile.relstatus = relstatusdict[res.get('relationship_status') or "not specified"]
	profile.username = res.get('username')
	profile.userid = res.get('id')

	# "----"

	graph = GraphAPI(res.get('access_token'))
	responsegraph = graph.get(str(res['id'])+'?fields=birthday,likes')
	profile.birthday = str(responsegraph.get('birthday'))
	try:
		if responsegraph.get('likes'):
			# TODO: Gets interests only if interests are not there. Need to change this.
			if not profile.interests:
				profile.interests = pickle.dumps(extractAllSanitizedLikes(responsegraph.get('likes'))).decode('latin1')
	except Exception as e:
		logger.exception("social_auth_pipeline.create_custom_user - Error getting likes for user " + str(res.get('id')))

	profile.save()

	# "----"

	userloggedin = UserTomonotomo.objects.get(userid=res['id'])

	# "----"

	try:
		userprocessing = UserProcessing.objects.get(userloggedin=userloggedin)
	except UserProcessing.DoesNotExist:
		userprocessing = UserProcessing()
		userprocessing.userloggedin = userloggedin
	except UserProcessing.MultipleObjectsReturned:
		userprocessing = userProcessing()
		userprocessing.userloggedin = userloggedin

	userprocessing.accesstoken = res.get('access_token')

	userprocessing.save()

	# "----"

	try:
		userquota = UserQuota.objects.get(userid=res.get('id'))
	except UserQuota.DoesNotExist:
		userquota = UserQuota()
		userquota.userid = res.get('id')
		userquota.quota=20
		userquota.save()

	# "----"

	friendlist = graph.fql('SELECT uid2 FROM friend where uid1=me()')
	peopleontnt = UserTomonotomo.objects.values('userid')

	friendsontnt = list(set(map(lambda x: int(x['uid2']), friendlist.get('data'))) & set(map(lambda x: x['userid'], peopleontnt)))
	
	for friendontnt in friendsontnt:
		try:
			profilefriends = UserFriends.objects.get(userid=userloggedin, friendid=friendontnt)
		except UserFriends.DoesNotExist:
			profilefriends = UserFriends()
			profilefriends.userid = userloggedin
			profilefriends.friendid = friendontnt
			try:
				profilefriends.save()
			except Exception as e:
				logger.exception('social_auth_pipeline.create_custom_user - error - seeing which friends are on tnt ' + str(e))
				pass

	if kwargs['is_new']==False:
		logger.debug("social_auth_pipeline.create_custom_user - completed for returning user " + str(res.get('id')))
		return
	else:
		logger.debug("social_auth_pipeline.create_custom_user - completed for first time user " + str(userloggedin))


	friendsregisteredontnt = list(set(friendsontnt) & set(map(lambda x: x['userid'], UserTomonotomo.objects.exclude(email=None).values('userid'))))
	shuffle(list(set(friendsregisteredontnt)))
	for friendontnt in []:
		try:
			dbutils.sendemailnotification(friendontnt, "One of your friends just joined tomonotomo", "One of your friends just joined tomonotomo to meet interesting friends of friends. We'll keep the name of your friend to ourselves out of respect for his privacy. A new friend is a good news for you as your friend of friend network just increased by "+ str(400 + randint(0,200)) + ", and you have a larger pool of potential dates. Congratulations and visit www.tomonotomo.com right away!")
		except Exception as e:
			logger.exception("social_auth_pipeline.create_custom_user - error in sendemailnotification " + str(e) + str(friendontnt))
			pass
	
	# "----"

	return