#!/usr/bin/python
import BaseHTTPServer
import SocketServer
import base64
import os
import time
class PageFeederRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_404(self):
self.send_response(404, "Not Found")
self.end_headers()
self.wfile.write("%s is bogus" % self.path)
def do_GET(self):
if self.path == "/next":
self.send_response(200, "OK")
self.end_headers()
self.wfile.write(self.next_url())
return
self.do_404()
def do_POST(self):
# print "PATH:", self.path
if self.path == "/push_url":
return self.do_POST_push_url()
self.do_404()
def next_url(self):
if not self.server.urls:
return "javascript:alert('nothing left')"
return self.server.urls.pop(0)
# test with:
# echo http://www.thok.org/ | curl -d@- http://localhost:3382/url_save_all
# curl -H'url: http://www.thok.org/bloggery' -d http://localhost:3382/push_url
# curl http://localhost:3383/next
def do_POST_push_url(self):
# get it from the content, or a header?
newurl = self.headers.getheader("url")
# later, maybe, get the description
self.send_response(200, "OK")
self.end_headers()
self.server.urls.append(newurl)
def log_request(self, code=None, size=None):
# this is just to make the default per-requst logs shut up
pass
# the original just uses list append/pop(0).
# now, persist it.
class PersistList:
def __init__(self, path):
self.path = path
if not os.path.isdir(self.path):
os.mkdir(self.path)
def pop(self, n):
fetch = os.listdir(self.path)
fetch.sort()
retname = fetch.pop(n)
retpath = os.path.join(self.path, retname)
retval = open(retpath,"r").read()
os.unlink(retpath)
return retval
def append(self, v):
open(os.path.join(self.path, 'PL%s' % time.time()), "w").write(v)
def __nonzero__(self):
# we don't actually do any filtering...
return len(os.listdir(self.path)) > 0
class ThreadingHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
def setup_feed(self):
#self.urls = []
self.urls = PersistList(os.path.expanduser("~/.page_feeder_stashdir"))
import sys,os
if __name__ == "__main__":
server = ThreadingHTTPServer(("localhost", 3383), PageFeederRequestHandler)
server.setup_feed()
server.serve_forever()