diff options
-rw-r--r-- | mimeparse.py | 7 | ||||
-rw-r--r-- | testdata.json | 3 |
2 files changed, 8 insertions, 2 deletions
diff --git a/mimeparse.py b/mimeparse.py index 2884b1d..91b28b8 100644 --- a/mimeparse.py +++ b/mimeparse.py @@ -72,8 +72,11 @@ def parse_media_range(range): necessary. """ (type, subtype, params) = parse_mime_type(range) - if 'q' not in params or not params['q'] or \ - float(params['q']) > 1 or float(params['q']) < 0: + params.setdefault('q', params.pop('Q', None)) # q is case insensitive + try: + if not params['q'] or not 0 <= float(params['q']) <= 1: + params['q'] = '1' + except ValueError: # from float() params['q'] = '1' return (type, subtype, params) diff --git a/testdata.json b/testdata.json index 409ab72..4f0a648 100644 --- a/testdata.json +++ b/testdata.json @@ -4,9 +4,12 @@ ["application/xml", ["application", "xml", {"q": "1"}]], ["application/xml;q=",["application", "xml", {"q": "1"}]], ["application/xml ;q=",["application", "xml", {"q": "1"}]], + ["application/xml ;q=-1",["application", "xml", {"q": "1"}]], ["application/xml ; q=1;b=other",["application", "xml", {"q": "1", "b":"other"}]], ["application/xml ; q=2;b=other",["application", "xml", {"q": "1", "b":"other"}]], ["application/xml ; q=0",["application", "xml", {"q": "0"}]], + ["application/xml ; q=foo", ["application", "xml", {"q": "1"}]], + ["application/xml ; Q=0.6", ["application", "xml", {"q": "0.6"}]], [" *; q=.2",["*", "*", {"q": ".2"}]] ], |