Proyectos de Subversion Moodle

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
<?php
2
namespace Aws\Handler\GuzzleV6;
3
 
4
use Exception;
5
use GuzzleHttp\Exception\ConnectException;
6
use GuzzleHttp\Exception\RequestException;
7
use GuzzleHttp\Promise;
8
use GuzzleHttp\Client;
9
use GuzzleHttp\ClientInterface;
10
use GuzzleHttp\TransferStats;
11
use Psr\Http\Message\RequestInterface as Psr7Request;
12
 
13
/**
14
 * A request handler that sends PSR-7-compatible requests with Guzzle 6.
15
 */
16
class GuzzleHandler
17
{
18
    /** @var ClientInterface */
19
    private $client;
20
 
21
    /**
22
     * @param ClientInterface $client
23
     */
24
    public function __construct(ClientInterface $client = null)
25
    {
26
        $this->client = $client ?: new Client();
27
    }
28
 
29
    /**
30
     * @param Psr7Request $request
31
     * @param array       $options
32
     *
33
     * @return Promise\Promise
34
     */
35
    public function __invoke(Psr7Request $request, array $options = [])
36
    {
37
        $request = $request->withHeader(
38
            'User-Agent',
39
            $request->getHeaderLine('User-Agent')
40
                . ' ' . \GuzzleHttp\default_user_agent()
41
        );
42
 
43
        return $this->client->sendAsync($request, $this->parseOptions($options))
44
            ->otherwise(
45
                static function ($e) {
46
                    $error = [
47
                        'exception'        => $e,
48
                        'connection_error' => $e instanceof ConnectException,
49
                        'response'         => null,
50
                    ];
51
 
52
                    if (
53
                        ($e instanceof RequestException)
54
                        && $e->getResponse()
55
                    ) {
56
                        $error['response'] = $e->getResponse();
57
                    }
58
 
59
                    return new Promise\RejectedPromise($error);
60
                }
61
            );
62
    }
63
 
64
    private function parseOptions(array $options)
65
    {
66
        if (isset($options['http_stats_receiver'])) {
67
            $fn = $options['http_stats_receiver'];
68
            unset($options['http_stats_receiver']);
69
 
70
            $prev = isset($options['on_stats'])
71
                ? $options['on_stats']
72
                : null;
73
 
74
            $options['on_stats'] = static function (
75
                TransferStats $stats
76
            ) use ($fn, $prev) {
77
                if (is_callable($prev)) {
78
                    $prev($stats);
79
                }
80
                $transferStats = ['total_time' => $stats->getTransferTime()];
81
                $transferStats += $stats->getHandlerStats();
82
                $fn($transferStats);
83
            };
84
        }
85
 
86
        return $options;
87
    }
88
}