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