Skip to content

Commit

Permalink
tweak media type parsing to accept trailing semicolon
Browse files Browse the repository at this point in the history
  • Loading branch information
plq committed Jan 31, 2022
1 parent 02a0e75 commit 3927f98
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 8 deletions.
15 changes: 10 additions & 5 deletions spyne/model/primitive/string.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,8 @@
LTREE_MAXIMUM_SIZE = 65536


'[0-9A-Za-z!#$%&\'*+.^_`|~-]+/([0-9A-Za-z!#$%&\'*+.^_`|~-]+);[ \\t]*[0-9A-Za-z!#$%&\'*+.^_`|~-]+=(?:[0-9A-Za-z!#$%&\'*+.^_`|~-]+|"(?:[^"\\\\]|\\.)*");?[ \\t]*([0-9A-Za-z!#$%&\'*+.^_`|~-]+=(?:[0-9A-Za-z!#$%&\'*+.^_`|~-]+|"(?:[^"\\\\]|\\.)*");?[ \\t]*)*'

def _gen_mime_type_pattern(strict, with_params):
ows = "[ \\t]*" # Optional WhiteSpace
token = "[0-9A-Za-z!#$%&'*+.^_`|~-]+"
Expand All @@ -51,13 +53,16 @@ def _gen_mime_type_pattern(strict, with_params):
else:
main_type = token

param = token + "=" + "(?:" + token + "|" + quotedString + ");?" + ows
params = ";" + ows + param + "(" + param + ")*"

if not with_params:
return main_type + "/" + "(" + token + ")"
else:
return main_type + "/" + "(" + token + ")" + params

param = token + "=" + "(?:" + token + "|" + quotedString + ");?" + ows
params = \
"(" + ";" \
+ "(" + ows + param + "(" + param + ")*" + ")?" \
+ ")?"

return main_type + "/" + "(" + token + ")" + params


MIME_TYPE_PATTERN_STRICT = \
Expand Down
8 changes: 5 additions & 3 deletions spyne/test/model/test_primitive.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,13 @@ def test_mime_type_family(self):

print(media_attr.pattern)

assert rmws(media_attr, u'text/plain')
assert not rmws(media_attr, u' text/plain')
assert rmws(media_attr, u'text/plain;')
assert rmws(media_attr, u'text/plain;charset=utf-8')
assert rmws(media_attr, u'text/plain; charset="utf-8"')
assert rmws(media_attr, u'text/plain; charset=utf-8')
assert rmws(media_attr, u'text/plain; charset=utf-8 ')
assert rmws(media_attr, u'text/plain; charset=utf-8')
assert rmws(media_attr, u'text/plain; charset=utf-8;')
assert rmws(media_attr, u'text/plain; charset=utf-8; ')
assert not rmws(media_attr, u'text/plain; charset=utf-8; foo')
Expand All @@ -85,9 +88,8 @@ def test_mime_type_family(self):
assert not rmws(media_attr, u'text/plain; charset=utf-8;;; foo=""')
assert not rmws(media_attr, u'text/plain; charset=utf-8;;; foo="";')
assert not rmws(media_attr, u'text/plain; charset=utf-8;;; foo=""; ; ')
assert not rmws(media_strict_attr, u'foo/bar;')

assert not rmws(media_strict_attr, u' applicaton/json;')
assert not rmws(media_strict_attr, u'applicaton/json;')

assert MediaType

Expand Down

0 comments on commit 3927f98

Please sign in to comment.