One function

default_namedtuple_deserializer in ramonhagenaars/jsons

The author described this change as Fixed bug with loading empty tuple.. It counts as a record because the check below fails on the code as it stood at f55527208 and passes on f56035a06, with nothing else changed between the two runs.

Fix saved2019-03-15
Sharing licenceMIT · LICENSE
Change size+3 2

What the code was meant to do, written into the code itself as a docstring

Deserialize a (JSON) list into a named tuple by deserializing all items of that list. :param obj: the tuple that needs deserializing. :param cls: the NamedTuple. :param kwargs: any keyword arguments. :return: a deserialized named tuple (i.e. an instance of a class).

The change

1313 field = obj[index]
1414 else:
1515 field = cls._field_defaults.get(field_name, None)
16- if not field:
16+ if field is None:
1717 msg = ('No value present in {} for argument "{}"'
1818 .format(obj, field_name))
1919 raise UnfulfilledArgumentError(msg, field_name, obj, cls)
20- cls_ = cls._field_types.get(field_name, None)
20+ field_types = getattr(cls, '_field_types', None)
21+ cls_ = field_types.get(field_name) if field_types else None
2122 loaded_field = load(field, cls_, **kwargs)
2223 args.append(loaded_field)
2324 inst = cls(*args)

The check that tells the two apart

failpass·tests/test_tuple.py::TestTuple::test_load_namedtuple_with_empty

Check file tests/test_tuple.py, taken without changes from the fix and copied onto the older code, so the exact same check runs against both versions.

Origin and history

The code before itf5552720826916676a1339812b3301e5e8ab1213
Broken version dated2019-03-14
Modulejsons.deserializers.default_tuple
Units changeddefault_namedtuple_deserializer
Fingerprint2e5268b52aef86f0
Checked2026-08-18 by goldset/0.1

Every field above is generated by our program. None of it is written by hand.

Other bugs found in ramonhagenaars/jsons