The current code in:   lib/galaxy/tools/parameters/dynamic_options.py
only searches the top layer of the dict to find the dependency value. 

A fix is provide in pull request
:
#343: Need to traverse the other_value dict to find dependencies for ParamValueFilter in
 


SnpEff  tool_config

    <inputs>
        <param format="vcf,tabular,pileup,bed" name="input" type="data" label="Sequence changes (SNPs, MNPs, InDels)"/>
...
        <conditional name="snpDb">
            <param name="genomeSrc" type="select" label="Genome source">
                <option value="cached">Locally installed reference genome</option>
                <option value="history">Reference genome from your history</option>
                <option value="named">Named on demand</option>
            </param>
            <when value="cached">
                <param name="genomeVersion" type="select" label="Genome">
                    <!--GENOME    DESCRIPTION-->
                    <options from_data_table="snpeff_genomedb">
                           <filter type="unique_value" column="0" />
                    </options>
                </param>
                <param name="extra_annotations" type="select" display="checkboxes" multiple="true" label="Additional Annotations">
                       <help>These are available for only a few genomes</help>
                       <options from_data_table="snpeff_annotations">
                           <filter type="param_value" ref="genomeVersion" key="genome" column="0" />
                           <filter type="unique_value" column="1" />
                       </options>
                </param>



When running workflow:   input.vcf ->  SnpEff

The values in ParamValueFilter filter_options function:

>>> self.ref_name
'genomeVersion'

>>> other_values
{u'spliceSiteSize': '1', u'filterHomHet': 'no_filter', u'outputFormat': 'vcf', u'filterOut': None, u'inputFormat': 'vcf', u'filterIn': 'no_filter', u'udLength': '5000', u'generate_stats': True, u'noLog': True, u'chr': 'None', u'intervals': None, u'snpDb': {'extra_annotations': None, 'regulation': None, 'genomeVersion': 'GRCh37.71', 'genomeSrc': 'cached', '__current_case__': 0}, u'offset': '', u'input': <galaxy.tools.parameters.basic.DummyDataset object at 0x11451b8d0>, u'transcripts': None, u'annotations': ['-canon', '-lof', '-onlyReg']}

Since 
'genomeVersion' isn't in the keys of other_values, but rather in other_values['snpDb']
this failed the assertion:
        assert self.ref_name in other_values, "Required dependency '%s' not found in incoming values" % self.ref_name

Pull request
343:

$ hg diff lib/galaxy/tools/parameters/dynamic_options.py

diff -r 95517f976cca lib/galaxy/tools/parameters/dynamic_options.py
--- a/lib/galaxy/tools/parameters/dynamic_options.py    Thu Feb 27 16:56:25 2014 -0500
+++ b/lib/galaxy/tools/parameters/dynamic_options.py    Fri Feb 28 11:37:04 2014 -0600
@@ -177,8 +177,27 @@
         return self.ref_name
     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 )
+        ## Depth first traversal to find the value for a dependency
+        def get_dep_value(param_name, dep_name, cur_val, layer):
+            dep_val = cur_val
+            if isinstance(layer, dict ):
+                if dep_name in layer:
+                    dep_val = layer[dep_name]
+                if param_name in layer:
+                    return dep_val
+                else:
+                    for l in layer.itervalues():
+                        dep_val = get_dep_value(param_name, dep_name, dep_val, l)
+                        if dep_val:
+                            break
+            elif isinstance( layer, list):
+                for l in layer:
+                    dep_val = get_dep_value(param_name, dep_name, dep_val, l)
+                    if dep_val:
+                        break
+            return None
+        ref = get_dep_value(self.dynamic_option.tool_param.name, self.ref_name, None, other_values)
+        assert not ref, "Required dependency '%s' not found in incoming values" % self.ref_name
         for ref_attribute in self.ref_attribute:
             if not hasattr( ref, ref_attribute ):
                 return [] #ref does not have attribute, so we cannot filter, return empty list


--
James E. Johnson, Minnesota Supercomputing Institute, University of Minnesota