# HG changeset patch # User kellrott # Date 1374529428 14400 # Node ID f798da48a30ddbf685aefe349d047ddb153c459b # Parent 2925d82b84fcd9881e5da042737f78f251a2c92c Uploaded diff -r 2925d82b84fc -r f798da48a30d synapse_interface/synapse_create.xml --- a/synapse_interface/synapse_create.xml Thu Oct 25 02:39:06 2012 -0400 +++ b/synapse_interface/synapse_create.xml Mon Jul 22 17:43:48 2013 -0400 @@ -1,21 +1,59 @@ - + Create Synapse - $script_file + + synapseclient + + synapse_galaxy_client.py upload $script_file +$etype +$properties_file +$annotations_file +$outfile + +#if str($attachment) != '' +$attachment +#else +- +#end if + +#if str($attachment_name) != '' +$attachment_name +#else +- +#end if + + +#if str($synid) != '' +$synid +#else +- +#end if + + + + - - - + + + + + + + + + + + + + - - - + + + - - @@ -53,86 +91,37 @@ - ", x); -y = gsub("__lt__", "<", y ); -y = gsub("__sq__", "'", y); -y = gsub("__dq__", "\\"",y); -y = gsub("__ob__", "[", y); -y = gsub("__cb__", "]", y); -y = gsub("__oc__", "{", y); -y = gsub("__cc__", "}", y); -y = gsub("__at__", "@", y); -y = gsub("__cn__", "\\n", y); -y = gsub("__cr__", "\\r", y); -y = gsub("__tc__", "\\t", y); -y = gsub("__pd__", "#", y); -y = gsub("__at__", "@", y); -return(y); -} - -if (nchar("$user") && nchar("$pass")) { - synapseLogin(username=galaxyClean("$user"), password=galaxyClean("$pass")) -} - - -ent <- ${etype}( list(name=galaxyClean("${name}")) ) - -#for $a in $annotations: -annotValue(ent, galaxyClean("${a.name}")) <- galaxyClean("${a.value}") -#end for - + #if str($sessionToken) != '' +token +$sessionToken +#else +password +$user +$pass +#end if + + parentId $parentId #for a in $properties: -propertyValue(ent, galaxyClean("${a.name}")) <- galaxyClean("${a.value}") +${a.name} ${a.value} #end for - -ent <- createEntity(ent) - -#if $attachment != 'None' -#if $attachment_name == '': -ent <- addFile(ent, galaxyClean("${attachment}")) -#else -ent <- addFile(ent, galaxyClean("${attachment}"), galaxyClean("${attachment_name}")) +#if str($name) != '' +name $name #end if -#end if - -ent <- storeEntity(ent) - -write(properties(ent)\$id, file=galaxyClean("${outfile}")); - -""" - + + #for a in $annotations: +${a.name} ${a.value} +#end for + -import tempfile -import os -import sys -import subprocess - -h, path = tempfile.mkstemp() -os.write(h,rcode) -os.close(h) - -proc = subprocess.Popen( ["Rscript", path] + sys.argv[1:], stderr=subprocess.PIPE, stdout=subprocess.PIPE ) -(stdoutdata, stderrdata) = proc.communicate() -if proc.returncode: - sys.stderr.write(stderrdata) -sys.stdout.write(stdoutdata) -os.unlink(path) - -]]> -Install R SynapseClient: - source('http://depot.sagebase.org/CRAN.R') - pkgInstall("synapseClient") +Login via OpenID |location_link|. -`To setup auto login (so you don't have to type in your password) <https://sagebionetworks.jira.com/wiki/display/SYNR/How+to+configure+automatic+login>`_ +.. |location_link| raw:: html + + <a href="https://synapse.sagebase.org/Portal/openid?OPEN_ID_PROVIDER=https://www.google.com/accounts/o8/id&RETURN_TO_URL=${host_url}?tool_id=synapse_upload&" target="_blank">at Synapse</a> - \ No newline at end of file + diff -r 2925d82b84fc -r f798da48a30d synapse_interface/synapse_download.xml --- a/synapse_interface/synapse_download.xml Thu Oct 25 02:39:06 2012 -0400 +++ b/synapse_interface/synapse_download.xml Mon Jul 22 17:43:48 2013 -0400 @@ -1,92 +1,48 @@ - + Download Synapse Entity - $script_file + + synapseclient + + synapse_galaxy_client.py get $script_file $synid $outfile + + + - - - - - - - + + + + + + + + + + + + + - ", x); -y = gsub("__lt__", "<", y ); -y = gsub("__sq__", "'", y); -y = gsub("__dq__", "\\"",y); -y = gsub("__ob__", "[", y); -y = gsub("__cb__", "]", y); -y = gsub("__oc__", "{", y); -y = gsub("__cc__", "}", y); -y = gsub("__at__", "@", y); -y = gsub("__cn__", "\\n", y); -y = gsub("__cr__", "\\r", y); -y = gsub("__tc__", "\\t", y); -y = gsub("__pd__", "#", y); -y = gsub("__at__", "@", y); -return(y); -} - -if (nchar("$user") && nchar("$pass")) { - synapseLogin(username=galaxyClean("$user"), password=galaxyClean("$pass")) -} - - -cat("Loading...") -ent <- loadEntity("$synid"); -cat("Done\n") - -if ("e" == "$data_type") { - eset <- exprs(ent\$objects\$eset); - write(paste(c("PROBE", colnames(eset)), collapse="\\t"), file="$outfile") - write.table(eset, "$outfile", col.names=FALSE, sep="\\t", quote=FALSE, append=TRUE); -} -if ("a" == "$data_type") { - fpath <- file.path(ent\$cacheDir, ent\$files[[1]]); - file.copy(fpath, "$outfile", overwrite=T); -} - -""" - -import tempfile -import os -import sys -import subprocess - -h, path = tempfile.mkstemp() -os.write(h,rcode) -os.close(h) - -cmd_args = ["R", "CMD", "BATCH", path ] -proc = subprocess.Popen(cmd_args, stderr=subprocess.PIPE) -stdout, stderr = proc.communicate() -if proc.poll() != 0: - sys.stderr.write(stderr) -os.unlink(path) -]]> + #if str($sessionToken) != '' +token +$sessionToken +#else +password +$user +$pass +#end if + -This tool current supports two types of data from Synapse: Affy eset data and attachment files. -For Affy eset data, it will attempt to turn the eset into a table and write a tab separated file. For attachment files, it will -save the first attached file as the output. +Login via OpenID |location_link|. -Install R SynapseClient:: +.. |location_link| raw:: html - source('http://depot.sagebase.org/CRAN.R') - pkgInstall("synapseClient") - -`To setup auto login (so you don't have to type in your password) <https://sagebionetworks.jira.com/wiki/display/SYNR/How+to+configure+automatic+login>`_ + <a href="https://synapse.sagebase.org/Portal/openid?OPEN_ID_PROVIDER=https://www.google.com/accounts/o8/id&RETURN_TO_URL=${host_url}?tool_id=synapse_download&" target="_blank">at Synapse</a> - \ No newline at end of file + diff -r 2925d82b84fc -r f798da48a30d synapse_interface/synapse_galaxy_client.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/synapse_interface/synapse_galaxy_client.py Mon Jul 22 17:43:48 2013 -0400 @@ -0,0 +1,133 @@ +#!/usr/bin/env python + +import synapseclient +import sys +import json +import os +import shutil +import csv + +def dict_list_to_tsv(data, handle): + headers = {} + for row in data: + for col in row: + if col not in headers: + headers[col] = len(headers) + + head = headers.keys() + head.sort(key=lambda x : headers[x]) + + writer = csv.writer(handle, delimiter="\t", lineterminator="\n") + writer.writerow(head) + + for row in data: + out = [] + for c in head: + out.append(row.get(c, "")) + writer.writerow(out) + + +if __name__ == "__main__": + cmd = sys.argv[1] + info_file = sys.argv[2] + + handle = open(info_file) + mode = handle.readline().rstrip("\n\r") + syn = None + if mode == 'password': + username = handle.readline().rstrip("\n\r") + password = handle.readline().rstrip("\n\r") + syn = synapseclient.Synapse() + syn.login(username, password) + elif mode == 'token': + token = handle.readline().rstrip("\n\r") + syn = synapseclient.Synapse() + syn.login(sessionToken=token) + handle.close() + + if syn is None: + sys.stderr.write("No login info\n") + sys.exit(1) + + if cmd == "query": + querypath = sys.argv[3] + outpath = sys.argv[4] + handle = open(querypath) + query = handle.read() + handle.close() + ohandle = open(outpath, "w") + dict_list_to_tsv(syn.query(query)['results'], ohandle) + ohandle.close() + + + if cmd == "get": + synid = sys.argv[3] + outpath = sys.argv[4] + + ent = syn.downloadEntity(synid) + src_path = os.path.join(ent['cacheDir'], ent['files'][0]) + shutil.copy(src_path, outpath) + + if cmd == "upload": + etype = sys.argv[3] + properties_file = sys.argv[4] + annotations_file = sys.argv[5] + outfile = sys.argv[6] + attach_file = sys.argv[7] + attach_file_name = os.path.basename(sys.argv[8]) + synid = sys.argv[9] + + handle = open(properties_file) + props = {} + for line in handle: + tmp = line.rstrip("\r\n").split("\t") + props[tmp[0]] = tmp[1] + handle.close() + + handle = open(annotations_file) + annon = {} + for line in handle: + tmp = line.rstrip("\r\n").split("\t") + if tmp[0] in annon: + annon[tmp[0]].append( tmp[1] ) + else: + annon[tmp[0]] = [tmp[1]] + handle.close() + + + if synid is not None and synid.startswith("syn"): + entity = syn.getEntity(synid) + else: + entityData = { u'entityType': u'org.sagebionetworks.repo.model.Data' } + if etype == 'folder': + entityData = { u'entityType': u'org.sagebionetworks.repo.model.Folder' } + entityData['name'] = attach_file_name + entityData['parentId'] = props['parentId'] + entity = syn.createEntity(entityData) + synid = entity['id'] + + if len(props): + for p in props: + if p != 'parentId': + entity[p] = props[p] + entity = syn.updateEntity(entity) + + if len(annon): + ann = syn.getAnnotations(entity) + for a in annon: + ann[a] = annon[a] + syn.setAnnotations(entity, ann) + + if attach_file != '-' and attach_file_name != '-': + if not os.path.exists(attach_file_name): + os.symlink(attach_file, attach_file_name) + attach_file = attach_file_name + print "upload", attach_file + entity = syn.getEntity(synid) + syn.uploadFile(entity, attach_file) + + handle = open(outfile, "w") + handle.write(json.dumps(dict(entity))) + handle.close() + + diff -r 2925d82b84fc -r f798da48a30d synapse_interface/synapse_query.xml --- a/synapse_interface/synapse_query.xml Thu Oct 25 02:39:06 2012 -0400 +++ b/synapse_interface/synapse_query.xml Mon Jul 22 17:43:48 2013 -0400 @@ -1,89 +1,54 @@ - + Query Synapse - $script_file + + synapseclient + + synapse_galaxy_client.py query $script_file $query_file $outfile + + + - - - - - + + + + + + + + + + + + + - ", x); -y = gsub("__lt__", "<", y ); -y = gsub("__sq__", "'", y); -y = gsub("__dq__", "\\"",y); -y = gsub("__ob__", "[", y); -y = gsub("__cb__", "]", y); -y = gsub("__oc__", "{", y); -y = gsub("__cc__", "}", y); -y = gsub("__at__", "@", y); -y = gsub("__cn__", "\\n", y); -y = gsub("__cr__", "\\r", y); -y = gsub("__tc__", "\\t", y); -y = gsub("__pd__", "#", y); -y = gsub("__at__", "@", y); -return(y); -} - -if (nchar("$user") && nchar("$pass")) { - synapseLogin(username=galaxyClean("$user"), password=galaxyClean("$pass")) -} - - - -query <- galaxyClean("${query}"); -cat(query) - -query.out <- synapseQuery(query); -write.table(query.out, quote=F, file="$outfile", row.name=F, sep="\\t") - -""" -import tempfile -import os -import sys -import subprocess - -h, path = tempfile.mkstemp(dir="/tmp") -os.write(h,rcode) -os.close(h) - -proc = subprocess.Popen( ["Rscript", path], stderr=subprocess.PIPE, stdout=subprocess.PIPE ) -(stdoutdata, stderrdata) = proc.communicate() -if proc.returncode: - sys.stderr.write(stderrdata) -sys.stdout.write(stdoutdata) -os.unlink(path) - -]]> + #if str($sessionToken) != '' +token +$sessionToken +#else +password +$user +$pass +#end if + + $query -Install R SynapseClient:: +Login via OpenID |location_link|. - source('http://depot.sagebase.org/CRAN.R') - pkgInstall("synapseClient") +.. |location_link| raw:: html -`To setup auto login (so you don't have to type in your password) <https://sagebionetworks.jira.com/wiki/display/SYNR/How+to+configure+automatic+login>`_ + <a href="https://synapse.sagebase.org/Portal/openid?OPEN_ID_PROVIDER=https://www.google.com/accounts/o8/id&RETURN_TO_URL=${host_url}?tool_id=synapse_query&" target="_blank">at Synapse</a> Example Query: @@ -91,4 +56,4 @@ - \ No newline at end of file + diff -r 2925d82b84fc -r f798da48a30d synapse_interface/tool_dependencies.xml --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/synapse_interface/tool_dependencies.xml Mon Jul 22 17:43:48 2013 -0400 @@ -0,0 +1,13 @@ + + + + + + synapseclient == 0.3.0 + + + +A client for Synapse, a collaborative compute space that allows scientists to share and analyze data together. Synapse brings together scientific data, tools, and disease models into a commons that enables true collaborative research. The platform consists of a web portal, web services, and integration with data analysis tools such as R, python, Galaxy and Java. + + + \ No newline at end of file