From 15d5bab5124ff6baf8b2045a50dc2ba27c6714cd Mon Sep 17 00:00:00 2001 From: Antoine Lambert <antoine.lambert@inria.fr> Date: Tue, 13 Apr 2021 12:43:48 +0200 Subject: [PATCH] identifiers: Fix some invalid ValidationError template string formats Some ValidationError exceptions could not be serialized to string due to these format errors. Related to T3234 --- swh/model/identifiers.py | 6 +++--- swh/model/tests/test_identifiers.py | 10 +++++++++- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/swh/model/identifiers.py b/swh/model/identifiers.py index c9f20dcb..537f1e3f 100644 --- a/swh/model/identifiers.py +++ b/swh/model/identifiers.py @@ -925,7 +925,7 @@ class _BaseSWHID(Generic[_TObjectType]): return cls(**parts) except ValueError as e: raise ValidationError( - "ValueError: %(args)", params={"args": e.args} + "ValueError: %(args)s", params={"args": e.args} ) from None @@ -996,7 +996,7 @@ def _parse_lines_qualifier( return (int(lines), None) except ValueError: raise ValidationError( - "Invalid format for the lines qualifier: %(lines)", params={"lines": lines} + "Invalid format for the lines qualifier: %(lines)s", params={"lines": lines} ) @@ -1152,7 +1152,7 @@ class QualifiedSWHID(_BaseSWHID[ObjectType]): invalid_qualifiers = set(qualifiers) - SWHID_QUALIFIERS if invalid_qualifiers: raise ValidationError( - "Invalid qualifier(s): %(qualifiers)", + "Invalid qualifier(s): %(qualifiers)s", params={"qualifiers": ", ".join(invalid_qualifiers)}, ) try: diff --git a/swh/model/tests/test_identifiers.py b/swh/model/tests/test_identifiers.py index 3ba57086..99a23f5a 100644 --- a/swh/model/tests/test_identifiers.py +++ b/swh/model/tests/test_identifiers.py @@ -1241,6 +1241,12 @@ VALID_SWHIDS = [ ), None, # Neither does ExtendedSWHID ), + ( + f"swh:1:cnt:{HASH};origin=https://github.com/python/cpython;lines=1-18/", + None, # likewise + None, + None, # likewise + ), ( f"swh:1:cnt:{HASH};origin=https://github.com/python/cpython;lines=18", None, # likewise @@ -1298,8 +1304,10 @@ def test_parse_unparse_swhids(string, core, qualified, extended): for (cls, parsed_swhid) in zip(classes, [core, qualified, extended]): if parsed_swhid is None: # This class should not accept this SWHID - with pytest.raises(ValidationError): + with pytest.raises(ValidationError) as excinfo: cls.from_string(string) + # Check string serialization for exception + assert str(excinfo.value) is not None else: # This class should assert cls.from_string(string) == parsed_swhid -- GitLab