Merge pull request #2374 from guerler/fix_error_log_000

Revise asserts triggering false exceptions for dynamic parameters
This commit is contained in:
John Chilton
2016-05-23 09:14:35 -04:00
3 changed files with 15 additions and 36 deletions
+12 -29
View File
@@ -1005,15 +1005,7 @@ class SelectToolParameter( ToolParameter ):
d = super( SelectToolParameter, self ).to_dict( trans )
# Get options, value.
options = []
try:
options = self.get_options( trans, other_values )
except AssertionError:
# we dont/cant set other_values (the {} above), so params that require other params to be filled will error:
# required dependency in filter_options
# associated DataToolParam in get_column_list
pass
options = self.get_options( trans, other_values )
d[ 'options' ] = options
if options:
value = options[0][1]
@@ -1195,10 +1187,8 @@ class ColumnListParameter( SelectToolParameter ):
Generate a select list containing the columns of the associated
dataset (if found).
"""
# No value indicates a configuration error
assert self.data_ref in other_values, "Value for associated data reference not found (data_ref)."
# Get the value of the associated data reference (a dataset)
dataset = other_values[ self.data_ref ]
dataset = other_values.get( self.data_ref, None )
# Check if a dataset is selected
if not dataset:
return []
@@ -1232,8 +1222,7 @@ class ColumnListParameter( SelectToolParameter ):
"""
options = []
if self.usecolnames: # read first row - assume is a header with metadata useful for making good choices
assert self.data_ref in other_values, "Value for associated data reference not found (data_ref)."
dataset = other_values[ self.data_ref ]
dataset = other_values.get( self.data_ref, None )
try:
head = open( dataset.get_file_name(), 'r' ).readline()
cnames = head.rstrip().split( '\t' )
@@ -1260,6 +1249,8 @@ class ColumnListParameter( SelectToolParameter ):
return SelectToolParameter.get_initial_value( self, trans, other_values )
def get_legal_values( self, trans, other_values ):
if self.data_ref not in other_values:
raise ValueError( "Value for associated data reference not found (data_ref)." )
return set( self.get_column_list( trans, other_values ) )
def get_dependencies( self ):
@@ -1493,10 +1484,11 @@ class DrillDownSelectToolParameter( SelectToolParameter ):
return None
if not isinstance( value, list ):
value = [ value ]
if not( self.repeat ) and len( value ) > 1:
assert self.multiple, "Multiple values provided but parameter %s is not expecting multiple values" % self.name
if not self.repeat and len( value ) > 1 and not self.multiple:
raise ValueError( "Multiple values provided but parameter %s is not expecting multiple values." % self.name )
rval = []
assert legal_values, "Parameter %s requires a value, but has no legal values defined" % self.name
if not legal_values:
raise ValueError( "Parameter %s requires a value, but has no legal values defined." % self.name )
for val in value:
if val not in legal_values:
raise ValueError( "An invalid option was selected for %s, %r, please verify" % ( self.name, val ) )
@@ -1533,9 +1525,8 @@ class DrillDownSelectToolParameter( SelectToolParameter ):
for val in value:
options = get_options_list( val )
rval.extend( options )
if len( rval ) > 1:
if not self.repeat:
assert self.multiple, "Multiple values provided but parameter is not expecting multiple values"
if not self.repeat and len( rval ) > 1 and not self.multiple:
raise ValueError( "Multiple values provided but parameter %s is not expecting multiple values." % self.name )
rval = self.separator.join( map( value_map, rval ) )
if self.tool is None or self.tool.options.sanitize:
if self.sanitizer:
@@ -1600,15 +1591,7 @@ class DrillDownSelectToolParameter( SelectToolParameter ):
def to_dict( self, trans, view='collection', value_mapper=None, other_values={} ):
# skip SelectToolParameter (the immediate parent) bc we need to get options in a different way here
d = ToolParameter.to_dict( self, trans )
options = []
try:
options = self.get_options( trans=trans, other_values=other_values )
except KeyError:
# will sometimes error if self.is_dynamic and self.filtered
# bc we dont/cant fill out other_values above ({})
pass
d['options'] = options
d['options'] = self.get_options( trans=trans, other_values=other_values )
d['display'] = self.display
return d
@@ -124,7 +124,6 @@ class DataMetaFilter( Filter ):
if self.multiple:
return dataset_value in file_value.split( self.separator )
return file_value == dataset_value
assert self.ref_name in other_values or ( trans is not None and trans.workflow_building_mode), "Required dependency '%s' not found in incoming values" % self.ref_name
ref = other_values.get( self.ref_name, None )
is_data = isinstance( ref, galaxy.tools.wrappers.DatasetFilenameWrapper )
is_data_list = isinstance( ref, galaxy.tools.wrappers.DatasetListWrapper ) or isinstance( ref, list )
@@ -146,7 +145,7 @@ class DataMetaFilter( Filter ):
else:
meta_value = ref.metadata.get( self.key, None )
if meta_value is None: # assert meta_value is not None, "Required metadata value '%s' not found in referenced dataset" % self.key
if meta_value is None:
return [ ( disp_name, optval, selected ) for disp_name, optval, selected in options ]
if self.column is not None:
@@ -208,7 +207,6 @@ class ParamValueFilter( Filter ):
def filter_options( self, options, trans, other_values ):
if trans is not None and trans.workflow_building_mode:
return []
assert self.ref_name in other_values, "Required dependency '%s' not found in incoming values" % self.ref_name
ref = other_values.get( self.ref_name, None )
for ref_attribute in self.ref_attribute:
if not hasattr( ref, ref_attribute ):
@@ -381,7 +379,6 @@ class RemoveValueFilter( Filter ):
def filter_options( self, options, trans, other_values ):
if trans is not None and trans.workflow_building_mode:
return options
assert self.value is not None or ( self.ref_name is not None and self.ref_name in other_values ) or (self.meta_ref is not None and self.meta_ref in other_values ) or ( trans is not None and trans.workflow_building_mode), Exception( "Required dependency '%s' or '%s' not found in incoming values" % ( self.ref_name, self.meta_ref ) )
def compare_value( option_value, filter_value ):
if isinstance( filter_value, list ):
@@ -582,7 +579,6 @@ class DynamicOptions( object ):
if self.dataset_ref_name:
dataset = other_values.get( self.dataset_ref_name, None )
if not dataset or not hasattr( dataset, 'file_name' ):
log.warn( "Required dataset '%s' missing from input" % self.dataset_ref_name )
return [] # no valid dataset in history
# Ensure parsing dynamic options does not consume more than a megabyte worth memory.
path = dataset.file_name
+2 -2
View File
@@ -20,8 +20,8 @@ class SelectToolParameterTestCase( BaseParameterTestCase ):
self.options_xml = '''<options><filter type="data_meta" ref="input_bam" key="dbkey"/></options>'''
try:
self.param.from_json("42", self.trans)
except AssertionError as err:
assert str(err) == "Required dependency 'input_bam' not found in incoming values"
except ValueError as err:
assert str(err) == "Parameter my_name requires a value, but has no legal values defined."
return
assert False