def _info(self, source, key, filetype, ignore):
specs, mdata = [], {}<EOL>mdata_clashes  = set()<EOL>for spec in source.specs:<EOL><INDENT>if key not in spec:<EOL><INDENT>raise Exception("<STR_LIT>" % key)<EOL><DEDENT>mdata = dict((k,v) for (k,v) in filetype.metadata(spec[key]).items()<EOL>if k not in ignore)<EOL>mdata_spec = {}<EOL>mdata_spec.update(spec)<EOL>mdata_spec.update(mdata)<EOL>specs.append(mdata_spec)<EOL>mdata_clashes = mdata_clashes | (set(spec.keys()) & set(mdata.keys()))<EOL><DEDENT>if mdata_clashes:<EOL><INDENT>self.warning("<STR_LIT>")<EOL><DEDENT>return specs<EOL>
Generates the union of the source.specs and the metadata
dictionary loaded by the filetype object.