From 0c8af4992cb0f7589dcafaad65ada12753c64594 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Wed, 23 Nov 2022 21:14:33 +0300 Subject: initial --- vendor/aws/aws-sdk-php/src/MultiRegionClient.php | 260 +++++++++++++++++++++++ 1 file changed, 260 insertions(+) create mode 100644 vendor/aws/aws-sdk-php/src/MultiRegionClient.php (limited to 'vendor/aws/aws-sdk-php/src/MultiRegionClient.php') diff --git a/vendor/aws/aws-sdk-php/src/MultiRegionClient.php b/vendor/aws/aws-sdk-php/src/MultiRegionClient.php new file mode 100644 index 0000000..c225e2d --- /dev/null +++ b/vendor/aws/aws-sdk-php/src/MultiRegionClient.php @@ -0,0 +1,260 @@ + true, 'region' => true] + ); + $args['region']['required'] = false; + + return $args + [ + 'client_factory' => [ + 'type' => 'config', + 'valid' => ['callable'], + 'doc' => 'A callable that takes an array of client' + . ' configuration arguments and returns a regionalized' + . ' client.', + 'required' => true, + 'internal' => true, + 'default' => function (array $args) { + $namespace = manifest($args['service'])['namespace']; + $klass = "Aws\\{$namespace}\\{$namespace}Client"; + $region = isset($args['region']) ? $args['region'] : null; + + return function (array $args) use ($klass, $region) { + if ($region && empty($args['region'])) { + $args['region'] = $region; + } + + return new $klass($args); + }; + }, + ], + 'partition' => [ + 'type' => 'config', + 'valid' => ['string', PartitionInterface::class], + 'doc' => 'AWS partition to connect to. Valid partitions' + . ' include "aws," "aws-cn," and "aws-us-gov." Used to' + . ' restrict the scope of the mapRegions method.', + 'default' => function (array $args) { + $region = isset($args['region']) ? $args['region'] : ''; + return PartitionEndpointProvider::defaultProvider() + ->getPartition($region, $args['service']); + }, + 'fn' => function ($value, array &$args) { + if (is_string($value)) { + $value = PartitionEndpointProvider::defaultProvider() + ->getPartitionByName($value); + } + + if (!$value instanceof PartitionInterface) { + throw new \InvalidArgumentException('No valid partition' + . ' was provided. Provide a concrete partition or' + . ' the name of a partition (e.g., "aws," "aws-cn,"' + . ' or "aws-us-gov").' + ); + } + $ruleset = EndpointDefinitionProvider::getEndpointRuleset( + $args['service'], + isset($args['version']) ? $args['version'] : 'latest' + ); + $partitions = EndpointDefinitionProvider::getPartitions(); + $args['endpoint_provider'] = new EndpointProviderV2($ruleset, $partitions); + } + ], + ]; + } + + /** + * The multi-region client constructor accepts the following options: + * + * - client_factory: (callable) An optional callable that takes an array of + * client configuration arguments and returns a regionalized client. + * - partition: (Aws\Endpoint\Partition|string) AWS partition to connect to. + * Valid partitions include "aws," "aws-cn," and "aws-us-gov." Used to + * restrict the scope of the mapRegions method. + * - region: (string) Region to connect to when no override is provided. + * Used to create the default client factory and determine the appropriate + * AWS partition when present. + * + * @param array $args Client configuration arguments. + */ + public function __construct(array $args = []) + { + if (!isset($args['service'])) { + $args['service'] = $this->parseClass(); + } + + $this->handlerList = new HandlerList(function ( + CommandInterface $command + ) { + list($region, $args) = $this->getRegionFromArgs($command->toArray()); + $command = $this->getClientFromPool($region) + ->getCommand($command->getName(), $args); + + if ($this->isUseCustomHandler()) { + $command->getHandlerList()->setHandler($this->customHandler); + } + + return $this->executeAsync($command); + }); + + $argDefinitions = static::getArguments(); + $resolver = new ClientResolver($argDefinitions); + $args = $resolver->resolve($args, $this->handlerList); + $this->config = $args['config']; + $this->factory = $args['client_factory']; + $this->partition = $args['partition']; + $this->args = array_diff_key($args, $args['config']); + } + + /** + * Get the region to which the client is configured to send requests by + * default. + * + * @return string + */ + public function getRegion() + { + return $this->getClientFromPool()->getRegion(); + } + + /** + * Create a command for an operation name. + * + * Special keys may be set on the command to control how it behaves, + * including: + * + * - @http: Associative array of transfer specific options to apply to the + * request that is serialized for this command. Available keys include + * "proxy", "verify", "timeout", "connect_timeout", "debug", "delay", and + * "headers". + * - @region: The region to which the command should be sent. + * + * @param string $name Name of the operation to use in the command + * @param array $args Arguments to pass to the command + * + * @return CommandInterface + * @throws \InvalidArgumentException if no command can be found by name + */ + public function getCommand($name, array $args = []) + { + return new Command($name, $args, clone $this->getHandlerList()); + } + + public function getConfig($option = null) + { + if (null === $option) { + return $this->config; + } + + if (isset($this->config[$option])) { + return $this->config[$option]; + } + + return $this->getClientFromPool()->getConfig($option); + } + + public function getCredentials() + { + return $this->getClientFromPool()->getCredentials(); + } + + public function getHandlerList() + { + return $this->handlerList; + } + + public function getApi() + { + return $this->getClientFromPool()->getApi(); + } + + public function getEndpoint() + { + return $this->getClientFromPool()->getEndpoint(); + } + + public function useCustomHandler(callable $handler) + { + $this->customHandler = $handler; + } + + private function isUseCustomHandler() + { + return isset($this->customHandler); + } + + /** + * @param string $region Omit this argument or pass in an empty string to + * allow the configured client factory to apply the + * region. + * + * @return AwsClientInterface + */ + protected function getClientFromPool($region = '') + { + if (empty($this->clientPool[$region])) { + $factory = $this->factory; + $this->clientPool[$region] = $factory( + array_replace($this->args, array_filter(['region' => $region])) + ); + } + + return $this->clientPool[$region]; + } + + /** + * Parse the class name and return the "service" name of the client. + * + * @return string + */ + private function parseClass() + { + $klass = get_class($this); + + if ($klass === __CLASS__) { + return ''; + } + + return strtolower(substr($klass, strrpos($klass, '\\') + 1, -17)); + } + + private function getRegionFromArgs(array $args) + { + $region = isset($args['@region']) + ? $args['@region'] + : $this->getRegion(); + unset($args['@region']); + + return [$region, $args]; + } +} -- cgit v1.2.3