#!/usr/bin/python """Save pasted text from my iPhone to files.""" import BaseHTTPServer import cgi import os import sha def run(): BaseHTTPServer.test(PasteSaver, BaseHTTPServer.HTTPServer) class PasteSaver(BaseHTTPServer.BaseHTTPRequestHandler): def do_GET(self, saved=None): self.send_response(200) self.send_header("Content-type", "text/html; charset=utf-8") self.end_headers() saved_txt = '

Saved as %s.

' % saved if saved is not None else '' self.wfile.write("""paste saver %s
""" % saved_txt) self.wfile.close() def do_POST(self): # You would think that knowing when the HTTP request ends # would be part of the functionality provided by # BaseHTTPServer or BaseHTTPRequestHandler, but no. length = self.headers.getheader('content-length') if length: text = self.rfile.read(int(length)) else: text = self.rfile.read() self.do_GET(save(cgi.parse_qs(text).get('paste', [''])[0])) def save(text): fname = sha.sha(text).hexdigest() + '.pasted.txt' tmpfname = '.%s.new' % fname with open(tmpfname, 'w') as fo: fo.write(text) fo.flush() os.fsync(fo) os.rename(tmpfname, fname) return fname if __name__ == "__main__": run()