From 3ad19942ddd661660ce3335b0f1740f042f6f2bd Mon Sep 17 00:00:00 2001 From: Norbert Orzechowicz Date: Sun, 2 Aug 2026 18:52:22 +0200 Subject: [PATCH] feat(flow-php/web): playground examples read from shared datasets - ship orders.xlsx, orders.floe and partitioned CSVs - move every example off per-example input/ folders - add Floe reading and writing examples --- web/landing/assets/wasm/data/orders.floe | Bin 0 -> 56434 bytes web/landing/assets/wasm/data/orders.xlsx | Bin 0 -> 25085 bytes .../color=blue/sku=A/products.csv} | 0 .../color=green/sku=A/products.csv} | 0 .../partitioned/color=red/sku=A/products.csv} | 0 .../partitioned/color=red/sku=B/products.csv} | 0 .../data_frame/data_reading/csv/code.php | 2 +- .../data_reading/csv/input/dataset.csv | 6 -- .../data_frame/data_reading/excel/code.php | 2 +- .../data_reading/excel/input/dataset.xlsx | Bin 10264 -> 0 bytes .../data_frame/data_reading/floe/_meta.yaml | 2 + .../data_frame/data_reading/floe/code.php | 14 ++++ .../data_reading/floe/description.md | 1 + .../data_reading/floe/documentation.md | 1 + .../data_reading/json/input/dataset.json | 7 -- .../data_reading/jsonl/input/dataset.jsonl | 5 -- .../data_frame/data_reading/parquet/code.php | 2 +- .../parquet/input/dataset.parquet | Bin 26568 -> 0 bytes .../data_frame/data_writing/floe/_meta.yaml | 2 + .../data_frame/data_writing/floe/code.php | 17 ++++ .../data_writing/floe/description.md | 1 + .../data_writing/floe/documentation.md | 1 + .../data_writing/overwrite/code.php | 5 +- .../data_writing/overwrite/input/file.csv | 4 - .../partitioning/partition_pruning/code.php | 2 +- .../partitioning/path_partitions/code.php | 2 +- .../input/color=blue/sku=A/data.csv | 3 - .../input/color=green/sku=A/data.csv | 3 - .../input/color=red/sku=A/data.csv | 3 - .../input/color=red/sku=B/data.csv | 3 - .../partitioning/reading/basic/code.php | 2 +- .../basic/input/color=blue/sku=A/data.csv | 3 - .../basic/input/color=green/sku=A/data.csv | 3 - .../basic/input/color=red/sku=A/data.csv | 3 - .../basic/input/color=red/sku=B/data.csv | 3 - .../examples/topics/schema/inferring/code.php | 4 +- .../topics/schema/inferring/input/dataset.csv | 6 -- web/landing/phpunit.xml | 2 +- .../ExamplesSourceProvider.php | 17 ++++ .../playground/_playground.html.twig | 8 +- .../topics/data_topic/_meta.yaml | 2 + .../data_topic/option_example/_meta.yaml | 2 + .../option_example/option_1/_meta.yaml | 2 + .../option_example/option_1/code.php | 5 ++ .../option_1/input/nested/data.csv | 2 + .../data_topic/plain_example/_meta.yaml | 2 + .../topics/data_topic/plain_example/code.php | 5 ++ .../plain_example/input/dataset.csv | 2 + .../Integration/ExamplesDatasetsTest.php | 78 ++++++++++++++++++ .../ExamplesSourceProviderTest.php | 56 +++++++++++++ 50 files changed, 231 insertions(+), 64 deletions(-) create mode 100644 web/landing/assets/wasm/data/orders.floe create mode 100644 web/landing/assets/wasm/data/orders.xlsx rename web/landing/{content/examples/topics/partitioning/partition_pruning/input/color=blue/sku=A/data.csv => assets/wasm/data/partitioned/color=blue/sku=A/products.csv} (100%) rename web/landing/{content/examples/topics/partitioning/partition_pruning/input/color=green/sku=A/data.csv => assets/wasm/data/partitioned/color=green/sku=A/products.csv} (100%) rename web/landing/{content/examples/topics/partitioning/partition_pruning/input/color=red/sku=A/data.csv => assets/wasm/data/partitioned/color=red/sku=A/products.csv} (100%) rename web/landing/{content/examples/topics/partitioning/partition_pruning/input/color=red/sku=B/data.csv => assets/wasm/data/partitioned/color=red/sku=B/products.csv} (100%) delete mode 100644 web/landing/content/examples/topics/data_frame/data_reading/csv/input/dataset.csv delete mode 100644 web/landing/content/examples/topics/data_frame/data_reading/excel/input/dataset.xlsx create mode 100644 web/landing/content/examples/topics/data_frame/data_reading/floe/_meta.yaml create mode 100644 web/landing/content/examples/topics/data_frame/data_reading/floe/code.php create mode 100644 web/landing/content/examples/topics/data_frame/data_reading/floe/description.md create mode 100644 web/landing/content/examples/topics/data_frame/data_reading/floe/documentation.md delete mode 100644 web/landing/content/examples/topics/data_frame/data_reading/json/input/dataset.json delete mode 100644 web/landing/content/examples/topics/data_frame/data_reading/jsonl/input/dataset.jsonl delete mode 100644 web/landing/content/examples/topics/data_frame/data_reading/parquet/input/dataset.parquet create mode 100644 web/landing/content/examples/topics/data_frame/data_writing/floe/_meta.yaml create mode 100644 web/landing/content/examples/topics/data_frame/data_writing/floe/code.php create mode 100644 web/landing/content/examples/topics/data_frame/data_writing/floe/description.md create mode 100644 web/landing/content/examples/topics/data_frame/data_writing/floe/documentation.md delete mode 100644 web/landing/content/examples/topics/data_frame/data_writing/overwrite/input/file.csv delete mode 100644 web/landing/content/examples/topics/partitioning/path_partitions/input/color=blue/sku=A/data.csv delete mode 100644 web/landing/content/examples/topics/partitioning/path_partitions/input/color=green/sku=A/data.csv delete mode 100644 web/landing/content/examples/topics/partitioning/path_partitions/input/color=red/sku=A/data.csv delete mode 100644 web/landing/content/examples/topics/partitioning/path_partitions/input/color=red/sku=B/data.csv delete mode 100644 web/landing/content/examples/topics/partitioning/reading/basic/input/color=blue/sku=A/data.csv delete mode 100644 web/landing/content/examples/topics/partitioning/reading/basic/input/color=green/sku=A/data.csv delete mode 100644 web/landing/content/examples/topics/partitioning/reading/basic/input/color=red/sku=A/data.csv delete mode 100644 web/landing/content/examples/topics/partitioning/reading/basic/input/color=red/sku=B/data.csv delete mode 100644 web/landing/content/examples/topics/schema/inferring/input/dataset.csv create mode 100644 web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/_meta.yaml create mode 100644 web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/_meta.yaml create mode 100644 web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/option_1/_meta.yaml create mode 100644 web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/option_1/code.php create mode 100644 web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/option_1/input/nested/data.csv create mode 100644 web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/plain_example/_meta.yaml create mode 100644 web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/plain_example/code.php create mode 100644 web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/plain_example/input/dataset.csv create mode 100644 web/landing/tests/Flow/Website/Tests/Integration/ExamplesDatasetsTest.php create mode 100644 web/landing/tests/Flow/Website/Tests/Integration/ExamplesSourceProviderTest.php diff --git a/web/landing/assets/wasm/data/orders.floe b/web/landing/assets/wasm/data/orders.floe new file mode 100644 index 0000000000000000000000000000000000000000..0d00393b5a68e218efffb1ff4944275c57185362 GIT binary patch literal 56434 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 RtKWY6ci6=rJpbhI{|6PHS7-nL literal 0 HcmV?d00001 diff --git a/web/landing/assets/wasm/data/orders.xlsx b/web/landing/assets/wasm/data/orders.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..df4cd67598ed9e14c6a13fa955b0bb480337ace9 GIT binary patch literal 25085 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 G|Naa9k4qu| literal 0 HcmV?d00001 diff --git a/web/landing/content/examples/topics/partitioning/partition_pruning/input/color=blue/sku=A/data.csv b/web/landing/assets/wasm/data/partitioned/color=blue/sku=A/products.csv similarity index 100% rename from web/landing/content/examples/topics/partitioning/partition_pruning/input/color=blue/sku=A/data.csv rename to web/landing/assets/wasm/data/partitioned/color=blue/sku=A/products.csv diff --git a/web/landing/content/examples/topics/partitioning/partition_pruning/input/color=green/sku=A/data.csv b/web/landing/assets/wasm/data/partitioned/color=green/sku=A/products.csv similarity index 100% rename from web/landing/content/examples/topics/partitioning/partition_pruning/input/color=green/sku=A/data.csv rename to web/landing/assets/wasm/data/partitioned/color=green/sku=A/products.csv diff --git a/web/landing/content/examples/topics/partitioning/partition_pruning/input/color=red/sku=A/data.csv b/web/landing/assets/wasm/data/partitioned/color=red/sku=A/products.csv similarity index 100% rename from web/landing/content/examples/topics/partitioning/partition_pruning/input/color=red/sku=A/data.csv rename to web/landing/assets/wasm/data/partitioned/color=red/sku=A/products.csv diff --git a/web/landing/content/examples/topics/partitioning/partition_pruning/input/color=red/sku=B/data.csv b/web/landing/assets/wasm/data/partitioned/color=red/sku=B/products.csv similarity index 100% rename from web/landing/content/examples/topics/partitioning/partition_pruning/input/color=red/sku=B/data.csv rename to web/landing/assets/wasm/data/partitioned/color=red/sku=B/products.csv diff --git a/web/landing/content/examples/topics/data_frame/data_reading/csv/code.php b/web/landing/content/examples/topics/data_frame/data_reading/csv/code.php index 23ebe70e8d..7f11fdf092 100644 --- a/web/landing/content/examples/topics/data_frame/data_reading/csv/code.php +++ b/web/landing/content/examples/topics/data_frame/data_reading/csv/code.php @@ -9,7 +9,7 @@ data_frame() ->read(from_csv( - __DIR__ . '/input/dataset.csv', + __DIR__ . '/data/orders.csv', with_header: true, empty_to_null: true, separator: ',', diff --git a/web/landing/content/examples/topics/data_frame/data_reading/csv/input/dataset.csv b/web/landing/content/examples/topics/data_frame/data_reading/csv/input/dataset.csv deleted file mode 100644 index 237a3f2678..0000000000 --- a/web/landing/content/examples/topics/data_frame/data_reading/csv/input/dataset.csv +++ /dev/null @@ -1,6 +0,0 @@ -id,name,email,active -1,Alice,alice@example.com,true -2,Bob,bob@example.com,false -3,Charlie,charlie@example.com,true -4,Diana,diana@example.com,true -5,Eve,eve@example.com,false diff --git a/web/landing/content/examples/topics/data_frame/data_reading/excel/code.php b/web/landing/content/examples/topics/data_frame/data_reading/excel/code.php index ef5fe9ce0e..9df29773fc 100644 --- a/web/landing/content/examples/topics/data_frame/data_reading/excel/code.php +++ b/web/landing/content/examples/topics/data_frame/data_reading/excel/code.php @@ -9,7 +9,7 @@ data_frame() ->read(from_excel( - __DIR__ . '/input/dataset.xlsx', + __DIR__ . '/data/orders.xlsx', )) ->collect() ->write(to_output(truncate: false)) diff --git a/web/landing/content/examples/topics/data_frame/data_reading/excel/input/dataset.xlsx b/web/landing/content/examples/topics/data_frame/data_reading/excel/input/dataset.xlsx deleted file mode 100644 index ad8dbbb3de50408a3a3db0fabf8ee09f54994344..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10264 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 diff --git a/web/landing/content/examples/topics/data_frame/data_reading/floe/_meta.yaml b/web/landing/content/examples/topics/data_frame/data_reading/floe/_meta.yaml new file mode 100644 index 0000000000..7e24f38dd8 --- /dev/null +++ b/web/landing/content/examples/topics/data_frame/data_reading/floe/_meta.yaml @@ -0,0 +1,2 @@ +priority: 0 +hidden: false diff --git a/web/landing/content/examples/topics/data_frame/data_reading/floe/code.php b/web/landing/content/examples/topics/data_frame/data_reading/floe/code.php new file mode 100644 index 0000000000..883f032132 --- /dev/null +++ b/web/landing/content/examples/topics/data_frame/data_reading/floe/code.php @@ -0,0 +1,14 @@ +read(from_floe(__DIR__ . '/data/orders.floe')) + ->collect() + ->write(to_output(truncate: false)) + ->run(); diff --git a/web/landing/content/examples/topics/data_frame/data_reading/floe/description.md b/web/landing/content/examples/topics/data_frame/data_reading/floe/description.md new file mode 100644 index 0000000000..41506fbe83 --- /dev/null +++ b/web/landing/content/examples/topics/data_frame/data_reading/floe/description.md @@ -0,0 +1 @@ +Extract data from Floe files. Floe is Flow's native self-describing binary format that stores the schema inside the file and evolves it across appended sections. diff --git a/web/landing/content/examples/topics/data_frame/data_reading/floe/documentation.md b/web/landing/content/examples/topics/data_frame/data_reading/floe/documentation.md new file mode 100644 index 0000000000..3bc9471dab --- /dev/null +++ b/web/landing/content/examples/topics/data_frame/data_reading/floe/documentation.md @@ -0,0 +1 @@ +- [Floe File Format](/documentation/components/core/floe) diff --git a/web/landing/content/examples/topics/data_frame/data_reading/json/input/dataset.json b/web/landing/content/examples/topics/data_frame/data_reading/json/input/dataset.json deleted file mode 100644 index 6c9b6a14d2..0000000000 --- a/web/landing/content/examples/topics/data_frame/data_reading/json/input/dataset.json +++ /dev/null @@ -1,7 +0,0 @@ -[ - {"id": 1, "name": "Alice", "email": "alice@example.com", "active": true}, - {"id": 2, "name": "Bob", "email": "bob@example.com", "active": false}, - {"id": 3, "name": "Charlie", "email": "charlie@example.com", "active": true}, - {"id": 4, "name": "Diana", "email": "diana@example.com", "active": true}, - {"id": 5, "name": "Eve", "email": "eve@example.com", "active": false} -] diff --git a/web/landing/content/examples/topics/data_frame/data_reading/jsonl/input/dataset.jsonl b/web/landing/content/examples/topics/data_frame/data_reading/jsonl/input/dataset.jsonl deleted file mode 100644 index 697c5d18d4..0000000000 --- a/web/landing/content/examples/topics/data_frame/data_reading/jsonl/input/dataset.jsonl +++ /dev/null @@ -1,5 +0,0 @@ -{"id": 1, "name": "Alice", "email": "alice@example.com", "active": true} -{"id": 2, "name": "Bob", "email": "bob@example.com", "active": false} -{"id": 3, "name": "Charlie", "email": "charlie@example.com", "active": true} -{"id": 4, "name": "Diana", "email": "diana@example.com", "active": true} -{"id": 5, "name": "Eve", "email": "eve@example.com", "active": false} diff --git a/web/landing/content/examples/topics/data_frame/data_reading/parquet/code.php b/web/landing/content/examples/topics/data_frame/data_reading/parquet/code.php index 6e95b2e918..3a44958ca5 100644 --- a/web/landing/content/examples/topics/data_frame/data_reading/parquet/code.php +++ b/web/landing/content/examples/topics/data_frame/data_reading/parquet/code.php @@ -9,7 +9,7 @@ data_frame() ->read(from_parquet( - __DIR__ . '/input/dataset.parquet', + __DIR__ . '/data/orders.parquet', )) ->collect() ->write(to_output(truncate: false)) diff --git a/web/landing/content/examples/topics/data_frame/data_reading/parquet/input/dataset.parquet b/web/landing/content/examples/topics/data_frame/data_reading/parquet/input/dataset.parquet deleted file mode 100644 index cbd326fd8e2561a15781438ffe10e6eb25c65676..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 26568 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 . '/data/orders.csv')) + ->limit(10) + ->collect() + ->saveMode(overwrite()) + ->write(to_floe(__DIR__ . '/output.floe')) + ->run(); diff --git a/web/landing/content/examples/topics/data_frame/data_writing/floe/description.md b/web/landing/content/examples/topics/data_frame/data_writing/floe/description.md new file mode 100644 index 0000000000..2332761324 --- /dev/null +++ b/web/landing/content/examples/topics/data_frame/data_writing/floe/description.md @@ -0,0 +1 @@ +Write data to Floe files. Floe is Flow's native self-describing binary format — the schema travels inside the file, so it reads back through the DataFrame API with no external metadata. diff --git a/web/landing/content/examples/topics/data_frame/data_writing/floe/documentation.md b/web/landing/content/examples/topics/data_frame/data_writing/floe/documentation.md new file mode 100644 index 0000000000..3bc9471dab --- /dev/null +++ b/web/landing/content/examples/topics/data_frame/data_writing/floe/documentation.md @@ -0,0 +1 @@ +- [Floe File Format](/documentation/components/core/floe) diff --git a/web/landing/content/examples/topics/data_frame/data_writing/overwrite/code.php b/web/landing/content/examples/topics/data_frame/data_writing/overwrite/code.php index 65d970cdcc..d0de04256e 100644 --- a/web/landing/content/examples/topics/data_frame/data_writing/overwrite/code.php +++ b/web/landing/content/examples/topics/data_frame/data_writing/overwrite/code.php @@ -8,7 +8,8 @@ require __DIR__ . '/vendor/autoload.php'; data_frame() - ->read(from_csv(__DIR__ . '/input/file.csv')) + ->read(from_csv(__DIR__ . '/data/orders.csv')) + ->limit(20) ->saveMode(overwrite()) ->write(to_csv(__DIR__ . '/output/file.csv')) ->collect() @@ -18,7 +19,7 @@ data_frame() ->read(from_csv(__DIR__ . '/output/file.csv')) ->saveMode(overwrite()) - ->drop('name') + ->drop('notes') ->write(to_csv(__DIR__ . '/output/file.csv')) ->collect() ->write(to_output(truncate: false)) diff --git a/web/landing/content/examples/topics/data_frame/data_writing/overwrite/input/file.csv b/web/landing/content/examples/topics/data_frame/data_writing/overwrite/input/file.csv deleted file mode 100644 index 5389099c0b..0000000000 --- a/web/landing/content/examples/topics/data_frame/data_writing/overwrite/input/file.csv +++ /dev/null @@ -1,4 +0,0 @@ -id,name,price -1,Product A,19.99 -2,Product B,29.99 -3,Product C,39.99 diff --git a/web/landing/content/examples/topics/partitioning/partition_pruning/code.php b/web/landing/content/examples/topics/partitioning/partition_pruning/code.php index 3ef795cf58..b9a6d020fe 100644 --- a/web/landing/content/examples/topics/partitioning/partition_pruning/code.php +++ b/web/landing/content/examples/topics/partitioning/partition_pruning/code.php @@ -8,7 +8,7 @@ require __DIR__ . '/vendor/autoload.php'; data_frame() - ->read(from_csv(__DIR__ . '/input/color=*/sku=*/*.csv')) + ->read(from_csv(__DIR__ . '/data/partitioned/color=*/sku=*/*.csv')) ->filterPartitions(ref('color')->notEquals(lit('green'))) ->collect() ->write(to_output(truncate: false)) diff --git a/web/landing/content/examples/topics/partitioning/path_partitions/code.php b/web/landing/content/examples/topics/partitioning/path_partitions/code.php index dc8654a2a0..de5790e199 100644 --- a/web/landing/content/examples/topics/partitioning/path_partitions/code.php +++ b/web/landing/content/examples/topics/partitioning/path_partitions/code.php @@ -7,7 +7,7 @@ require __DIR__ . '/vendor/autoload.php'; data_frame() - ->read(from_path_partitions(__DIR__ . '/input/color=*/sku=*/*.csv')) + ->read(from_path_partitions(__DIR__ . '/data/partitioned/color=*/sku=*/*.csv')) ->withEntry('path', ref('path')->strReplace(__DIR__, '/__ABSOLUTE_PATH__')) ->collect() ->write(to_output(truncate: false)) diff --git a/web/landing/content/examples/topics/partitioning/path_partitions/input/color=blue/sku=A/data.csv b/web/landing/content/examples/topics/partitioning/path_partitions/input/color=blue/sku=A/data.csv deleted file mode 100644 index cabbeba10e..0000000000 --- a/web/landing/content/examples/topics/partitioning/path_partitions/input/color=blue/sku=A/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,price -5,Blue Widget A,16.99 -6,Blue Gadget A,26.99 diff --git a/web/landing/content/examples/topics/partitioning/path_partitions/input/color=green/sku=A/data.csv b/web/landing/content/examples/topics/partitioning/path_partitions/input/color=green/sku=A/data.csv deleted file mode 100644 index 03902632f1..0000000000 --- a/web/landing/content/examples/topics/partitioning/path_partitions/input/color=green/sku=A/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,price -7,Green Widget A,17.99 -8,Green Gadget A,27.99 diff --git a/web/landing/content/examples/topics/partitioning/path_partitions/input/color=red/sku=A/data.csv b/web/landing/content/examples/topics/partitioning/path_partitions/input/color=red/sku=A/data.csv deleted file mode 100644 index c8c353a410..0000000000 --- a/web/landing/content/examples/topics/partitioning/path_partitions/input/color=red/sku=A/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,price -1,Red Widget A,15.99 -2,Red Gadget A,25.99 diff --git a/web/landing/content/examples/topics/partitioning/path_partitions/input/color=red/sku=B/data.csv b/web/landing/content/examples/topics/partitioning/path_partitions/input/color=red/sku=B/data.csv deleted file mode 100644 index a7d09d424e..0000000000 --- a/web/landing/content/examples/topics/partitioning/path_partitions/input/color=red/sku=B/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,price -3,Red Widget B,18.99 -4,Red Gadget B,28.99 diff --git a/web/landing/content/examples/topics/partitioning/reading/basic/code.php b/web/landing/content/examples/topics/partitioning/reading/basic/code.php index 8b3c3f5fbb..ac6bb32f81 100644 --- a/web/landing/content/examples/topics/partitioning/reading/basic/code.php +++ b/web/landing/content/examples/topics/partitioning/reading/basic/code.php @@ -8,6 +8,6 @@ require __DIR__ . '/vendor/autoload.php'; data_frame() - ->read(from_csv(__DIR__ . '/input/color=*/sku=*/*.csv')) + ->read(from_csv(__DIR__ . '/data/partitioned/color=*/sku=*/*.csv')) ->write(to_output(truncate: false)) ->run(); diff --git a/web/landing/content/examples/topics/partitioning/reading/basic/input/color=blue/sku=A/data.csv b/web/landing/content/examples/topics/partitioning/reading/basic/input/color=blue/sku=A/data.csv deleted file mode 100644 index cabbeba10e..0000000000 --- a/web/landing/content/examples/topics/partitioning/reading/basic/input/color=blue/sku=A/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,price -5,Blue Widget A,16.99 -6,Blue Gadget A,26.99 diff --git a/web/landing/content/examples/topics/partitioning/reading/basic/input/color=green/sku=A/data.csv b/web/landing/content/examples/topics/partitioning/reading/basic/input/color=green/sku=A/data.csv deleted file mode 100644 index 03902632f1..0000000000 --- a/web/landing/content/examples/topics/partitioning/reading/basic/input/color=green/sku=A/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,price -7,Green Widget A,17.99 -8,Green Gadget A,27.99 diff --git a/web/landing/content/examples/topics/partitioning/reading/basic/input/color=red/sku=A/data.csv b/web/landing/content/examples/topics/partitioning/reading/basic/input/color=red/sku=A/data.csv deleted file mode 100644 index c8c353a410..0000000000 --- a/web/landing/content/examples/topics/partitioning/reading/basic/input/color=red/sku=A/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,price -1,Red Widget A,15.99 -2,Red Gadget A,25.99 diff --git a/web/landing/content/examples/topics/partitioning/reading/basic/input/color=red/sku=B/data.csv b/web/landing/content/examples/topics/partitioning/reading/basic/input/color=red/sku=B/data.csv deleted file mode 100644 index a7d09d424e..0000000000 --- a/web/landing/content/examples/topics/partitioning/reading/basic/input/color=red/sku=B/data.csv +++ /dev/null @@ -1,3 +0,0 @@ -id,name,price -3,Red Widget B,18.99 -4,Red Gadget B,28.99 diff --git a/web/landing/content/examples/topics/schema/inferring/code.php b/web/landing/content/examples/topics/schema/inferring/code.php index 790695076f..6d0e327dbd 100644 --- a/web/landing/content/examples/topics/schema/inferring/code.php +++ b/web/landing/content/examples/topics/schema/inferring/code.php @@ -14,7 +14,7 @@ if ($fs->status(path(__DIR__ . '/output/schema.json')) === null) { $schema = data_frame() - ->read(from_csv(__DIR__ . '/input/dataset.csv')) + ->read(from_csv(__DIR__ . '/data/orders.csv')) ->limit(100) // Limiting the number of rows to read will speed up the process but might bring less accurate results ->autoCast() ->schema(); @@ -28,7 +28,7 @@ // Reading schemaless data formats with predefined schema can significantly improve performance data_frame() - ->read(from_csv(__DIR__ . '/input/dataset.csv', schema: $schema)) + ->read(from_csv(__DIR__ . '/data/orders.csv', schema: $schema)) ->collect() ->write(to_output(truncate: false, output: Output::rows_and_schema)) ->run(); diff --git a/web/landing/content/examples/topics/schema/inferring/input/dataset.csv b/web/landing/content/examples/topics/schema/inferring/input/dataset.csv deleted file mode 100644 index 9e00562b00..0000000000 --- a/web/landing/content/examples/topics/schema/inferring/input/dataset.csv +++ /dev/null @@ -1,6 +0,0 @@ -id,name,price,quantity,active,created_at -1,Product A,19.99,10,true,2024-01-15 -2,Product B,29.99,5,false,2024-01-16 -3,Product C,39.99,8,true,2024-01-17 -4,Product D,49.99,3,true,2024-01-18 -5,Product E,59.99,12,false,2024-01-19 diff --git a/web/landing/phpunit.xml b/web/landing/phpunit.xml index 5bb0ba2a87..4eee2b675e 100644 --- a/web/landing/phpunit.xml +++ b/web/landing/phpunit.xml @@ -13,7 +13,7 @@ - + diff --git a/web/landing/src/Flow/Website/StaticSourceProvider/ExamplesSourceProvider.php b/web/landing/src/Flow/Website/StaticSourceProvider/ExamplesSourceProvider.php index c170a5b5b3..b15415b0c5 100644 --- a/web/landing/src/Flow/Website/StaticSourceProvider/ExamplesSourceProvider.php +++ b/web/landing/src/Flow/Website/StaticSourceProvider/ExamplesSourceProvider.php @@ -38,10 +38,27 @@ public function all(): array 'example' => $example, 'option' => $option, ]); + + foreach ($this->examples->dataFiles($topic, $example, $option) as $path) { + $sources[] = new Source('example_option_data', [ + 'topic' => $topic, + 'example' => $example, + 'option' => $option, + 'path' => $path, + ]); + } } } else { $sources[] = new Source('example', ['topic' => $topic, 'example' => $example]); $sources[] = new Source('example_playground', ['topic' => $topic, 'example' => $example]); + + foreach ($this->examples->dataFiles($topic, $example) as $path) { + $sources[] = new Source('example_data', [ + 'topic' => $topic, + 'example' => $example, + 'path' => $path, + ]); + } } } } diff --git a/web/landing/templates/playground/_playground.html.twig b/web/landing/templates/playground/_playground.html.twig index 6c8fdb37e2..2e3732bbdd 100644 --- a/web/landing/templates/playground/_playground.html.twig +++ b/web/landing/templates/playground/_playground.html.twig @@ -21,7 +21,13 @@ Parameters: 'data/orders.json': asset('wasm/data/orders.json'), 'data/orders.csv': asset('wasm/data/orders.csv'), 'data/orders.jsonl': asset('wasm/data/orders.jsonl'), - 'data/orders.parquet': asset('wasm/data/orders.parquet') + 'data/orders.parquet': asset('wasm/data/orders.parquet'), + 'data/orders.xlsx': asset('wasm/data/orders.xlsx'), + 'data/orders.floe': asset('wasm/data/orders.floe'), + 'data/partitioned/color=blue/sku=A/products.csv': asset('wasm/data/partitioned/color=blue/sku=A/products.csv'), + 'data/partitioned/color=green/sku=A/products.csv': asset('wasm/data/partitioned/color=green/sku=A/products.csv'), + 'data/partitioned/color=red/sku=A/products.csv': asset('wasm/data/partitioned/color=red/sku=A/products.csv'), + 'data/partitioned/color=red/sku=B/products.csv': asset('wasm/data/partitioned/color=red/sku=B/products.csv') } %} {% for virtualPath, relativePath in data_files|default({}) %} {% if option is defined and option is not null %} diff --git a/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/_meta.yaml b/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/_meta.yaml new file mode 100644 index 0000000000..0d96c143f9 --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/_meta.yaml @@ -0,0 +1,2 @@ +priority: 1 +hidden: false diff --git a/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/_meta.yaml b/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/_meta.yaml new file mode 100644 index 0000000000..372963400e --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/_meta.yaml @@ -0,0 +1,2 @@ +priority: 2 +hidden: false diff --git a/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/option_1/_meta.yaml b/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/option_1/_meta.yaml new file mode 100644 index 0000000000..0d96c143f9 --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/option_1/_meta.yaml @@ -0,0 +1,2 @@ +priority: 1 +hidden: false diff --git a/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/option_1/code.php b/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/option_1/code.php new file mode 100644 index 0000000000..3b1611c004 --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Fixtures/WithDataFiles/topics/data_topic/option_example/option_1/code.php @@ -0,0 +1,5 @@ +getFilename() !== 'code.php') { + continue; + } + + $references = []; + preg_match_all( + "#__DIR__ \. '/(data/[^']+)'#", + (string) file_get_contents($file->getPathname()), + $references, + ); + + foreach ($references[1] as $reference) { + $matches = glob($wasmDir . '/' . $reference); + + static::assertNotEmpty($matches, sprintf( + '%s references "%s" which the playground does not ship', + $file->getPathname(), + $reference, + )); + + foreach ($matches as $match) { + static::assertContains( + str_replace($wasmDir . '/', '', $match), + $registered[1], + sprintf( + '%s references "%s" which is not registered in the wasm_resources map', + $file->getPathname(), + $reference, + ), + ); + } + + $checked++; + } + } + + static::assertGreaterThan(0, $checked, 'No dataset references were found to check'); + } +} diff --git a/web/landing/tests/Flow/Website/Tests/Integration/ExamplesSourceProviderTest.php b/web/landing/tests/Flow/Website/Tests/Integration/ExamplesSourceProviderTest.php new file mode 100644 index 0000000000..9cfcca14dd --- /dev/null +++ b/web/landing/tests/Flow/Website/Tests/Integration/ExamplesSourceProviderTest.php @@ -0,0 +1,56 @@ +all(); + + static::assertContainsEquals( + new Source('example_option_data', [ + 'topic' => 'data_topic', + 'example' => 'option_example', + 'option' => 'option_1', + 'path' => 'input/nested/data.csv', + ]), + $sources, + ); + } + + public function test_data_sources_are_emitted_for_example_without_options(): void + { + $sources = (new ExamplesSourceProvider(new Examples(__DIR__ . '/../Fixtures/WithDataFiles')))->all(); + + static::assertContainsEquals( + new Source('example_data', [ + 'topic' => 'data_topic', + 'example' => 'plain_example', + 'path' => 'input/dataset.csv', + ]), + $sources, + ); + } + + public function test_no_data_sources_are_emitted_when_example_ships_no_input(): void + { + $sources = (new ExamplesSourceProvider(new Examples(__DIR__ . '/../Fixtures/Valid')))->all(); + + static::assertSame( + ['example', 'example_playground'], + array_values(array_unique(array_map(static fn(Source $source): string => $source->routerName(), $sources))), + ); + } +}