diff toolfactory/testclass.py @ 6:efefe43f23c8 draft default tip

Uploaded
author fubar
date Fri, 30 Apr 2021 02:10:32 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolfactory/testclass.py	Fri Apr 30 02:10:32 2021 +0000
@@ -0,0 +1,108 @@
+import argparse
+import json
+import os
+import requests
+
+
+from bioblend import galaxy
+
+class ToolTester():
+    # test a newly installed tool using bioblend
+    """
+
+ https://github.com/nsoranzo/bioblend-tutorial/blob/master/historical_exercises/api-scripts.exercises/run_tool.py
+import sys
+import json
+import requests
+import output
+
+BASE_URL = 'http://localhost:8080'
+
+# -----------------------------------------------------------------------------
+def run_tool( tool_id, history_id, **kwargs ):
+    full_url = BASE_URL + '/api/tools'
+
+    #EXERCISE: POST...
+
+# -----------------------------------------------------------------------------
+if __name__ == '__main__':
+    # e.g. ./run_tool.py Filter1 ebfb8f50c6abde6d '{ "input" : { "src": "hda", "id": "77f74776fd03cbc5" }, "cond" : "c6>=100.0" }'
+    # e.g. ./run_tool.py sort1 f597429621d6eb2b '{ "input": { "src": "hda", "id": "b472e2eb553fa0d1" }, "column": "c6", "style": "alpha", "column_set_0|other_column" : "c2", "column_set_0|other_style": "num" }'
+    tool_id, history_id = sys.argv[1:3]
+    params = json.loads( sys.argv[3] ) if len( sys.argv ) >= 4 else {}
+    response = run_tool( tool_id, history_id, **params )
+    output.output_response( response )
+
+
+    def get_testdata(self,urlin,fout):
+       '''
+        grab a test file
+        GET /api/tools/{tool_id}/test_data_download?tool_version={tool_version}&filename={filename}
+        http://localhost:8080/api/tools/tacrev/test_data_download?tool_version=2.00&filename=in
+        '''
+     """
+    def __init__(self, args):
+        self.galaxy = args.galaxy
+        self.key = args.key
+        self.tool_id = args.tool_id
+
+    def run_test(self):
+        """
+    GET /api/tools/{tool_id}/test_data_download?tool_version={tool_version}&filename={filename}
+    http://localhost:8080/api/tools/tacrev/test_data_download?tool_version=2.00&filename=input1
+        """
+        inputs = {}
+        gi = galaxy.GalaxyInstance(url=self.galaxy, key=self.key, verify=False)
+        chistory = gi.histories.get_most_recently_used_history()
+        chistory_id = chistory['id']
+        #contents = gi.histories.show_history(chistory_id, contents=True)
+        #print('####chistory',chistory,'\n#### contents=',contents)
+        #history = gi.histories.create_history(name=f"{self.tool_id}_test_history")
+        #new_hist_id = history['id']
+        fapi = ''.join([self.galaxy, '/api/tools/', self.tool_id, '/build'])
+        build = gi.make_get_request(url=fapi,params={"history_id":chistory_id}).json()
+        fapi = ''.join([self.galaxy, '/api/tools/', self.tool_id, '/test_data'])
+        test_data = requests.get(fapi, params={'key':self.key, 'history_id':chistory_id})# gi.make_get_request(url=fapi,params={"history_id":chistory_id,'key':self.key}).json()
+        print(test_data)
+        testinputs = test_data.json()[0].get('inputs',None)
+        print('testinputs',testinputs)
+        stateinputs = build.get('state_inputs',None) # 'input1': {'values': [{'id': '7b326180327c3fcc', 'src': 'hda'}]}}
+        if testinputs:
+            for k in testinputs.keys():
+                v = testinputs[k]
+                if '|' in k:
+                    nk = k.split('|')[-1]
+                    inputs[nk] = v
+                else:
+                    inputs[k] = v
+        if stateinputs:
+            print('stateinputs',stateinputs)
+            for k in stateinputs.keys():
+                inp = stateinputs[k]
+                if isinstance(inp,dict):
+                    if inp.get('values',None):
+                         for anin in inp['values']:
+                            if anin.get('id', None) and anin.get('src', None):
+                                gi.histories.copy_dataset(chistory_id, anin['id'], source=anin['src'])
+                                print('******copied id', anin['id'])
+                                up = {k:anin}
+                                print(up)
+                                inputs.update(up) # replace the input def
+        print('after state inputs', inputs)
+        fapi = ''.join([self.galaxy, '/api/tools'])
+        r = gi.tools.run_tool(chistory_id, self.tool_id, inputs, input_format='legacy')
+        print(f"Called test on {self.tool_id} - got {r}")
+
+def _parser():
+    parser = argparse.ArgumentParser()
+    parser.add_argument("-g", "--galaxy", help='URL of target galaxy',default="http://localhost:8080")
+    parser.add_argument("-a", "--key", help='Galaxy admin key', default="13073fde17d06591ce36e596e3c29904")
+    parser.add_argument("-t", "--tool_id", help='Tool id to test', default="plotter")
+    return parser
+
+
+if __name__ == "__main__":
+    args = _parser().parse_args()
+    tt = ToolTester(args)
+    tt.run_test()
+