From a6089832e3a9bfe211fd2920c02aa9440535280c Mon Sep 17 00:00:00 2001 From: Vlad Mencl Date: Tue, 9 Jun 2026 09:42:29 +1200 Subject: [PATCH] fix: use quote instead of quote_plus MDQ spec explicitly asks for spaces to be encoded as %20, not + This is achieved by urllib.parse.quote - the only difference quote_plus brings is it would be encoding spaces as '+': https://docs.python.org/3/library/urllib.parse.html#urllib.parse.quote_plus While entityIDs cannot really contain spaces (not permitted in an URI), this is all just a technicality, but quote is the correct function to use. --- src/pyff/api.py | 4 ++-- src/pyff/builtins.py | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/pyff/api.py b/src/pyff/api.py index eb49e805..db1c5fb3 100644 --- a/src/pyff/api.py +++ b/src/pyff/api.py @@ -4,7 +4,7 @@ from datetime import datetime, timedelta from json import dumps from typing import Any, Optional -from urllib.parse import quote_plus +from urllib.parse import quote import pyramid.httpexceptions as exc import pytz @@ -394,7 +394,7 @@ def _links(url: str, title: Any = None) -> None: aliases = request.registry.aliases for a in aliases.keys(): for v in request.registry.md.store.attribute(aliases[a]): - _links(f'{a}/{quote_plus(v)}') + _links(f'{a}/{quote(v)}') response = Response(dumps(jrd, default=json_serializer)) response.headers['Content-Type'] = 'application/json' diff --git a/src/pyff/builtins.py b/src/pyff/builtins.py index 9c560956..3b52fc86 100644 --- a/src/pyff/builtins.py +++ b/src/pyff/builtins.py @@ -15,7 +15,7 @@ from datetime import datetime from io import BytesIO from typing import Optional -from urllib.parse import quote_plus, urlparse +from urllib.parse import quote, urlparse import xmlsec from lxml import etree @@ -539,7 +539,7 @@ def _nop(x): enc = _nop if req.args.get('urlencode_filenames'): - enc = quote_plus + enc = quote if output_file is None: return req.t