cs_helpers.py was unused.
This commit is contained in:
parent
eb002f080f
commit
7455aff14d
|
@ -1,239 +0,0 @@
|
||||||
# -*- mode: python -*-
|
|
||||||
# cs_helpers.py - some helper functions for CapiSuite scripts
|
|
||||||
# -----------------------------------------------------------
|
|
||||||
# copyright : (C) 2002 by Gernot Hillier
|
|
||||||
# email : gernot@hillier.de
|
|
||||||
# version : $Revision: 1.20 $
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
# (at your option) any later version.
|
|
||||||
|
|
||||||
import os, commands
|
|
||||||
from capisuite.config import *
|
|
||||||
from capisuite.voice import sayNumber, getAudio
|
|
||||||
|
|
||||||
# Convert sff files to tiff files. This is placed in an extra function
|
|
||||||
# because the sfftobmp tool used for this conversion has changed its
|
|
||||||
# parameters recently.
|
|
||||||
sfftobmp_major_version = 3
|
|
||||||
if sfftobmp_major_version <= 2:
|
|
||||||
def sff2tif(infile, outfile):
|
|
||||||
__call('sff to tif', "sfftobmp", "-tif", infile, outfile)
|
|
||||||
else:
|
|
||||||
def sff2tif(infile, outfile):
|
|
||||||
__call('sff to tif', "sfftobmp", "-tif", infile, "-o", outfile)
|
|
||||||
|
|
||||||
# Note: readConfig is now imported from capisuite.config
|
|
||||||
|
|
||||||
# @brief escape a argument to include it savely in a shell command
|
|
||||||
#
|
|
||||||
# This is just a wrapper to commands.mkarg which strips the leading
|
|
||||||
# space which mkarg() adds.
|
|
||||||
#
|
|
||||||
# @return the escaped argument
|
|
||||||
def escape(arg):
|
|
||||||
arg = commands.mkarg(arg)
|
|
||||||
if arg[0] == ' ':
|
|
||||||
arg = arg[1:]
|
|
||||||
return arg
|
|
||||||
|
|
||||||
def getOption(config, user, option, default=None):
|
|
||||||
return config.getUser(user, option, default)
|
|
||||||
|
|
||||||
# Note: getAudio is now imported from capisuite.voice
|
|
||||||
# Note: uniqueName is now imported from capisuite.fileutils
|
|
||||||
def uniqueName(*args, **kwargs):
|
|
||||||
return capisuite.fileutils.uniqueName(*args, **kwargs)[1]
|
|
||||||
|
|
||||||
def __sendmail(mail_from, mail_to, msg):
|
|
||||||
import popen2, capisuite.core
|
|
||||||
|
|
||||||
r,w = popen2.popen2("{ /usr/sbin/sendmail -t -f %s } 2>&1" % escape(mail_from))
|
|
||||||
try:
|
|
||||||
w.write(msg.as_string())
|
|
||||||
except IOError: #Errno 32: Broken Pipe
|
|
||||||
capisuite.core.error("Error while calling sendmail. Not installed?\n")
|
|
||||||
return 0
|
|
||||||
w.close()
|
|
||||||
#ret = sendmail.wait()
|
|
||||||
text = r.read()
|
|
||||||
r.close()
|
|
||||||
if text:
|
|
||||||
capisuite.core.error("Error while calling sendmail")#, return code=%i" % ret)
|
|
||||||
capisuite.core.error(text)
|
|
||||||
return 0
|
|
||||||
capisuite.core.log("sendmail finished successful",3)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
def __sendmail(fromaddr, toaddr, msg):
|
|
||||||
import smtplib, capisuite.core
|
|
||||||
smtpserver, port = 'localhost', 25
|
|
||||||
server = smtplib.SMTP(smtpserver, port)
|
|
||||||
server.sendmail(fromaddr, (toaddr), msg.as_string())
|
|
||||||
server.quit()
|
|
||||||
capisuite.core.log("mail sent successfully",3)
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
def __call(msg, cmd, *args):
|
|
||||||
"""
|
|
||||||
outfile MUST be last parameter!
|
|
||||||
"""
|
|
||||||
# todo: think about using commands.getstatusoutput() here
|
|
||||||
ret = os.spawnlp(os.P_WAIT, cmd, cmd, *(args))
|
|
||||||
if ret or not os.access(args[-1], os.F_OK):
|
|
||||||
raise ConvertionError("Error while converting %s. "
|
|
||||||
"File damaged or %s not installed?" %(msg, cmd))
|
|
||||||
|
|
||||||
def cff2ps(infile, outfile):
|
|
||||||
__call("cff to ps", "jpeg2ps", "-m", infile , "-o", outfile)
|
|
||||||
|
|
||||||
def la2wav(infile, outfile):
|
|
||||||
__call('la to wav', "sox", infile, '-w', outfile)
|
|
||||||
|
|
||||||
class ConvertionError(Exception): pass
|
|
||||||
|
|
||||||
# @brief send email with text and attachment of type sff or la converted to pdf/wav
|
|
||||||
#
|
|
||||||
# This function creates a multipart MIME-message containing a text/plain
|
|
||||||
# part with a string and one attachment of type application/pdf or audio/wav.
|
|
||||||
#
|
|
||||||
# The given attachment is automatically converted from Structured Fax File
|
|
||||||
# (.sff) or inversed A-Law (.la) to the well known PDF or WAV format.
|
|
||||||
#
|
|
||||||
# @param mail_from the From: address for the mail
|
|
||||||
# @param mail_to the To: address for the mail
|
|
||||||
# @param mail_subject the subject of the mail
|
|
||||||
# @param mail_type containing either "sff" or "la"
|
|
||||||
# @param text a string containing the text of the first part of the mail
|
|
||||||
# @param attachment name of the file to send as attachment
|
|
||||||
def sendMIMEMail(mail_from, mail_to, mail_subject, mail_type,
|
|
||||||
text, attachment):
|
|
||||||
import email.MIMEBase, email.MIMEText, email.MIMEAudio, email.Encoders
|
|
||||||
import encodings.ascii, os
|
|
||||||
|
|
||||||
msg = email.MIMEBase.MIMEBase("multipart","mixed")
|
|
||||||
msg['Subject']=mail_subject
|
|
||||||
msg['From']=mail_from
|
|
||||||
msg['To']=mail_to
|
|
||||||
|
|
||||||
msg.preamble = 'This is a Multipart-MIME-message. Please use a capable mailer.\n'
|
|
||||||
msg.epilogue = '' # To guarantee the message ends with a newline
|
|
||||||
|
|
||||||
basepath = os.path.splitext(attachment)[0]
|
|
||||||
basename = os.path.basename(basepath)
|
|
||||||
try:
|
|
||||||
if mail_type == "sff": # normal fax file
|
|
||||||
# convert sff -> tif
|
|
||||||
sff2tif(attachment, "%s.tif" % basepath)
|
|
||||||
# convert tif -> ps -> pdf
|
|
||||||
cmd = "tiff2ps -h11 -H12 -L.5 -w8.5 -a %s | ps2pdf -sPAPERSIZE=a4 - -" % escape("%s.tif" %basepath)
|
|
||||||
try:
|
|
||||||
status, content = commands.getstatusoutput(cmd)
|
|
||||||
finally:
|
|
||||||
os.unlink("%s.tif" % basepath)
|
|
||||||
if status:
|
|
||||||
raise ConvertionError("Error while calling tiff2ps or ps2pdf. "
|
|
||||||
"Not installed?")
|
|
||||||
filepart = email.MIMEBase.MIMEBase("application","pdf",
|
|
||||||
name = "%s.pdf" % basename)
|
|
||||||
filepart.add_header('Content-Disposition','attachment',
|
|
||||||
filename = "%s.pdf" % basename)
|
|
||||||
filepart.set_payload(content)
|
|
||||||
email.Encoders.encode_base64(filepart)
|
|
||||||
elif mail_type == "cff": # color fax file
|
|
||||||
# convert cff -> ps
|
|
||||||
cff2ps(attachment, "%s.ps" % basepath)
|
|
||||||
# convert ps -> pdf
|
|
||||||
cmd = "ps2pdf -sPAPERSIZE=a4 %s -" % escape("%s.ps" % basepath)
|
|
||||||
try:
|
|
||||||
status, content = commands.getstatusoutput(cmd)
|
|
||||||
finally:
|
|
||||||
os.unlink("%s.ps" % basepath)
|
|
||||||
if status:
|
|
||||||
raise ConvertionError("Error while calling ps2pdf. "
|
|
||||||
"Not installed?")
|
|
||||||
filepart = email.MIMEBase.MIMEBase("application", "pdf",
|
|
||||||
name = "%s.pdf" % basename)
|
|
||||||
filepart.add_header('Content-Disposition', 'attachment',
|
|
||||||
filename="%s.pdf" % basename)
|
|
||||||
filepart.set_payload(content)
|
|
||||||
email.Encoders.encode_base64(filepart)
|
|
||||||
elif mail_type == "la": # voice file
|
|
||||||
# la -> wav
|
|
||||||
la2wav(attachment, "%s.wav" % basepath)
|
|
||||||
content = open("%s.wav" % basepath).read()
|
|
||||||
os.unlink("%s.wav" % basepath)
|
|
||||||
filepart = email.MIMEAudio.MIMEAudio(content, "x-wav",
|
|
||||||
email.Encoders.encode_base64,
|
|
||||||
name = "%s.wav" % basename)
|
|
||||||
filepart.add_header('Content-Disposition', 'attachment',
|
|
||||||
filename = "%s.wav" % basename)
|
|
||||||
textpart = email.MIMEText.MIMEText(text)
|
|
||||||
msg.attach(textpart)
|
|
||||||
msg.attach(filepart)
|
|
||||||
except ConvertionError, errormessage:
|
|
||||||
text = [text, ''
|
|
||||||
'The following error occured while converting file:',
|
|
||||||
str(errormessage), ''
|
|
||||||
'Please talk to your friendly administrator.', ''
|
|
||||||
]
|
|
||||||
# todo: add encoding (at least as example)
|
|
||||||
# todo: use latin-1 as std-encoding instead of ascii
|
|
||||||
textpart = email.MIMEText.MIMEText('\n'.join(text))
|
|
||||||
msg.attach(textpart)
|
|
||||||
|
|
||||||
return __sendmail(mail_from, mail_to, msg)
|
|
||||||
|
|
||||||
|
|
||||||
# @brief send a simple text email
|
|
||||||
#
|
|
||||||
# This function creates a simple mail
|
|
||||||
#
|
|
||||||
# @param mail_from the From: address for the mail
|
|
||||||
# @param mail_to the To: address for the mail
|
|
||||||
# @param mail_subject the subject of the mail
|
|
||||||
# @param text a string containing the text of the first part of the mail
|
|
||||||
#
|
|
||||||
# @result returns true on success
|
|
||||||
def sendSimpleMail(mail_from, mail_to, mail_subject, text):
|
|
||||||
#import email.Encoders, email.MIMEText, encodings.ascii
|
|
||||||
|
|
||||||
# Create a text/plain message. Don't forget to change charset here
|
|
||||||
# if you want to use non-us-ascii characters in the mail!
|
|
||||||
# todo: add encoding anyway (at least as example)
|
|
||||||
# todo: use latin-1 as std-encoding instead of ascii
|
|
||||||
import email.MIMEText
|
|
||||||
msg = email.MIMEText.MIMEText(text)
|
|
||||||
msg['Subject'] = mail_subject
|
|
||||||
msg['From'] = mail_from
|
|
||||||
msg['To'] = mail_to
|
|
||||||
return __sendmail(mail_from, mail_to, msg)
|
|
||||||
|
|
||||||
|
|
||||||
# @brief write description file for received fax or voice
|
|
||||||
#
|
|
||||||
# This function writes an INI-style description file for the given data file
|
|
||||||
# which can later on be read by a ConfigParser instance. The data file name
|
|
||||||
# is used, the extension stripped and replaced by .txt
|
|
||||||
#
|
|
||||||
# @param filename the data filename (with extension!)
|
|
||||||
# @param content the content as string
|
|
||||||
def writeDescription(filename, content):
|
|
||||||
from types import StringType
|
|
||||||
assert isinstance(content, StringType)
|
|
||||||
import capisuite.fileutils
|
|
||||||
descrname = capisuite.fileutils.controlname(filename)
|
|
||||||
descr = open(descrname, "w")
|
|
||||||
print >> descr, "# Description file for", filename
|
|
||||||
print >> descr, "# This if for internal use of CapiSuite."
|
|
||||||
print >> descr, "# Only change if you know what you do!"
|
|
||||||
print >> descr, "[GLOBAL]"
|
|
||||||
print >> descr, 'filename="%s"' % filename
|
|
||||||
print >> descr, content
|
|
||||||
descr.close()
|
|
||||||
|
|
||||||
# sayNumber is now imported from capisuite.voice
|
|
||||||
|
|
Loading…
Reference in New Issue