From a7e91dce415f4c1d48966abbf89b05dafdf9e05c Mon Sep 17 00:00:00 2001 From: Etienne Pot Date: Tue, 10 Oct 2023 08:28:17 -0700 Subject: [PATCH] Validate the dataclass is frozen when allow_unfrozen=True (Fix #406) PiperOrigin-RevId: 572257669 --- CHANGELOG.md | 4 ++++ etils/edc/frozen_utils.py | 5 +++++ 2 files changed, 9 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 56b79483..c4feb380 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,10 @@ Changelog follow https://keepachangelog.com/ format. ## [Unreleased] +* `edc`: + * Changed: Raise an error if `allow_unfrozen=` is used on a non-frozen + dataclass + ## [1.5.0] - 2023-09-19 * `ecolab`: diff --git a/etils/edc/frozen_utils.py b/etils/edc/frozen_utils.py index 5ee645dd..a6338c6b 100644 --- a/etils/edc/frozen_utils.py +++ b/etils/edc/frozen_utils.py @@ -30,6 +30,11 @@ def add_unfrozen(cls: _Cls) -> _Cls: """Add the `frozen`, `unfrozen` methods.""" + if not cls.__dataclass_params__.frozen: + raise ValueError( + 'allow_unfrozen require the dataclass to be defined with' + f' `frozen=True`. For {cls}' + ) cls_frozen = getattr(cls, 'frozen', None) cls_unfrozen = getattr(cls, 'has_unfrozen', None)