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
Binary file synapse_interface/._synapse_create.xml has changed
Binary file synapse_interface/._synapse_download.xml has changed
Binary file synapse_interface/._synapse_query.xml has changed
--- /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="&quot;"/>
+					</valid>
+					<mapping initial="none">
+						<add source="&quot;" target="\&quot;"/>
+					</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="&quot;"/>
+					</valid>
+					<mapping initial="none">
+						<add source="&quot;" target="\&quot;"/>
+					</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
+
+   &lt;a href="https://synapse.sagebase.org/Portal/openid?OPEN_ID_PROVIDER=https://www.google.com/accounts/o8/id&amp;RETURN_TO_URL=${host_url}?tool_id=synapse_upload&amp;" target="_blank"&gt;at Synapse&lt;/a&gt;
+
+	</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
+
+   &lt;a href="https://synapse.sagebase.org/Portal/openid?OPEN_ID_PROVIDER=https://www.google.com/accounts/o8/id&amp;RETURN_TO_URL=${host_url}?tool_id=synapse_download&amp;" target="_blank"&gt;at Synapse&lt;/a&gt;
+
+	</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
+
+   &lt;a href="https://synapse.sagebase.org/Portal/openid?OPEN_ID_PROVIDER=https://www.google.com/accounts/o8/id&amp;RETURN_TO_URL=${host_url}?tool_id=synapse_query&amp;" target="_blank"&gt;at Synapse&lt;/a&gt;
+
+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