[pve-devel] [PATCH apiclient v2 2/3] use new Exception.pm class to signal errors to caller
Thomas Lamprecht
t.lamprecht at proxmox.com
Thu Dec 14 11:12:05 CET 2017
Allows a caller to acces 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.
Signed-off-by: Thomas Lamprecht <t.lamprecht at proxmox.com>
---
changes v1 -> v2:
* ensure exception is raised with newline at end in call sub
PVE/APIClient/LWP.pm | 23 +++++++++--------------
1 file changed, 9 insertions(+), 14 deletions(-)
diff --git a/PVE/APIClient/LWP.pm b/PVE/APIClient/LWP.pm
index 4584bc0..81906a1 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) = @_;
@@ -121,7 +122,7 @@ sub login {
}
if (!$response->is_success) {
- die $response->status_line . "\n";
+ raise($response->status_line ."\n", code => $response->code)
}
my $res = from_json($response->decoded_content, {utf8 => 1, allow_nonref => 1});
@@ -210,7 +211,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 +230,21 @@ 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 $msg = $response->message;
+ 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("$msg\n", code => $response->code, errors => $errors);
}
}
--
2.11.0
More information about the pve-devel
mailing list