Others might have responded to this, and I can't remember the very latest approach, but I used the approach below... Its not easy though since api is read via <code> script [BTW, topically, I still need <code> on a regular basis!], but is passed over to command line app securely via a <configfile>. For error situation messaging back to user I was using a dynamic box radio drill_down input. All this code is in toolshed under "versioned_data". Teasing out what you need might require some work though - the code also has a chunk of stuff for maintaining use of an administrator's api key as well as the user's since the app needed to do admin level api work on behalf of a user.
>------------------------------ > >Message: 11 >Date: Wed, 27 Jan 2016 12:42:17 +0000 >From: Matthias De Smet <matthias.des...@ugent.be> >... >Hi again > >I’m trying to create a tool that interacts with galaxy through the API. >For this, I need to get the users API key (or equivalent) en the domain >name of the Galaxy host. > >The purpose of this tool is to get data and put it in a data library, so >I suppose I need to use the API. Or is there another way to do this with >a tool? > >Thanks! >Matthias <command interpreter="python"> #assert $__user__, Exception( 'You must be logged in to use this tool.' ) versioned_data.py ... -O "$__app__.security.encode_id($log.id)" --api_info_path "$api_info_path" ##Actually a file path to configfile that holds api key </command> <inputs> ... <param name="api_info" display="radio" type="drill_down" label="For user with Galaxy API Key" dynamic_options="vdb_init_tool_user(__trans__)" /> </inputs> <configfiles> <configfile name="api_info_path">${__user__.api_keys[0].key} $api_info </configfile> </configfiles> <code file="versioned_data_form.py" /> And over in versioned_data_form.py ( there's a reference to "set_trans()" which feeds through to set_user_api() below... import vdb_retrieval def vdb_init_tool_user(trans): """ Retrieves a user's api key if they have one, otherwise lets them know they need one This function is automatically called from versioned_data.xml form on presentation to user Note that this is how self.api_url gets back into form, for passage back to 2nd call via versioned_data.py self.api_key is passed via secure <configfile> construct. ALSO: squeezing history_id in this way since no other way to pass it. "trans" is provided only by tool form presentation via <code file="..."> BUT NOW SEE John Chilton's: https://gist.github.com/jmchilton/27c5bb05e155a611294d See galaxy source code at https://galaxy-dist.readthedocs.org/en/latest/_modules/galaxy/web/framework .html, See http://dev.list.galaxyproject.org/error-using-get-user-id-in-xml-file-in-ne w-Galaxy-td4665274.html See http://dev.list.galaxyproject.org/hg-galaxy-2780-Real-Job-tm-support-for-th e-library-upload-to-td4133384.html master api key, set in galaxy config: #self.master_api_key = trans.app.config.master_api_key """ global retrieval_obj api_url = trans.request.application_url + '/api' history_id = str(trans.security.encode_id(trans.history.id)) user_api_key = None if trans.user: user_name = trans.user.username if trans.user.api_keys and len(trans.user.api_keys) > 0: user_api_key = trans.user.api_keys[0].key #First key is always the active one? items = [ { 'name': user_name, 'value': api_url + '-' + history_id, 'options':[], 'selected': True } ] else: items = [ { 'name': user_name + ' - Note: you need a key (see "User" menu)!', 'value': '0', 'options':[], 'selected': False } ] else: items = [ { 'name': 'You need to be logged in to use this tool!', 'value': '1', 'options':[], 'selected': False } ] retrieval_obj = vdb_retrieval.VDBRetrieval() retrieval_obj.set_trans(api_url, history_id, user_api_key) return items And over in tool xml's target code (versioned_data.py) it includes vdb_retrieval.py BUT THIS HAS A LOT OF STUFF YOU PROBABLY DON'T NEED! Sorry!: from bioblend.galaxy import GalaxyInstance class VDBRetrieval(object): def __init__(self, api_key=None, api_url=None): """ This gets either trans.x.y from <code file="..."> call in versioned_data.xml, or it gets a call with api_key and api_url from versioned_data.py @param api_key_path string File path to temporary file containing user's galaxy api_key @param api_url string contains http://[ip]:[port] for handling galaxy api calls. """ # Initialized constants during the life of a request: self.global_retrieval_date = None self.library_id = None self.history_id = None self.data_stores = [] # Entire json library structure. item.url, type=file|folder, id, name (library path) # Note: changes to library during a request aren't reflected here. self.library = None self.user_api_key = None self.user_api = None self.admin_api_key = None self.admin_api = None self.api_url = None def set_trans(self, api_url, history_id, user_api_key=None): #master_api_key=None, """ Used only on initial presentation of versioned_data.xml form. Doesn't need admin_api """ self.history_id = history_id self.api_url = api_url self.user_api_key = user_api_key self.set_user_api() self.set_admin_api() self.set_datastores() ... def set_user_api(self): """ Note: error message tacked on to self.data_stores for display back to user. """ self.user_api = GalaxyInstance(url=self.api_url, key=self.user_api_key) if not self.user_api: self.data_stores.append({'name':'Error: user Galaxy API connection was not set up correctly. Try getting another user API key.', 'id':'none'}) return ___________________________________________________________ Please keep all replies on the list by using "reply all" in your mail client. To manage your subscriptions to this and other Galaxy lists, please use the interface at: https://lists.galaxyproject.org/ To search Galaxy mailing lists use the unified search at: http://galaxyproject.org/search/mailinglists/