diff --git a/swh/model/identifiers.py b/swh/model/identifiers.py --- a/swh/model/identifiers.py +++ b/swh/model/identifiers.py @@ -925,7 +925,7 @@ 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 @@ 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 @@ 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 --- a/swh/model/tests/test_identifiers.py +++ b/swh/model/tests/test_identifiers.py @@ -1241,6 +1241,12 @@ ), 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 @@ 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