utils.py 文件源码

python
阅读 20 收藏 0 点赞 0 评论 0

项目:cerberus-core 作者: ovh 项目源码 文件源码
def get_email_thread_content(ticket, emails):
    """
        Generate `abuse.models.Ticket` emails thred history
        based on 'email_thread' `abuse.models.MailTemplate`

        :param `abuse.models.Ticket` ticket: The cererus ticket
        :param list emails: a list of `adapters.services.mailer.abstract.Email`
        :rtype: tuple
        :return: The content and the filetype
    """
    try:
        template = MailTemplate.objects.get(codename='email_thread')
        is_html = '<html>' in template.body
    except ObjectDoesNotExist:
        raise EmailThreadTemplateNotFound('Unable to find email thread template')

    _emails = []

    for email in emails:
        _emails.append(Email(
            sender=email.sender,
            subject=email.subject,
            recipient=email.recipient,
            body=email.body.replace('\n', '<br>') if is_html else email.body,
            created=datetime.fromtimestamp(email.created),
            category=None,
            attachments=None,
        ))

    domain = ticket.service.name if ticket.service else None

    try:
        template = loader.get_template_from_string(template.body)
        context = Context({
            'publicId': ticket.publicId,
            'creationDate': ticket.creationDate,
            'domain': domain,
            'emails': _emails
        })
        content = template.render(context)
    except (TemplateEncodingError, TemplateSyntaxError) as ex:
        raise EmailThreadTemplateSyntaxError(str(ex))

    try:
        import pdfkit
        from pyvirtualdisplay import Display
        display = Display(visible=0, size=(1366, 768))
        display.start()
        content = pdfkit.from_string(content, False)
        display.stop()
        return content, 'application/pdf'
    except:
        return content.encode('utf-8'), 'text/html' if is_html else 'text/plain'
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号