1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
from __future__ import annotations
from typing import TYPE_CHECKING, Mapping, Sequence
from litestar.datastructures.cookie import Cookie
from litestar.datastructures.response_header import ResponseHeader
__all__ = ("narrow_response_cookies", "narrow_response_headers")
if TYPE_CHECKING:
from litestar.types.composite_types import ResponseCookies, ResponseHeaders
def narrow_response_headers(headers: ResponseHeaders | None) -> Sequence[ResponseHeader] | None:
"""Given :class:`.types.ResponseHeaders` as a :class:`typing.Mapping`, create a list of
:class:`.datastructures.response_header.ResponseHeader` from it, otherwise return ``headers`` unchanged
"""
return (
tuple(ResponseHeader(name=name, value=value) for name, value in headers.items())
if isinstance(headers, Mapping)
else headers
)
def narrow_response_cookies(cookies: ResponseCookies | None) -> Sequence[Cookie] | None:
"""Given :class:`.types.ResponseCookies` as a :class:`typing.Mapping`, create a list of
:class:`.datastructures.cookie.Cookie` from it, otherwise return ``cookies`` unchanged
"""
return (
tuple(Cookie(key=key, value=value) for key, value in cookies.items())
if isinstance(cookies, Mapping)
else cookies
)
|