petl v1.7.21 Fixes Filldown And DictsView Failures


petl v1.7.21 was published on July 28, 2026. Its main change prevents filldown from raising RuntimeError on a table that contains a header but no data rows, while a second fix restores the expected Table.dicts() method path through DictsView.

The full release notes and downloads are on the GitHub release page.

The release fixes a RuntimeError raised when filldown receives a table with a header and no data rows. A header only table is a normal boundary value in an ETL pipeline. An extraction can return no records while retaining its schema, a filter can remove every row, or one partition can be empty while adjacent partitions contain data.

Before v1.7.21, that edge case could make a valid empty batch look like a task failure at the filldown stage. The distinction matters to scheduled work. A failed task can trigger retries and alerts, while an accepted empty batch can continue through the pipeline with no output rows.

The correction is tracked in pull request 698. For pipeline owners, the useful regression case is small: pass a header only table through the existing filldown call, then assert that the schema remains available and the result has zero data rows. The release note promises removal of the reported RuntimeError; it does not claim broader changes to empty table semantics.

The second fix removes an attribute collision in DictsView. Its dicts instance attribute was shadowing the Table.dicts() method. Python resolves an instance attribute before a class method with the same name, so code reaching the inherited API through this view could receive the stored attribute instead of the callable method.

This matters to jobs that treat table views through a common Table interface and call dicts() during row conversion. The release notes do not name a particular exception or changed output shape, so those should not be inferred. The documented defect is the method shadowing itself.

The change is tracked in pull request 697. A focused check should obtain a DictsView through the same application path used in production, confirm that dicts() is callable, and compare its rows with the current expected output. That test covers the corrected lookup path without assuming any unrelated conversion behavior.

v1.7.21 is a final release, not a beta or release candidate. Its notes list two fixes and no breaking changes, configuration keys, command line flags, or migration steps. This is a narrow correctness update rather than a feature release.

Both changes sit on boundary paths that broad happy path tests can miss. Before updating a scheduled pipeline, run the header only filldown case and the DictsView.dicts() case against the pinned v1.7.21 build. After deployment, check whether jobs that accept empty source results now finish normally instead of entering retry handling. Nothing in the release notes claims throughput or memory improvements, so performance expectations should remain unchanged.

The notes also do not call for a data backfill or schema migration. That still leaves room for application specific assumptions around empty iteration and method lookup. Keep the prior v1.7.20 package available until representative jobs have passed both regression cases, especially where an empty result follows a successful extraction rather than an upstream error.