def info_action()

in dora/info.py [0:0]


def info_action(args, main: DecoratedMain):
    shepherd = Shepherd(main)
    if args.job_id is not None:
        if len(args.argv) > 0:
            fatal("If a job id is provided, you shouldn't pass argv.")
        sheep = shepherd.get_sheep_from_job_id(args.job_id)
        if sheep is None:
            fatal("Could not find any matching sheep")
    else:
        sheep = shepherd.get_sheep_from_argv(args.argv)
    log("Found sheep", sheep)
    log("Folder is", sheep.xp.folder)
    if sheep.log:
        log("Main log is", sheep.log)
    if args.metrics:
        metrics = main.get_xp_history(sheep.xp)
        out = f"Metrics[{len(metrics)}]: "
        if metrics:
            out += json.dumps(metrics[-1])
        log(out)
    if args.cancel:
        if sheep.job is None:
            log("Could not cancel non existing job")
        elif sheep.is_done():
            log("Job is not running")
        else:
            sheep.job.cancel()
    if args.log:
        if sheep.log is None:
            fatal("No log, sheep hasn't been scheduled yet.")
        if not sheep.log.exists():
            fatal(f"Log {sheep.log} does not exist")
        shutil.copyfileobj(open(sheep.log, "r"), sys.stdout, 4096)
    if args.tail:
        if not sheep.log.exists():
            fatal(f"Log {sheep.log} does not exist")
        os.execvp("tail", ["tail", "-n", "200", "-f", sheep.log])