class_docstr: Class for running FiftyOne migrations.
  
  Args:
      head: the current revision
      destination: the destination revision
class_docstr_tok: ["Class","for","running","FiftyOne","migrations",".","Args",":","head",":","the","current","revision","destination",":","the","destination","revision"]
docstr: Runs any required migrations on the specified dataset.
  
  Args:
      dataset_name: the name of the dataset to migrate
      verbose (False): whether to log incremental migrations that are run
docstr_tok: ["Runs","any","required","migrations","on","the","specified","dataset",".","Args",":","dataset_name",":","the","name","of","the","dataset","to","migrate","verbose","(","False",")",":","whether","to","log","incremental","migrations","that","are","run"]
code: def run(self, dataset_name, verbose=False):
      """Runs any required migrations on the specified dataset.
  
      Args:
          dataset_name: the name of the dataset to migrate
          verbose (False): whether to log incremental migrations that are run
      """
      conn = foo.get_db_conn()
      for rev, module in self._revisions:
          if verbose:
              logger.info(
                  "Running v%s %s migration", rev, self.direction
              )
  
          fcn = etau.get_function(self.direction, module)
          fcn(conn, dataset_name)
  
imports: import bisect
  import logging
  import os
  from packaging.requirements import Requirement
  from packaging.version import Version
  import eta.core.utils
  import fiftyone
  import fiftyone.constants
  import fiftyone.core.odm
  import fiftyone.core.utils
label_desc: Use image node_id 9 for calling the MigrationRunner obj's underlying member method code with example usage: obj.run(dataset_name, verbose) without return types