def create_reactivation_emails(date_from=None, date_to=None): # select users who became inactive N days ago listid = app.config.get('REACTIVATION_EMAIL_LISTID', 1) delta = timedelta(days=app.config.get('REACTIVATION_THRESHOLD_DAYS', 7)) window = [d - delta for d in date_from, date_to] inactivity_window = UserAccountEvent.query.group_by(UserAccountEvent.user).\ having(func.max(UserAccountEvent.event_date).between(*window)).\ with_entities(UserAccountEvent.user) excluded_users = UserFlag.query.filter( UserFlag.flag.in_(('bouncing', 'unsub%d' % listid))).with_entities(UserFlag.user) inactive_users = User.query.filter( User.is_active == True, User.email != '', User.id.in_(inactivity_window), User.id.notin_(excluded_users)) tracking_params = app.config.get('REACTIVATION_EMAIL_TRACKING_PARAMS') with url_tracking_context(tracking_params): template = email.env.get_template('reactivation.html') for user in inactive_users: ctx = _reactivation_feed_context(user, window[0]) if ctx: ctx.update( unsubscribe_token=create_unsubscribe_token(listid, user.id), **tracking_params ) _send_email_or_log(user, template, **ctx)
def create_ping_emails(listid, template_path, threshold_days, tracking_params, date_from=None, date_to=None): delta = timedelta(days=threshold_days) window = [d - delta for d in date_from, date_to] excluded_users = UserFlag.query.filter( UserFlag.flag.in_(('bouncing', 'unsub%d' % listid))).with_entities(UserFlag.user) users = User.query.filter( User.is_active == True, User.email != '', User.date_joined.between(*window), User.id.notin_(excluded_users)) with url_tracking_context(tracking_params): template = email.env.get_template(template_path) for user in users: ctx = dict( unsubscribe_token=create_unsubscribe_token(listid, user.id), **tracking_params ) _send_email_or_log(user, template, **ctx)
def influencer_starred_email(recipient, sender, influencer_id, video_instance): if recipient.id in (sender.id, influencer_id): return listid = app.config.get('RECOMMENDATION_EMAIL_LISTID', 2) if any(f for f in recipient.flags if f.flag in ('bouncing', 'unsub%d' % listid)): return influencer = User.query.get(influencer_id) link = ShareLink.get_or_create(sender.id, 'video_instance', video_instance.id)[0] ctx = dict( sender=sender, link=link, object_type='video_instance', object_type_name='video', object=video_instance, senders=[sender, influencer], unsubscribe_token=create_unsubscribe_token(listid, recipient.id) ) tracking_params = app.config.get('RECOMMENDATION_EMAIL_TRACKING_PARAMS') with url_tracking_context(tracking_params): template = email.env.get_template('video_recommendation.html') _send_email_or_log(recipient, template, **ctx)