diff --git a/CHANGELOG.md b/CHANGELOG.md index 1897120..20ff297 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to WuttJamaican will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/) and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html). +## v0.28.8 (2026-02-25) + +### Fix + +- diff should use "intersection" of fields by default + ## v0.28.7 (2026-02-17) ### Fix diff --git a/pyproject.toml b/pyproject.toml index 1cd82a5..08ea1d5 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -6,7 +6,7 @@ build-backend = "hatchling.build" [project] name = "WuttJamaican" -version = "0.28.7" +version = "0.28.8" description = "Base package for Wutta Framework" readme = "README.md" authors = [{name = "Lance Edgar", email = "lance@wuttaproject.org"}] diff --git a/src/wuttjamaican/diffs.py b/src/wuttjamaican/diffs.py index 38e4214..47db028 100644 --- a/src/wuttjamaican/diffs.py +++ b/src/wuttjamaican/diffs.py @@ -83,7 +83,11 @@ class Diff: # pylint: disable=too-many-instance-attributes self.cell_padding = cell_padding def make_fields(self): # pylint: disable=missing-function-docstring - return sorted(set(self.old_data) | set(self.new_data), key=lambda x: x.lower()) + if self.old_data and self.new_data: + fields = set(self.old_data) & set(self.new_data) + else: + fields = set(self.old_data or self.new_data) + return sorted(fields, key=lambda f: f.lower()) def render_html(self, template=None, **kwargs): """ diff --git a/tests/test_diffs.py b/tests/test_diffs.py index 32dedeb..dfb4452 100644 --- a/tests/test_diffs.py +++ b/tests/test_diffs.py @@ -19,13 +19,20 @@ class TestDiff(ConfigTestCase): self.assertEqual(diff.cell_padding, "0.5rem") def test_make_fields(self): - old_data = {"foo": "bar"} - new_data = {"foo": "bar", "baz": "zer"} + + # should return "sorted intersection" of fields + old_data = {"foo": "bar", "baz": "abc"} + new_data = {"foo": "bar", "baz": "xyz", "flurg": "foo"} # nb. this calls make_fields() diff = self.make_diff(old_data, new_data) - # TODO: should the fields be cumulative? or just use new_data? self.assertEqual(diff.fields, ["baz", "foo"]) + # all fields are used if only one data set + diff = self.make_diff(old_data, {}) + self.assertEqual(diff.fields, ["baz", "foo"]) + diff = self.make_diff({}, new_data) + self.assertEqual(diff.fields, ["baz", "flurg", "foo"]) + def test_values(self): old_data = {"foo": "bar"} new_data = {"foo": "baz"}