Mercurial > repos > kellrott > synapse_interface
changeset 0:601d2704b381 draft
Uploaded
author | kellrott |
---|---|
date | Wed, 12 Jun 2013 14:01:26 -0400 |
parents | |
children | 17b841e1f52f |
files | synapse_interface/._synapse_create.xml synapse_interface/._synapse_download.xml synapse_interface/._synapse_query.xml synapse_interface/synapse_create.xml synapse_interface/synapse_download.xml synapse_interface/synapse_galaxy_client.py synapse_interface/synapse_query.xml synapse_interface/tool_dependencies.xml |
diffstat | 8 files changed, 371 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/synapse_interface/synapse_create.xml Wed Jun 12 14:01:26 2013 -0400 @@ -0,0 +1,124 @@ +<tool id="synapse_upload" name="Synapse Upload" version="3.0.0"> + <description>Create Synapse</description> + <command interpreter="python">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 +</command> + <request_param_translation> + <request_param galaxy_name="sessionToken" remote_name="sessionToken" missing="" /> + </request_param_translation> + <inputs> + <param name="user" type="text" size="90" label="Username"> + <sanitizer> + <valid initial="string.printable"/> + </sanitizer> + </param> + <param name="pass" type="text" size="90" label="Password" help="If you have a sessionToken, you don't have to enter your password"> + <sanitizer> + <valid initial="string.printable"/> + </sanitizer> + </param> + <param name="sessionToken" type="text" size="90" label="SessionToken" help="Log in via OpenID using the Link in the help section"/> + <param name="name" type="text" size="90" label="Entity Name"/> + <param name="synid" type="text" size="30" label="Synapse ID" help="Leave Blank to create new Entity"/> + <param name="attachment" type="data" optional="true" label="Attachment"/> + <param name="attachment_name" type="text" size="90" optional="true" label="Attachment Name"/> + <param name="etype" type="select" label="Entity Type"> + <option value="Data">Data</option> + <option value="Folder">Folder</option> + </param> + <param name="parentId" type="text" size="30" label="Parent ID"/> + <repeat name="properties" title="Properties"> + <param name="name" type="select" size="90" label="Name"> + <option value="description">Description</option> + <option value="species">Species</option> + <option value="numSamples">Number of Samples</option> + <option value="disease">Disease</option> + <option value="tissueType">Tissue Type</option> + </param> + <param name="value" type="text" size="90" label="Value"> + <sanitizer> + <valid initial="string.printable"> + <remove value="""/> + </valid> + <mapping initial="none"> + <add source=""" target="\""/> + </mapping> + </sanitizer> + </param> + </repeat> + + <repeat name="annotations" title="Annotations"> + <param name="name" type="text" size="90" label="Name"/> + <param name="value" type="text" size="90" label="Value"> + <sanitizer> + <valid initial="string.printable"> + <remove value="""/> + </valid> + <mapping initial="none"> + <add source=""" target="\""/> + </mapping> + </sanitizer> + </param> + </repeat> + + </inputs> + <outputs> + <data format="txt" name="outfile" /> + </outputs> + <configfiles> + <configfile name="script_file">#if str($sessionToken) != '' +token +$sessionToken +#else +password +$user +$pass +#end if +</configfile> + <configfile name="properties_file">parentId $parentId +#for a in $properties: +${a.name} ${a.value} +#end for +#if str($name) != '' +name $name +#end if +</configfile> + <configfile name="annotations_file">#for a in $annotations: +${a.name} ${a.value} +#end for +</configfile> + + </configfiles> + <help> + +Login via OpenID |location_link|. + +.. |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> + + </help> + +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/synapse_interface/synapse_download.xml Wed Jun 12 14:01:26 2013 -0400 @@ -0,0 +1,45 @@ +<tool id="synapse_download" name="Synapse Download" version="3.0.0"> + <description>Download Synapse Entity</description> + <command interpreter="python">synapse_galaxy_client.py get $script_file $synid $outfile</command> + <request_param_translation> + <request_param galaxy_name="sessionToken" remote_name="sessionToken" missing="" /> + </request_param_translation> + <inputs> + <param name="user" type="text" size="90" label="Username"> + <sanitizer> + <valid initial="string.printable"/> + </sanitizer> + </param> + <param name="pass" type="text" size="90" label="Password" help="If you have a sessionToken, you don't have to enter your password"> + <sanitizer> + <valid initial="string.printable"/> + </sanitizer> + </param> + <param name="sessionToken" type="text" size="90" label="SessionToken" help="Log in via OpenID using the Link in the help section"/> + + <param name="synid" type="text" size="30" label="Synapse ID"/> + </inputs> + <outputs> + <data format="txt" name="outfile" label="${synid}" /> + </outputs> + <configfiles> + <configfile name="script_file">#if str($sessionToken) != '' +token +$sessionToken +#else +password +$user +$pass +#end if +</configfile> + </configfiles> + <help> + +Login via OpenID |location_link|. + +.. |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_download&" target="_blank">at Synapse</a> + + </help> +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/synapse_interface/synapse_galaxy_client.py Wed Jun 12 14:01:26 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() + +
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/synapse_interface/synapse_query.xml Wed Jun 12 14:01:26 2013 -0400 @@ -0,0 +1,56 @@ +<tool id="synapse_query" name="Synapse Query" version="3.0.0"> + <description>Query Synapse</description> + <command interpreter="python">synapse_galaxy_client.py query $script_file $query_file $outfile</command> + <request_param_translation> + <request_param galaxy_name="sessionToken" remote_name="sessionToken" missing="" /> + </request_param_translation> + <inputs> + <param name="user" type="text" size="90" label="Username"> + <sanitizer> + <valid initial="string.printable"/> + </sanitizer> + </param> + <param name="pass" type="text" size="90" label="Password" help="If you have a sessionToken, you don't have to enter your password"> + <sanitizer> + <valid initial="string.printable"/> + </sanitizer> + </param> + <param name="sessionToken" type="text" size="90" label="SessionToken" help="Log in via OpenID using the Link in the help section"/> + + <param name="query" type="text" area="True" size="5x35" label="Query"> + <sanitizer> + <valid initial="string.printable"/> + </sanitizer> + </param> + <param name="stall" type="hidden" required="True"/> + </inputs> + <outputs> + <data format="tabular" name="outfile" /> + </outputs> + <configfiles> + <configfile name="script_file">#if str($sessionToken) != '' +token +$sessionToken +#else +password +$user +$pass +#end if +</configfile> + <configfile name="query_file">$query</configfile> + </configfiles> + <help> + +Login via OpenID |location_link|. + +.. |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_query&" target="_blank">at Synapse</a> + +Example Query: + +select * from entity where parentId=="syn300013" + + </help> + +</tool>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/synapse_interface/tool_dependencies.xml Wed Jun 12 14:01:26 2013 -0400 @@ -0,0 +1,13 @@ +<?xml version="1.0"?> +<tool_dependency> + <package name="synapseclient" version="0.3.0"> + <install version="0.3.0"> + <actions> + <action type="setup_virtualenv">synapseclient == 0.3.0</action> + </actions> + </install> + <readme> +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. + </readme> + </package> +</tool_dependency> \ No newline at end of file