Skip to content

Commit 01a7b40

Browse files
committed
Merge pull request #88 from php-tmdb/feature/427-retry-after
Feature/427 retry after
2 parents a151ab9 + 2e26cb6 commit 01a7b40

3 files changed

Lines changed: 42 additions & 11 deletions

File tree

.travis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ php:
77
- hhvm
88

99
before_script:
10-
- composer --prefer-source install
10+
- composer self-update
1111

1212
script: phpunit --coverage-text --coverage-clover=coverage.clover --verbose
1313

lib/Tmdb/HttpClient/Adapter/GuzzleAdapter.php

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,31 @@ public function __construct(ClientInterface $client = null, array $options = [])
4949
*/
5050
public function registerSubscribers(EventDispatcherInterface $eventDispatcher)
5151
{
52-
// Retry 500 and 503 responses that were sent as GET and HEAD requests.
5352
$filter = RetrySubscriber::createChainFilter([
54-
// Does early filter to force non-idempotent methods to NOT be retried.
5553
RetrySubscriber::createIdempotentFilter(),
56-
// Performs the last check, returning ``true`` or ``false`` based on
57-
// if the response received a 500 or 503 status code.
58-
RetrySubscriber::createStatusFilter([500, 503])
54+
RetrySubscriber::createStatusFilter([427, 500, 503])
55+
]);
56+
57+
$retry = new RetrySubscriber([
58+
'filter' => $filter,
59+
'delay' => function ($number, $event) {
60+
/** @var \GuzzleHttp\Message\Response $response */
61+
if (null !== $response = $event->getResponse() && $event->getResponse()->getStatusCode() === 427) {
62+
$time = microtime(true);
63+
$resetAt = (int) $response->getHeader('X-RateLimit-Reset');
64+
65+
$sleep = $resetAt - $time;
66+
67+
if ($sleep >= 0) {
68+
return $sleep * 1000;
69+
}
70+
}
71+
72+
return 0;
73+
},
74+
'max' => 3
5975
]);
6076

61-
$retry = new RetrySubscriber(['filter' => $filter]);
6277
$this->client->getEmitter()->attach($retry);
6378
}
6479

lib/Tmdb/Model/Query/Discover/DiscoverMoviesQuery.php

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -152,13 +152,21 @@ public function primaryReleaseYear($year)
152152
* @param \DateTime|integer $year
153153
* @return $this
154154
*/
155-
public function primaryReleaseYearGte($year)
155+
public function primaryReleaseDateGte($year)
156156
{
157-
$this->set('primary_release_year.gte', $this->getDate($year));
157+
$this->set('primary_release_date.gte', $this->getDate($year));
158158

159159
return $this;
160160
}
161161

162+
/**
163+
* @deprecated
164+
*/
165+
public function primaryReleaseYearGte($year)
166+
{
167+
return $this->primaryReleaseDateGte($year);
168+
}
169+
162170
/**
163171
* Filter by the primary release date and only include those which are less than or equal to the specified value.
164172
*
@@ -167,13 +175,21 @@ public function primaryReleaseYearGte($year)
167175
* @param \DateTime|integer $year
168176
* @return $this
169177
*/
170-
public function primaryReleaseYearLte($year)
178+
public function primaryReleaseDateLte($year)
171179
{
172-
$this->set('primary_release_year.lte', $this->getDate($year));
180+
$this->set('primary_release_date.lte', $this->getDate($year));
173181

174182
return $this;
175183
}
176184

185+
/**
186+
* @deprecated
187+
*/
188+
public function primaryReleaseYearLte($year)
189+
{
190+
return $this->primaryReleaseDateLte($year);
191+
}
192+
177193
/**
178194
* Filter by all available release dates and only include those which are greater or equal to the specified value.
179195
*

0 commit comments

Comments
 (0)