Fix dynamic column callable placeholders when adding rows - #671
Open
deepakganesh78 wants to merge 1 commit into
Open
Fix dynamic column callable placeholders when adding rows#671deepakganesh78 wants to merge 1 commit into
deepakganesh78 wants to merge 1 commit into
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
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.
Fixes #576
Reproduction
On current
master, appending a row that uses the registered dynamic-column callables as placeholders stores the function objects instead of calculating their values:Root cause
Dataset.insert()only evaluates dynamic columns when an appended row is shorter than the dataset width. If callers pass the dynamic callable in the dynamic column position, the row is already the full width, so validation succeeds and the callable object is stored as data.Fix
Before validation, full-width rows now resolve only placeholders that are exactly the registered dynamic-column function. The function is called with the current row minus that placeholder, preserving the existing behavior for shorter rows and for explicit non-callable dynamic values.
Compatibility notes
Existing partial-row dynamic column generation still works. Full rows with explicit computed dynamic values are unchanged; only cells that are the same function object registered for that dynamic column are evaluated.
Validation
python -m pytest tests\\test_tablib.py::TablibTestCase::test_add_callable_column -qfails, storing function objects instead of('Brad', 'Montgomery', 70, 'Brad', 'BM').1 passed.TZ=UTC python -m pytest->183 passed.python -m ruff check src\\tablib\\core.py->All checks passed.