Skip to content

Commit 9e5cc27

Browse files
committed
Ensure a decoded qualifier is always a dict
Signed-off-by: Philippe Ombredanne <pombredanne@nexb.com>
1 parent 635f9cf commit 9e5cc27

File tree

1 file changed

+7
-5
lines changed

1 file changed

+7
-5
lines changed

src/packageurl.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
from __future__ import unicode_literals
3030

3131
from collections import namedtuple
32-
from collections import OrderedDict
3332
import string
3433

3534
# Python 2 and 3 support
@@ -155,9 +154,11 @@ def normalize_qualifiers(qualifiers, encode=True): # NOQA
155154
"""
156155
Return normalized `qualifiers` as a mapping (or as a string if `encode` is
157156
True). The `qualifiers` arg is either a mapping or a string.
157+
Always return a mapping if decode is True (and never None).
158+
Raise ValueError on errors.
158159
"""
159160
if not qualifiers:
160-
return
161+
return None if encode else {}
161162

162163
if isinstance(qualifiers, basestring):
163164
if not isinstance(qualifiers, unicode):
@@ -203,8 +204,9 @@ def normalize_qualifiers(qualifiers, encode=True): # NOQA
203204
qualifiers = sorted(qualifiers.items())
204205
qualifiers = ['{}={}'.format(k, v) for k, v in qualifiers]
205206
qualifiers = '&'.join(qualifiers)
206-
207-
return qualifiers or None
207+
return qualifiers or None
208+
else:
209+
return qualifiers or {}
208210

209211

210212
def normalize_subpath(subpath, encode=True): # NOQA
@@ -260,7 +262,7 @@ def __new__(self, type=None, namespace=None, name=None, # NOQA
260262
raise ValueError('Invalid purl: {} argument must be a string: {}.'
261263
.format(key, repr(value)))
262264

263-
if qualifiers and not isinstance(qualifiers, (basestring, dict, OrderedDict,)):
265+
if qualifiers and not isinstance(qualifiers, (basestring, dict,)):
264266
raise ValueError('Invalid purl: {} argument must be a dict or a string: {}.'
265267
.format('qualifiers', repr(qualifiers)))
266268

0 commit comments

Comments
 (0)