]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/RESTHandler.pm
PVE::RESTHandler::generate_usage_str - new static method to generate usage from ...
[pve-common.git] / src / PVE / RESTHandler.pm
index c315813a02f2e88bbe51534accf2de3a869adc85..715404ad1139e01199866b3b6819f454813f267c 100644 (file)
@@ -566,7 +566,7 @@ my $compute_param_mapping_hash = sub {
 
 # generate usage information for command line tools
 #
-# $name        ... the name of the method
+# $info        ... method info
 # $prefix      ... usually something like "$exename $cmd" ('pvesm add')
 # $arg_param   ... list of parameters we want to get as ordered arguments 
 #                  on the command line (or single parameter name for lists)
@@ -576,14 +576,14 @@ my $compute_param_mapping_hash = sub {
 #   'short'    ... command line only (text, one line)
 #   'full'     ... text, include description
 #   'asciidoc' ... generate asciidoc for man pages (like 'full')
-# $param_mapping_func ... mapping for string parameters to file path parameters
-sub usage_str {
-    my ($self, $name, $prefix, $arg_param, $fixed_param, $format, $param_mapping_func) = @_;
+# $param_cb ... mapping for string parameters to file path parameters
+sub getopt_usage {
+    my ($info, $prefix, $arg_param, $fixed_param, $format, $param_cb) = @_;
 
     $format = 'long' if !$format;
 
-    my $info = $self->map_method_by_name($name);
     my $schema = $info->{parameters};
+    my $name = $info->{name};
     my $prop = $schema->{properties};
 
     my $out = '';
@@ -623,12 +623,12 @@ sub usage_str {
 
        my $type_text = $prop->{$k}->{type} || 'string';
 
-       my $param_mapping_hash = {};
+       my $param_map = {};
 
-       if (defined($param_mapping_func)) {
-           my $mapping = $param_mapping_func->($name);
-           $param_mapping_hash = $compute_param_mapping_hash->($mapping);
-           next if $k eq 'password' && $param_mapping_hash->{$k} && !$prop->{$k}->{optional};
+       if (defined($param_cb)) {
+           my $mapping = $param_cb->($name);
+           $param_map = $compute_param_mapping_hash->($mapping);
+           next if $k eq 'password' && $param_map->{$k} && !$prop->{$k}->{optional};
        }
 
        my $base = $k;
@@ -642,8 +642,7 @@ sub usage_str {
        }
 
 
-       $opts .= $get_property_description->($base, 'arg', $prop->{$k}, $format,
-                                           $param_mapping_hash->{$k});
+       $opts .= $get_property_description->($base, 'arg', $prop->{$k}, $format, $param_map->{$k});
 
        if (!$prop->{$k}->{optional}) {
            $args .= " " if $args;
@@ -680,6 +679,14 @@ sub usage_str {
     return $out;
 }
 
+sub usage_str {
+    my ($self, $name, $prefix, $arg_param, $fixed_param, $format, $param_cb) = @_;
+
+    my $info = $self->map_method_by_name($name);
+
+    return getopt_usage($info, $prefix, $arg_param, $fixed_param, $format, $param_cb);
+}
+
 # generate docs from JSON schema properties
 sub dump_properties {
     my ($prop, $format, $style, $filterFn) = @_;
@@ -727,9 +734,9 @@ sub dump_properties {
 }
 
 my $replace_file_names_with_contents = sub {
-    my ($param, $param_mapping_hash) = @_;
+    my ($param, $param_map) = @_;
 
-    while (my ($k, $d) = each %$param_mapping_hash) {
+    while (my ($k, $d) = each %$param_map) {
        next if $d->{interactive}; # handled by the JSONSchema's get_options code
        $param->{$k} = $d->{func}->($param->{$k})
            if defined($param->{$k});
@@ -739,18 +746,18 @@ my $replace_file_names_with_contents = sub {
 };
 
 sub cli_handler {
-    my ($self, $prefix, $name, $args, $arg_param, $fixed_param, $param_mapping_func) = @_;
+    my ($self, $prefix, $name, $args, $arg_param, $fixed_param, $param_cb) = @_;
 
     my $info = $self->map_method_by_name($name);
 
     my $res;
     eval {
-       my $param_mapping_hash = {};
-       $param_mapping_hash = $compute_param_mapping_hash->($param_mapping_func->($name)) if $param_mapping_func;
-       my $param = PVE::JSONSchema::get_options($info->{parameters}, $args, $arg_param, $fixed_param, $param_mapping_hash);
+       my $param_map = {};
+       $param_map = $compute_param_mapping_hash->($param_cb->($name)) if $param_cb;
+       my $param = PVE::JSONSchema::get_options($info->{parameters}, $args, $arg_param, $fixed_param, $param_map);
 
-       if (defined($param_mapping_hash)) {
-           &$replace_file_names_with_contents($param, $param_mapping_hash);
+       if (defined($param_map)) {
+           $replace_file_names_with_contents->($param, $param_map);
        }
 
        $res = $self->handle($info, $param);
@@ -760,7 +767,7 @@ sub cli_handler {
 
        die $err if !$ec || $ec ne "PVE::Exception" || !$err->is_param_exc();
        
-       $err->{usage} = $self->usage_str($name, $prefix, $arg_param, $fixed_param, 'short',  $param_mapping_func);
+       $err->{usage} = $self->usage_str($name, $prefix, $arg_param, $fixed_param, 'short',  $param_cb);
 
        die $err;
     }