#!/bin/env python from BaseHTTPServer import BaseHTTPRequestHandler from BaseHTTPServer import HTTPServer, BaseHTTPRequestHandler from SocketServer import ThreadingMixIn import urlparse import urllib import cgi import threading import clt_nltk import nltk import locale import datetime class Handler(BaseHTTPRequestHandler): def do_GET(self): write_header(self) parsed_path = urlparse.urlparse(self.path) function = get_function(parsed_path.path) (data,callback) = get_data_callback(parsed_path.query) self.wfile.write(clt_nltk.handler(function,data,callback)) return def do_POST(self): write_header(self) form = cgi.FieldStorage( fp=self.rfile, headers=self.headers, environ={'REQUEST_METHOD':'POST', 'CONTENT_TYPE':self.headers['Content-Type'], }) function = get_function(self.path) (result,callback,data) = ('', '', '') if 'data' in form.keys(): data = form['data'].value if 'callback' in form.keys(): callback = form['callback'].value self.wfile.write(clt_nltk.handler(function,data,callback)) return class ThreadedHTTPServer(ThreadingMixIn, HTTPServer): """Handle requests in a separate thread.""" def get_function(url): path = [s for s in url.split('/') if s != ''] if len(path) > 0: return path[0] else: return url def get_data_callback(query): assocs = dict([p for p in [x.split('=') for x in query.split('&')] if len(p) == 2]) (data,callback) = ('','') if 'data' in assocs: data = urllib.unquote(assocs['data']) if 'callback' in assocs: callback = assocs['callback'] return (data,callback) def write_header(req): req.send_response(200) req.send_header("Content-type", "application/json;charset=utf-8") # req.send_header("Connection", "close") # req.send_header("Cache-Control", "must-revalidate, max-age:86400, s-maxage:86400") # req.send_header('Expires',get_expire_time()) req.send_header('Access-Control-Allow-Origin', '*') req.end_headers() def get_expire_time(): locale.setlocale(locale.LC_TIME, 'en_US') return datetime.datetime.utcnow().strftime('%a, %d %b %Y 23:59:59 GMT') if __name__ == '__main__': server = ThreadedHTTPServer(('localhost', 8011), Handler) print 'Reading nltk model(s)...' x = nltk.pos_tag([]) print 'Starting server, use to stop' server.serve_forever()