[pve-devel] r5106 - pve-common/trunk

svn-commits at proxmox.com svn-commits at proxmox.com
Fri Sep 10 09:43:40 CEST 2010


Author: dietmar
Date: 2010-09-10 07:43:40 +0000 (Fri, 10 Sep 2010)
New Revision: 5106

Modified:
   pve-common/trunk/CLIHandler.pm
   pve-common/trunk/ChangeLog
   pve-common/trunk/JSONSchema.pm
   pve-common/trunk/RESTHandler.pm
   pve-common/trunk/Tools.pm
Log:
	* Tools.pm (kvmkeymaps): moved from PVE::Utils.

	* JSONSchema.pm: add a new attribute caled 'typetext' (any better
	name?), used to generate nice docs.

	* RESTHandler.pm (usage_str): only print indexed options
	once (-vlan\d+ -scsi\d+)
	(usage_str): sort options
	(usage_str): use Text::Wrap to format output



Modified: pve-common/trunk/CLIHandler.pm
===================================================================
--- pve-common/trunk/CLIHandler.pm	2010-09-09 09:22:06 UTC (rev 5105)
+++ pve-common/trunk/CLIHandler.pm	2010-09-10 07:43:40 UTC (rev 5106)
@@ -45,7 +45,7 @@
 	raise_param_exc({ cmd => "no such command '$cmd'"}) if !$class;
 
 	my $str = $class->usage_str($name, "$exename $cmd", $arg_param, $uri_param, 'full');
-	print $str;
+	print "$str\n";
 
 	return undef;
 

Modified: pve-common/trunk/ChangeLog
===================================================================
--- pve-common/trunk/ChangeLog	2010-09-09 09:22:06 UTC (rev 5105)
+++ pve-common/trunk/ChangeLog	2010-09-10 07:43:40 UTC (rev 5106)
@@ -1,5 +1,17 @@
+2010-09-10  Proxmox Support Team  <support at proxmox.com>
+
+	* Tools.pm (kvmkeymaps): moved from PVE::Utils.
+
+	* JSONSchema.pm: add a new attribute caled 'typetext' (any better
+	name?), used to generate nice docs.
+
 2010-09-08  Proxmox Support Team  <support at proxmox.com>
 
+	* RESTHandler.pm (usage_str): only print indexed options
+	once (-vlan\d+ -scsi\d+)
+	(usage_str): sort options
+	(usage_str): use Text::Wrap to format output
+
 	* JSONSchema.pm (check_format): revert previous change - to keep
 	it simply
 

Modified: pve-common/trunk/JSONSchema.pm
===================================================================
--- pve-common/trunk/JSONSchema.pm	2010-09-09 09:22:06 UTC (rev 5105)
+++ pve-common/trunk/JSONSchema.pm	2010-09-10 07:43:40 UTC (rev 5106)
@@ -345,10 +345,7 @@
 			  join(", ", @$ea) . "'");
 	    }
 	}
- 
     }
-
-
 }
 
 sub validate {
@@ -426,6 +423,11 @@
 	    optional => 1,
 	    description => "This indicates the maximum value for the instance property when the type of the instance value is a number.",
 	},
+	typetext => {
+	    type => "string",
+	    optional => 1,
+	    description => "A text representation of the type (used to generate documentation).",
+	},
 	pattern => {
 	    type => "string",
 	    format => "regex",

Modified: pve-common/trunk/RESTHandler.pm
===================================================================
--- pve-common/trunk/RESTHandler.pm	2010-09-09 09:22:06 UTC (rev 5105)
+++ pve-common/trunk/RESTHandler.pm	2010-09-10 07:43:40 UTC (rev 5106)
@@ -6,6 +6,7 @@
 use PVE::Exception qw(raise raise_param_exc);
 use PVE::JSONSchema;
 use HTTP::Status qw(:constants :is status_message);
+use Text::Wrap;
 
 # fixme: use new PVE::Exception
 
@@ -237,13 +238,29 @@
 	$args .= $prop->{$p} && $prop->{$p}->{optional} ? "[<$p>]" : "<$p>";
     }
 
-    my $get_type_str = sub {
+   my $get_type_text = sub {
 	my ($k) = @_;
 
 	my $phash = $prop->{$k};
 
-	my $type =  $phash->{format} || $phash->{type} || 'string';
+	if ($phash->{typetext}) {
+	    return $phash->{typetext};
+	} elsif ($phash->{enum}) {
+	    return "(" . join(' | ', sort @{$phash->{enum}}) . ")";
+	} elsif ($phash->{pattern}) {
+	    return $phash->{pattern};
+	} elsif ($phash->{type} eq 'integer' || $phash->{type} eq 'number') {
+	    if (defined($phash->{minimum}) && defined($phash->{maximum})) {
+		return "$phash->{type} ($phash->{minimum} - $phash->{maximum})";
+	    } elsif (defined($phash->{minimum})) {
+		return "$phash->{type} ($phash->{minimum} - N)";
+	    } elsif (defined($phash->{maximum})) {
+		return "$phash->{type} (-N - $phash->{maximum})";
+	    }
+	}
 
+	my $type = $phash->{type} || 'string';
+
 	return $type;
     };
 
@@ -255,24 +272,25 @@
 	my $res = '';
 
 	my $descr = $phash->{description} || "no description available";
-	my $type =  &$get_type_str($k);
+	chomp $descr;
 
+	my $type =  &$get_type_text($k);
+
 	if ($hidepw && $k eq 'password') {
 	    $type = '';
 	}
-
-	$res .= sprintf "  %-10s %-10s   $descr\n", $display_name, "$type";
-	my $indend = "                          ";
-	if ($phash->{enum}) {
-	    $res .= sprintf "${indend}possible values: %s\n",  join ('|', @{$phash->{enum}});
-	}	
-	if ($phash->{minimum}) {
-	    $res .= "${indend}minimum: $phash->{minimum}\n";
+	
+	my $defaulttxt = '';
+	if (defined(my $dv = $phash->{default})) {
+	    $defaulttxt = "   (default=$dv)";
 	}
-	if ($phash->{maximum}) {
-	    $res .= "${indend}maximum: $phash->{maximum}\n";
-	}
+	my $tmp = sprintf "  %-10s %s$defaulttxt\n", $display_name, "$type";
+	my $indend = "             ";
 
+	$res .= Text::Wrap::wrap('', $indend, ($tmp));
+	$res .= "\n",
+	$res .= Text::Wrap::wrap($indend, $indend, ($descr)) . "\n\n";
+
 	return $res;
     };
 
@@ -283,20 +301,30 @@
 	$argdescr .= &$get_prop_descr($k, "<$k>");
     }
 
+    my $idx_param = {}; # -vlan\d+ -scsi\d+
+
     my $opts = '';
-    foreach my $k (keys %$prop) {
+    foreach my $k (sort keys %$prop) {
 	next if $arg_hash->{$k};
 	next if defined($fixed_param->{$k});
 
-	my $type =  &$get_type_str($k);
+	my $type = $prop->{$k}->{type} || 'string';
 
 	next if $hidepw && ($k eq 'password') && !$prop->{$k}->{optional};
 
-	$opts .= &$get_prop_descr($k, "-$k");
+	my $base = $k;
+	if ($k =~ m/^([a-z]+)(\d+)$/) {
+	    my $name = $1;
+	    next if $idx_param->{$name};
+	    $idx_param->{$name} = 1;
+	    $base = "${name}[n]";
+	}
 
+	$opts .= &$get_prop_descr($k, "-$base");
+
 	if (!$prop->{$k}->{optional}) {
 	    $args .= " " if $args;
-	    $args .= "-$k $type"
+	    $args .= "-$base $type"
 	}
     } 
 
@@ -343,7 +371,7 @@
 
 	die $err if !$ec || $ec ne "PVE::Exception" || !$err->is_param_exc();
 	
-	$err->{usage} = $self->usage_str($name, $prefix, $arg_param, $fixed_param, undef, $pwcallback);
+	$err->{usage} = $self->usage_str($name, $prefix, $arg_param, $fixed_param, 'short', $pwcallback);
 
 	die $err;
     }

Modified: pve-common/trunk/Tools.pm
===================================================================
--- pve-common/trunk/Tools.pm	2010-09-09 09:22:06 UTC (rev 5105)
+++ pve-common/trunk/Tools.pm	2010-09-10 07:43:40 UTC (rev 5106)
@@ -351,4 +351,41 @@
     die "write to '$filename' failed\n" if !$res;
 }
 
+sub kvmkeymaps {
+    return {
+	'dk'     => ['Danish', 'da', 'qwerty/dk-latin1.kmap.gz', 'dk', 'nodeadkeys'],
+	'de'     => ['German', 'de', 'qwertz/de-latin1-nodeadkeys.kmap.gz', 'de', 'nodeadkeys' ],
+	'de-ch'  => ['Swiss-German', 'de-ch', 'qwertz/sg-latin1.kmap.gz',  'ch', 'de_nodeadkeys' ], 
+	'en-gb'  => ['United Kingdom', 'en-gb', 'qwerty/uk.kmap.gz' , 'gb', 'intl' ],
+	'en-us'  => ['U.S. English', 'en-us', 'qwerty/us-latin1.kmap.gz',  'us', 'intl' ],
+	'es'     => ['Spanish', 'es', 'qwerty/es.kmap.gz', 'es', 'nodeadkeys'],
+	#'et'     => [], # Ethopia or Estonia ??
+	'fi'     => ['Finnish', 'fi', 'qwerty/fi-latin1.kmap.gz', 'fi', 'nodeadkeys'],
+	#'fo'     => ['Faroe Islands', 'fo', ???, 'fo', 'nodeadkeys'],
+	'fr'     => ['French', 'fr', 'azerty/fr-latin1.kmap.gz', 'fr', 'nodeadkeys'],
+	'fr-be'  => ['Belgium-French', 'fr-be', 'azerty/be2-latin1.kmap.gz', 'be', 'nodeadkeys'],
+	'fr-ca'  => ['Canada-French', 'fr-ca', 'qwerty/cf.kmap.gz', 'ca', 'fr-legacy'],
+	'fr-ch'  => ['Swiss-French', 'fr-ch', 'qwertz/fr_CH-latin1.kmap.gz', 'ch', 'fr_nodeadkeys'],
+	#'hr'     => ['Croatia', 'hr', 'qwertz/croat.kmap.gz', 'hr', ??], # latin2?
+	'hu'     => ['Hungarian', 'hu', 'qwertz/hu.kmap.gz', 'hu', undef],
+	'is'     => ['Icelandic', 'is', 'qwerty/is-latin1.kmap.gz', 'is', 'nodeadkeys'],
+	'it'     => ['Italian', 'it', 'qwerty/it2.kmap.gz', 'it', 'nodeadkeys'],
+	'jp'     => ['Japanese', 'ja', 'qwerty/jp106.kmap.gz', 'jp', undef],
+	'lt'     => ['Lithuanian', 'lt', 'qwerty/lt.kmap.gz', 'lt', 'std'],
+	#'lv'     => ['Latvian', 'lv', 'qwerty/lv-latin4.kmap.gz', 'lv', ??], # latin4 or latin7?
+	'mk'     => ['Macedonian', 'mk', 'qwerty/mk.kmap.gz', 'mk', 'nodeadkeys'],
+	'nl'     => ['Dutch', 'nl', 'qwerty/nl.kmap.gz', 'nl', undef],
+	#'nl-be'  => ['Belgium-Dutch', 'nl-be', ?, ?, ?],
+	'no'   => ['Norwegian', 'no', 'qwerty/no-latin1.kmap.gz', 'no', 'nodeadkeys'], 
+	'pl'     => ['Polish', 'pl', 'qwerty/pl.kmap.gz', 'pl', undef],
+	'pt'     => ['Portuguese', 'pt', 'qwerty/pt-latin1.kmap.gz', 'pt', 'nodeadkeys'],
+	'pt-br'  => ['Brazil-Portuguese', 'pt-br', 'qwerty/br-latin1.kmap.gz', 'br', 'nodeadkeys'],
+	#'ru'     => ['Russian', 'ru', 'qwerty/ru.kmap.gz', 'ru', undef], # dont know?
+	'si'     => ['Slovenian', 'sl', 'qwertz/slovene.kmap.gz', 'si', undef],
+	#'sv'     => [], Swedish ?
+	#'th'     => [],
+	#'tr'     => [],
+    };
+}
+
 1;



More information about the pve-devel mailing list