Question: Encoding problem with return value from tool's custom dynamic_options function
0
gravatar for o.pelz
2.4 years ago by
o.pelz0
o.pelz0 wrote:

Dear Biostars community,

I am having problems developing a python function to return some custom information to a Galaxy tool's dynamic_options parameter function.

It seems like there is something wrong with the character encoding of the return value but I cannot resolve it. The custom function should return a unique string which including a unix timestamp.

And the generation of the unix timestamp seems to be the problem.

The tool xml looks like this (this works fine):

<inputs>
<param name="ftp_dynamic_upload_dir" type="select" label="FTP upload dir" dynamic_options="generate_ftp_download_dir( trans=__trans__ )"/>
</inputs>

Now the following function gets called correctly:

#!/usr/bin/env python                                                                                                                       
import time                                      
from pprint import pprint

def generate_ftp_download_dir(trans = None):
   if trans:                                                                                
      username = trans.user.username                            
      unix_timestamp = str(int(time.time()))                              
      upload_path = "galaxyuser-" + username + "-" + unix_timestamp            
      return_obj = []                                                       
      return_obj.append( ( upload_path, upload_path, True) )
      return return_obj        
   return []

If I load this tool in galaxy the correct value appears in the dropdown menu, e.g.

galaxyuser-oliverpelz-1468398607

Now if I submit the form I receive an error, here are the details from Firebug network tool:

POST:

{"tool_id":"my-ftp-downloader","tool_version":"0.0.1","inputs":{"ftp_dynamic_upload_dir":"galaxyuser-oliverpelz-1468398607"
}}

RESPONSE:

{"err_data": {"ftp_dynamic_upload_dir": "An invalid option was selected for ftp_dynamic_upload_dir, u'galaxyuser-oliverpelz-1468398607'
, please verify."}, "err_msg": "Unknown error occurred while processing request.", "err_code": 0}

By analyzing the response I see that the ftp_dynamic_upload_dir parameter is encoded as UTF8 (Have a look at the u'1468332679' error value. ). So if I change the generated unix_timestamp string from the str() function to a string literal in our python function there are no errors:

#!/usr/bin/env python                             

import time                                  
from pprint import pprint

def generate_ftp_download_dir(trans = None):
    if trans:                                                                           
       username = trans.user.username                       
       #unix_timestamp = str(int(time.time()))                         
       unix_timestamp = "12345"
       upload_path = "galaxyuser-" + username + "-" + unix_timestamp       
       return_obj = []                                                  
       return_obj.append( ( upload_path, upload_path, True) )
       return return_obj   
    return []

The submit's response works here:

POST:

{"tool_id":"my-ftp-downloader","tool_version":"0.0.1","inputs":{"ftp_dynamic_upload_dir":"galaxyuser-oliverpelz-12345"
}}

RESPONSE:

{"outputs": [], "implicit_collections": [], "jobs": [{"tool_id": "my-ftp-downloader", "update_time"
: "2016-07-13T08:34:19.929165", "exit_code": null, "state": "new", "create_time": "2016-07-13T08:34:19
.929151", "model_class": "Job", "id": "7f27ab690ef37b85"}], "output_collections": []}

So this seem like an encoding problem. If you compare both POST's parameter, there seem no difference in the String encoding though???

If I try to change encoding to say ascii in the return value of the function it does not change anything and the error remains.

upload_path = upload_path.encode('ascii', 'ignore')

Is there a bug or do I miss something? As I need this dynamic part of the unix timestamp for uniqueness is there any other way to solve this encoding problem?

Thank you very much for your help

Oliver

utf-8 galaxy python • 630 views
ADD COMMENTlink modified 2.4 years ago • written 2.4 years ago by o.pelz0
Please log in to add an answer.

Help
Access

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.
Powered by Biostar version 16.09
Traffic: 171 users visited in the last hour