@@ -60,13 +60,15 @@ def __init__( # pylint: disable=too-many-arguments
60
60
* ,
61
61
status : Union [Status , Tuple [int , str ]] = OK_200 ,
62
62
headers : Union [Headers , Dict [str , str ]] = None ,
63
+ cookies : Dict [str , str ] = None ,
63
64
content_type : str = None ,
64
65
) -> None :
65
66
"""
66
67
:param Request request: Request that this is a response to.
67
68
:param str body: Body of response. Defaults to empty string.
68
69
:param Status status: Status code and text. Defaults to 200 OK.
69
70
:param Headers headers: Headers to include in response. Defaults to empty dict.
71
+ :param Dict[str, str] cookies: Cookies to be sent with the response.
70
72
:param str content_type: Content type of response. Defaults to None.
71
73
"""
72
74
@@ -76,6 +78,7 @@ def __init__( # pylint: disable=too-many-arguments
76
78
self ._headers = (
77
79
headers .copy () if isinstance (headers , Headers ) else Headers (headers )
78
80
)
81
+ self ._cookies = cookies .copy () if cookies else {}
79
82
self ._content_type = content_type
80
83
self ._size = 0
81
84
@@ -96,6 +99,9 @@ def _send_headers(
96
99
headers .setdefault ("Content-Length" , content_length )
97
100
headers .setdefault ("Connection" , "close" )
98
101
102
+ for cookie_name , cookie_value in self ._cookies .items ():
103
+ headers .add ("Set-Cookie" , f"{ cookie_name } ={ cookie_value } " )
104
+
99
105
for header , value in headers .items ():
100
106
if value is not None :
101
107
response_message_header += f"{ header } : { value } \r \n "
@@ -166,6 +172,7 @@ def __init__( # pylint: disable=too-many-arguments
166
172
* ,
167
173
status : Union [Status , Tuple [int , str ]] = OK_200 ,
168
174
headers : Union [Headers , Dict [str , str ]] = None ,
175
+ cookies : Dict [str , str ] = None ,
169
176
content_type : str = None ,
170
177
as_attachment : bool = False ,
171
178
download_filename : str = None ,
@@ -180,6 +187,7 @@ def __init__( # pylint: disable=too-many-arguments
180
187
server's ``root_path``.
181
188
:param Status status: Status code and text. Defaults to ``200 OK``.
182
189
:param Headers headers: Headers to include in response.
190
+ :param Dict[str, str] cookies: Cookies to be sent with the response.
183
191
:param str content_type: Content type of response.
184
192
:param bool as_attachment: If ``True``, the file will be sent as an attachment.
185
193
:param str download_filename: Name of the file to send as an attachment.
@@ -193,6 +201,7 @@ def __init__( # pylint: disable=too-many-arguments
193
201
super ().__init__ (
194
202
request = request ,
195
203
headers = headers ,
204
+ cookies = cookies ,
196
205
content_type = content_type ,
197
206
status = status ,
198
207
)
@@ -293,19 +302,22 @@ def __init__( # pylint: disable=too-many-arguments
293
302
* ,
294
303
status : Union [Status , Tuple [int , str ]] = OK_200 ,
295
304
headers : Union [Headers , Dict [str , str ]] = None ,
305
+ cookies : Dict [str , str ] = None ,
296
306
content_type : str = None ,
297
307
) -> None :
298
308
"""
299
309
:param Request request: Request object
300
310
:param Generator body: Generator that yields chunks of data.
301
311
:param Status status: Status object or tuple with code and message.
302
312
:param Headers headers: Headers to be sent with the response.
313
+ :param Dict[str, str] cookies: Cookies to be sent with the response.
303
314
:param str content_type: Content type of the response.
304
315
"""
305
316
306
317
super ().__init__ (
307
318
request = request ,
308
319
headers = headers ,
320
+ cookies = cookies ,
309
321
status = status ,
310
322
content_type = content_type ,
311
323
)
@@ -352,17 +364,20 @@ def __init__(
352
364
data : Dict [Any , Any ],
353
365
* ,
354
366
headers : Union [Headers , Dict [str , str ]] = None ,
367
+ cookies : Dict [str , str ] = None ,
355
368
status : Union [Status , Tuple [int , str ]] = OK_200 ,
356
369
) -> None :
357
370
"""
358
371
:param Request request: Request that this is a response to.
359
372
:param dict data: Data to be sent as JSON.
360
373
:param Headers headers: Headers to include in response.
374
+ :param Dict[str, str] cookies: Cookies to be sent with the response.
361
375
:param Status status: Status code and text. Defaults to 200 OK.
362
376
"""
363
377
super ().__init__ (
364
378
request = request ,
365
379
headers = headers ,
380
+ cookies = cookies ,
366
381
status = status ,
367
382
)
368
383
self ._data = data
@@ -398,6 +413,7 @@ def __init__(
398
413
preserve_method : bool = False ,
399
414
status : Union [Status , Tuple [int , str ]] = None ,
400
415
headers : Union [Headers , Dict [str , str ]] = None ,
416
+ cookies : Dict [str , str ] = None ,
401
417
) -> None :
402
418
"""
403
419
By default uses ``permament`` and ``preserve_method`` to determine the ``status`` code to
@@ -415,6 +431,7 @@ def __init__(
415
431
:param bool preserve_method: Whether to preserve the method of the request.
416
432
:param Status status: Status object or tuple with code and message.
417
433
:param Headers headers: Headers to include in response.
434
+ :param Dict[str, str] cookies: Cookies to be sent with the response.
418
435
"""
419
436
420
437
if status is not None and (permanent or preserve_method ):
@@ -428,7 +445,7 @@ def __init__(
428
445
else :
429
446
status = MOVED_PERMANENTLY_301 if permanent else FOUND_302
430
447
431
- super ().__init__ (request , status = status , headers = headers )
448
+ super ().__init__ (request , status = status , headers = headers , cookies = cookies )
432
449
self ._headers .update ({"Location" : url })
433
450
434
451
def _send (self ) -> None :
@@ -474,14 +491,17 @@ def __init__( # pylint: disable=too-many-arguments
474
491
self ,
475
492
request : Request ,
476
493
headers : Union [Headers , Dict [str , str ]] = None ,
494
+ cookies : Dict [str , str ] = None ,
477
495
) -> None :
478
496
"""
479
497
:param Request request: Request object
480
498
:param Headers headers: Headers to be sent with the response.
499
+ :param Dict[str, str] cookies: Cookies to be sent with the response.
481
500
"""
482
501
super ().__init__ (
483
502
request = request ,
484
503
headers = headers ,
504
+ cookies = cookies ,
485
505
content_type = "text/event-stream" ,
486
506
)
487
507
self ._headers .setdefault ("Cache-Control" , "no-cache" )
@@ -606,11 +626,13 @@ def __init__( # pylint: disable=too-many-arguments
606
626
self ,
607
627
request : Request ,
608
628
headers : Union [Headers , Dict [str , str ]] = None ,
629
+ cookies : Dict [str , str ] = None ,
609
630
buffer_size : int = 1024 ,
610
631
) -> None :
611
632
"""
612
633
:param Request request: Request object
613
634
:param Headers headers: Headers to be sent with the response.
635
+ :param Dict[str, str] cookies: Cookies to be sent with the response.
614
636
:param int buffer_size: Size of the buffer used to send and receive messages.
615
637
"""
616
638
self ._check_request_initiates_handshake (request )
@@ -621,6 +643,7 @@ def __init__( # pylint: disable=too-many-arguments
621
643
request = request ,
622
644
status = SWITCHING_PROTOCOLS_101 ,
623
645
headers = headers ,
646
+ cookies = cookies ,
624
647
)
625
648
self ._headers .setdefault ("Upgrade" , "websocket" )
626
649
self ._headers .setdefault ("Connection" , "Upgrade" )
0 commit comments