Skip to content

fix: accept Python SDK "in"/"out" manifest_type (normalize to input/output) - #96

Merged
matyas-jirat-keboola merged 3 commits into
masterfrom
devin/1781899665-fix-manifest-type-out
Jun 25, 2026
Merged

fix: accept Python SDK "in"/"out" manifest_type (normalize to input/output)#96
matyas-jirat-keboola merged 3 commits into
masterfrom
devin/1781899665-fix-manifest-type-out

Conversation

@devin-ai-integration

@devin-ai-integration devin-ai-integration Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Problem

With the new-native-types feature enabled, the Python SDK (keboola.component) writes the stage value into manifest_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:

OptionsValidationException: Manifest type "out" is not allowed, allowed types are: output

getTableManifest() routes every table manifest — input and output — through OutTable\ManifestOptions::fromArray()setManifestType(), so both the "out" (processors reading upstream output) and "in" (writers reading their inputs) cases hit the same strict validator. php-component was the strict outlier; the fix belongs here, not in the high-volume producer SDK.

Change

  • Accept "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.)
  • Tests for the input path, canonical pass-through, and rejection of unknown values.
  • Separate commit — CI unblock: removed the abandoned devedge/sami-github dev dependency. Its upstream source now 404s, which was breaking composer install in the CI Docker build before any test ran (this affects master too, unrelated to this fix). It is not used by composer 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-component constraint to pick it up (several pin older majors). A 10.1.x backport would let ^10.1 consumers (e.g. processor-create-manifest) take it without a major upgrade.

Context: CFTL-703 / SUPPORT-16720.

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>
@devin-ai-integration

Copy link
Copy Markdown
Contributor Author

🤖 Devin AI Engineer

I'll be helping with this pull request! Here's what you should know:

✅ I will automatically:

  • Address comments on this PR. Add '(aside)' to your comment to have me ignore it.
  • Look at CI failures and help fix them

Note: I can only respond to comments from users who have write access to this repository.

⚙️ Control Options:

  • Disable automatic comment, CI, and merge conflict monitoring

matyas-jirat-keboola and others added 2 commits June 22, 2026 18:33
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 matyas-jirat-keboola changed the title fix: accept "out" manifest_type from Python SDK fix: accept Python SDK "in"/"out" manifest_type (normalize to input/output) Jun 22, 2026
@matyas-jirat-keboola
matyas-jirat-keboola marked this pull request as ready for review June 25, 2026 08:29

@matyas-jirat-keboola matyas-jirat-keboola left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@soustruh soustruh left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM ദ്ദി(•ᴗ•)

@matyas-jirat-keboola
matyas-jirat-keboola merged commit 021223a into master Jun 25, 2026
9 checks passed
@matyas-jirat-keboola
matyas-jirat-keboola deleted the devin/1781899665-fix-manifest-type-out branch June 25, 2026 08:45
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants