#!c:\Python27\python.exe -u

import cgitb; cgitb.enable()
import os, cgi, random,re, webbrowser, time,codecs, zipfile,sys, base64, zlib, bleach
from StringIO import StringIO
form = cgi.FieldStorage()
params = {}
name=""

##name = form['name']
##
##print "Content-type: text/html\n\n";
##print form, name
mainLink = open('mainLink.txt','r').read()


try:
    for key in form.keys():
        params[ key ] = form[ key ].value
    for string in params['name'].splitlines():
        name += bleach.clean(string).replace("DECLARE","").replace("CAST","").replace("EXEC","")
except KeyError:
    print "Content-type: text/html\n\n";
    result = open("result.html","r").read()
    print result.replace("INSERT PIC HERE","You didn't enter anything")

    
splitta = name.lower().split("!")
if splitta[0]=="gene":
    species = splitta[1]
    ident = splitta[2]
    if species not in "crecmenosehusynathhvumtrptrosagmatspntavvislycsimdoppafecoppcsmogersspotacmebdincacpapmac51esiehupha":
        index = open("F:/planet2/%s/%s.html" % (species, ident),"r").read()
        print "Content-type: text/html\n\n";
        print index
    else:
        a = open("F:/planet2/%s/%s.txt" % (species.replace("smo","smo"), ident),"r").readlines()
        text,pic,network,module,geneTabl,GOTabl = "","","","","",""
        try:
            if a[0] !="\n":
                text = zlib.decompress(base64.b64decode(a[0]))  #1) table
        except:
            text = ""
        try:
            if a[1] !="\n":
                pic = zlib.decompress(base64.b64decode(a[1]))   #1) table
        except:
            pic = ""
        try:
            if a[2] !="\n":
                network =  zlib.decompress(base64.b64decode(a[2]))
        except:
            network = ""
        try:
            if a[5] !="\n":
                module =  zlib.decompress(base64.b64decode(a[5]))
        except:
            module = ""
        try:
            if a[6] !="\n":
                geneTabl =  zlib.decompress(base64.b64decode(a[6]))
        except:
            geneTabl = ""
        try:
            if a[7] !="\n":
                GOTabl =  zlib.decompress(base64.b64decode(a[7]))
        except:
            GOTabl = ""

        result = open("result.html","r").read()
        print "Content-type: text/html\n\n";
        forPrint = result.replace("INSERT PIC HERE",text+pic+network+geneTabl+GOTabl+module)
        forPrint = forPrint.replace("aranet.mpimp-golm.mpg.de",mainLink)
        print forPrint
      

elif splitta[0]=="fam":
    species = "ELA"
    ident = splitta[2]
    try:
        a = open("F:/planet2/%s/%s.txt" % (species, ident),"r").readlines()
        if a[0] !="\n":
            text = zlib.decompress(base64.b64decode(a[0]))  #1) table    
        if a[1] !="\n":
            network = zlib.decompress(base64.b64decode(a[1]))   #1) table
            result = open("result.html","r").read()
            print "Content-type: text/html\n\n";
            forPrint = result.replace("INSERT PIC HERE",text+network).replace("aranet.mpimp-golm.mpg.de",mainLink)
            print forPrint
    except:
        result = open("result.html","r").read().replace("aranet.mpimp-golm.mpg.de",mainLink)
        print "Content-type: text/html\n\n";
        forPrint = result.replace("INSERT PIC HERE","The FamNet database contains labels based on Pfam database and PLAZA ORTHO sub-families. The label you have selected is not part of the database because (i) you have selected a HOM label, or a Pfam label that is not found in current version of the database.").replace("aranet.mpimp-golm.mpg.de",mainLink)
        print forPrint
		
elif splitta[0]=="nc":
    result = open("result.html","r").read().replace("aranet.mpimp-golm.mpg.de",mainLink)
    print "Content-type: text/html\n\n";
    query = splitta[1]+"!"+splitta[2]
    try:
        a = open("F:/planet2/netComparer/%s" % query,"r").read().replace("aranet.mpimp-golm.mpg.de",mainLink)
        print result.replace("INSERT PIC HERE",a)
    except:
        result = open("result.html","r").read().replace("aranet.mpimp-golm.mpg.de",mainLink)
        print result.replace("INSERT PIC HERE","The element you have specified is not in database.")

elif splitta[0]=="ens":
    result = open("result.html","r").read().replace("aranet.mpimp-golm.mpg.de",mainLink)
    print "Content-type: text/html\n\n";
    if splitta[1][:2]=="go":

        for line in open("GO.pred","r"):
            splitx = line.rstrip().split("\t")
##            if splitta[0]==splitta[1]:
##                a = open("F:/planet2/ensembleNet/%s" % splitta[1][:9],"r").read()
            if splitta[1]==splitx[0].lower():
                a = zlib.decompress(base64.b64decode(splitx[1]))
                print result.replace("INSERT PIC HERE",a).replace("aranet.mpimp-golm.mpg.de",mainLink)
                break
    else:
        for line in open("gene.pred","r"):
            splitx = line.rstrip().split("\t")
##            if splitta[0]==splitta[1]:
##                a = open("F:/planet2/ensembleNet/%s" % splitta[1][:9],"r").read()
            if splitta[1]==splitx[0].lower():
                a = zlib.decompress(base64.b64decode(splitx[1]))
                print result.replace("INSERT PIC HERE",a).replace("aranet.mpimp-golm.mpg.de",mainLink)
                break
##            break


elif splitta[0]=="download":
    species = splitta[1].replace("classifier","fam")
    ident = splitta[2]
    a = open("F:/planet2/%s/%s.txt" % (species, ident.replace(".zip","")),"rb").readlines()
    if species!="ela":
        if "c" not in ident:
            zippa = zipfile.ZipFile("temp.zip","w")
            if species=="ppc":                
                pic = zlib.decompress(base64.b64decode(a[1]))
                picNimble, picCMBX = pic.split("<br>")[0].split('standalone="no"?>')[1].split('<br><a href="https://://aranet')[0], pic.split("<br>")[1].split('standalone="no"?>')[1].split('<br><a href="https://://aranet')[0]
                zippa.writestr("nimblegen"+ident.replace(".zip","")+".svg",picNimble)
                zippa.writestr("cmbx"+ident.replace(".zip","")+".svg",picCMBX)
                zippa.close()
                print "Content-Type: application/octet-stream"    
                print "Content-Disposition: attachment; filename=\"%s\"\r\n" % ident
                sys.stdout.write(open("temp.zip","r").read())
                os.remove("temp.zip")
            else:                
                pic = zlib.decompress(base64.b64decode(a[1])).split('standalone="no"?>')[1].split('<br><a href="https://://aranet')[0]
                zippa.writestr(ident.replace(".zip","")+".svg",pic)
                try:
                    zippa.writestr(ident.replace(".zip","")+".network",zlib.decompress(base64.b64decode(a[3])))
                    zippa.writestr(ident.replace(".zip","")+".attributes",zlib.decompress(base64.b64decode(a[4])))
                    zippa.writestr(ident.replace(".zip","")+".moduleNetwork",zlib.decompress(base64.b64decode(a[8])))
                    zippa.writestr(ident.replace(".zip","")+".moduleAttributes",zlib.decompress(base64.b64decode(a[9])))
                except:
                    pass
                zippa.close()
                print "Content-Type: application/octet-stream"    
                print "Content-Disposition: attachment; filename=\"%s\"\r\n" % ident
                sys.stdout.write(open("temp.zip","r").read())
                os.remove("temp.zip")
        else:
            zippa = zipfile.ZipFile("temp.zip","w")
            zippa.writestr(ident.replace(".zip","")+".network",zlib.decompress(base64.b64decode(a[3])))
            zippa.writestr(ident.replace(".zip","")+".attributes",zlib.decompress(base64.b64decode(a[4])))
            zippa.close()
            print "Content-Type: application/octet-stream"    
            print "Content-Disposition: attachment; filename=\"%s\"\r\n" % ident
            sys.stdout.write(open("temp.zip","r").read())
            os.remove("temp.zip")    
    else:
        zippa = zipfile.ZipFile("temp.zip","w")
        zippa.writestr(ident.replace(".zip","")+"-ELA",zlib.decompress(base64.b64decode(a[2])))
        zippa.writestr(ident.replace(".zip","")+"-Modules",zlib.decompress(base64.b64decode(a[3])))
        zippa.close()
        print "Content-Type: application/octet-stream"    
        print "Content-Disposition: attachment; filename=\"%s.zip\"\r\n" % ident
        sys.stdout.write(open("temp.zip","r").read())
        os.remove("temp.zip")
        
##
elif splitta[0]=="pdfnet":
    print "Content-Type: application/octet-stream"
    print "Content-Disposition: attachment; filename=\"%s\"\r\n" % "test"
    sys.stdout.write(base64.b64decode(form["nama"].value))
