[pve-devel] r4995 - pve-common/trunk
svn-commits at proxmox.com
svn-commits at proxmox.com
Fri Aug 13 10:17:58 CEST 2010
Author: dietmar
Date: 2010-08-13 08:17:57 +0000 (Fri, 13 Aug 2010)
New Revision: 4995
Modified:
pve-common/trunk/ChangeLog
pve-common/trunk/JSONSchema.pm
Log:
* JSONSchema.pm (register_format): implement a way to register
'format' verification methods.
Modified: pve-common/trunk/ChangeLog
===================================================================
--- pve-common/trunk/ChangeLog 2010-08-13 07:43:36 UTC (rev 4994)
+++ pve-common/trunk/ChangeLog 2010-08-13 08:17:57 UTC (rev 4995)
@@ -1,3 +1,8 @@
+2010-08-13 Proxmox Support Team <support at proxmox.com>
+
+ * JSONSchema.pm (register_format): implement a way to register
+ 'format' verification methods.
+
2010-08-12 Proxmox Support Team <support at proxmox.com>
* RESTHandler.pm (AUTOLOAD): cache autoload
Modified: pve-common/trunk/JSONSchema.pm
===================================================================
--- pve-common/trunk/JSONSchema.pm 2010-08-13 07:43:36 UTC (rev 4994)
+++ pve-common/trunk/JSONSchema.pm 2010-08-13 08:17:57 UTC (rev 4995)
@@ -13,8 +13,26 @@
# the code is similar to the javascript parser from http://code.google.com/p/jsonschema/
-# fixme: implement 'format' property
+my $format_list = {};
+sub register_format {
+ my ($format, $code) = @_;
+
+ die "JSON schema format '$format' already registered\n" if $format_list->{$format};
+
+ $format_list->{$format} = $code;
+}
+
+sub check_format {
+ my ($format, $value) = @_;
+
+ my $code = $format_list->{$format};
+
+ die "undefined format '$format'\n" if !$code;
+
+ &$code($value);
+}
+
sub add_error {
my ($errors, $path, $msg) = @_;
@@ -250,6 +268,14 @@
} else {
+ if (my $format = $schema->{format}) {
+ eval { check_format($format, $value); };
+ if ($@) {
+ add_error($errors, $path, "invalid format - $@");
+ return;
+ }
+ }
+
if (my $pattern = $schema->{pattern}) {
if ($value !~ m/^$pattern$/) {
add_error($errors, $path, "value does not match the regex pattern");
More information about the pve-devel
mailing list