From 710041d545a28568f415e5a2c2044c0c5e31f395 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Wed, 27 Mar 2024 20:03:15 -0400 Subject: [PATCH 1/3] feat: add did you mean message for strict check --- dargs/dargs.py | 3 ++- tests/test_checker.py | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/dargs/dargs.py b/dargs/dargs.py index 482b512..ee6faee 100644 --- a/dargs/dargs.py +++ b/dargs/dargs.py @@ -465,8 +465,9 @@ def _check_strict(self, value: dict, path=None): return for name in value.keys(): if name not in allowed_keys: + dym_message = did_you_mean(name, allowed_keys) raise ArgumentKeyError( - path, f"undefined key `{name}` is " "not allowed in strict mode" + path, f"undefined key `{name}` is not allowed in strict mode. {dym_message}" ) # above are type checking part diff --git a/tests/test_checker.py b/tests/test_checker.py index 398215b..8ab1c31 100644 --- a/tests/test_checker.py +++ b/tests/test_checker.py @@ -18,8 +18,9 @@ def test_name_type(self): # possible error with self.assertRaises(ArgumentKeyError): ca.check({"key2": 1}) - with self.assertRaises(ArgumentKeyError): + with self.assertRaises(ArgumentKeyError) as cm: ca.check({"key1": 1, "key2": 1}, strict=True) + self.assertIn("Did you mean: key1?", str(cm.exception)) with self.assertRaises(ArgumentTypeError): ca.check({"key1": 1.0}) # special handle of None From 4c097294ee41a8c3a3485a36ca188b95ca7e81eb Mon Sep 17 00:00:00 2001 From: "pre-commit-ci[bot]" <66853113+pre-commit-ci[bot]@users.noreply.github.com> Date: Thu, 28 Mar 2024 00:03:44 +0000 Subject: [PATCH 2/3] [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --- dargs/dargs.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/dargs/dargs.py b/dargs/dargs.py index ee6faee..ad4875e 100644 --- a/dargs/dargs.py +++ b/dargs/dargs.py @@ -467,7 +467,8 @@ def _check_strict(self, value: dict, path=None): if name not in allowed_keys: dym_message = did_you_mean(name, allowed_keys) raise ArgumentKeyError( - path, f"undefined key `{name}` is not allowed in strict mode. {dym_message}" + path, + f"undefined key `{name}` is not allowed in strict mode. {dym_message}", ) # above are type checking part From 1dae82419d49f1d5ccb84661d678d97afe9bd905 Mon Sep 17 00:00:00 2001 From: Jinzhe Zeng Date: Wed, 27 Mar 2024 20:53:01 -0400 Subject: [PATCH 3/3] fix test --- tests/test_checker.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/test_checker.py b/tests/test_checker.py index 8ab1c31..2370591 100644 --- a/tests/test_checker.py +++ b/tests/test_checker.py @@ -18,9 +18,8 @@ def test_name_type(self): # possible error with self.assertRaises(ArgumentKeyError): ca.check({"key2": 1}) - with self.assertRaises(ArgumentKeyError) as cm: + with self.assertRaises(ArgumentKeyError): ca.check({"key1": 1, "key2": 1}, strict=True) - self.assertIn("Did you mean: key1?", str(cm.exception)) with self.assertRaises(ArgumentTypeError): ca.check({"key1": 1.0}) # special handle of None @@ -89,8 +88,9 @@ def test_sub_fields(self): ca.check(err_dict1) err_dict1["base"]["sub2"]["subsub2"]["subsubsub1"] = 111 ca.check(err_dict1) # now should pass - with self.assertRaises(ArgumentKeyError): + with self.assertRaises(ArgumentKeyError) as cm: ca.check(err_dict1, strict=True) # but should fail when strict + self.assertIn("Did you mean: subsubsub1?", str(cm.exception)) err_dict1["base"]["sub2"] = None with self.assertRaises(ArgumentTypeError): ca.check(err_dict1)