示例#1
0
文件: views.py 项目: tqrg-bot/kuma
def _send_payment_received_email(invoice, locale):
    user = get_user_model().objects.get(stripe_customer_id=invoice.customer)
    subscription_info = retrieve_and_synchronize_subscription_info(user)
    locale = locale or settings.WIKI_DEFAULT_LANGUAGE
    context = {
        "payment_date": datetime.fromtimestamp(invoice.created),
        "next_payment_date": subscription_info["next_payment_at"],
        "invoice_number": invoice.number,
        "cost": invoice.total / 100,
        "credit_card_brand": subscription_info["brand"],
        "manage_subscription_url": absolutify(reverse("payment_management")),
        "faq_url": absolutify(reverse("payments_index")),
        "contact_email": settings.CONTRIBUTION_SUPPORT_EMAIL,
    }
    with translation.override(locale):
        subject = render_email("users/email/payment_received/subject.ltxt",
                               context)
        # Email subject *must not* contain newlines
        subject = "".join(subject.splitlines())
        plain = render_email("users/email/payment_received/plain.ltxt",
                             context)

        send_mail_retrying(
            subject,
            plain,
            settings.DEFAULT_FROM_EMAIL,
            [user.email],
            attachment={
                "name": os.path.basename(urlparse(invoice.invoice_pdf).path),
                "bytes": _download_from_url(invoice.invoice_pdf),
                "mime": "application/pdf",
            },
        )
示例#2
0
def send_recovery_email(user_pk, email, locale=None):
    user = get_user_model().objects.get(pk=user_pk)
    locale = locale or settings.WIKI_DEFAULT_LANGUAGE
    url = settings.SITE_URL + user.get_recovery_url()
    context = {"recovery_url": url, "username": user.username}
    with translation.override(locale):
        subject = render_email("users/email/recovery/subject.ltxt", context)
        # Email subject *must not* contain newlines
        subject = "".join(subject.splitlines())
        plain = render_email("users/email/recovery/plain.ltxt", context)
        send_mail_retrying(subject, plain, settings.DEFAULT_FROM_EMAIL, [email])
示例#3
0
def send_payment_received_email(stripe_customer_id, locale, timestamp, invoice_pdf):
    user = get_user_model().objects.get(stripe_customer_id=stripe_customer_id)
    locale = locale or settings.WIKI_DEFAULT_LANGUAGE
    context = {
        "payment_date": datetime.datetime.fromtimestamp(timestamp),
        "manage_subscription_url": absolutify(reverse("recurring_payment_management")),
        "faq_url": absolutify(reverse("payments_index")),
        "contact_email": settings.CONTRIBUTION_SUPPORT_EMAIL,
        "invoice_pdf": invoice_pdf,
    }
    with translation.override(locale):
        subject = render_email("users/email/payment_received/subject.ltxt", context)
        # Email subject *must not* contain newlines
        subject = "".join(subject.splitlines())
        plain = render_email("users/email/payment_received/plain.ltxt", context)
        send_mail_retrying(subject, plain, settings.DEFAULT_FROM_EMAIL, [user.email])
示例#4
0
def test_send_mail_retrying(settings):
    settings.EMAIL_BACKEND = "kuma.core.tests.test_utils.SMTPFlakyEmailBackend"

    send_mail_retrying(
        "Subject",
        "Message",
        "*****@*****.**",
        ["*****@*****.**"],
        retry_options={
            "retry_exceptions": (SomeException, ),
            # Overriding defaults to avoid the test being slow.
            "sleeptime": 0.02,
            "jitter": 0.01,
        },
    )
    sent = mail.outbox[-1]
    # sanity check
    assert sent.subject == "Subject"
示例#5
0
def move_page(locale, slug, new_slug, user_id):
    transaction.set_autocommit(False)
    User = get_user_model()
    try:
        user = User.objects.get(id=user_id)
    except User.DoesNotExist:
        transaction.rollback()
        logging.error("Page move failed: no user with id %s" % user_id)
        return

    try:
        doc = Document.objects.get(locale=locale, slug=slug)
    except Document.DoesNotExist:
        transaction.rollback()
        message = """
            Page move failed.

            Move was requested for document with slug %(slug)s in locale
            %(locale)s, but no such document exists.
        """ % {
            "slug": slug,
            "locale": locale,
        }
        logging.error(message)
        send_mail_retrying(
            "Page move failed",
            textwrap.dedent(message),
            settings.DEFAULT_FROM_EMAIL,
            [user.email],
        )
        transaction.set_autocommit(True)
        return

    try:
        doc._move_tree(new_slug, user=user)
    except PageMoveError as e:
        transaction.rollback()
        message = """
            Page move failed.

            Move was requested for document with slug %(slug)s in locale
            %(locale)s, but could not be completed.

            Diagnostic info:

            %(message)s
        """ % {
            "slug": slug,
            "locale": locale,
            "message": e.message,
        }
        logging.error(message)
        send_mail_retrying(
            "Page move failed",
            textwrap.dedent(message),
            settings.DEFAULT_FROM_EMAIL,
            [user.email],
        )
        transaction.set_autocommit(True)
        return
    except Exception as e:
        transaction.rollback()
        message = """
            Page move failed.

            Move was requested for document with slug %(slug)s in locale %(locale)s,
            but could not be completed.

            %(info)s
        """ % {
            "slug": slug,
            "locale": locale,
            "info": e,
        }
        logging.error(message)
        send_mail_retrying(
            "Page move failed",
            textwrap.dedent(message),
            settings.DEFAULT_FROM_EMAIL,
            [user.email],
        )
        transaction.set_autocommit(True)
        return

    transaction.commit()
    transaction.set_autocommit(True)

    # Now that we know the move succeeded, re-render the whole tree.
    for moved_doc in [doc] + doc.get_descendants():
        moved_doc.schedule_rendering("max-age=0")

    subject = "Page move completed: " + slug + " (" + locale + ")"

    full_url = settings.SITE_URL + "/" + locale + "/docs/" + new_slug

    # Get the parent document, if parent doc is None, it means its the parent document
    parent_doc = doc.parent or doc

    other_locale_urls = [
        settings.SITE_URL + translation.get_absolute_url()
        for translation in parent_doc.translations.exclude(locale=doc.locale).order_by(
            "locale"
        )
    ]

    # If the document is a translation we should include the parent document url to the list
    if doc.parent:
        other_locale_urls = [
            settings.SITE_URL + doc.parent.get_absolute_url()
        ] + other_locale_urls

    message = (
        textwrap.dedent(
            """
        Page move completed.

        The move requested for the document with slug %(slug)s in locale
        %(locale)s, and all its children, has been completed.

        The following localized articles may need to be moved also:
        %(locale_urls)s

        You can now view this document at its new location: %(full_url)s.
    """
        )
        % {
            "slug": slug,
            "locale": locale,
            "full_url": full_url,
            "locale_urls": "\n".join(other_locale_urls),
        }
    )

    send_mail_retrying(subject, message, settings.DEFAULT_FROM_EMAIL, [user.email])