[cig-commits] r13323 - in cs: . trunk
leif at geodynamics.org
leif at geodynamics.org
Mon Nov 17 16:51:59 PST 2008
Author: leif
Date: 2008-11-17 16:51:58 -0800 (Mon, 17 Nov 2008)
New Revision: 13323
Added:
cs/trunk/
cs/trunk/upload-papers.py
Log:
Wrote 'upload-papers.py'. This is a drop-in replacement for
'regform.cgi'. Unlike the Perl script, this script supports file
uploads.
Added: cs/trunk/upload-papers.py
===================================================================
--- cs/trunk/upload-papers.py (rev 0)
+++ cs/trunk/upload-papers.py 2008-11-18 00:51:58 UTC (rev 13323)
@@ -0,0 +1,143 @@
+#!/usr/bin/env python
+
+import cgi
+import cgitb; cgitb.enable()
+import os, sys
+import mimetypes
+
+def sendMail(from_email, recipient_list, subject, message, attachments, fail_silently=False):
+ DNS_NAME = "crust.caltech.edu"
+ from email import Encoders
+ from email.MIMEBase import MIMEBase
+ from email.MIMEText import MIMEText
+ from email.MIMEMultipart import MIMEMultipart
+ from email.Utils import formatdate
+ import smtplib
+ import time
+ import random
+
+ subject = subject
+ auth_user = None
+ auth_password = None
+
+ try:
+ server = smtplib.SMTP("localhost", 25)
+ if auth_user and auth_password:
+ server.login(auth_user, auth_password)
+ except:
+ if fail_silently:
+ return
+ raise
+
+ msg = MIMEMultipart()
+ msg['Subject'] = subject
+ msg['From'] = from_email
+ msg['To'] = ', '.join(recipient_list)
+ msg['Date'] = formatdate()
+ msg['Message-ID'] = "<%d.%s@%s>" % (time.time(), str(random.getrandbits(64)), DNS_NAME)
+
+ msg.attach(MIMEText(message, 'plain', "utf-8"))
+ for attachment in attachments:
+ part = MIMEBase(*attachment['content-type'].split('/', 1))
+ part.set_payload(attachment['content'])
+ Encoders.encode_base64(part)
+ part.add_header('Content-Disposition', 'attachment', filename=attachment['filename'])
+ msg.attach(part)
+
+ try:
+ server.sendmail(from_email, recipient_list, msg.as_string())
+ except:
+ if not fail_silently:
+ raise
+
+ try:
+ server.quit()
+ except:
+ if fail_silently:
+ return
+ raise
+
+ return
+
+
+HTML_TEMPLATE = """<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html><head><title>File Upload</title>
+<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
+</head><body><h1>File Upload</h1>
+<form action="%(SCRIPT_NAME)s" method="POST" enctype="multipart/form-data">
+File name: <input name="file_1" type="file"><br>
+File name: <input name="file_2" type="file"><br>
+File name: <input name="file_3" type="file"><br>
+<input name="submit" type="submit" value="Upload">
+</form>
+</body>
+</html>"""
+
+def printForm():
+ print "content-type: text/html\n"
+ print HTML_TEMPLATE % {'SCRIPT_NAME':os.environ['SCRIPT_NAME']}
+
+
+def processForm():
+
+ form = cgi.FieldStorage()
+
+ attachments = []
+
+ for formField in form.keys():
+ fileitem = form[formField]
+ if fileitem.filename:
+ attachment = {}
+ ctype, encoding = mimetypes.guess_type(fileitem.filename)
+ if ctype is None:
+ ctype = "application/ocet-stream"
+ attachment['content-type'] = ctype
+ attachment['filename'] = fileitem.filename
+ attachment['content'] = fileitem.file.read()
+ attachments.append(attachment)
+
+ recipient_list = form['submit_to'].value.split(',')
+ from_email = form['submit_by'].value
+ subject = form['form_id'].value
+
+ ok_url = form['ok_url'].value
+ not_ok_url = form['not_ok_url'].value
+
+ required = form['required'].value.split(',')
+ for formField in required:
+ if not (form.has_key(formField) and
+ (form[formField].filename or
+ len(form[formField].value.strip()))):
+ print "Location: http://www.geodynamics.org%s\n\n" % not_ok_url
+ return
+
+ # Compose message.
+ message = ""
+ data_order = form['data_order'].value.split(',')
+ for formField in data_order:
+ try:
+ item = form[formField]
+ except KeyError:
+ continue
+ if item.filename:
+ message += "%s: %s [attached]\n" % (formField, item.filename)
+ else:
+ message += "%s: %s\n" % (formField, item.value)
+
+ sendMail(from_email, recipient_list,
+ subject, message,
+ attachments)
+
+ print "Location: http://www.geodynamics.org%s\n\n" % ok_url
+
+ return
+
+
+if os.environ['REQUEST_METHOD'] == "POST":
+ processForm()
+
+ #print "content-type: text/html\n"
+ #print '<html><head><title>File Upload</title></head><body><p>Thank you for your submission.</p></body></html>'
+
+else:
+ printForm()
Property changes on: cs/trunk/upload-papers.py
___________________________________________________________________
Name: svn:executable
+
More information about the CIG-COMMITS
mailing list