#!/usr/bin/env python

# Jacob Joseph
# 10 Feb 2010

# A simple web server to provide the list of sequence identifiers in a
# hierarchical cluster

from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from JJcluster import cluster_sql
from DurandDB import seqq

class cluster_handler(BaseHTTPRequestHandler):

    def query_db(self, cr_id, cluster_id, set_id_filter=None):
        csql = cluster_sql.hcluster(cluster_run_id=cr_id, cacheq=False)
        sq = seqq.seqq()

        leaves = csql.get_leaves( cluster_id, set_id_filter)

        if len(leaves) == 0:
            return None

        # fetch the identifier in fa_descr
        #leaves = [ sq.fetch_fa_descr(leaf) for leaf in leaves]

        # fetch primary accession
        leaves = [ sq.fetch_seq_acc(leaf) for leaf in leaves]
        return leaves
    
    def do_GET(self):

        patharr = self.path.strip('/').split('/')
        print self.path, patharr
        if len(patharr) == 2:
            cr_id=int(patharr[0])
            cluster_id = int(patharr[1])
            set_id_filter = None
        #elif len(patharr) == 3:
        #    cr_id = int(patharr[0])
        #    cluster_id = int(patharr[1])
        #    set_id_filter = int( patharr[2])
        else:
            self.send_error(404,"Malformed request: %s" % self.path)
            return

        leaves = self.query_db(cr_id, cluster_id, set_id_filter)

        if leaves is None:
            self.send_error(404,"No leaves: %s" % self.path)
            return

        self.send_response(200)
        self.send_header('Content-type', 'text/plain')
        self.end_headers()

        print leaves
        
        for leaf in leaves:
            self.wfile.write("%s\n" % leaf)

        return

if __name__ == "__main__":
    try:
        server = HTTPServer(('',8001), cluster_handler)
        print "Serving"
        server.serve_forever()
    except KeyboardInterrupt:
        print "keyboard interrupt.  Shutting down"
        server.socket.close()


    
