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