66from  abc  import  ABC 
77from  email .message  import  Message 
88from  http  import  cookiejar  as  cookielib 
9+ from  http .cookiejar  import  Cookie 
910from  http .cookies  import  Morsel 
10- from  typing  import  TYPE_CHECKING , Iterator , MutableMapping 
11+ from  typing  import  TYPE_CHECKING , Iterator , MutableMapping ,  Optional 
1112from  urllib .parse  import  urlparse , urlunparse 
1213
1314from  tls_requests .exceptions  import  CookieConflictError 
15+ from  tls_requests .types  import  CookieTypes 
1416
1517if  TYPE_CHECKING :
1618    from  .request  import  Request 
@@ -123,7 +125,8 @@ def get(self, name, default=None, domain=None, path=None):
123125        .. warning:: operation is O(n), not O(1). 
124126        """ 
125127        try :
126-             return  self ._find_no_duplicates (name , domain , path )
128+             value  =  self ._find_no_duplicates (name , domain , path )
129+             return  value 
127130        except  KeyError :
128131            return  default 
129132
@@ -332,7 +335,7 @@ def _find_no_duplicates(self, name, domain=None, path=None):
332335                        # we will eventually return this as long as no cookie conflict 
333336                        toReturn  =  cookie .value 
334337
335-         if  toReturn :
338+         if  toReturn   is   not   None :
336339            return  toReturn 
337340        raise  KeyError (f"name={ name !r} { domain !r} { path !r}  )
338341
@@ -536,28 +539,42 @@ def _prepare_cookiejar(self, cookies: CookieTypes = None) -> RequestsCookieJar:
536539        if  isinstance (cookies , self .__class__ ):
537540            return  cookies .cookiejar 
538541
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 )):
543543            cookiejar  =  RequestsCookieJar ()
544+             if  isinstance (cookies , dict ):
545+                 cookies  =  cookies .items ()
546+ 
544547            for  k , v  in  cookies :
545-                 cookiejar .set (k , v )
548+                 if  isinstance (v , (float , int )):
549+                     v  =  str (v )
546550
551+                 cookiejar .set (k , v )
547552            return  cookiejar 
548553
549554        return  RequestsCookieJar ()
550555
551556    def  extract_cookies (self , response : Response , request : Request ) ->  None :
552557        extract_cookies_to_jar (self .cookiejar , response , request )
553558
554-     def  get_cookie_header (self , request : Request ):
559+     def  get_cookie_header (self , request : Request )  ->   str :
555560        return  get_cookie_header (self .cookiejar , request )
556561
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 
559576
560-     def  get (self , name , default = None , domain = "" , path = "/" ):
577+     def  get (self , name , default = None , domain = "" , path = "/" )  ->   str :
561578        return  self .cookiejar .get (name , default , domain , path )
562579
563580    def  delete (self , name : str , domain : str  =  None , path : str  =  None ) ->  None :
@@ -581,14 +598,11 @@ def copy(self) -> "Cookies":
581598        ret .cookiejar  =  _copy_cookie_jar (self .cookiejar )
582599        return  ret 
583600
584-     def  __setitem__ (self , name : str , value : str ) ->  None :
601+     def  __setitem__ (self , name : str , value : str ) ->  Optional [ Cookie ] :
585602        return  self .set (name , value )
586603
587604    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 )
592606
593607    def  __delitem__ (self , name : str ) ->  None :
594608        return  self .delete (name )
@@ -605,5 +619,5 @@ def __bool__(self) -> bool:
605619        return  False 
606620
607621    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