root/galaxy-central/lib/galaxy/tools/parameters/__init__.py

リビジョン 2, 4.2 KB (コミッタ: hatakeyama, 14 年 前)

import galaxy-central

行番号 
1"""
2Classes encapsulating Galaxy tool parameters.
3"""
4
5from basic import *
6from grouping import *
7from galaxy.util.json import *
8
9def visit_input_values( inputs, input_values, callback, name_prefix="", label_prefix="" ):
10    """
11    Given a tools parameter definition (`inputs`) and a specific set of
12    parameter `values`, call `callback` for each non-grouping parameter,
13    passing the parameter object, value, a constructed unique name,
14    and a display label.
15   
16    If the callback returns a value, it will be replace the old value.
17   
18    FIXME: There is redundancy between this and the visit_inputs methods of
19           Repeat and Group. This tracks labels and those do not. It would
20           be nice to unify all the places that recursively visit inputs.
21    """   
22    for input in inputs.itervalues():
23        if isinstance( input, Repeat ) or isinstance( input, UploadDataset ):
24            for i, d in enumerate( input_values[ input.name ] ):
25                index = d['__index__']
26                new_name_prefix = name_prefix + "%s_%d|" % ( input.name, index )
27                new_label_prefix = label_prefix + "%s %d > " % ( input.title, i + 1 )
28                visit_input_values( input.inputs, d, callback, new_name_prefix, new_label_prefix )
29        elif isinstance( input, Conditional ):
30            values = input_values[ input.name ]
31            current = values["__current_case__"]
32            label_prefix = label_prefix
33            new_name_prefix = name_prefix + input.name + "|"
34            visit_input_values( input.cases[current].inputs, values, callback, new_name_prefix, label_prefix )
35        else:
36            new_value = callback( input,
37                                  input_values[input.name],
38                                  prefixed_name = name_prefix + input.name,
39                                  prefixed_label = label_prefix + input.label )
40            if new_value:
41                input_values[input.name] = new_value
42
43def check_param( trans, param, incoming_value, param_values ):
44    """
45    Check the value of a single parameter `param`. The value in
46    `incoming_value` is converted from its HTML encoding and validated.
47    The `param_values` argument contains the processed values of
48    previous parameters (this may actually be an ExpressionContext
49    when dealing with grouping scenarios).
50    """
51    value = incoming_value
52    error = None
53    try:
54        if value is not None or isinstance(param, DataToolParameter):
55            # Convert value from HTML representation
56            value = param.from_html( value, trans, param_values )
57            # Allow the value to be converted if neccesary
58            filtered_value = param.filter_value( value, trans, param_values )
59            # Then do any further validation on the value
60            param.validate( filtered_value, trans.history )
61        elif value is None and isinstance( param, SelectToolParameter ):
62           # An empty select list or column list
63           param.validate( value, trans.history )
64    except ValueError, e:
65        error = str( e )
66    return value, error
67
68def params_to_strings( params, param_values, app ):
69    """
70    Convert a dictionary of parameter values to a dictionary of strings
71    suitable for persisting. The `value_to_basic` method of each parameter
72    is called to convert its value to basic types, the result of which
73    is then json encoded (this allowing complex nested parameters and
74    such).
75    """
76    rval = dict()
77    for key, value in param_values.iteritems():
78        if key in params:
79            value = params[ key ].value_to_basic( value, app )
80        rval[ key ] = str( to_json_string( value ) )
81    return rval
82   
83def params_from_strings( params, param_values, app, ignore_errors=False ):
84    """
85    Convert a dictionary of strings as produced by `params_to_strings`
86    back into parameter values (decode the json representation and then
87    allow each parameter to convert the basic types into the parameters
88    preferred form).
89    """
90    rval = dict()
91    for key, value in param_values.iteritems():
92        value = json_fix( from_json_string( value ) )
93        if key in params:
94            value = params[key].value_from_basic( value, app, ignore_errors )
95        rval[ key ] = value
96    return rval
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。