diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2019-11-17 20:45:02 +0100 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2019-11-17 20:45:02 +0100 |
commit | 8df3db566a3a937b45ebf11adb90d265e6f5e2d4 (patch) | |
tree | 4d541098d751d5a9acf8c12f6fb9f308ace066ac /vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php | |
download | flyspray-8df3db566a3a937b45ebf11adb90d265e6f5e2d4.tar.xz |
initial checking of customized version 1.0rc9
Diffstat (limited to 'vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php')
-rw-r--r-- | vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php b/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php new file mode 100644 index 0000000..6aa3615 --- /dev/null +++ b/vendor/guzzle/guzzle/src/Guzzle/Service/Resource/ResourceIteratorApplyBatched.php @@ -0,0 +1,111 @@ +<?php + +namespace Guzzle\Service\Resource; + +use Guzzle\Common\AbstractHasDispatcher; +use Guzzle\Batch\BatchBuilder; +use Guzzle\Batch\BatchSizeDivisor; +use Guzzle\Batch\BatchClosureTransfer; +use Guzzle\Common\Version; + +/** + * Apply a callback to the contents of a {@see ResourceIteratorInterface} + * @deprecated Will be removed in a future version and is no longer maintained. Use the Batch\ abstractions instead. + * @codeCoverageIgnore + */ +class ResourceIteratorApplyBatched extends AbstractHasDispatcher +{ + /** @var callable|array */ + protected $callback; + + /** @var ResourceIteratorInterface */ + protected $iterator; + + /** @var integer Total number of sent batches */ + protected $batches = 0; + + /** @var int Total number of iterated resources */ + protected $iterated = 0; + + public static function getAllEvents() + { + return array( + // About to send a batch of requests to the callback + 'iterator_batch.before_batch', + // Finished sending a batch of requests to the callback + 'iterator_batch.after_batch', + // Created the batch object + 'iterator_batch.created_batch' + ); + } + + /** + * @param ResourceIteratorInterface $iterator Resource iterator to apply a callback to + * @param array|callable $callback Callback method accepting the resource iterator + * and an array of the iterator's current resources + */ + public function __construct(ResourceIteratorInterface $iterator, $callback) + { + $this->iterator = $iterator; + $this->callback = $callback; + Version::warn(__CLASS__ . ' is deprecated'); + } + + /** + * Apply the callback to the contents of the resource iterator + * + * @param int $perBatch The number of records to group per batch transfer + * + * @return int Returns the number of iterated resources + */ + public function apply($perBatch = 50) + { + $this->iterated = $this->batches = $batches = 0; + $that = $this; + $it = $this->iterator; + $callback = $this->callback; + + $batch = BatchBuilder::factory() + ->createBatchesWith(new BatchSizeDivisor($perBatch)) + ->transferWith(new BatchClosureTransfer(function (array $batch) use ($that, $callback, &$batches, $it) { + $batches++; + $that->dispatch('iterator_batch.before_batch', array('iterator' => $it, 'batch' => $batch)); + call_user_func_array($callback, array($it, $batch)); + $that->dispatch('iterator_batch.after_batch', array('iterator' => $it, 'batch' => $batch)); + })) + ->autoFlushAt($perBatch) + ->build(); + + $this->dispatch('iterator_batch.created_batch', array('batch' => $batch)); + + foreach ($this->iterator as $resource) { + $this->iterated++; + $batch->add($resource); + } + + $batch->flush(); + $this->batches = $batches; + + return $this->iterated; + } + + /** + * Get the total number of batches sent + * + * @return int + */ + public function getBatchCount() + { + return $this->batches; + } + + /** + * Get the total number of iterated resources + * + * @return int + */ + public function getIteratedCount() + { + return $this->iterated; + } +} |