X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/2bdfaf62d8f61753f8ec9642eb1a43a211640076..ebb166d65eb37f89edeccfc5be97014f3f2a73e2:/sdk/perl/lib/Arvados/ResourceMethod.pm diff --git a/sdk/perl/lib/Arvados/ResourceMethod.pm b/sdk/perl/lib/Arvados/ResourceMethod.pm index 76c1ac8691..649d779c67 100644 --- a/sdk/perl/lib/Arvados/ResourceMethod.pm +++ b/sdk/perl/lib/Arvados/ResourceMethod.pm @@ -28,7 +28,16 @@ sub execute my %body_params; my %given_params = @_; my %extra_params = %given_params; - while (my ($param_name, $param) = each %{$method->{'parameters'}}) { + my %method_params = %{$method->{'parameters'}}; + if ($method->{'request'}->{'properties'}) { + while (my ($prop_name, $prop_value) = + each %{$method->{'request'}->{'properties'}}) { + if (ref($prop_value) eq 'HASH' && $prop_value->{'$ref'}) { + $method_params{$prop_name} = { 'type' => 'object' }; + } + } + } + while (my ($param_name, $param) = each %method_params) { delete $extra_params{$param_name}; if ($param->{'required'} && !exists $given_params{$param_name}) { croak("Required parameter not supplied: $param_name"); @@ -67,6 +76,12 @@ sub execute if (ref $property eq '' || $property eq undef) { $param_value{$property_name} = $property; } + elsif (ref $property eq 'HASH') { + $param_value{$property_name} = {}; + while (my ($k, $v) = each %$property) { + $param_value{$property_name}->{$k} = $v; + } + } } } $body_params{$param_name} = \%param_value; @@ -80,7 +95,9 @@ sub execute 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;