#!/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()