From 979eaf8a5e27221294ac60e00bdd633842e57018 Mon Sep 17 00:00:00 2001 From: Thomas Guillet Date: Sun, 4 Jan 2026 20:27:45 +0100 Subject: [PATCH 1/4] Manage list parameter in Excel reform --- openfisca_core/reforms/reform_excel.py | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/openfisca_core/reforms/reform_excel.py b/openfisca_core/reforms/reform_excel.py index e7eca6567..f242b39fc 100644 --- a/openfisca_core/reforms/reform_excel.py +++ b/openfisca_core/reforms/reform_excel.py @@ -117,7 +117,10 @@ def generate_parameter_tree_values(self, parameter) -> list[tuple[str, float]]: for threshold, val in zip(value.thresholds, threshold_values): values.append((f"{name}.{threshold}", val)) else: - values.append((name, value)) + if type(value) == list: + values.append((name, ', '.join(value))) + else: + values.append((name, value)) return sorted(values, key=lambda v: v[0]) def parameter_data(self) -> list[tuple[str, float]]: @@ -212,7 +215,14 @@ def modify_parameters(local_parameters: ParameterNode) -> ParameterNode: ) ) else: - leaf.update(start=date_, value=value) + if "unit" in leaf.metadata and leaf.metadata["unit"] == "list": + if value is None: + leaf.update(start=date_, value=[]) + else: + values = [p.replace(",", "").strip() for p in value.split(" ")] + leaf.update(start=date_, value=[v for v in values if v]) + else: + leaf.update(start=date_, value=value) for leaf, threshold in params_with_thresholds.values(): sorted_brackets = [v[1] for v in sorted(threshold, key=lambda x: x[0])] From 9c022cdc00840ab4126df32d374950beee178810 Mon Sep 17 00:00:00 2001 From: Thomas Guillet Date: Sun, 4 Jan 2026 20:29:37 +0100 Subject: [PATCH 2/4] Update version --- CHANGELOG.md | 6 ++++++ setup.py | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d9016e177..e265bb743 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # Changelog +## 44.7.0 [#1357](https://github.com/openfisca/openfisca-core/pull/1357) + +#### New features + +- Manage list parameter in Excel reform + ## 44.6.0 #### Technical changes diff --git a/setup.py b/setup.py index 5d1716533..774f3f470 100644 --- a/setup.py +++ b/setup.py @@ -84,7 +84,7 @@ setup( name="OpenFisca-Core", - version="44.6.0", + version="44.7.0", author="OpenFisca Team", author_email="contact@openfisca.org", classifiers=[ From 1a8a2ccb251ebf56d6767dafad1420abab1c0aae Mon Sep 17 00:00:00 2001 From: Thomas Guillet Date: Sun, 4 Jan 2026 20:38:28 +0100 Subject: [PATCH 3/4] Lint --- openfisca_core/reforms/reform_excel.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/openfisca_core/reforms/reform_excel.py b/openfisca_core/reforms/reform_excel.py index f242b39fc..099a22783 100644 --- a/openfisca_core/reforms/reform_excel.py +++ b/openfisca_core/reforms/reform_excel.py @@ -118,7 +118,7 @@ def generate_parameter_tree_values(self, parameter) -> list[tuple[str, float]]: values.append((f"{name}.{threshold}", val)) else: if type(value) == list: - values.append((name, ', '.join(value))) + values.append((name, ", ".join(value))) else: values.append((name, value)) return sorted(values, key=lambda v: v[0]) @@ -219,7 +219,9 @@ def modify_parameters(local_parameters: ParameterNode) -> ParameterNode: if value is None: leaf.update(start=date_, value=[]) else: - values = [p.replace(",", "").strip() for p in value.split(" ")] + values = [ + p.replace(",", "").strip() for p in value.split(" ") + ] leaf.update(start=date_, value=[v for v in values if v]) else: leaf.update(start=date_, value=value) From f1cf9b82a34cf0f23b2517812156dca7c05b351b Mon Sep 17 00:00:00 2001 From: Thomas Guillet Date: Sun, 4 Jan 2026 21:19:06 +0100 Subject: [PATCH 4/4] Lint 2 --- openfisca_core/reforms/reform_excel.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openfisca_core/reforms/reform_excel.py b/openfisca_core/reforms/reform_excel.py index 099a22783..33dee7f43 100644 --- a/openfisca_core/reforms/reform_excel.py +++ b/openfisca_core/reforms/reform_excel.py @@ -117,7 +117,7 @@ def generate_parameter_tree_values(self, parameter) -> list[tuple[str, float]]: for threshold, val in zip(value.thresholds, threshold_values): values.append((f"{name}.{threshold}", val)) else: - if type(value) == list: + if isinstance(value, list): values.append((name, ", ".join(value))) else: values.append((name, value))