Mercurial > repos > cathywise > truststore_import
view TrustStoreGalaxyImport.py @ 37:2ced2ca1c758
Multiple downloads.
author | Catherine Wise <catherine.wise@csiro.au> |
---|---|
date | Fri, 31 Jan 2014 11:32:24 +1100 |
parents | 6e2dba73eebd |
children |
line wrap: on
line source
import sys import shutil import gzip import tempfile import os from py_ts import TrustStoreClient, ts_utils from galaxy.datatypes.checkers import * def printNice(elem, f, depth): try: f.write('\t'*depth + elem.name + " (" + str(len(elem.fragments)) + " parts)\n") except AttributeError: f.write('\t'*depth + elem.name + "\n") for child in elem.children: printNice(child, f, depth+1) def ungzip(download, outputFile): is_gzipped, is_valid = check_gzip(download) if is_gzipped and not is_valid: print "File is compressed (gzip) but not valid." sys.exit(4) elif is_gzipped and is_valid: # We need to uncompress the temp_name file, but BAM files must remain compressed in the BGZF format CHUNK_SIZE = 2**20 # 1Mb fd, uncompressed = tempfile.mkstemp(prefix='data_id_upload_gunzip_', dir=os.path.dirname(outputFile), text=False ) gzipped_file = gzip.GzipFile(download, 'rb') while 1: try: chunk = gzipped_file.read(CHUNK_SIZE) except IOError: os.close(fd) os.remove(uncompressed) print 'Problem decompressing gzipped data', dataset, json_file sys.exit(4) if not chunk: break os.write(fd, chunk) os.close(fd) gzipped_file.close() shutil.copy(uncompressed, outputFile) try: os.remove(uncompressed) os.remove(download) except OSError: pass else: shutil.copy(download, outputFile) if __name__ == '__main__': kms_url = "https://tstest-kms.it.csiro.au/kmscolab_3_0" ims_url = "https://tstest-ims.it.csiro.au/ims_3_0/services/IMS" username = sys.argv[1] password = sys.argv[2] client_key = "desktop" client_secret = "cpU92F1PT7VOCANjSknuCDp4DrubmujoBaF6b0miz8OpKNokEbGMHCaSFK5/lISbBmaaGVCgeADI2A39F3Hkeg==" storename = sys.argv[3] path = sys.argv[4] fileType = sys.argv[5] filename = "" outputFile = "" if len(sys.argv) > 9: filename = sys.argv[6] outputFile = sys.argv[7] outputFileId = sys.argv[8] otherFilesDir = sys.argv[9] else: outputFile = sys.argv[6] config = TrustStoreClient.Config(ims_url, kms_url, client_key, client_secret) ts = TrustStoreClient.TrustStoreClient(headless=True, config=config) try: ts.authenticate(username, password) except TrustStoreClient.TrustStoreClientAuthenticationException as e: print e sys.exit(5) ts.getPrivateKey('privkey.pem') listing = ts.listStores() found = False for store in listing: if store.friendly_name == storename: found = True root = ts.listDirectory(store) location = None if path != "/": location = ts_utils.ts_utils.dirAtPath(root, path) if not location: print "Path not found" sys.exit(3) else: location = root if filename and filename != "": outputFileList = [outputFile] inputFileList = None if "," in filename: # we have multiple files guys. inputFileList = filename.split(",") for inputFile in inputFileList[1:]: # First file will be sent to outputFile. outName = "%s_%s_%s_%s_%s" % ('primary', outputFileId, inputFile.replace(".","-"), 'visible', fileType) outputFileList.append(os.path.join(otherFilesDir, outName)) else: inputFileList = [filename] for inFile, outFile in zip(inputFileList, outputFileList): downloadMe = ts_utils.ts_utils.recurseToChildNamed(location, inFile) if downloadMe: download = ts.getFile(store, downloadMe) ungzip(download, outFile) else: print "File %s not found" % inFile sys.exit(4) else: with open(outputFile, 'w+') as f: try: for child in root.children: printNice(child, f, 0) except AttributeError as e: print e print root if not found: print "Store %s not found" % storename sys.exit(2)