#!/usr/bin/env python """ Upload a file to the desired history. """ from __future__ import print_function import json import os import sys try: import requests except ImportError: print("Could not import the requests module. See http://docs.python-requests.org/en/latest/" + " or install with 'pip install requests'") raise def upload_file(base_url, api_key, history_id, filepath, **kwargs): full_url = base_url + '/api/tools' payload = { 'key' : api_key, 'tool_id' : 'upload1', 'history_id' : history_id, } inputs = { 'files_0|NAME' : kwargs.get('filename', os.path.basename(filepath)), 'files_0|type' : 'upload_dataset', # TODO: the following doesn't work with tools.py 'dbkey' : '?', 'file_type' : kwargs.get('file_type', 'auto'), 'ajax_upload' : 'true', } payload['inputs'] = json.dumps(inputs) response = None with open(filepath, 'rb') as file_to_upload: files = {'files_0|file_data': file_to_upload} response = requests.post(full_url, data=payload, files=files) return response.json() if __name__ == '__main__': if len(sys.argv) < 5: print("history_upload.py \n" + " (where galaxy base url is just the root url where your Galaxy is served; e.g. 'localhost:8080')") sys.exit(1) api_key, base_url, history_id, filepath = sys.argv[1:5] kwargs = dict([kwarg.split('=', 1) for kwarg in sys.argv[5:]]) response = upload_file(base_url, api_key, history_id, filepath, **kwargs) print(response, file=sys.stderr)