public function __invoke(RequestInterface $request, array $options) { if (!$this->queue) { throw new \OutOfBoundsException('Mock queue is empty'); } if (isset($options['delay'])) { usleep($options['delay'] * 1000); } $this->lastRequest = $request; $this->lastOptions = $options; $response = array_shift($this->queue); if (is_callable($response)) { $response = $response($request, $options); } $response = $response instanceof \Exception ? new RejectedPromise($response) : \GuzzleHttp\Promise\promise_for($response); return $response->then(function ($value) use($request, $options) { $this->invokeStats($request, $options, $value); if ($this->onFulfilled) { call_user_func($this->onFulfilled, $value); } return $value; }, function ($reason) use($request, $options) { $this->invokeStats($request, $options, null, $reason); if ($this->onRejected) { call_user_func($this->onRejected, $reason); } return new RejectedPromise($reason); }); }
public function testReturnsPromiseForThennable() { $p = new Thennable(); $wrapped = \GuzzleHttp\Promise\promise_for($p); $this->assertNotSame($p, $wrapped); $this->assertInstanceOf('GuzzleHttp\\Promise\\PromiseInterface', $wrapped); $p->resolve('foo'); P\queue()->run(); $this->assertEquals('foo', $wrapped->wait()); }
public function __invoke(RequestInterface $request, array $options) { if (!$this->queue) { throw new \OutOfBoundsException('Mock queue is empty'); } if (isset($options['delay'])) { usleep($options['delay'] * 1000); } $this->lastRequest = $request; $this->lastOptions = $options; $response = array_shift($this->queue); if (isset($options['on_headers'])) { if (!is_callable($options['on_headers'])) { throw new \InvalidArgumentException('on_headers must be callable'); } try { $options['on_headers']($response); } catch (\Exception $e) { $msg = 'An error was encountered during the on_headers event'; $response = new RequestException($msg, $request, $response, $e); } } if (is_callable($response)) { $response = call_user_func($response, $request, $options); } $response = $response instanceof \Exception ? new RejectedPromise($response) : \GuzzleHttp\Promise\promise_for($response); return $response->then(function ($value) use($request, $options) { $this->invokeStats($request, $options, $value); if ($this->onFulfilled) { call_user_func($this->onFulfilled, $value); } if (isset($options['sink'])) { $contents = (string) $value->getBody(); $sink = $options['sink']; if (is_resource($sink)) { fwrite($sink, $contents); } elseif (is_string($sink)) { file_put_contents($sink, $contents); } elseif ($sink instanceof \Psr\Http\Message\StreamInterface) { $sink->write($contents); } } return $value; }, function ($reason) use($request, $options) { $this->invokeStats($request, $options, null, $reason); if ($this->onRejected) { call_user_func($this->onRejected, $reason); } return new RejectedPromise($reason); }); }
private function handler($method, $path, $response, $request, $options) { $response = $response instanceof \Exception ? new RejectedPromise($response) : \GuzzleHttp\Promise\promise_for($response); return $response->then(function ($value) use($request, $method, $path, $options) { $this->invokeStats($request, $options, $value); // custom handle response. if ($handler = $this->responseCallable->find($method, $path)) { return $handler($value, $request, $this->originalResource, $options); } return $value; }, function ($reason) use($request, $options) { $this->invokeStats($request, $options, null, $reason); return new RejectedPromise($reason); }); }
public function __invoke(RequestInterface $request, array $options) { if (!$this->queue) { throw new \OutOfBoundsException('Mock queue is empty'); } if (isset($options[RequestOptions::DELAY])) { usleep($options[RequestOptions::DELAY] * 1000); } $this->lastRequest = $request; $this->lastOptions = $options; $response = array_shift($this->queue); if (is_callable($response)) { $response = $response($request, $options); } $response = $response instanceof \Exception ? new RejectedPromise($response) : \GuzzleHttp\Promise\promise_for($response); return $response->then(function ($value) use($request, $options) { $this->invokeStats($request, $options, $value); if ($this->onFulfilled) { call_user_func($this->onFulfilled, $value); } if (isset($options[RequestOptions::SINK])) { $contents = (string) $value->getBody(); $sink = $options[RequestOptions::SINK]; if (is_resource($sink)) { fwrite($sink, $contents); } elseif (is_string($sink)) { file_put_contents($sink, $contents); } elseif ($sink instanceof \Psr\Http\Message\StreamInterface) { $sink->write($contents); } } return $value; }, function ($reason) use($request, $options) { $this->invokeStats($request, $options, null, $reason); if ($this->onRejected) { call_user_func($this->onRejected, $reason); } return new RejectedPromise($reason); }); }
public function __invoke(RequestInterface $request, array $options) { if (isset($options['delay'])) { usleep($options['delay'] * 1000); } if (file_exists($this->getFullFilePath($request))) { $responseData = file_get_contents($this->getFullFilePath($request)); $response = Psr7\parse_response($responseData); } else { $curlHandler = new CurlHandler(); $response = $curlHandler->__invoke($request, $options); } $response = $response instanceof \Exception ? new RejectedPromise($response) : \GuzzleHttp\Promise\promise_for($response); return $response->then(function ($value) use($request, $options) { // record the response $this->record($request, $value, null, $options); return $value; }, function ($reason) use($request, $options) { // record the response $this->record($request, null, $reason, $options); return $reason; }); }
public function deleteAsync() { if (is_null($this->getKeyName())) { throw new Exception('No primary key defined on model.'); } if ($this->exists) { $descriptor = $this->newDescriptor(); return $this->performDeleteOnModel($descriptor)->then(function ($result) { $this->exists = false; return true; }); } return \GuzzleHttp\Promise\promise_for(true); }
/** * Handles a request to convert it to a response. * * Exceptions are not caught. * * @param Request $request A Request instance * @param int $type The type of the request (one of HttpKernelInterface::MASTER_REQUEST or HttpKernelInterface::SUB_REQUEST) * * @return PromiseInterface * * @throws \LogicException If one of the listener does not behave as expected * @throws NotFoundHttpException When controller cannot be found */ private function handleRaw(Request $request, $type = self::MASTER_REQUEST) { $this->requestStack->push($request); // request $event = new GetResponseEvent($this, $request, $type); $this->dispatcher->dispatch(KernelEvents::REQUEST, $event); if ($event->hasResponse()) { return \GuzzleHttp\Promise\promise_for($this->filterResponse($event->getResponse(), $request, $type)); } // load controller if (false === ($controller = $this->resolver->getController($request))) { throw new NotFoundHttpException(sprintf('Unable to find the controller for path "%s". The route is wrongly configured.', $request->getPathInfo())); } $event = new FilterControllerEvent($this, $controller, $request, $type); $this->dispatcher->dispatch(KernelEvents::CONTROLLER, $event); $controller = $event->getController(); // controller arguments $arguments = $this->resolver->getArguments($request, $controller); // call controller $response = call_user_func_array($controller, $arguments); // view $response = \GuzzleHttp\Promise\promise_for($response); return $response->then(function ($response) use($request, $type) { if (!$response instanceof Response) { $event = new GetResponseForControllerResultEvent($this, $request, $type, $response); $this->dispatcher->dispatch(KernelEvents::VIEW, $event); if ($event->hasResponse()) { $response = $event->getResponse(); } if (!$response instanceof Response) { $msg = sprintf('The controller must return a response (%s given).', $this->varToString($response)); // the user may have forgotten to return something if (null === $response) { $msg .= ' Did you forget to add a return statement somewhere in your controller?'; } throw new \LogicException($msg); } } return $this->filterResponse($response, $request, $type); }); }
public function testRetriesWhenBodyCanBeRewound() { $callHandler = $called = false; $fn = function ($r, $options) use(&$callHandler) { $callHandler = true; return \GuzzleHttp\Promise\promise_for(new Psr7\Response()); }; $bd = Psr7\FnStream::decorate(Psr7\stream_for('test'), ['tell' => function () { return 1; }, 'rewind' => function () use(&$called) { $called = true; }]); $factory = new Handler\CurlFactory(1); $req = new Psr7\Request('PUT', Server::$url, [], $bd); $easy = $factory->create($req, []); $res = Handler\CurlFactory::finish($fn, $easy, $factory); $res = $res->wait(); $this->assertTrue($callHandler); $this->assertTrue($called); $this->assertEquals('200', $res->getStatusCode()); }
function getManyOneAsync($ids) { $tasks = []; foreach ($ids as $id) { $endpoint = $this->getOneEndpoint($id); $tasks[] = $this->clientCallAsync('get', $endpoint); } $items = $this->waitForManyPromises($tasks); return \GuzzleHttp\Promise\promise_for($this->processManyOneResponse($items)); }