]> git.proxmox.com Git - pve-client.git/blobdiff - PVE/APIClient/Helpers.pm
complete_api_path: minimize completions
[pve-client.git] / PVE / APIClient / Helpers.pm
index ed1822d4a514dea06b3807c6c9feab7097d7fd50..7e4447dd8ab6c9b3a070ec4cedf810dd7bb97e21 100644 (file)
@@ -9,6 +9,9 @@ use File::Path qw(make_path);
 
 use PVE::APIClient::JSONSchema;
 use PVE::APIClient::Exception qw(raise);
+use PVE::APIClient::CLIFormatter;
+use PVE::APIClient::CLIHandler;
+use PVE::APIClient::PTY;
 use Encode::Locale;
 use Encode;
 use HTTP::Status qw(:constants);
@@ -17,30 +20,13 @@ my $pve_api_definition;
 
 my $pve_api_definition_fn = "/usr/share/pve-client/pve-api-definition.dat";
 
-my $method_map = {
+our $method_map = {
     create => 'POST',
     set => 'PUT',
     get => 'GET',
     delete => 'DELETE',
 };
 
-my $default_output_format = 'text';
-my $client_output_format =  $default_output_format;
-
-sub set_output_format {
-    my ($format) = @_;
-
-    if (!defined($format)) {
-       $client_output_format =  $default_output_format;
-    } else {
-       $client_output_format =  $format;
-    }
-}
-
-sub get_output_format {
-    return $client_output_format;
-}
-
 my $__real_remove_formats; $__real_remove_formats = sub {
     my ($properties) = @_;
 
@@ -217,21 +203,20 @@ sub complete_api_path {
        if (my $children = $info->{children}) {
            foreach my $c (@$children) {
                my $ctext = $c->{text};
+               push @$res, "${prefix}$ctext" if $ctext =~ m/^\Q$rest/;
                if ($ctext =~ m/^\{(\S+)\}$/) {
-                   push @$res, "$prefix$ctext";
-                   push @$res, "$prefix$ctext/";
-                   if (length($rest)) {
+                   if (length($rest) && $rest ne $ctext) {
                        push @$res, "$prefix$rest";
-                       push @$res, "$prefix$rest/";
                    }
-               } elsif ($ctext =~ m/^\Q$rest/) {
-                   push @$res, "$prefix$ctext";
-                   push @$res, "$prefix$ctext/" if $c->{children};
                }
            }
        }
     }
 
+    if (scalar(@$res) == 1) {
+       $res = [$res->[0], "$res->[0]/"];
+    }
+
     return $res;
 }
 
@@ -395,5 +380,19 @@ sub ticket_cache_update {
     die $@ if $@;
 }
 
+sub extract_even_elements {
+    my ($list) = @_;
+
+    my $ind = 0;
+    return [ grep { ($ind++ % 2) == 0 } @$list ];
+}
+
+sub print_ordered_result {
+    my ($property_list, $data, $result_schema, $options) = @_;
+
+    my $param_order = extract_even_elements($property_list);
+
+    PVE::APIClient::CLIFormatter::print_api_result($data, $result_schema, $param_order, $options);
+}
 
 1;