'Run a set of externals against the file at pre_path
Only one external will run (the first one to accept the file)
Return the new extension for the file.'

def run_externals(self, current_extension, pre_path, externals):

    with alt_file(pre_path) as tmp_file:
        for ExternalClass in externals:
            external = ExternalClass(current_extension, pre_path, tmp_file)
            external.run()
            if external.accepted():
                return external.output_extension
            elif external.refused():
                continue
            elif external.discarded():
                self.discard()
                break
            raise Exception('External    {0}    has    an    unknown    status:    {1}'.format(external, external.status))
        return current_extension
