Skip to content
Snippets Groups Projects
Commit 74b024f5 authored by Antoine Lambert's avatar Antoine Lambert
Browse files

identifiers: Fix parsing of SWHID qualifier value containing '='

According to the SWHID specification, it is not forbidden for a qualifier
value to contain a '=' character (for instance in origin URL).

So update parsing code to handle that special case.
parent 15d5bab5
No related branches found
Tags v2.4.0
No related merge requests found
......@@ -1228,13 +1228,13 @@ def _parse_swhid(swhid: str) -> Dict[str, Any]:
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"])
......
......@@ -1516,6 +1516,14 @@ QUALIFIED_SWHIDS = [
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 @@ QUALIFIED_SWHIDS = [
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",
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment