def track_execution(cmd, project, experiment, **kwargs):
    """Guard the execution of the given command.

    The given command (`cmd`) will be executed inside a database context.
    As soon as you leave the context we will commit the transaction.
    Any necessary modifications to the database can be identified inside
    the context with the RunInfo object.

    Args:
        cmd: The command we guard.
        project: The project we track for.
        experiment: The experiment we track for.

    Yields:
        RunInfo: A context object that carries the necessary
            database transaction.
    """

    runner = RunInfo(cmd=cmd, project=project, experiment=experiment, **kwargs)
    yield runner
    runner.commit()
Guard the execution of the given command.

    The given command (`cmd`) will be executed inside a database context.
    As soon as you leave the context we will commit the transaction.
    Any necessary modifications to the database can be identified inside
    the context with the RunInfo object.

    Args:
        cmd: The command we guard.
        project: The project we track for.
        experiment: The experiment we track for.

    Yields:
        RunInfo: A context object that carries the necessary
            database transaction.