Compare commits

..

1 Commits

3 changed files with 14 additions and 35 deletions

View File

@@ -73,16 +73,12 @@ def parse_cookie(raw: str) -> Dict[str, List[str]]:
cookies: Dict[str, List[str]] = {} cookies: Dict[str, List[str]] = {}
for token in raw.split(";"): for token in raw.split(";"):
name, sep, value = token.partition("=") name, __, value = token.partition("=")
name = name.strip() name = name.strip()
value = value.strip() value = value.strip()
# Support cookies =value or plain value with no name if not name:
# https://github.com/httpwg/http-extensions/issues/159 continue
if not sep:
if not name:
continue # Empty value like ;; or a cookie header with no value
name, value = "", name
if COOKIE_NAME_RESERVED_CHARS.search(name): # no cov if COOKIE_NAME_RESERVED_CHARS.search(name): # no cov
continue continue
@@ -153,13 +149,11 @@ class CookieRequestParameters(RequestParameters):
except KeyError: except KeyError:
return super().get(name, default) return super().get(name, default)
def getlist( def getlist(self, name: str) -> list[Any]:
self, name: str, default: Optional[Any] = None
) -> Optional[Any]:
try: try:
return self._get_prefixed_cookie(name) return self._get_prefixed_cookie(name)
except KeyError: except KeyError:
return super().getlist(name, default) return super().getlist(name)
def _get_prefixed_cookie(self, name: str) -> Any: def _get_prefixed_cookie(self, name: str) -> Any:
getitem = super().__getitem__ getitem = super().__getitem__

View File

@@ -19,15 +19,14 @@ class RequestParameters(dict):
return super().get(name, [default])[0] return super().get(name, [default])[0]
def getlist( def getlist(
self, name: str, default: Optional[Any] = None self, name: str
) -> Optional[Any]: ) -> list[Any]:
"""Return the entire list """Return the entire list
Args: Args:
name (str): The name of the parameter name (str): The name of the parameter
default (Optional[Any], optional): The default value. Defaults to None.
Returns: Returns:
Optional[Any]: The entire list list[Any]: The entire list of values or [] if not found
""" # noqa: E501 """ # noqa: E501
return super().get(name, default) return super().get(name) or []

View File

@@ -11,20 +11,6 @@ from sanic.cookies.request import CookieRequestParameters
from sanic.exceptions import ServerError from sanic.exceptions import ServerError
from sanic.response import text from sanic.response import text
from sanic.response.convenience import json from sanic.response.convenience import json
from sanic.cookies.request import parse_cookie
def test_request_cookies():
cdict = parse_cookie("foo=one; foo=two; abc = xyz;;bare;=bare2")
assert cdict == {
"foo": ["one", "two"],
"abc": ["xyz"],
"": ["bare", "bare2"],
}
c = CookieRequestParameters(cdict)
assert c.getlist("foo") == ["one", "two"]
assert c.getlist("abc") == ["xyz"]
assert c.getlist("") == ["bare", "bare2"]
assert c.getlist("bare") == None # [] might be sensible but we got None for now
# ------------------------------------------------------------ # # ------------------------------------------------------------ #
@@ -459,10 +445,10 @@ def test_cookie_accessors(app: Sanic):
"four": request.cookies.get("four", "fallback"), "four": request.cookies.get("four", "fallback"),
}, },
"getlist": { "getlist": {
"one": request.cookies.getlist("one", ["fallback"]), "one": request.cookies.getlist("one"),
"two": request.cookies.getlist("two", ["fallback"]), "two": request.cookies.getlist("two"),
"three": request.cookies.getlist("three", ["fallback"]), "three": request.cookies.getlist("three"),
"four": request.cookies.getlist("four", ["fallback"]), "four": request.cookies.getlist("four"),
}, },
"getattr": { "getattr": {
"one": request.cookies.one, "one": request.cookies.one,
@@ -498,7 +484,7 @@ def test_cookie_accessors(app: Sanic):
"one": ["1"], "one": ["1"],
"two": ["2"], "two": ["2"],
"three": ["3"], "three": ["3"],
"four": ["fallback"], "four": [],
}, },
"getattr": { "getattr": {
"one": "1", "one": "1",