diff --git a/swh/model/identifiers.py b/swh/model/identifiers.py index c9f20dcb7b52b83dbd13f42a633822f87c961222..537f1e3f7096f1a8e45488e8b39f0d4a72c274be 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 3ba570867e6cd529166547978bd948068c3b4a5e..99a23f5a5cc2c98380bb76831a27d47c110b19b8 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