6
6
from abc import ABC
7
7
from email .message import Message
8
8
from http import cookiejar as cookielib
9
+ from http .cookiejar import Cookie
9
10
from http .cookies import Morsel
10
- from typing import TYPE_CHECKING , Iterator , MutableMapping
11
+ from typing import TYPE_CHECKING , Iterator , MutableMapping , Optional
11
12
from urllib .parse import urlparse , urlunparse
12
13
13
14
from tls_requests .exceptions import CookieConflictError
15
+ from tls_requests .types import CookieTypes
14
16
15
17
if TYPE_CHECKING :
16
18
from .request import Request
@@ -123,7 +125,8 @@ def get(self, name, default=None, domain=None, path=None):
123
125
.. warning:: operation is O(n), not O(1).
124
126
"""
125
127
try :
126
- return self ._find_no_duplicates (name , domain , path )
128
+ value = self ._find_no_duplicates (name , domain , path )
129
+ return value
127
130
except KeyError :
128
131
return default
129
132
@@ -332,7 +335,7 @@ def _find_no_duplicates(self, name, domain=None, path=None):
332
335
# we will eventually return this as long as no cookie conflict
333
336
toReturn = cookie .value
334
337
335
- if toReturn :
338
+ if toReturn is not None :
336
339
return toReturn
337
340
raise KeyError (f"name={ name !r} , domain={ domain !r} , path={ path !r} " )
338
341
@@ -536,28 +539,42 @@ def _prepare_cookiejar(self, cookies: CookieTypes = None) -> RequestsCookieJar:
536
539
if isinstance (cookies , self .__class__ ):
537
540
return cookies .cookiejar
538
541
539
- if isinstance (cookies , dict ):
540
- return cookiejar_from_dict (cookies )
541
-
542
- if isinstance (cookies , (tuple , list , set )):
542
+ if isinstance (cookies , (dict , tuple , list , set )):
543
543
cookiejar = RequestsCookieJar ()
544
+ if isinstance (cookies , dict ):
545
+ cookies = cookies .items ()
546
+
544
547
for k , v in cookies :
545
- cookiejar .set (k , v )
548
+ if isinstance (v , (float , int )):
549
+ v = str (v )
546
550
551
+ cookiejar .set (k , v )
547
552
return cookiejar
548
553
549
554
return RequestsCookieJar ()
550
555
551
556
def extract_cookies (self , response : Response , request : Request ) -> None :
552
557
extract_cookies_to_jar (self .cookiejar , response , request )
553
558
554
- def get_cookie_header (self , request : Request ):
559
+ def get_cookie_header (self , request : Request ) -> str :
555
560
return get_cookie_header (self .cookiejar , request )
556
561
557
- def set (self , name , value , ** kwargs ) -> None :
558
- self .cookiejar .set (name , value , ** kwargs )
562
+ def set (self , name , value , ** kwargs ) -> Optional [Cookie ]:
563
+ if value is None :
564
+ remove_cookie_by_name (
565
+ self , name , domain = kwargs .get ("domain" ), path = kwargs .get ("path" )
566
+ )
567
+ return
568
+
569
+ if isinstance (value , Morsel ):
570
+ cookie = morsel_to_cookie (value )
571
+ else :
572
+ cookie = create_cookie (name , value , ** kwargs )
573
+
574
+ self .cookiejar .set_cookie (cookie )
575
+ return cookie
559
576
560
- def get (self , name , default = None , domain = "" , path = "/" ):
577
+ def get (self , name , default = None , domain = "" , path = "/" ) -> str :
561
578
return self .cookiejar .get (name , default , domain , path )
562
579
563
580
def delete (self , name : str , domain : str = None , path : str = None ) -> None :
@@ -581,14 +598,11 @@ def copy(self) -> "Cookies":
581
598
ret .cookiejar = _copy_cookie_jar (self .cookiejar )
582
599
return ret
583
600
584
- def __setitem__ (self , name : str , value : str ) -> None :
601
+ def __setitem__ (self , name : str , value : str ) -> Optional [ Cookie ] :
585
602
return self .set (name , value )
586
603
587
604
def __getitem__ (self , name : str ) -> str :
588
- value = self .get (name )
589
- if value is None :
590
- raise KeyError (name )
591
- return value
605
+ return self .cookiejar .get (name )
592
606
593
607
def __delitem__ (self , name : str ) -> None :
594
608
return self .delete (name )
@@ -605,5 +619,5 @@ def __bool__(self) -> bool:
605
619
return False
606
620
607
621
def __repr__ (self ) -> str :
608
- r = ", " .join ([repr (cookie ) for cookie in self .cookiejar ])
609
- return "<%s[%s]>" % (self .__class__ .__name__ , r )
622
+ cookiejar_repr = ", " .join ([repr (cookie ) for cookie in self .cookiejar ])
623
+ return "<%s[%s]>" % (self .__class__ .__name__ , cookiejar_repr )
0 commit comments