[pve-devel] [RFC apiclient 2/2] use new Exception.pm class to signal errors to caller
Thomas Lamprecht
t.lamprecht at proxmox.com
Tue Dec 12 16:18:38 CET 2017
Allows a caller to access the HTTP response code, which may be useful
to handle application logic. E.g., catching a HTTP_NOT_IMPLEMENTED
and fallback to an older method.
As the exception class has already some stringify methods we can
remove some code here too.
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
PVE/APIClient/LWP.pm | 26 +++++++++-----------------
1 file changed, 9 insertions(+), 17 deletions(-)
diff --git a/PVE/APIClient/LWP.pm b/PVE/APIClient/LWP.pm
index 4584bc0..ac9e0c7 100755
--- a/PVE/APIClient/LWP.pm
+++ b/PVE/APIClient/LWP.pm
@@ -11,6 +11,7 @@ use JSON;
use Data::Dumper; # fixme: remove
use HTTP::Request::Common;
use Carp;
+use PVE::APIClient::Exception qw(raise);
my $extract_data = sub {
my ($res) = @_;
@@ -118,10 +119,8 @@ sub login {
$response = $exec_login->(); # try again
}
}
- }
-
- if (!$response->is_success) {
- die $response->status_line . "\n";
+ } else {
+ raise($response->status_line ."\n", code => $response->code)
}
my $res = from_json($response->decoded_content, {utf8 => 1, allow_nonref => 1});
@@ -210,7 +209,7 @@ sub call {
} elsif ($method eq 'DELETE') {
$response = $ua->request(HTTP::Request::Common::DELETE($uri));
} else {
- die "method $method not implemented\n";
+ raise("method $method not implemented\n");
}
return $response;
};
@@ -229,27 +228,20 @@ sub call {
if ($response->is_success) {
- die "got unexpected content type" if $ct !~ m|application/json|;
+ raise("got unexpected content type", code => $response->code)
+ if $ct !~ m|application/json|;
return from_json($response->decoded_content, {utf8 => 1, allow_nonref => 1});
} else {
- my $msg = $response->status_line . "\n";
- eval {
+ my $errors = eval {
return if $ct !~ m|application/json|;
my $res = from_json($response->decoded_content, {utf8 => 1, allow_nonref => 1});
- if (my $errors = $res->{errors}) {
- foreach my $key (keys %$errors) {
- my $m = $errors->{$key};
- chomp($m);
- $m =~s/\n/ -- /g;
- $msg .= " $key: $m\n";
- }
- }
+ return $res->{errors};
};
- die $msg;
+ raise($response->message, code => $response->code, errors => $errors);
}
}
--
2.11.0
More information about the pve-devel
mailing list