[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