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 )