NBI-Slurm

 view release on metacpan or  search on metacpan

bin/nbilaunch  view on Meta::CPAN

                file   => $file,
                name   => $declared_name,
                desc   => $desc,
                ver    => $ver,
                obj    => $obj,
                source => $source,
            };
        }
    }

    if (!@found) {
        say "No launchers found.";
        return;
    }

    say "Available launchers:";
    for my $l (sort { $a->{name} cmp $b->{name} } @found) {
        my $ver_str = $l->{ver} ? " v$l->{ver}" : '';
        printf "  %-20s %s  [%s]\n", $l->{name} . $ver_str, $l->{desc}, $l->{source};
        if ($verbose && $l->{obj}) {
            my ($act_type, $act_val) = each %{ $l->{obj}{activate} };
            printf "    Activation: %s => %s\n", $act_type, $act_val;
            my @inputs = grep { !$_->{slurm_sync} } @{ $l->{obj}{inputs} };
            printf "    Inputs: %s\n", join(', ', map { $_->{name} } @inputs);
        }
    }
}

# ── _parse_tool_args($launcher, @argv) ────────────────────────────────────────
# Parse tool-specific argv using the launcher's arg_spec().
# Returns a flat %args hash: name => value.
sub _parse_tool_args {
    my ($launcher, @argv) = @_;
    my $spec  = $launcher->arg_spec();
    my %args;

    # Build a Getopt::Long spec from inputs + params + outdir
    my @getopt_spec;
    my %targets;   # getopt key → args key

    my @all_opts = (
        @{ $spec->{inputs}  },
        @{ $spec->{params}  },
    );

    for my $opt (@all_opts) {
        my $name = $opt->{name};
        my $type = $opt->{type} // 'string';
        my $go_type = ($type eq 'int')   ? '=i'
                    : ($type eq 'float') ? '=f'
                    :                      '=s';
        my $key = $name . $go_type;
        $targets{$name} = $name;
        push @getopt_spec, $key => \$args{$name};
    }

    # outdir
    push @getopt_spec, 'outdir=s' => \$args{outdir};
    push @getopt_spec, 'o=s'      => \$args{outdir};   # short form

    local @ARGV = @argv;
    Getopt::Long::GetOptions(@getopt_spec)
        or die "ERROR: bad tool options for '$launcher->{name}'. Run 'nbilaunch $launcher->{name} --help'.\n";

    return %args;
}

# ── _print_tool_help($launcher) ───────────────────────────────────────────────
sub _print_tool_help {
    my ($launcher) = @_;
    my $spec = $launcher->arg_spec();
    my $name = $spec->{name};
    my $ver  = $spec->{version};
    my $desc = $spec->{description};
    my ($act_type, $act_val) = each %{ $spec->{activate} };
    my $sd   = $spec->{slurm_defaults};

    say "$name v$ver — $desc";
    say "Activated via: $act_type $act_val";
    say "";
    say "USAGE";

    # Build usage line
    my @req_inputs = grep { $_->{required} } @{ $spec->{inputs} };
    my @opt_inputs = grep { !$_->{required} } @{ $spec->{inputs} };
    my $usage = "  nbilaunch $name";
    $usage .= " --$_->{name} " . uc($_->{type} // 'VALUE') for @req_inputs;
    $usage .= " [--$_->{name} " . uc($_->{type} // 'VALUE') . "]" for @opt_inputs;
    $usage .= " --outdir DIR [options]";
    say $usage;
    say "";

    if (@{ $spec->{inputs} }) {
        say "INPUTS";
        for my $i (@{ $spec->{inputs} }) {
            my $req = $i->{required} ? '  [required]' : '';
            printf "  --%-14s %s%s\n", "$i->{name} " . uc($i->{type} // 'VALUE'),
                   $i->{help} // '', $req;
        }
        say "";
    }

    say "OUTPUT";
    printf "  --%-14s %s  [required]\n", "outdir DIR", "Output directory";
    say "";

    my @user_params = grep { !$_->{slurm_sync} } @{ $spec->{params} };
    if (@user_params) {
        say "TOOL PARAMETERS";
        for my $p (@user_params) {
            my $default_str = '';
            $default_str = "  [default: $p->{default}]" if defined $p->{default};
            $default_str .= "  (override with \$$p->{default_env})" if $p->{default_env};
            printf "  --%-14s %s%s\n", "$p->{name} " . uc($p->{type} // 'VALUE'),
                   $p->{help} // '', $default_str;
        }
        say "";
    }

    say "SLURM OPTIONS";
    printf "  --%-14s %s\n", "queue STR",      "[default: $sd->{queue}]";



( run in 0.620 second using v1.01-cache-2.11-cpan-800906f7e73 )