docs: def _search(self, mdb, query, filename, year=None, auto=False):
          """ Search the movie using all available datasources and let the user
              select a result. Return the choosen datasource and produced movie dict.
  
          If auto is enabled, directly returns the first movie found.
          """
          choices = []
          for datasource, movie in mdb.search(query, year=year):
              if auto:
                  return datasource, movie
              if movie.get('directors'):
                  directors = ' by '
                  if len(movie['directors']) > 1:
                      directors += '%s and %s' % (', '.join(movie['directors'][0:-1]),
                                                            movie['directors'][-1])
                  else:
                      directors += movie['directors'][0]
              else:
                  directors = ''
              fmt = u'<b>{title}</b> ({year}){directors} [{datasource}]'
              choices.append(option((datasource, movie), fmt, title=movie['title'],
                                                              year=movie.get('year', 'Unknown'),
                                                              directors=directors,
                                                              datasource=datasource.name))
  
          if not choices:
              printer.p('No results to display for the file: {fn}', fn=filename)
              return None, None
  
          choices.append(option(('manual', None), 'Enter information manually'))
          choices.append(option(('abort', None), 'None of these'))
          printer.p('Please choose the relevant movie for the file: {fn}', fn=filename, end='\n\n')
          return printer.choice(choices)