File: quality_agent_mailer.py

package info (click to toggle)
python-enthoughtbase 3.0.5-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 960 kB
  • ctags: 1,034
  • sloc: python: 6,104; makefile: 9; sh: 5
file content (119 lines) | stat: -rw-r--r-- 4,022 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#------------------------------------------------------------------------------
# Copyright (c) 2005, Enthought, Inc.
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in enthought/LICENSE.txt and may be redistributed only
# under the conditions described in the aforementioned license.  The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
# Thanks for using Enthought open source!
#
# Author: Enthought, Inc.
# Description: <Enthought logger package component>
#------------------------------------------------------------------------------

# Standard library imports.
import logging
import os

# Enthought library imports.
from enthought.util.home_directory import get_home_directory


# Setup a logger for this module.
logger = logging.getLogger(__name__)


def create_email_message(fromaddr, toaddrs, ccaddrs, subject, priority,
                         include_project=False, stack_trace="", comments=""):
    # format a message suitable to be sent to the Roundup bug tracker

    from email.MIMEMultipart import MIMEMultipart
    from email.MIMEText import MIMEText
    from email.MIMEBase import MIMEBase

    message = MIMEMultipart()
    message['Subject'] = "%s [priority=%s]" % (subject, priority)
    message['To'] = ', '.join(toaddrs)
    message['Cc'] = ', '.join(ccaddrs)
    message['From'] = fromaddr
    message.preamble = 'You will not see this in a MIME-aware mail reader.\n'
    message.epilogue = ' ' # To guarantee the message ends with a newline

    # First section is simple ASCII data ...
    m = []
    m.append("Bug Report")
    m.append("==============================")
    m.append("")

    if len(comments) > 0:
        m.append("Comments:")
        m.append("========")
        m.append(comments)
        m.append("")

    if len(stack_trace) > 0:
        m.append("Stack Trace:")
        m.append("===========")
        m.append(stack_trace)
        m.append("")

    msg = MIMEText('\n'.join(m))
    message.attach(msg)

    # Include the log file ...
    if True:
        try:
            log = os.path.join(get_home_directory(), 'envisage.log')
            f = open(log, 'r')
            entries = f.readlines()
            f.close()

            ctype = 'application/octet-stream'
            maintype, subtype = ctype.split('/', 1)
            msg = MIMEBase(maintype, subtype)

            msg = MIMEText(''.join(entries))
            msg.add_header('Content-Disposition', 'attachment', filename='logfile.txt')
            message.attach(msg)
        except:
            logger.exception('Failed to include log file with message')

    # Include the environment variables ...
    if True:
        """
        Transmit the user's environment settings as well.  Main purpose is to
        work out the user name to help with following up on bug reports and
        in future we should probably send less data.
        """
        try:
            entries = []
            for key, value in os.environ.iteritems():
                entries.append('%30s : %s\n' % (key, value))

            ctype = 'application/octet-stream'
            maintype, subtype = ctype.split('/', 1)
            msg = MIMEBase(maintype, subtype)

            msg = MIMEText(''.join(entries))
            msg.add_header('Content-Disposition', 'attachment', filename='environment.txt')
            message.attach(msg)

        except:
            logger.exception('Failed to include environment variables with message')


# FIXME: no project plugins exist for Envisage 3, yet, and this isn't the right
# way to do it, either. See the docstring of attachments.py.
#    # Attach the project if requested ...
#    if include_project:
#        from attachments import Attachments
#        try:
#            attachments = Attachments(message)
#            attachments.package_any_relevant_files()
#        except:
#            logger.exception('Failed to include workspace files with message')

    return message