X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/703586635332421899e9b9ab44b1b900a110bd15..f99ffd6844ae9b88cfd17c8fe6e9fcc85a55d79c:/sdk/perl/lib/Arvados/ResourceMethod.pm diff --git a/sdk/perl/lib/Arvados/ResourceMethod.pm b/sdk/perl/lib/Arvados/ResourceMethod.pm index eecc041c65..fd577752b2 100644 --- a/sdk/perl/lib/Arvados/ResourceMethod.pm +++ b/sdk/perl/lib/Arvados/ResourceMethod.pm @@ -27,7 +27,9 @@ sub execute my %body_params; my %given_params = @_; + my %extra_params = %given_params; while (my ($param_name, $param) = each %{$method->{'parameters'}}) { + delete $extra_params{$param_name}; if ($param->{'required'} && !exists $given_params{$param_name}) { croak("Required parameter not supplied: $param_name"); } @@ -48,7 +50,7 @@ sub execute if (!exists $given_params{$param_name}->{$property_name}) { ; } - elsif ($given_params{$param_name}->{$property_name} eq undef) { + elsif (!defined $given_params{$param_name}->{$property_name}) { $param_value{$property_name} = JSON::null; } elsif ($property->{'type'} eq 'boolean') { @@ -74,8 +76,13 @@ sub execute $body_params{$param_name} = $given_params{$param_name}; } } + if (%extra_params) { + croak("Unsupported parameter(s) passed to API call /$path: \"" . join('", "', keys %extra_params) . '"'); + } my $r = $self->{'resourceAccessor'}->{'api'}->new_request; - $r->set_uri($self->{'resourceAccessor'}->{'api'}->{'discoveryDocument'}->{'baseUrl'} . "/" . $path); + my $base_uri = $self->{'resourceAccessor'}->{'api'}->{'discoveryDocument'}->{'baseUrl'}; + $base_uri =~ s:/$::; + $r->set_uri($base_uri . "/" . $path); $r->set_method($method->{'httpMethod'}); $r->set_auth_token($self->{'resourceAccessor'}->{'api'}->{'authToken'}); $r->set_query_params(\%body_params) if %body_params; @@ -83,7 +90,7 @@ sub execute my $data, $headers; my ($status_number, $status_phrase) = $r->get_status(); if ($status_number != 200) { - croak("API call failed: $status_number $status_phrase\n". $r->get_body()); + croak("API call /$path failed: $status_number $status_phrase\n". $r->get_body()); } $data = $r->get_body(); $headers = $r->get_headers();