Asserts an engine is configured and runs the registered migration in the
        given direction

        :param migration_name: key to a registered class in the
                               `migration_registry`

        :param direction: Can be on of two values, UP or DOWN

def run(self, migration_name, direction):
        """
        Asserts an engine is configured and runs the registered migration in the
        given direction

        :param migration_name: key to a registered class in the
                               `migration_registry`

        :param direction: Can be on of two values, UP or DOWN
        """
        if not self.engine:
            raise AttributeError("No engine configured for MigrationManager")

        connection = self.engine.connect()
        trans = connection.begin()
        try:
            migration = migration_registry[migration_name]()
            if migration.preflight():
                trans = connection.begin()

            if direction == Direction.UP:
                migration.up(connection)
            elif direction == Direction.DOWN:
                migration.down(connection)
            else:
                raise UnknowDirectionError

            if migration.check():
                trans.commit()
            else:
                raise MigrationError("Migration failed consistency checks")
        except Exception, e:
            trans.rollback()
            #XXX:dc: do more to introspect why we failed
            raise e