Exemplo n.º 1
0
 def notify(self, tickets, new_values, comment, action, author):
     """Send batch ticket change notification e-mail (untranslated)"""
     t = deactivate()
     try:
         self._notify(tickets, new_values, comment, action, author)
     finally:
         reactivate(t)
Exemplo n.º 2
0
 def notify(self, tickets, new_values, comment, action, author):
     """Send batch ticket change notification e-mail (untranslated)"""
     t = deactivate()
     try:
         self._notify(tickets, new_values, comment, action, author)
     finally:
         reactivate(t)
Exemplo n.º 3
0
 def format(self, tickets, new_values, comment, action, author):
     """Format batch ticket change notification e-mail (untranslated)"""
     t = deactivate()
     try:
         self._prepare_body(tickets, new_values, comment, action, author)
         return self._format_body()
     finally:
         reactivate(t)
Exemplo n.º 4
0
 def format(self, tickets, new_values, comment, action, author):
     """Format batch ticket change notification e-mail (untranslated)"""
     t = deactivate()
     try:
         self._prepare_body(tickets, new_values, comment, action, author)
         return self._format_body()
     finally:
         reactivate(t)
Exemplo n.º 5
0
 def _format_body(self):
     stream = self.template.generate(**self.data)
     # don't translate the e-mail stream
     t = deactivate()
     try:
         return stream.render('text', encoding='utf-8')
     finally:
         reactivate(t)
Exemplo n.º 6
0
 def _format_body(self):
     stream = self.template.generate(**self.data)
     # don't translate the e-mail stream
     t = deactivate()
     try:
         return stream.render('text', encoding='utf-8')
     finally:
         reactivate(t)
Exemplo n.º 7
0
 def notify(self, ticket, newticket=True, modtime=None):
     """Send ticket change notification e-mail (untranslated)"""
     t = deactivate()
     translated_fields = ticket.fields
     try:
         ticket.fields = TicketSystem(self.env).get_ticket_fields()
         self._notify(ticket, newticket, modtime)
     finally:
         ticket.fields = translated_fields
         reactivate(t)
Exemplo n.º 8
0
 def notify(self, ticket, newticket=True, modtime=None):
     """Send ticket change notification e-mail (untranslated)"""
     t = deactivate()
     translated_fields = ticket.fields
     try:
         ticket.fields = TicketSystem(self.env).get_ticket_fields()
         self._notify(ticket, newticket, modtime)
     finally:
         ticket.fields = translated_fields
         reactivate(t)
Exemplo n.º 9
0
def _translation_deactivated(ticket=None):
    t = deactivate()
    if ticket is not None:
        ts = TicketSystem(ticket.env)
        translated_fields = ticket.fields
        ticket.fields = ts.get_ticket_fields()
    try:
        yield
    finally:
        if ticket is not None:
            ticket.fields = translated_fields
        reactivate(t)
Exemplo n.º 10
0
def translation_deactivated(ticket=None):
    t = deactivate()
    if ticket is not None:
        ts = TicketSystem(ticket.env)
        translated_fields = ticket.fields
        ticket.fields = ts.get_ticket_fields()
    try:
        yield
    finally:
        if ticket is not None:
            ticket.fields = translated_fields
        reactivate(t)
Exemplo n.º 11
0
    def notify_attachment(self, ticket, author, filename, modtime, body):
        """Send ticket attachment notification (untranslated)"""
        t = deactivate()
        translated_fields = ticket.fields
        try:
            ticket.fields = TicketSystem(self.env).get_ticket_fields()

            self.ticket = ticket
            self.modtime = modtime
            self.newticket = False
            self.reporter = ''
            self.owner = ''

            link = self.env.abs_href.ticket(ticket.id)
            summary = self.ticket['summary']
            ticket_values = ticket.values.copy()
            ticket_values['id'] = ticket.id

            wrap_kargs = {
                'initial_indent': ' ',
                'subsequent_indent': ' ',
                'linesep': CRLF
            }
            if 'ambiwidth' in getargspec(wrap)[0]:
                wrap_kargs['ambiwidth'] = self.ambiwidth

            ticket_values['description'] = wrap(
                ticket_values.get('description', ''),
                self.COLS,
                **wrap_kargs
            )

            ticket_values['new'] = self.newticket
            ticket_values['link'] = link
            subject = 'Re: ' + self.format_subj(summary)
            author = obfuscate_email_address(author)
            change = { 'author': author }

            self.data.update({
                'ticket_props': self.format_props(),
                'ticket_body_hdr': self.format_hdr(),
                'subject': subject,
                'ticket': ticket_values,
                'change': change,
                'changes_body': body,
                })

            NotifyEmail.notify(self, ticket.id, subject)
        finally:
            ticket.fields = translated_fields
            reactivate(t)
 def substitute_message(self, message, ignore_exc=True):
     try:
         chrome = Chrome(self.env)
         req = self._create_request()
         t = deactivate()
         try:
             make_activable(lambda: req.locale, self.env.path)
             return self._substitute_message(chrome, req, message)
         finally:
             reactivate(t)
     except:
         self.log.warn('Caught exception while substituting message',
                       exc_info=True)
         if ignore_exc:
             return message
         raise
Exemplo n.º 13
0
    def _internal_render(self, req, name, content, render_args=None):
        if not name == 'latex':
            return self._show_err('Unknown macro %s' % (name))

        label = None
        for line in content.split("\n"):
            m = reLABEL.search(content)
            if m:
                label = m.group(1)

        # We have to remove unnecessary ending lines because it seems otherwise preview LaTeX package
        # improperly crops the PDF -- if there is an empty line bettween the end of the content
        # and \end{preview}
        content = content.strip()

        key = sha1(
            content.encode('utf-8') + self.template_digest +
            str(self.png_resolution)).hexdigest()

        imgname = key + '.png'
        imgpath = os.path.join(self.cache_dir, imgname)

        if not os.path.exists(imgpath):
            errmsg = self._validate(content)
            if errmsg:
                return self._show_err(errmsg)

            texname = key + '.tex'
            texpath = os.path.join(self.cache_dir, texname)

            # Don't translate tex file
            t = deactivate()
            try:
                f = open(texpath, mode='w')
                self.template.generate(content=content).render(
                    encoding='utf-8', out=f)
                f.close()
            except Exception, e:
                reactivate(t)
                return self._show_err("Problem creating tex file: %s" % (e))
            finally:
Exemplo n.º 14
0
    def _internal_render(self, req, name, content, render_args=None):
        if not name == 'latex':
            return self._show_err('Unknown macro %s' % (name))

        label = None
        for line in content.split("\n"):
            m = reLABEL.search(content)
            if m:
                label = m.group(1)

        # We have to remove unnecessary ending lines because it seems otherwise preview LaTeX package
        # improperly crops the PDF -- if there is an empty line bettween the end of the content
        # and \end{preview}
        content = content.strip()

        key = sha1(content.encode('utf-8') + self.template_digest + str(self.png_resolution)).hexdigest()

        imgname = key + '.png'
        imgpath = os.path.join(self.cache_dir, imgname)

        if not os.path.exists(imgpath):
            errmsg = self._validate(content)
            if errmsg:
                return self._show_err(errmsg)

            texname = key + '.tex'
            texpath = os.path.join(self.cache_dir, texname)

            # Don't translate tex file
            t = deactivate()
            try:
                f = open(texpath, mode='w')
                self.template.generate(content=content).render(encoding='utf-8', out=f)
                f.close()
            except Exception, e:
                reactivate(t)
                return self._show_err("Problem creating tex file: %s" % (e))
            finally:
Exemplo n.º 15
0
    def send(self, torcpts, ccrcpts, mime_headers={}):
        """
        this method is based NotifyEmail in trac/notification.py

        As the default trac NotifyEmail class assumes alot, and will overwrite headers
        we do not call our ancestor class method here, but send the mail direct
        """
        from email.MIMEText import MIMEText
        from email.Utils import formatdate
        stream = self.template.generate(**self.data)
        # don't translate the e-mail stream
        t = deactivate()
        try:
            body = stream.render('text')
        finally:
            reactivate(t)
        projname = self.env.project_name
        public_cc = self.config.getbool('notification', 'use_public_cc')
        headers = {}
        headers['X-Mailer'] = 'Trac %s, by Edgewall Software' % __version__
        headers['X-Trac-Version'] = __version__
        headers['X-Trac-Project'] = projname
        headers['X-URL'] = self.env.project_url
        headers['Precedence'] = 'bulk'
        headers['Auto-Submitted'] = 'auto-generated'
        headers['Subject'] = self.subject
        headers['From'] = (self.from_name or projname, self.from_email)
        headers['Reply-To'] = self.reply_to_email

        # add Message-ID and In-Reply-To for threaded mail clients
        if self.action == 'post_created':
            headers['Message-ID'] = self.get_message_id(
                projname, self.blog.name)
        else:
            headers['Message-ID'] = self.get_message_id(
                projname, self.blog.name, self.time)
            headers['In-Reply-To'] = headers[
                'References'] = self.get_message_id(projname, self.blog.name)

        def build_addresses(rcpts):
            """Format and remove invalid addresses"""
            return filter(lambda x: x,
                          [self.get_smtp_address(addr) for addr in rcpts])

        def remove_dup(rcpts, all):
            """Remove duplicates"""
            tmp = []
            for rcpt in rcpts:
                if not rcpt in all:
                    tmp.append(rcpt)
                    all.append(rcpt)
            return (tmp, all)

        toaddrs = build_addresses(torcpts)
        ccaddrs = build_addresses(ccrcpts)
        accparam = self.config.getlist('fullblog-notification',
                                       'smtp_always_cc')
        accaddrs = accparam and build_addresses(accparam) or []

        recipients = []
        (toaddrs, recipients) = remove_dup(toaddrs, recipients)
        (ccaddrs, recipients) = remove_dup(ccaddrs, recipients)
        (accaddrs, recipients) = remove_dup(accaddrs, recipients)

        # if there is not valid recipient, leave immediately
        if len(recipients) < 1:
            self.env.log.info('no recipient for a fullblog notification')
            return

        cc = accaddrs + ccaddrs
        if cc:
            headers['Cc'] = ', '.join(cc)
        if toaddrs:
            headers['To'] = ', '.join(toaddrs)
        headers['Date'] = formatdate()
        msg = MIMEText(body, 'plain')
        # Message class computes the wrong type from MIMEText constructor,
        # which does not take a Charset object as initializer. Reset the
        # encoding type to force a new, valid evaluation
        del msg['Content-Transfer-Encoding']
        msg.set_charset(self._charset)
        self.add_headers(msg, headers)
        self.add_headers(msg, mime_headers)
        NotificationSystem(self.env).send_email(self.from_email, recipients,
                                                msg.as_string())
    def send(self, torcpts, ccrcpts, mime_headers={}):
        from email.MIMEText import MIMEText
        from email.Utils import formatdate

        attach_diff = self.config.getbool('wiki-notification', 'attach_diff')
        if attach_diff:
            from email.MIMEMultipart import MIMEMultipart
            self.data["wikidiff"] = None

        charset = str(self._charset)

        stream = self.template.generate(**self.data)
        # don't translate the e-mail stream
        t = deactivate()
        try:
            body = stream.render('text', encoding=charset)
        finally:
            reactivate(t)
#        self.env.log.debug('Email Contents: %s', body)
        public_cc = self.config.getbool('wiki-notification', 'use_public_cc')
        headers = {}
        headers['X-Mailer'] = 'Trac %s, by Edgewall Software' % __version__
        headers['X-Trac-Version'] = __version__
        headers['X-Trac-Project'] = self.env.project_name
        headers['X-URL'] = self.env.project_url
        headers['Precedence'] = 'bulk'
        headers['Auto-Submitted'] = 'auto-generated'
        headers['Subject'] = self.subject
        headers['From'] = (
            self.from_name, self.from_email) if self.from_name else self.from_email
        headers['Reply-To'] = self.replyto_email

        def build_addresses(rcpts):
            """Format and remove invalid addresses"""
            return filter(lambda x: x,
                          [self.get_smtp_address(addr) for addr in rcpts])

        blocked_addresses = []

        def remove_dup(rcpts, all):
            """Remove duplicates"""
            tmp = []
            for rcpt in rcpts:
                if rcpt in self.banned_addresses:
                    self.env.log.debug("Banned Address: %s", rcpt)
                    blocked_addresses.append(rcpt)
                elif not rcpt in all:
                    tmp.append(rcpt)
                    all.append(rcpt)
            return (tmp, all)

        toaddrs = build_addresses(torcpts)
        ccaddrs = build_addresses(ccrcpts)
        accaddrs = build_addresses(self.config.getlist(
            'wiki-notification', 'smtp_always_cc', []))
        bccaddrs = build_addresses(self.config.getlist(
            'wiki-notification', 'smtp_always_bcc', []))

        recipients = []
        (toaddrs, recipients) = remove_dup(toaddrs, recipients)
        (ccaddrs, recipients) = remove_dup(ccaddrs, recipients)
        (accaddrs, recipients) = remove_dup(accaddrs, recipients)
        (bccaddrs, recipients) = remove_dup(bccaddrs, recipients)

        self.env.log.debug("Not notifying the following addresses: %s",
                           ', '.join(blocked_addresses))

        # if there is not valid recipient, leave immediately
        if len(recipients) < 1:
            self.env.log.info('no recipient for a wiki notification')
            return

        dest = self.change_author or 'anonymous'
        headers['X-Trac-Wiki-URL'] = self.data['link']

        pcc = accaddrs
        if public_cc:
            pcc += ccaddrs
            if toaddrs:
                headers['To'] = ', '.join(toaddrs)
        if pcc:
            headers['Cc'] = ', '.join(pcc)
        headers['Date'] = formatdate()
        if attach_diff:
            # With MIMEMultipart the charset has to be set before any parts
            # are added.
            msg = MIMEMultipart('mixed', None, [], charset=charset)
            msg.preamble = 'This is a multi-part message in MIME format.'

            # The text Message
            mail = MIMEText(body, 'plain', charset)
            mail.add_header('Content-Disposition', 'inline',
                            filename="message.txt")
            msg.attach(mail)
            try:
                # The Diff Attachment
                attach = MIMEText(self.wikidiff.encode(
                    'utf-8'), 'x-patch', charset)
                attach.add_header('Content-Disposition', 'inline',
                                  filename=self.page.name + '.diff')
                msg.attach(attach)
            except AttributeError:
                # We don't have a wikidiff to attach
                pass
        else:
            msg = MIMEText(body, 'plain', charset)

        self.add_headers(msg, headers)
        self.add_headers(msg, mime_headers)
        self.env.log.info("Sending notification to %s" % (recipients,))
        try:
            NotificationSystem(self.env).send_email(
                self.from_email, recipients, msg.as_string())
        except Exception, err:
            self.env.log.debug('Notification could not be sent: %r', err)
Exemplo n.º 17
0
    def send(self, torcpts, ccrcpts, mime_headers={}):
        from email.MIMEText import MIMEText
        from email.Utils import formatdate
        stream = self.template.generate(**self.data)
        # don't translate the e-mail stream
        t = deactivate()
        try:
            body = stream.render('text', encoding='utf-8')
        finally:
            reactivate(t)
        public_cc = self.config.getbool('notification', 'use_public_cc')
        headers = {
            'X-Mailer': 'Trac %s, by Edgewall Software' % __version__,
            'X-Trac-Version': __version__,
            'X-Trac-Project': self.env.project_name,
            'X-URL': self.env.project_url,
            'Precedence': 'bulk',
            'Auto-Submitted': 'auto-generated',
            'Subject': self.subject,
            'From': (self.from_name, self.from_email) if self.from_name
                                                      else self.from_email,
            'Reply-To': self.replyto_email
        }

        def build_addresses(rcpts):
            """Format and remove invalid addresses"""
            return filter(lambda x: x,
                          [self.get_smtp_address(addr) for addr in rcpts])

        def remove_dup(rcpts, all):
            """Remove duplicates"""
            tmp = []
            for rcpt in rcpts:
                if not rcpt in all:
                    tmp.append(rcpt)
                    all.append(rcpt)
            return tmp, all

        notify_sys = NotificationSystem(self.env)
        toaddrs = build_addresses(torcpts)
        ccaddrs = build_addresses(ccrcpts)
        accaddrs = notify_sys.smtp_always_cc_list
        bccaddrs = notify_sys.smtp_always_bcc_list

        recipients = []
        toaddrs, recipients = remove_dup(toaddrs, recipients)
        ccaddrs, recipients = remove_dup(ccaddrs, recipients)
        accaddrs, recipients = remove_dup(accaddrs, recipients)
        bccaddrs, recipients = remove_dup(bccaddrs, recipients)

        # if there is not valid recipient, leave immediately
        if len(recipients) < 1:
            self.env.log.info("no recipient for a ticket notification")
            return

        pcc = accaddrs
        if public_cc:
            pcc += ccaddrs
            if toaddrs:
                headers['To'] = ', '.join(toaddrs)
        if pcc:
            headers['Cc'] = ', '.join(pcc)
        headers['Date'] = formatdate()
        msg = MIMEText(body, 'plain')
        # Message class computes the wrong type from MIMEText constructor,
        # which does not take a Charset object as initializer. Reset the
        # encoding type to force a new, valid evaluation
        del msg['Content-Transfer-Encoding']
        msg.set_charset(self._charset)
        self.add_headers(msg, headers)
        self.add_headers(msg, mime_headers)
        NotificationSystem(self.env).send_email(self.from_email, recipients,
                                                msg.as_string())
Exemplo n.º 18
0
    def send(self, torcpts, ccrcpts, mime_headers={}):
        from email.MIMEText import MIMEText
        from email.Utils import formatdate
        stream = self.template.generate(**self.data)
        # don't translate the e-mail stream
        t = deactivate()
        try:
            body = stream.render('text', encoding='utf-8')
        finally:
            reactivate(t)
        public_cc = self.config.getbool('notification', 'use_public_cc')
        headers = {}
        headers['X-Mailer'] = 'Trac %s, by Edgewall Software' % __version__
        headers['X-Trac-Version'] =  __version__
        headers['X-Trac-Project'] =  self.env.project_name
        headers['X-URL'] = self.env.project_url
        headers['Precedence'] = 'bulk'
        headers['Auto-Submitted'] = 'auto-generated'
        headers['Subject'] = self.subject
        headers['From'] = (self.from_name, self.from_email) if self.from_name \
                          else self.from_email
        headers['Reply-To'] = self.replyto_email

        def build_addresses(rcpts):
            """Format and remove invalid addresses"""
            return filter(lambda x: x, \
                          [self.get_smtp_address(addr) for addr in rcpts])

        def remove_dup(rcpts, all):
            """Remove duplicates"""
            tmp = []
            for rcpt in rcpts:
                if not rcpt in all:
                    tmp.append(rcpt)
                    all.append(rcpt)
            return (tmp, all)

        toaddrs = build_addresses(torcpts)
        ccaddrs = build_addresses(ccrcpts)
        accparam = self.config.get('notification', 'smtp_always_cc')
        accaddrs = accparam and \
                   build_addresses(accparam.replace(',', ' ').split()) or []
        bccparam = self.config.get('notification', 'smtp_always_bcc')
        bccaddrs = bccparam and \
                   build_addresses(bccparam.replace(',', ' ').split()) or []

        recipients = []
        (toaddrs, recipients) = remove_dup(toaddrs, recipients)
        (ccaddrs, recipients) = remove_dup(ccaddrs, recipients)
        (accaddrs, recipients) = remove_dup(accaddrs, recipients)
        (bccaddrs, recipients) = remove_dup(bccaddrs, recipients)
        
        # if there is not valid recipient, leave immediately
        if len(recipients) < 1:
            self.env.log.info('no recipient for a ticket notification')
            return

        pcc = accaddrs
        if public_cc:
            pcc += ccaddrs
            if toaddrs:
                headers['To'] = ', '.join(toaddrs)
        if pcc:
            headers['Cc'] = ', '.join(pcc)
        headers['Date'] = formatdate()
        msg = MIMEText(body, 'plain')
        # Message class computes the wrong type from MIMEText constructor,
        # which does not take a Charset object as initializer. Reset the
        # encoding type to force a new, valid evaluation
        del msg['Content-Transfer-Encoding']
        msg.set_charset(self._charset)
        self.add_headers(msg, headers)
        self.add_headers(msg, mime_headers)
        NotificationSystem(self.env).send_email(self.from_email, recipients,
                                                msg.as_string())
Exemplo n.º 19
0
            texname = key + '.tex'
            texpath = os.path.join(self.cache_dir, texname)

            # Don't translate tex file
            t = deactivate()
            try:
                f = open(texpath, mode='w')
                self.template.generate(content=content).render(
                    encoding='utf-8', out=f)
                f.close()
            except Exception, e:
                reactivate(t)
                return self._show_err("Problem creating tex file: %s" % (e))
            finally:
                reactivate(t)

            os.chdir(self.cache_dir)
            args = [
                self.pdflatex_cmd,
                "-interaction=nonstopmode",
                texname,
            ]
            self.log.debug("Running command: %s", " ".join(args))
            failure, errmsg = self._launch("", *args)
            if failure:
                return self._show_err(errmsg)

            args = [
                self.gs_cmd,
                '-dSAFER',
Exemplo n.º 20
0
    def send(self, torcpts, ccrcpts, mime_headers={}):
        from email.MIMEText import MIMEText
        from email.Utils import formatdate

        attach_diff = self.config.getbool('wiki-notification', 'attach_diff')
        if attach_diff:
            from email.MIMEMultipart import MIMEMultipart
            self.data["wikidiff"] = None

        charset = str(self._charset)

        stream = self.template.generate(**self.data)
        # don't translate the e-mail stream
        t = deactivate()
        try:
            body = stream.render('text', encoding=charset)
        finally:
            reactivate(t)
#        self.env.log.debug('Email Contents: %s', body)
        public_cc = self.config.getbool('wiki-notification', 'use_public_cc')
        headers = {}
        headers['X-Mailer'] = 'Trac %s, by Edgewall Software' % __version__
        headers['X-Trac-Version'] = __version__
        headers['X-Trac-Project'] = self.env.project_name
        headers['X-URL'] = self.env.project_url
        headers['Precedence'] = 'bulk'
        headers['Auto-Submitted'] = 'auto-generated'
        headers['Subject'] = self.subject
        headers['From'] = (
            self.from_name,
            self.from_email) if self.from_name else self.from_email
        headers['Reply-To'] = self.replyto_email

        def build_addresses(rcpts):
            """Format and remove invalid addresses"""
            return filter(lambda x: x,
                          [self.get_smtp_address(addr) for addr in rcpts])

        blocked_addresses = []

        def remove_dup(rcpts, all):
            """Remove duplicates"""
            tmp = []
            for rcpt in rcpts:
                if rcpt in self.banned_addresses:
                    self.env.log.debug("Banned Address: %s", rcpt)
                    blocked_addresses.append(rcpt)
                elif not rcpt in all:
                    tmp.append(rcpt)
                    all.append(rcpt)
            return (tmp, all)

        toaddrs = build_addresses(torcpts)
        ccaddrs = build_addresses(ccrcpts)
        accaddrs = build_addresses(
            self.config.getlist('wiki-notification', 'smtp_always_cc', []))
        bccaddrs = build_addresses(
            self.config.getlist('wiki-notification', 'smtp_always_bcc', []))

        recipients = []
        (toaddrs, recipients) = remove_dup(toaddrs, recipients)
        (ccaddrs, recipients) = remove_dup(ccaddrs, recipients)
        (accaddrs, recipients) = remove_dup(accaddrs, recipients)
        (bccaddrs, recipients) = remove_dup(bccaddrs, recipients)

        self.env.log.debug("Not notifying the following addresses: %s",
                           ', '.join(blocked_addresses))

        # if there is not valid recipient, leave immediately
        if len(recipients) < 1:
            self.env.log.info('no recipient for a wiki notification')
            return

        dest = self.change_author or 'anonymous'
        headers['X-Trac-Wiki-URL'] = self.data['link']

        pcc = accaddrs
        if public_cc:
            pcc += ccaddrs
            if toaddrs:
                headers['To'] = ', '.join(toaddrs)
        if pcc:
            headers['Cc'] = ', '.join(pcc)
        headers['Date'] = formatdate()
        if attach_diff:
            # With MIMEMultipart the charset has to be set before any parts
            # are added.
            msg = MIMEMultipart('mixed', None, [], charset=charset)
            msg.preamble = 'This is a multi-part message in MIME format.'

            # The text Message
            mail = MIMEText(body, 'plain', charset)
            mail.add_header('Content-Disposition',
                            'inline',
                            filename="message.txt")
            msg.attach(mail)
            try:
                # The Diff Attachment
                attach = MIMEText(self.wikidiff.encode('utf-8'), 'x-patch',
                                  charset)
                attach.add_header('Content-Disposition',
                                  'inline',
                                  filename=self.page.name + '.diff')
                msg.attach(attach)
            except AttributeError:
                # We don't have a wikidiff to attach
                pass
        else:
            msg = MIMEText(body, 'plain', charset)

        self.add_headers(msg, headers)
        self.add_headers(msg, mime_headers)
        self.env.log.info("Sending notification to %s" % (recipients, ))
        try:
            NotificationSystem(self.env).send_email(self.from_email,
                                                    recipients,
                                                    msg.as_string())
        except Exception, err:
            self.env.log.debug('Notification could not be sent: %r', err)
Exemplo n.º 21
0
                return self._show_err(errmsg)

            texname = key + '.tex'
            texpath = os.path.join(self.cache_dir, texname)

            # Don't translate tex file
            t = deactivate()
            try:
                f = open(texpath, mode='w')
                self.template.generate(content=content).render(encoding='utf-8', out=f)
                f.close()
            except Exception, e:
                reactivate(t)
                return self._show_err("Problem creating tex file: %s" % (e))
            finally:
                reactivate(t)

            os.chdir(self.cache_dir)
            args = [
                self.pdflatex_cmd,
                "-interaction=nonstopmode",
                texname,
            ]
            self.log.debug("Running command: %s", " ".join(args))
            failure, errmsg = self._launch("", *args)
            if failure:
                return self._show_err(errmsg)

            args = [
                self.gs_cmd,
                '-dSAFER',