command send newsletter (#1184)

This commit is contained in:
Son Nguyen Kim 2022-07-25 11:16:40 +02:00 committed by GitHub
parent 6322e03996
commit 125538748d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 42 additions and 0 deletions

View File

@ -4,6 +4,7 @@ import time
from datetime import timedelta
import arrow
import click
import flask_limiter
import flask_profiler
import sentry_sdk
@ -103,6 +104,7 @@ from app.models import (
NewsletterUser,
)
from app.monitor.base import monitor_bp
from app.newsletter_utils import send_newsletter_to_user
from app.oauth.base import oauth_bp
from app.onboarding.base import onboarding_bp
from app.phone.base import phone_bp
@ -791,6 +793,46 @@ def register_custom_commands(app):
add_sl_domains()
add_proton_partner()
@app.cli.command("send-newsletter")
@click.option("-n", "--newsletter_id", type=int, help="Newsletter ID to be sent")
def send_newsletter(newsletter_id):
newsletter = Newsletter.get(newsletter_id)
if not newsletter:
LOG.w(f"no such newsletter {newsletter_id}")
return
nb_success = 0
nb_failure = 0
# user_ids that have received the newsletter
user_received_newsletter = Session.query(NewsletterUser.user_id).filter(
NewsletterUser.newsletter_id == newsletter_id
)
# only send newsletter to those who haven't received it
user_query = (
User.order_by(User.id)
.filter(User.id.notin_(user_received_newsletter))
.all()
)
for user in user_query:
to_email, unsubscribe_link, via_email = user.get_communication_email()
if not to_email:
continue
sent, error_msg = send_newsletter_to_user(newsletter, user)
if sent:
LOG.d(f"{newsletter} sent to {user}")
nb_success += 1
else:
nb_failure += 1
# sleep in between to not overwhelm mailbox provider
time.sleep(0.2)
LOG.d(f"Nb success {nb_success}, failures {nb_failure}")
def setup_do_not_track(app):
@app.route("/dnt")