view tools/mutationassesor_web/mutation_assesor.py @ 2:eae0427d25d6

push
author Saket Choudhary <saketkc@gmail.com>
date Wed, 20 Nov 2013 01:55:00 +0530
parents 32e3e166ced7
children
line wrap: on
line source

import sys
sys.path.insert(0, '/home/saket/requests-new-urllib3-api/requests/packages/')
sys.path.insert(0, '/home/saket/requests-new-urllib3-api')


import requests
from functools import wraps
import tempfile, shutil,time
import os,csv
#__url__="http://mutationassessor.org/?cm=var&var=%s&frm=txt&fts=all"
__url__="http://mutationassessor.org"
def stop_err( msg ):
    sys.stderr.write( '%s\n' % msg )
    sys.exit()

def retry(ExceptionToCheck, tries=4, delay=3, backoff=2, logger=None):

    """Retry calling the decorated function using an exponential backoff.

    http://www.saltycrane.com/blog/2009/11/trying-out-retry-decorator-python/
    original from: http://wiki.python.org/moin/PythonDecoratorLibrary#Retry

    :param ExceptionToCheck: the exception to check. may be a tuple of
        exceptions to check
    :type ExceptionToCheck: Exception or tuple
    :param tries: number of times to try (not retry) before giving up
    :type tries: int
    :param delay: initial delay between retries in seconds
    :type delay: int
    :param backoff: backoff multiplier e.g. value of 2 will double the delay
        each retry
    :type backoff: int
    :param logger: logger to use. If None, print
    :type logger: logging.Logger instance
    """
    def deco_retry(f):

        @wraps(f)

        def f_retry(*args, **kwargs):
            mtries, mdelay = tries, delay
            while mtries > 1:
                try:
                    return f(*args, **kwargs)
                except ExceptionToCheck, e:
                    #msg = "%s, Retrying in %d seconds..." % (str(e), mdelay)
                    msg = "Retrying in %d seconds..." %  (mdelay)
                    if logger:
                        logger.warning(msg)
                    else:
                        #print msg
                        pass
                    time.sleep(mdelay)
                    mtries -= 1
                    mdelay *= backoff
            return f(*args, **kwargs)

        return f_retry  # true decorator

    return deco_retry
def main(params):
    with open(params[0],"r") as f:
        for i,sequence in enumerate(f):
            #print sequence
            sequence=sequence.replace("\t",",").replace(" ",",")
            call=requests.get((__url__)%(sequence))
            with open(params[1],"a") as w:
                text = call.content.replace("\\t","\t")
                if i>1:
                    text_split=text.split("\n")
                    text="\t".join(text_split[1])
                w.write(text)
            time.sleep(1)
    return True

def main_web(params):
    tmp_dir = tempfile.mkdtemp()
    path = os.path.join(tmp_dir,"csv_file")
    in_txt = csv.reader(open(params[0],"rb"), delimiter="\t")
    with open(path,"wb") as fp:
        out_csv = csv.writer(fp,delimiter=",")
        out_csv.writerows(in_txt)
    fh = open(path,"rb")
    readfile=fh.read()
    fh.close()
    payload = {"vars":readfile,"tableQ":"","protres":""}
    request = requests.post(__url__,data=payload)
    response = request.text
    temp_file = os.path.join(tmp_dir,"int_file")
    with open(temp_file,"wb") as w:
        w.write(response)

    in_txt = csv.reader(open(temp_file,"rb"), delimiter=",")
    with open(params[1],"wb") as fp:
        out_csv = csv.writer(fp,delimiter="\t")
        out_csv.writerows(in_txt)
    shutil.rmtree(tmp_dir)
    return True
if __name__=="__main__":
    main_web(sys.argv[1:])