File: quality_agent_mailer.py

package info (click to toggle)
python-apptools 5.3.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,552 kB
  • sloc: python: 9,868; makefile: 80
file content (115 lines) | stat: -rw-r--r-- 3,432 bytes parent folder | download
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
# (C) Copyright 2005-2025 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in 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!

# Standard library imports.
import logging
import os

# Enthought library imports.
from traits.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 Exception:
            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.items():
                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 Exception:
            logger.exception(
                "Failed to include environment variables with message"
            )

    return message