diff --git a/swh/model/identifiers.py b/swh/model/identifiers.py --- a/swh/model/identifiers.py +++ b/swh/model/identifiers.py @@ -1228,13 +1228,13 @@ if qualifiers_raw: for qualifier in qualifiers_raw.split(SWHID_CTXT_SEP): try: - k, v = qualifier.split("=") + k, v = qualifier.split("=", maxsplit=1) + parts["qualifiers"][k] = v except ValueError: raise ValidationError( "Invalid SWHID: invalid qualifier: %(qualifier)s", params={"qualifier": qualifier}, ) - parts["qualifiers"][k] = v parts["scheme_version"] = int(parts["scheme_version"]) parts["object_id"] = hash_to_bytes(parts["object_id"]) 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 @@ -1516,6 +1516,14 @@ origin="https://example.org/foo%3Bbar%25baz", ), ), + ( + f"swh:1:cnt:{HASH};origin=https://example.org?project=test", + QualifiedSWHID( + object_type=ObjectType.CONTENT, + object_id=_x(HASH), + origin="https://example.org?project=test", + ), + ), # visit: ( f"swh:1:cnt:{HASH};visit=swh:1:snp:{HASH}", @@ -1570,6 +1578,12 @@ object_type=ObjectType.CONTENT, object_id=_x(HASH), path=b"/foo%bar" ), ), + ( + f"swh:1:cnt:{HASH};path=/foo/bar%3Dbaz", + QualifiedSWHID( + object_type=ObjectType.CONTENT, object_id=_x(HASH), path=b"/foo/bar=baz" + ), + ), # lines ( f"swh:1:cnt:{HASH};lines=1-18",