Commit 8dddf469 authored by Roman Lacko's avatar Roman Lacko Committed by Fakultni administrativa
Browse files

API: small fixes in Iterator

parent aec1e6fa
......@@ -242,7 +242,8 @@ sub exec_request {
$log->debug("using iterator to obtain the result");
my $iterator = GitLab::API::Iterator->new($self, $uri,
per_page => $rtargs->{-per_page} // $defaults{per_page});
per_page => $rtargs->{-per_page} // $defaults{per_page},
template => $tmpl);
return $rtargs->{-iterator} ? $iterator : $iterator->all;
}
......@@ -325,7 +326,7 @@ sub AUTOLOAD {
}
# The following code registers "whoami" method needed by the constructor.
INIT {
BEGIN {
__PACKAGE__->register({
name => "whoami",
method => "GET",
......
......@@ -23,19 +23,21 @@ sub new {
api => $api,
url => $url,
per_page => $extra{per_page} // 50,
tmpl => $extra{template} // { name => "unknown" },
};
bless $self, $class;
$self->reset;
$log->debug("created iterator for $url, per_page=$self->{per_page}");
$log->debug("created iterator for " . $self->{tmpl}->{name} . " ($url), per_page=$self->{per_page}");
return $self;
}
sub api { return shift->{api}; }
sub url { return shift->{url}; }
sub count { return shift->{count}; }
sub pages { return shift->{pages_read}; }
sub name { return shift->{tmpl}->{name}; }
sub pages { return shift->{pages_read}; }
#===============================================================================
# Public methods
......@@ -68,7 +70,7 @@ sub reset {
sub rewind {
my ($self) = @_;
$log->debug("rewinding");
$log->debug("(" . $self->name . ") rewinding ");
$self->{ix} = -1;
}
......@@ -105,14 +107,14 @@ sub next_block {
my ($self) = @_;
if (!$self->{good}) {
carp "Called next_block on an invalid iterator";
carp "Called next_block on an invalid iterator for " . $self->name;
return 0;
}
$log->debug("requesting a new block, currently has $self->{pages_read} / " . ($self->{pages_total} // "unknown"));
$log->debug("(" . $self->name . ") requesting a new block, currently has $self->{pages_read} / " . ($self->{pages_total} // "unknown"));
if (defined $self->{pages_total} && $self->{pages_total} == $self->{pages_read}) {
$log->debug("all pages were read, nothing to do");
$log->debug("(" . $self->name . ") all pages were read, nothing to do");
$self->{finished} = 1;
return 0;
}
......@@ -121,7 +123,7 @@ sub next_block {
$xurl->query_param(page => $self->{pages_read} + 1);
$xurl->query_param(per_page => $self->{per_page});
$log->debug("GET " . $xurl);
$log->debug("(" . $self->name . ") GET " . $xurl);
my ($response, $data) = $self->api->clean_data($self->api->http->get($xurl));
if ($log->is_trace) {
......@@ -130,12 +132,13 @@ sub next_block {
$log->trace("--------------------".("-" x 25));
}
$log->debug("status: " . $response->status_line);
$log->debug("(" . $self->name . ") status: " . $response->status_line);
if (!$response->is_success) {
$self->{good} = 0;
croak "Cannot obtain next block: ", $response->status_line if $self->api->die_on_error;
croak "Cannot obtain next block for (" . $self->name . "): " . $response->status_line
if $self->api->die_on_error;
return 0;
}
......@@ -145,11 +148,12 @@ sub next_block {
# if there was no X-Total-Pages, the response is not paginated, blame the user
if (!defined $self->{pages_total}) {
carp "Iterating over non-paginated request";
# some requests are not paginated if additional parameters are provided
# carp "Iterating over non-paginated request for " . $self->name;
$self->{pages_total} = 1;
}
croak "Response did not contain an array"
croak "Response for " . $self->name . " did not contain an array"
unless ref $data eq "ARRAY";
push @{$self->{data}}, @$data;
......@@ -160,7 +164,7 @@ sub next_block {
++$self->{pages_read};
$self->{finished} = $self->{pages_read} == $self->{pages_total};
$log->debug("block read successful");
$log->debug("(" . $self->name . ") block read successful");
return 1;
}
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment