#!/usr/bin/env python
#############################################################################
##
# This file is part of Taurus
##
# http://taurus-scada.org
##
# Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
##
# Taurus is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
##
# Taurus is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
##
# You should have received a copy of the GNU Lesser General Public License
# along with Taurus. If not, see <http://www.gnu.org/licenses/>.
##
#############################################################################
"""This module provides a panel to display taurus messages"""
__all__ = ["ClipboardReportHandler", "SMTPReportHandler"]
__docformat__ = 'restructuredtext'
from taurus.core.util.report import TaurusMessageReportHandler
from taurus.external.qt import Qt
from taurus.qt.qtgui.util.ui import UILoadable
[docs]class ClipboardReportHandler(TaurusMessageReportHandler):
"""Report a message by copying it to the clipboard"""
Label = "Copy to Clipboard"
[docs] def report(self, message):
app = Qt.QApplication.instance()
clipboard = app.clipboard()
clipboard.setText(message)
Qt.QMessageBox.information(None, "Done!",
"Message Copied to clipboard")
[docs]@UILoadable(with_ui='ui')
class SendMailDialog(Qt.QDialog):
def __init__(self, parent=None):
Qt.QDialog.__init__(self, parent)
self.loadUi(filename="SendMailForm.ui")
self.ui.buttonBox.accepted.connect(self.accept)
self.ui.buttonBox.rejected.connect(self.reject)
self.ui.editMessage.setFont(Qt.QFont("Monospace"))
[docs] def setFrom(self, efrom):
self.ui.lineEditFrom.setText(efrom)
[docs] def setTo(self, eto):
self.ui.editTo.setText(eto)
[docs] def setSubject(self, subject):
self.ui.editSubject.setText(subject)
[docs] def setMessage(self, message):
self.ui.editMessage.setPlainText(message)
[docs] def getFrom(self):
return str(self.ui.editFrom.text())
[docs] def getTo(self):
return str(self.ui.editTo.text())
[docs] def getSubject(self):
return str(self.ui.editSubject.text())
[docs] def getMessage(self):
return str(self.ui.editMessage.toPlainText())
[docs] def getMailInfo(self):
return self.getFrom(), self.getTo(), self.getSubject(), \
self.getMessage()
[docs]class SMTPReportHandler(TaurusMessageReportHandler):
"""Report a message by sending an email"""
Label = "Send email"
[docs] def report(self, message):
app = Qt.QApplication.instance()
subject = "Error in " + app.applicationName()
dialog = self.createDialog(subject=subject, message=message)
if not dialog.exec_():
return
mail_info = dialog.getMailInfo()
try:
self.sendMail(*mail_info)
Qt.QMessageBox.information(None, "Done!",
"Email has been sent!")
except:
import sys
import traceback
einfo = sys.exc_info()[:2]
msg = "".join(traceback.format_exception_only(*einfo))
Qt.QMessageBox.warning(None, "Failed to send email",
"Failed to send email. Reason:\n\n" + msg)
[docs] def sendMail(self, efrom, eto, subject, message):
import smtplib
import email.mime.text
msg = email.mime.text.MIMEText(message)
msg['From'] = efrom
msg['To'] = eto
msg['Subject'] = subject
s = smtplib.SMTP('localhost')
s.sendmail(efrom, eto, msg.as_string())
s.quit()
[docs] def getDialogClass(self):
return SendMailDialog
[docs] def createDialog(self, efrom=None, eto=None, subject=None, message=None):
dialog = self.getDialogClass()()
dialog.setWindowTitle("Compose message")
if efrom is not None:
dialog.setFrom(efrom)
if eto is not None:
dialog.setFrom(eto)
if subject is not None:
dialog.setSubject(subject)
if message is not None:
dialog.setMessage(message)
return dialog
[docs]def main():
app = Qt.QApplication([])
w = SendMailDialog()
w.exec_()
if __name__ == "__main__":
main()