[pve-devel] r4967 - pve-manager/pve2/lib/PVE

svn-commits at proxmox.com svn-commits at proxmox.com
Wed Aug 11 11:46:58 CEST 2010


Author: dietmar
Date: 2010-08-11 09:46:58 +0000 (Wed, 11 Aug 2010)
New Revision: 4967

Removed:
   pve-manager/pve2/lib/PVE/RESTHandler.pm
Modified:
   pve-manager/pve2/lib/PVE/Makefile.am
Log:
moved RESTHandler.pm to pve-common


Modified: pve-manager/pve2/lib/PVE/Makefile.am
===================================================================
--- pve-manager/pve2/lib/PVE/Makefile.am	2010-08-11 09:46:09 UTC (rev 4966)
+++ pve-manager/pve2/lib/PVE/Makefile.am	2010-08-11 09:46:58 UTC (rev 4967)
@@ -7,7 +7,6 @@
 	API2Client.pm		\
 	APIDaemon.pm		\
 	REST.pm			\
-	RESTHandler.pm		\
 	SourceFilter.pm		\
 	AuthCookieHandler.pm	\
 	URLRewrite.pm		\

Deleted: pve-manager/pve2/lib/PVE/RESTHandler.pm
===================================================================
--- pve-manager/pve2/lib/PVE/RESTHandler.pm	2010-08-11 09:46:09 UTC (rev 4966)
+++ pve-manager/pve2/lib/PVE/RESTHandler.pm	2010-08-11 09:46:58 UTC (rev 4967)
@@ -1,243 +0,0 @@
-package PVE::RESTHandler;
-
-use strict;
-use warnings;
-use PVE::SafeSyslog;
-use PVE::JSONSchema;
-use Data::Dumper; # fixme: remove
-use HTTP::Status qw(:constants :is status_message);
-
-my $method_registry = {};
-my $method_by_name = {};
-
-our $AUTOLOAD;  # it's a package global
-
-sub register_method {
-    my ($self, $info) = @_;
-
-    PVE::JSONSchema::validate_method_info($info);
-
-    my $match_re = [];
-    my $match_name = [];
-
-    foreach my $comp (split(/\/+/, $info->{path})) {
-	die "path compoment has zero length" if $comp eq '';
-	if ($comp =~ m/^\{(\w+)\}$/) {
-	    my $name = $1;
-	    push @$match_re, '\S+';
-	    push @$match_name,  $1;
-	} else {
-	    push @$match_re, $comp;
-	    push @$match_name,  undef;
-	}
-    }
-
-    $info->{match_re} = $match_re;
-    $info->{match_name} = $match_name;
-
-    $method_by_name->{$self} = {} if !defined($method_by_name->{$self});
-
-    if ($info->{name}) {
-	die "method '${self}::$info->{name}' already defined\n"
-	    if defined($method_by_name->{$self}->{$info->{name}});
-
-	$method_by_name->{$self}->{$info->{name}} = $info;
-    }
-
-    push @{$method_registry->{$self}}, $info;
-}
-
-sub AUTOLOAD {
-    my $self = shift;
-
-
-    my $method = $AUTOLOAD;
-
-    $method =~ s/.*:://;
-   
-    my $info = $method_by_name->{$self}->{$method};
-    
-    die "no such method '${self}::$method'\n" if !$info;
-
-    # fixme: how do we handle this here?
-    # fixme: language ?
-    my $conn = {
-#	abs_uri => $abs_uri,
-#	rel_uri => $rel_uri,
-#	user => $username,
-	params => shift || {},
-    };
-
-    my $res = {};
-    $res->{status} = $self->handle($info, $conn, $res);
- 
-    my $status = $res->{status};
-    if (!is_success($status)) {
-	my $msg = $res->{message} || status_message($status);
-	chomp $msg;
-	$msg .= "\n";
-	if ($res->{errors}) {
-	    foreach my $e (keys %{$res->{errors}}) {
-		$msg .= "$e: $res->{errors}->{$e}\n";
-	    }
-	}
-	die $msg;
-    }
-
-    return $res->{data};
-}
-
-sub method_attributes {
-    my ($self) = @_;
-
-    return $method_registry->{$self};
-}
-
-sub map_method {
-    my ($self, $stack, $method, $uri_param) = @_;
-
-    my $ma = $method_registry->{$self};
-
-    my $stacklen = scalar(@$stack);
-
-    #syslog ('info', "MAPTEST:$method:$self: " . join ('/', @$stack));
-
-    foreach my $info (@$ma) {
-	#syslog ('info', "TEST0 " . Dumper($info));
-	next if !($info->{subclass} || ($info->{method} eq $method));
-	my $regexlen = scalar(@{$info->{match_re}});
-	if ($info->{subclass}) {
-	    next if $stacklen < $regexlen;
-	} else {
-	    next if $stacklen != $regexlen;
-	}
-
-	#syslog ('info', "TEST1 " . Dumper($info));
-
-	my $param = {};
-	my $i = 0;
-	for (; $i < $regexlen; $i++) {
-	    my $comp = $stack->[$i];
-	    my $re = $info->{match_re}->[$i];
-	    #print "COMPARE $comp $info->{match_re}->[$i]\n";
-	    my ($match) = $stack->[$i] =~ m/^($re)$/;
-	    last if !defined($match);
-	    if (my $name = $info->{match_name}->[$i]) {
-		$param->{$name} = $match; 
-	    }
-	}
-
-	next if $i != $regexlen;
-
-	#print "MATCH $info->{name}\n";
-	
-	foreach my $p (keys %$param) {
-	    $uri_param->{$p} = $param->{$p};
-	}
-
-	return $info;
-    }
-}
-
-sub find_handler {
-    my ($class, $method, $stack, $uri_param) = @_;
-
-    my $info;
-    eval {
-	$info = $class->map_method($stack, $method, $uri_param);
-    };
-    syslog('err', $@) if $@;
-
-    return undef if !$info;
-
-    if (my $subh = $info->{subclass}) {
-	eval "require $subh;";
-
-	if ($@) {
-	    syslog ('err', "missing subclass '$subh': $@");
-	    return undef;
-	}
-
-	my $matchlen = scalar(@{$info->{match_re}});
-
-	for (my $i = 0; $i < $matchlen; $i++) {
-	    my $fragment = shift @$stack;
-	    # fixme: store $fragments somewhere ?
-	}
-
-	return $subh->find_handler($method, $stack, $uri_param);
-    }
-
-    return ($class, $info);
-}
-
-sub handle {
-    my ($self, $info, $conn, $resp) = @_;
-
-    my $func = $info->{code};
-
-    if (!($info->{name} && $func)) {
-	$resp->{message} = "Method lookup failed ('$info->{name}')";
-	$resp->{status} = HTTP_INTERNAL_SERVER_ERROR;
-	return $resp->{status};
-    }
-
-    if (my $schema = $info->{parameters}) {
-	# warn "validate ". Dumper($conn->{params}) . "\n" . Dumper($schema);
-	my $res = PVE::JSONSchema::validate($conn->{params}, $schema);
-	if (!$res->{valid}) {
-	    $resp->{status} = HTTP_BAD_REQUEST;
-	    $resp->{message} = "Parameter verification failed";
-	    $resp->{errors} = $res->{errors},
-	    return $resp->{status};
-	}
-    }
-
-    eval{
-	my $result = &$func($conn, $resp, $conn->{params});
-	$resp->{status} = HTTP_OK if !$resp->{status};
-	$resp->{data} = $result;
-    };
-    my $err = $@;
-
-    if ($err) {
-	$resp->{message} = $err;
-
-	$resp->{status} = HTTP_BAD_REQUEST
-	    if !($resp->{status} && is_error($resp->{status}));
-    }
-
-    # fixme: this is only to be safe
-    if (!$err && (my $schema = $info->{returns})) {
-
-	my $res = PVE::JSONSchema::validate($resp->{data}, $schema);
-	if (!$res->{valid}) {
-
-	    $resp->{message} = "Result verification vailed";
-	    $resp->{status} = HTTP_INTERNAL_SERVER_ERROR;
-	    $resp->{errors} = $res->{errors};
-
-	    return $resp->{status};
-	} 
-    }
-
-    return $resp->{status};
-}
-
-# utility methods
-# note: this modifies the original hash by adding the id property
-sub hash_to_array {
-    my ($hash, $idprop) = @_;
-
-    my $res = [];
-    return $res if !$hash;
-
-    foreach my $k (keys %$hash) {
-	$hash->{$k}->{$idprop} = $k;
-	push @$res, $hash->{$k};
-    }
-
-    return $res;
-}
-
-1;




More information about the pve-devel mailing list