Compare commits
1 Commits
bare-cooki
...
remove-get
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b692309c91 |
@@ -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
|
|
||||||
# https://github.com/httpwg/http-extensions/issues/159
|
|
||||||
if not sep:
|
|
||||||
if not name:
|
if not name:
|
||||||
continue # Empty value like ;; or a cookie header with no value
|
continue
|
||||||
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__
|
||||||
|
|||||||
@@ -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 []
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
Reference in New Issue
Block a user