view sra_fetch.py @ 17:c57efec65750 draft

updates to SRA datatype
author Matt Shirley <mdshw5@gmail.com>
date Mon, 17 Jun 2013 20:37:28 -0400
parents 93a60318b9ca
children
line wrap: on
line source

import sys
import os
from ftplib import FTP
try:
    import argparse
except ImportError:
    import getopt

def main(args):
    """ Get accession number from argument """
    if module_exists('argparse'):
        args = dict(vars(args))
    prefix = args['accession'][0:3]
    middle = args['accession'][3:6]
    suffix = args['accession'][6:9]

    ftp = FTP('ftp-trace.ncbi.nih.gov')
    # Open file and transfer requested SRA as a file
    # Try to change the working directory until it works
    with open(args['out'], 'wb') as sra:
        ftpPath = os.path.join('/sra/sra-instant/reads/ByRun/sra/',
                               prefix,
                               prefix + middle,
                               prefix + middle + suffix)
        ftp.login('ftp')
        connected = False
        while not connected:
            try:
                ftp.cwd(ftpPath)
                connected = True
            except:
                pass
        ftp.retrbinary('RETR ' + prefix + middle + suffix + '.sra', sra.write)
        ftp.quit()

def module_exists(module_name):
    try:
        __import__(module_name)
    except ImportError:
        return False
    else:
        return True

def arguments():
    parser = argparse.ArgumentParser(description="Download an SRA from the NCBI SRA FTP")
    parser.add_argument('-a', '--accession', type=str, help="SRA accession ex: SRR000001")
    parser.add_argument('-o', '--out', type=str, help="Name for SRA file ")
    args = parser.parse_args()
    return args

if __name__ == "__main__":
    if module_exists('argparse'):
        args = arguments()
    else:
        ## fall back to getopt for python < 2.7
        args = dict()
        options, remainder = getopt.getopt(sys.argv[1:], 'a:o:', ['accession=', 'out='])
        for opt, arg in options:
            if opt in ('-a', '--accession'):
                args['accession'] = arg
            elif opt in ('-o', '--out'):
                args['out'] = arg

    main(args)