fix: accept Python SDK "in"/"out" manifest_type (normalize to input/output) - #96
Merged
matyas-jirat-keboola merged 3 commits intoJun 25, 2026
Merged
Conversation
The Python SDK (keboola.component) writes manifest_type: "out" in native mode, but ManifestOptions only accepted "output". This caused failures when PHP-based processors (e.g. processor-create-manifest) tried to read manifests generated by Python components. Accept "out" as input and normalize it to "output" internally so the canonical value is preserved in all outputs. Co-Authored-By: olena.marchuk <olena.marchuk@keboola.com>
Contributor
Author
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
The devedge/sami-github package (Sami API doc generator) is abandoned and its upstream source now returns 404, which breaks `composer install` in the CI Docker build before any test step runs. It is not used by `composer ci` (legacy doc generation only), so removing it unblocks the build for the whole repo. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EVw2ASBABBmYrgrQYMZC54
PR #96 added "out" -> "output" but the input side was still rejected. The Python SDK writes the stage value ("in"/"out") into manifest_type — the form the platform has accepted for over a year — while php-component only accepted the canonical "output". getTableManifest() routes every table manifest, including input-stage manifests read by writers, through this single validator, so a manifest carrying "in" still threw OptionsValidationException. Accept "in" as an alias and normalize it to the canonical "input", symmetric with the existing "out" -> "output" handling. Adds tests for the input path, canonical pass-through, and rejection of unknown values. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EVw2ASBABBmYrgrQYMZC54
matyas-jirat-keboola
marked this pull request as ready for review
June 25, 2026 08:29
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
With the
new-native-typesfeature enabled, the Python SDK (keboola.component) writes the stage value intomanifest_type—"out"for output tables,"in"for input tables. These stage aliases are what the platform has accepted for a long time.php-component, however, only accepted the canonical"output", so any PHP processor or writer that reads a native-types manifest produced by a Python component failed with:getTableManifest()routes every table manifest — input and output — throughOutTable\ManifestOptions::fromArray()→setManifestType(), so both the"out"(processors reading upstream output) and"in"(writers reading their inputs) cases hit the same strict validator.php-componentwas the strict outlier; the fix belongs here, not in the high-volume producer SDK.Change
"in"/"out"as aliases and normalize them to the canonical"input"/"output"internally, so stored and emitted values stay canonical. (Builds on the original PR, which handled only"out"; the symmetric"in"→"input"side is added because the same validator handles input manifests.)devedge/sami-githubdev dependency. Its upstream source now 404s, which was breakingcomposer installin the CI Docker build before any test ran (this affectsmastertoo, unrelated to this fix). It is not used bycomposer ci.Verification
Full
composer ci(composer validate + phpcs + phpstan level max + phpunit) run locally in the CI Docker image (php 8.3 / symfony 6.4): green,OK (87 tests, 215 assertions).Rollout note
After this is released, the PHP processors/writers that read manifests need to bump their
keboola/php-componentconstraint to pick it up (several pin older majors). A10.1.xbackport would let^10.1consumers (e.g.processor-create-manifest) take it without a major upgrade.Context: CFTL-703 / SUPPORT-16720.