Warn and normalize when source_rendering_behavior=None is passed#2570
Conversation
Python does not enforce type annotations at runtime, so passing None for source_rendering_behavior bypasses the SourceRenderingBehavior.NONE default, causing sources to be rendered incorrectly and an AttributeError in converter.py when .value is called on None. Add a guard in RenderConfig.__post_init__ that issues a UserWarning and normalizes None to SourceRenderingBehavior.NONE, consistent with the existing deprecation warning pattern in __post_init__.
There was a problem hiding this comment.
Pull request overview
This PR fixes a runtime misconfiguration edge case in Cosmos RenderConfig where passing source_rendering_behavior=None bypasses the intended default (SourceRenderingBehavior.NONE), leading to incorrect source rendering and downstream AttributeErrors when .value is accessed.
Changes:
- Add a
RenderConfig.__post_init__guard that warns whensource_rendering_behavior=Noneis provided and normalizes it toSourceRenderingBehavior.NONE. - Add a unit test asserting the warning is emitted and the value is normalized.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
cosmos/config.py |
Normalizes source_rendering_behavior=None to SourceRenderingBehavior.NONE and emits a UserWarning to prevent incorrect rendering/telemetry errors. |
tests/test_config.py |
Adds coverage to ensure the new warning + normalization behavior is enforced. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #2570 +/- ##
=======================================
Coverage 98.04% 98.05%
=======================================
Files 103 103
Lines 7589 7592 +3
=======================================
+ Hits 7441 7444 +3
Misses 148 148 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
Bug Fixes * Fix ``ExecutionMode.WATCHER`` producer retry behaviour by @tatiana in #2559 * Prevent watcher producer skip propagating to downstream tasks via gateway task by @johnhoran and @tatiana in #2597 * Keep watcher sensor polling when producer is still running by @pankajkoti in #2592 * Fix circular import error in Cosmos plugin discovery under Astro Runtime by @tatiana in #2538 * Fix ``CosmosRichLogger`` crash on ``None`` log message by @tatiana in #2540 * Enable inlets and outlets using dbt Fusion on Airflow 3 by @ichirotakami in #2561 * Fix incorrectly skipped source downstream tasks in ``ExecutionMode.WATCHER`` by @pankajastro in #2563 * Fix duplicate logs in ``dbt build`` when source freshness is enabled by @pankajastro in #2564 * Warn and normalize when ``source_rendering_behavior=None`` is passed by @pankajastro in #2570 * Gracefully handle ``Variable.set()`` failures on Astro Remote Execution by @hkc-8010 in #2573 * Skip malformed YAML selectors instead of failing entirely by @YourRoyalLinus in #2577 Docs * Update watcher test behavior docs for Cosmos 1.14.0 by @tatiana in #2549 * Add redirect for moved partial-parsing docs page by @tatiana in #2550 * Document ``ExecutionMode.WATCHER`` and ``depends_on_past`` limitation by @tatiana in #2602 * Restore memory-optimised imports docs for Cosmos < 1.14.0 by @pankajkoti in #2604 Others * Speed up Airflow 3.1+ integration tests by caching InProcessExecutionAPI by @pankajkoti in #2547 * Improve stability of cache hash unit tests by @tatiana in #2539 * Fix mypy 1.20.0 type check failures by @pankajkoti in #2546 * Fix CI failures caused by docs build memory exhaustion by @pankajkoti in #2580 * Fix dbt Fusion broken integration tests by @tatiana in #2581 * Fix flaky ``cosmos_manifest_selectors_example`` DAG in CI by @pankajkoti in #2593 * Reduce pre-commit autoupdate frequency PRs by @tatiana in #2544 * Bump ``reviewdog/action-actionlint`` from 1.71.0 to 1.72.0 by @dependabot in #2542 * Skip watcher gateway test on Airflow 3.0 by @tatiana in #2607 closes: astronomer/oss-integrations-private#381
Python does not enforce type annotations at runtime, so passing None for source_rendering_behavior bypasses the SourceRenderingBehavior.NONE default, causing sources to be rendered incorrectly and an AttributeError in converter.py when .value is called on None.
Add a guard in RenderConfig.post_init that issues a UserWarning and normalizes None to SourceRenderingBehavior.NONE, consistent with the existing deprecation warning pattern in post_init.
DAG
Before change DAG topology

After Change DAG topology

closes: #2568