Code reference › domain › submission

module

pretalx.submission.domain.invitation

Functions 3

accept_invitation(invitation, *, user)source
@transaction.atomic
def accept_invitation(invitation, *, user):
    from pretalx.submission.domain.submission import (  # noqa: PLC0415 -- circular import
        add_speaker,
    )

    submission = invitation.submission
    add_speaker(submission, user.get_speaker(submission.event))
    submission.log_action(
        "pretalx.submission.invitation.accept",
        person=user,
        data={"email": invitation.email},
    )
    invitation.delete()
    return submission
retract_invitation(invitation, *, person=None, orga=False)sourceDelete a speaker invitation and log the retraction against its parent submission.
def retract_invitation(invitation, *, person=None, orga=False):
    """Delete a speaker invitation and log the retraction against its
    parent submission."""
    email = invitation.email
    submission = invitation.submission
    invitation.delete()
    submission.log_action(
        "pretalx.submission.invitation.retract",
        person=person,
        orga=orga,
        data={"email": email},
    )
send_invitation(submission, *, email, sender, orga=False)sourceInvite an additional speaker to a submission by email.

Re-inviting the same address returns the existing invitation without re-sending or re-logging.

def send_invitation(submission, *, email, sender, orga=False):
    """Invite an additional speaker to a submission by email.

    Re-inviting the same address returns the existing invitation without
    re-sending or re-logging."""
    existing = submission.invitations.filter(email__iexact=email).first()
    if existing:
        return existing
    invitation = submission.invitations.create(email=email)
    try:
        mail = render_to_mail(
            subject_template=phrases.cfp.invite_subject,
            text_template=phrases.cfp.invite_text,
            event=submission.event,
            locale=submission.get_email_locale(),
            safe_extra_context={"url": invitation.urls.base},
            context_kwargs={"submission": submission, "inviting_user": sender},
        )
        mail.to = invitation.email
        transaction.on_commit(lambda: send_transient(mail))
    except SendMailException as exc:
        logger.warning("Failed to send invitation to %s: %s", email, exc)
    submission.log_action(
        "pretalx.submission.invitation.send",
        person=sender,
        orga=orga,
        data={"email": email},
    )
    return invitation