def download(clientKey=None, clientSecret=None, accessToken=None, runId=None, runName=None, outputDirectory='\.', createBsDir=True): ''' Downloads run-level files. Run Id and run name should not be specified together. All files for a given run will be downloaded based on either the unique run ID, or the first run found with matching experiment name. :param clientKey the Illumina developer app client key :param clientSecret the Illumina developer app client secret :param accessToken the Illumina developer app access token :param runId the BaseSpace run identifier :param runName the BaseSpace run experiment name :param outputDirectory the root output directory :param createBsDir true to recreate the path structure within BaseSpace, false otherwise ''' appSessionId = '' apiServer = 'https://api.basespace.illumina.com/' # or 'https://api.cloud-hoth.illumina.com/' apiVersion = 'v1pre3' fileLimit = 1024 runLimit = 100 # init the API if None != clientKey: myAPI = BaseSpaceAPI(clientKey, clientSecret, apiServer, apiVersion, appSessionId, accessToken) else: myAPI = BaseSpaceAPI(profile='DEFAULT') # get the current user user = myAPI.getUserById('current') expName = None if runId: run = myAPI.getRunById(Id=runId) runFiles = Runs.__get_files_to_download(myAPI, run.Id, fileLimit) expName = run.ExperimentName else: runs = myAPI.getAccessibleRunsByUser(qp({'Limit' : runLimit})) for run in runs: runId = run.Id if runName and runName == run.ExperimentName: expName = run.ExperimentName runFiles = Samples.__get_files_to_download(myAPI, runId) if 0 < len(runFiles): break if not expName: if runName: print 'Could not find a run with name: %s' % runName else: print 'Could not find a run for user' sys.exit(1) numFiles = len(runFiles) print "Will download files from %d ." % numFiles i = 0 for runFile in runFiles: outDir = os.path.join(outputDirectory, expName) print 'Downloading (%d/%d): %s' % ((i+1), numFiles, str()) print "BaseSpace File Path: %s" % runFile.Path print "Destination File Path: %s" % os.path.join(outDir, runFile.Name) if not options.dryRun: runFile.downloadFile(myAPI, outDir, createBsDir=createBsDir) i = i + 1 print "Download complete."