From 5f2e20e70db182624c570e1e02432e425c638013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Beno=C3=AEt=20Sierro?= Date: Mon, 27 Nov 2023 16:27:48 +0100 Subject: [PATCH] better warnings/errors --- pyproject.toml | 2 +- src/scgenerator/parameter.py | 9 ++++++++- src/scgenerator/variableparameters.py | 3 ++- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 6039d1f..d01e833 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta" [project] name = "scgenerator" -version = "0.3.23" +version = "0.3.24" description = "Simulate nonlinear pulse propagation in optical fibers" readme = "README.md" authors = [{ name = "Benoit Sierro", email = "benoit.sierro@iap.unibe.ch" }] diff --git a/src/scgenerator/parameter.py b/src/scgenerator/parameter.py index ae86936..f4ba129 100644 --- a/src/scgenerator/parameter.py +++ b/src/scgenerator/parameter.py @@ -3,8 +3,9 @@ from __future__ import annotations import datetime as datetime_module import json import os +import warnings from copy import copy, deepcopy -from dataclasses import dataclass, field +from dataclasses import dataclass, field, fields from functools import lru_cache, wraps from math import isnan from pathlib import Path @@ -431,6 +432,12 @@ class Parameters: @classmethod def from_json(cls, s: str) -> Parameters: decoded = json.loads(s, object_hook=custom_decode_hook) + extras = set(decoded) - cls._p_names + if len(extras) > 0: + warnings.warn(f"extra keys (ignored) in parameter json: {extras!r}") + for e in extras: + decoded.pop(e) + return cls(**decoded) @classmethod diff --git a/src/scgenerator/variableparameters.py b/src/scgenerator/variableparameters.py index c516474..b66d683 100644 --- a/src/scgenerator/variableparameters.py +++ b/src/scgenerator/variableparameters.py @@ -126,7 +126,8 @@ class VariableParameter: other_len := len(getattr(instance, self.sync.private_name)) ): raise ValueError( - f"sequence of len {this_len} doesn't match syncronized sequence of len {other_len}" + f"sequence {self.public_name!r} of len {this_len} doesn't match syncronized " + f"sequence {self.sync.public_name!r} of len {other_len}" ) def _error_no_default(self) -> ValueError: