From ee91c53da0297892c441957995775ac8b3063c2a Mon Sep 17 00:00:00 2001 From: sebprt Date: Wed, 19 Jun 2024 16:55:56 +0200 Subject: [PATCH 1/3] Improved the writer Management + ran php-cs-fixer --- src/Sheet/FingersCrossed/Loader.php | 32 +++++++++++++++-------------- src/Sheet/Safe/Loader.php | 12 +---------- 2 files changed, 18 insertions(+), 26 deletions(-) diff --git a/src/Sheet/FingersCrossed/Loader.php b/src/Sheet/FingersCrossed/Loader.php index dcdc77e..7c3c15e 100644 --- a/src/Sheet/FingersCrossed/Loader.php +++ b/src/Sheet/FingersCrossed/Loader.php @@ -11,13 +11,12 @@ use Box\Spout\Writer\WriterInterface; use Kiboko\Component\Bucket\AcceptanceResultBucket; use Kiboko\Component\Bucket\EmptyResultBucket; -use Kiboko\Contract\Bucket\ResultBucketInterface; -use Kiboko\Contract\Pipeline\FlushableInterface; +use Kiboko\Component\Bucket\RejectionResultBucket; use Kiboko\Contract\Pipeline\LoaderInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; -final readonly class Loader implements LoaderInterface, FlushableInterface +final readonly class Loader implements LoaderInterface { public function __construct( private WriterInterface $writer, @@ -30,35 +29,38 @@ public function __construct( public function load(): \Generator { - $line = yield; + $line = yield new EmptyResultBucket(); try { $this->writer->addRow( new Row(array_map(fn ($value) => new Cell($value), array_keys($line)), null) ); - } catch (WriterNotOpenedException|IOException $exception) { + } catch (IOException|WriterNotOpenedException $exception) { $this->logger->error('Impossible to load data to the given CSV file.', ['line' => $line, 'message' => $exception->getMessage(), 'previous' => $exception->getPrevious()]); - - return; + $line = yield new RejectionResultBucket( + 'Impossible to load data to the given CSV file.', + $exception, + $line + ); } + /* @phpstan-ignore-next-line */ while (true) { try { $this->writer->addRow( new Row(array_map(fn ($value) => new Cell($value), $line), null) ); - } catch (WriterNotOpenedException|IOException $exception) { + } catch (IOException|WriterNotOpenedException $exception) { $this->logger->error('Impossible to load data to the given CSV file.', ['line' => $line, 'message' => $exception->getMessage(), 'previous' => $exception->getPrevious()]); + $line = yield new RejectionResultBucket( + 'Impossible to load data to the given CSV file.', + $exception, + $line + ); + continue; } $line = yield new AcceptanceResultBucket($line); } } - - public function flush(): ResultBucketInterface - { - $this->writer->close(); - - return new EmptyResultBucket(); - } } diff --git a/src/Sheet/Safe/Loader.php b/src/Sheet/Safe/Loader.php index d00e6b5..eccf5fe 100644 --- a/src/Sheet/Safe/Loader.php +++ b/src/Sheet/Safe/Loader.php @@ -10,14 +10,11 @@ use Box\Spout\Writer\Exception\WriterNotOpenedException; use Box\Spout\Writer\WriterInterface; use Kiboko\Component\Bucket\AcceptanceResultBucket; -use Kiboko\Component\Bucket\EmptyResultBucket; -use Kiboko\Contract\Bucket\ResultBucketInterface; -use Kiboko\Contract\Pipeline\FlushableInterface; use Kiboko\Contract\Pipeline\LoaderInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; -final readonly class Loader implements LoaderInterface, FlushableInterface +final readonly class Loader implements LoaderInterface { public function __construct( private WriterInterface $writer, @@ -62,11 +59,4 @@ private function orderColumns(array $headers, array $line): Row return new Row($result, null); } - - public function flush(): ResultBucketInterface - { - $this->writer->close(); - - return new EmptyResultBucket(); - } } From f38cc560f9a3fed2cd2d56692235e4528b7e9952 Mon Sep 17 00:00:00 2001 From: sebprt Date: Mon, 24 Jun 2024 11:38:22 +0200 Subject: [PATCH 2/3] Removed sheet management from Loader --- src/Sheet/FingersCrossed/Loader.php | 3 --- src/Sheet/Safe/Loader.php | 3 --- 2 files changed, 6 deletions(-) diff --git a/src/Sheet/FingersCrossed/Loader.php b/src/Sheet/FingersCrossed/Loader.php index 7c3c15e..de452ff 100644 --- a/src/Sheet/FingersCrossed/Loader.php +++ b/src/Sheet/FingersCrossed/Loader.php @@ -20,11 +20,8 @@ { public function __construct( private WriterInterface $writer, - private string $sheetName, private LoggerInterface $logger = new NullLogger() ) { - /* @phpstan-ignore-next-line */ - $this->writer->getCurrentSheet()->setName($this->sheetName); } public function load(): \Generator diff --git a/src/Sheet/Safe/Loader.php b/src/Sheet/Safe/Loader.php index eccf5fe..5822fed 100644 --- a/src/Sheet/Safe/Loader.php +++ b/src/Sheet/Safe/Loader.php @@ -18,11 +18,8 @@ { public function __construct( private WriterInterface $writer, - private string $sheetName, private LoggerInterface $logger = new NullLogger() ) { - /* @phpstan-ignore-next-line */ - $this->writer->getCurrentSheet()->setName($this->sheetName); } public function load(): \Generator From 2a59775c76226f3dd2a37e9ab504991173790e25 Mon Sep 17 00:00:00 2001 From: sebprt Date: Tue, 2 Jul 2024 12:03:14 +0200 Subject: [PATCH 3/3] Updated tests + fixed PhpStan errors --- src/Sheet/Safe/Loader.php | 4 +++- tests/functional/Sheet/FingersCrossed/ExcelLoaderTest.php | 4 +++- .../Sheet/FingersCrossed/OpenDocumentLoaderTest.php | 4 +++- tests/functional/Sheet/Safe/ExcelLoaderTest.php | 4 +++- tests/functional/Sheet/Safe/OpenDocumentLoaderTest.php | 4 +++- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/src/Sheet/Safe/Loader.php b/src/Sheet/Safe/Loader.php index 5822fed..c863ad6 100644 --- a/src/Sheet/Safe/Loader.php +++ b/src/Sheet/Safe/Loader.php @@ -10,6 +10,7 @@ use Box\Spout\Writer\Exception\WriterNotOpenedException; use Box\Spout\Writer\WriterInterface; use Kiboko\Component\Bucket\AcceptanceResultBucket; +use Kiboko\Component\Bucket\EmptyResultBucket; use Kiboko\Contract\Pipeline\LoaderInterface; use Psr\Log\LoggerInterface; use Psr\Log\NullLogger; @@ -24,7 +25,7 @@ public function __construct( public function load(): \Generator { - $line = yield; + $line = yield new EmptyResultBucket(); $headers = array_keys($line); try { $this->writer->addRow( @@ -36,6 +37,7 @@ public function load(): \Generator return; } + /* @phpstan-ignore-next-line */ while (true) { try { $this->writer->addRow($this->orderColumns($headers, $line)); diff --git a/tests/functional/Sheet/FingersCrossed/ExcelLoaderTest.php b/tests/functional/Sheet/FingersCrossed/ExcelLoaderTest.php index 49911a9..6369a08 100644 --- a/tests/functional/Sheet/FingersCrossed/ExcelLoaderTest.php +++ b/tests/functional/Sheet/FingersCrossed/ExcelLoaderTest.php @@ -74,9 +74,11 @@ public function load(): void 'last name' => 'dupont', ], ], - new Loader($this->writer, 'Sheet1') + new Loader($this->writer) ); + $this->writer->close(); + $this->assertRowWasWrittenToExcel( /* 'vfs://test.xlsx' */ $path, 'Sheet1', diff --git a/tests/functional/Sheet/FingersCrossed/OpenDocumentLoaderTest.php b/tests/functional/Sheet/FingersCrossed/OpenDocumentLoaderTest.php index 6794e82..16a7db9 100644 --- a/tests/functional/Sheet/FingersCrossed/OpenDocumentLoaderTest.php +++ b/tests/functional/Sheet/FingersCrossed/OpenDocumentLoaderTest.php @@ -74,9 +74,11 @@ public function load(): void 'last name' => 'dupont', ], ], - new Loader($this->writer, 'Sheet1') + new Loader($this->writer) ); + $this->writer->close(); + $this->assertRowWasWrittenToOpenDocument( /* 'vfs://test.ods' */ $path, 'Sheet1', diff --git a/tests/functional/Sheet/Safe/ExcelLoaderTest.php b/tests/functional/Sheet/Safe/ExcelLoaderTest.php index d794c4a..01255fc 100644 --- a/tests/functional/Sheet/Safe/ExcelLoaderTest.php +++ b/tests/functional/Sheet/Safe/ExcelLoaderTest.php @@ -74,9 +74,11 @@ public function load(): void 'last name' => 'dupont', ], ], - new Loader($this->writer, 'Sheet1') + new Loader($this->writer) ); + $this->writer->close(); + $this->assertRowWasWrittenToExcel( /* 'vfs://test.xlsx' */ $path, 'Sheet1', diff --git a/tests/functional/Sheet/Safe/OpenDocumentLoaderTest.php b/tests/functional/Sheet/Safe/OpenDocumentLoaderTest.php index 4b85834..ddb14d0 100644 --- a/tests/functional/Sheet/Safe/OpenDocumentLoaderTest.php +++ b/tests/functional/Sheet/Safe/OpenDocumentLoaderTest.php @@ -74,9 +74,11 @@ public function load(): void 'last name' => 'dupont', ], ], - new Loader($this->writer, 'Sheet1') + new Loader($this->writer) ); + $this->writer->close(); + $this->assertRowWasWrittenToOpenDocument( /* 'vfs://test.ods' */ $path, 'Sheet1',