
    X jc              	          S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSK	J
r  SSKJrJr  SSKrSSKJr  \(       a  SSKJr  \R(                  " \5      r " S S	\5      r " S
 S5      rSS\S\S\S\4S jjrS\S\4S jrS\R>                  S\ \   4S jr!S\R>                  S\S\4S jr" " S S5      r# " S S\#5      r$ " S S\#5      r%g)zOAPIRequestContext for making HTTP requests with browser cookie synchronization.    N)parsedate_to_datetime)	responses)TYPE_CHECKINGAny)Retry)	WebDriverc                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )APIRequestFailure&   zRaised when an API request returns a non-2xx status and fail_on_status_code is True.

Attributes:
    response: The APIResponse that triggered the failure.
c                 |   > Xl         [        TU ]	  UR                   SUR                   SUR
                   35        g )N : )responsesuper__init__statusstatus_texturl)selfr   	__class__s     ~/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/selenium/webdriver/common/api_request_context.pyr   APIRequestFailure.__init__-   s6     HOO,Ah.B.B-C2hll^TU    )r   )r   APIResponsereturnN)__name__
__module____qualname____firstlineno____doc__r   __static_attributes____classcell__r   s   @r   r
   r
   &   s    V Vr   r
   c                       \ rS rSrSrS\S\S\\\4   S\S\SS	4S
 jr	\
S\4S j5       rS\4S jrS\4S jrS\4S jrSS jrSrg	)r   2   zRepresents an HTTP response from an API request.

Attributes:
    status: HTTP status code.
    status_text: HTTP status text.
    headers: Response headers as a dict.
    url: The request URL.
r   r   headersr   bodyr   Nc                 @    Xl         X l        X0l        X@l        XPl        g N)r   r   r&   r   _body)r   r   r   r&   r   r'   s         r   r   APIResponse.__init__<   s    &
r   c                 @    SU R                   s=:*  =(       a    S:*  $ s  $ )z4Whether the response status is in the 200-299 range.   i+  )r   r   s    r   okAPIResponse.okC   s!     dkk((S((((r   c                 B    [         R                  " U R                  5      $ )zGParse the response body as JSON.

Returns:
    The parsed JSON object.
)jsonloadsr*   r.   s    r   r2   APIResponse.jsonH   s     zz$**%%r   c                 8    U R                   R                  S5      $ )zUDecode the response body as UTF-8 text.

Returns:
    The response body as a string.
utf-8)r*   decoder.   s    r   textAPIResponse.textP   s     zz  ))r   c                     U R                   $ )zNReturn the raw response body bytes.

Returns:
    The response body as bytes.
r*   r.   s    r   r'   APIResponse.bodyX   s     zzr   c                     SU l         g)zFree the response body memory.r   Nr;   r.   s    r   disposeAPIResponse.dispose`   s	    
r   )r*   r&   r   r   r   r   N)r   r   r   r   r    intstrdictbytesr   propertyboolr/   r   r2   r8   r'   r>   r!    r   r   r   r   2   s    s  tCH~ TW _d im  )D ) )&c &*c *e r   r   cookier   default_domainr   c                    U R                  S5      nUb#  U[        [        R                  " 5       5      ::  a  g[        R                  R                  U5      nUR                  =(       d    SnUR                  =(       d    SnUR                  =(       d    SnU R                  SS5      nU(       d  U(       a  XR:w  a  gO<UR                  S5      (       a   XXS	S :X  d  UR                  U5      (       d  gOXX:w  a  gU R                  S
S5      n	U	S:X  a  OXi:w  a  UR                  U	S-   5      (       d  gU R                  SS5      (       a  US:w  a  gg)a  Check if a browser cookie should be sent with a request to the given URL.

Evaluates expiry, domain, path, and secure attribute matching per RFC 6265.

Args:
    cookie: A cookie dict from driver.get_cookies().
    url: The target request URL.
    default_domain: Fallback domain for host-only cookies (no domain attribute).
        When a cookie has no domain, it only matches if the request hostname
        equals this value. If empty and cookie has no domain, the cookie is skipped.

Returns:
    True if the cookie matches the URL.
expiryNF /httpdomain.   pathsecurehttpsT)getrA   timeurllibparseurlparsehostnamerR   scheme
startswithendswith)
rH   r   rI   rK   parsedrZ   rR   r[   cookie_domaincookie_paths
             r   _cookie_matchesra   e   s$     ZZ!FfDIIK(88\\""3'F$"H;;#D]]$fF JJx,M!; "<		!	!#	&	&!"--1B1B=1Q1Q$ **VS)Kc		T__[35F%G%G zz(E""v'8r   header_valuec                    U R                  S5      nUS   R                  5       nUR                  S5      nUS:X  a  0 $ USU R                  5       nX#S-   S R                  5       nXES.nSnUSS  GH9  nUR                  5       nU(       d  M  SU;   aC  UR                  SS5      u  pU	R                  5       R                  5       n	U
R                  5       n
O UR                  5       R                  5       n	S	n
U	S
:X  a  XS
'   M  U	S:X  a  XS'   M  U	S:X  a  SUS'   M  U	S:X  a  SUS'   M  U	S:X  a  XS'   M  U	S:X  a4   [	        U
5      n[	        [
        R
                  " 5       5      U-   US'   SnM  U	S:X  d  GM  U(       a  GM   [        U
5      n[	        UR                  5       5      US'   GM<     U$ ! [         a     GMN  f = f! [        [        4 a     GMf  f = f)a1  Parse a single Set-Cookie header value into a cookie dict.

Uses manual parsing instead of http.cookies.SimpleCookie which is too
strict for real-world Set-Cookie headers.

Args:
    header_value: The Set-Cookie header string.

Returns:
    A dict with cookie attributes suitable for driver.add_cookie().
;r   =NrQ   )namevalueFrL   rO   rR   rS   ThttponlyhttpOnlysamesitesameSitezmax-agerK   expires)
splitstripfindlowerrA   rV   
ValueErrorr   	timestamp	TypeError)rb   parts
name_valueeq_idxrg   rh   rH   has_max_agepart	attr_name
attr_valuemax_agedts                r   _parse_set_cookier~      s    s#Eq!J__S!F|	gv$$&Dz|$**,E&*;FKab	zz|$;$(JJsA$6!I!)//1I#))+J

**,IJ )8& '6N("#F8*$!%F:*$!+:)#j/#&tyy{#3g#=x " )#KK*:6#&r||~#6x C J M   	* s$   <1F1'G1
G ?G GGrespc                     [        U R                  S5      (       a$  U R                  R                  S5      nU(       a  U$ U R                  R                  S5      nU(       a  U/$ / $ )zExtract all Set-Cookie header values from a urllib3 response.

Args:
    resp: The urllib3 HTTP response.

Returns:
    A list of Set-Cookie header strings.
getlistz
Set-Cookie)hasattrr&   r   rU   )r   r&   scs      r   _get_set_cookie_headersr      sT     t||Y'',,&&|4N			,	'BB42r   original_urlc                    U R                   (       a  U R                   R                  OSnU(       a[  US   nUR                  (       aE  UR                  (       a4  [        R
                  R                  UR                  UR                  5      $ U$ )a  Return the final URL after any redirects.

urllib3's retry history records each hop.  When redirects occurred,
the last entry's redirect_location resolved against its URL gives
the final destination.  When no redirects occurred, the original
request URL is returned unchanged.
rG   rf   )retrieshistoryr   redirect_locationrW   rX   urljoin)r   r   r   lasts       r   _resolve_redirect_urlr      s]     '+lldll""Gr{88..<<''$2H2HIIr   c                   T   \ rS rSrSr     S$S\S\\\4   S-  S\S\S\	S	S4S
 jjr
S\S\S	\4S jrS\S\S	\4S jrS\S\S	\4S jrS\S\S	\4S jrS\S\S	\4S jrS\S\S	\4S jrS%S\S\S\S	\4S jjrS&S jrS\S	\4S jrS\\\4   S	\\\4   4S jrS\\\4   S\\\4   S	\S-  4S jrS\S\\\4   S	\4S jrS\S\S\\\4   S\S-  S\\\4   S	\R6                  4S jrS\R6                  S\S	\4S jrS\S	\\   4S jrS \\   S\S	S4S! jr S\S\S\S	\4S" jr!S#r"g)'_BaseRequestContext   zCBase class with shared HTTP request logic for API request contexts.Nbase_urlextra_headerstimeoutmax_redirectsfail_on_status_coder   c                     Xl         U=(       d    0 U l        X0l        X@l        XPl        [
        R                  " 5       U l        g r)   )	_base_url_extra_headers_timeout_max_redirects_fail_on_status_codeurllib3PoolManager_pool)r   r   r   r   r   r   s         r   r   _BaseRequestContext.__init__   s7     "+1r+$7!((*
r   r   kwargsc                 *    U R                   " US40 UD6$ )zSend a GET request.

Args:
    url: The request URL (absolute or relative to base_url).
    **kwargs: Optional arguments: headers, params, timeout, max_redirects, fail_on_status_code.

Returns:
    An APIResponse object.
GET_fetchr   r   r   s      r   rU   _BaseRequestContext.get  s     {{3000r   c                 *    U R                   " US40 UD6$ )zSend a POST request.

Args:
    url: The request URL (absolute or relative to base_url).
    **kwargs: Optional arguments: headers, params, data, form,
        json_data, timeout, max_redirects, fail_on_status_code.

Returns:
    An APIResponse object.
POSTr   r   s      r   post_BaseRequestContext.post       {{31&11r   c                 *    U R                   " US40 UD6$ )zSend a PUT request.

Args:
    url: The request URL (absolute or relative to base_url).
    **kwargs: Optional arguments: headers, params, data, form,
        json_data, timeout, max_redirects, fail_on_status_code.

Returns:
    An APIResponse object.
PUTr   r   s      r   put_BaseRequestContext.put%  s     {{3000r   c                 *    U R                   " US40 UD6$ )zSend a PATCH request.

Args:
    url: The request URL (absolute or relative to base_url).
    **kwargs: Optional arguments: headers, params, data, form,
        json_data, timeout, max_redirects, fail_on_status_code.

Returns:
    An APIResponse object.
PATCHr   r   s      r   patch_BaseRequestContext.patch2  s     {{32622r   c                 *    U R                   " US40 UD6$ )zSend a DELETE request.

Args:
    url: The request URL (absolute or relative to base_url).
    **kwargs: Optional arguments: headers, params, data, form,
        json_data, timeout, max_redirects, fail_on_status_code.

Returns:
    An APIResponse object.
DELETEr   r   s      r   delete_BaseRequestContext.delete?  s     {{33F33r   c                 *    U R                   " US40 UD6$ )zSend a HEAD request.

Args:
    url: The request URL (absolute or relative to base_url).
    **kwargs: Optional arguments: headers, params, timeout,
        max_redirects, fail_on_status_code.

Returns:
    An APIResponse object.
HEADr   r   s      r   head_BaseRequestContext.headL  r   r   methodc                 (    U R                   " X40 UD6$ )a7  Send an HTTP request with a custom method.

Args:
    url: The request URL (absolute or relative to base_url).
    method: The HTTP method to use.
    **kwargs: Optional arguments: headers, params, data, form,
        json_data, timeout, max_redirects, fail_on_status_code.

Returns:
    An APIResponse object.
r   )r   r   r   r   s       r   fetch_BaseRequestContext.fetchY  s     {{31&11r   c                 8    U R                   R                  5         g)z%Close the underlying connection pool.N)r   clearr.   s    r   r>   _BaseRequestContext.disposeg  s    

r   c                     UR                  S5      (       d0  U R                  R                  S5      S-   UR                  S5      -   $ U$ )z6Resolve a URL, prepending base_url for relative paths.)zhttp://zhttps://rM   )r\   r   rstriplstripr   r   s     r   _resolve_url _BaseRequestContext._resolve_urlk  s>    ~~566>>((-3cjjoEE
r   c                     [        U R                  5      nUR                  S5      (       a  UR                  US   5        U$ )z-Merge extra_headers with per-request headers.r&   )rC   r   rU   update)r   r   r&   s      r   _build_headers"_BaseRequestContext._build_headersq  s7    t**+::i  NN6),-r   r&   c                    UR                  S5      nUR                  S5      nUR                  S5      nUb7  UR                  SS5        [        R                  " U5      R	                  S5      $ Ub@  UR                  SS5        [
        R                  R                  U5      R	                  S5      $ Ub  [        U[        5      (       a@  UR                  SS5        [
        R                  R                  U5      R	                  S5      $ [        U[        5      (       a  UR	                  S5      $ [        U[        5      (       a  U$ g)	zPrepare the request body from json_data, form, or data kwargs.

Priority: json_data > form > data. Only one should be provided.
	json_dataformdataNzContent-Typezapplication/jsonr6   z!application/x-www-form-urlencoded)rU   
setdefaultr2   dumpsencoderW   rX   	urlencode
isinstancerC   rB   rD   )r   r&   r   r   r   r   s         r   _prepare_body!_BaseRequestContext._prepare_bodyx  s   
 JJ{+	zz&!zz&! ~/AB::i(//88~/RS<<))$/66w??$%%"">3VW||--d3::7CCD#&&{{7++D%((r   c                     UR                  S5      nU(       a.  SU;   a  SOSnX-   [        R                  R                  U5      -   $ U$ )z#Append query parameters to the URL.params?&)rU   rW   rX   r   )r   r   r   r   	separators        r   _append_params"_BaseRequestContext._append_params  sA    H%"czsI?V\\%;%;F%CCC
r   r'   c                     UR                  SU R                  5      nUR                  SU R                  5      nUS:  n[        SSSSU(       a  UOSSS9n	U R                  R                  UUUUUUU	SS9$ )z%Execute the HTTP request via urllib3.r   r   r   F)connectreadr   otherredirectraise_on_redirectT)r&   r'   r   r   r   preload_content)rU   r   r   r   r   request)
r   r   r   r&   r'   r   r   r   followr   s
             r   _execute_request$_BaseRequestContext._execute_request  s     **Y6

?D4G4GH"&,]!#
 zz!!  " 	
 		
r   r   c                 J   0 nUR                   R                  5        H,  u  pEUR                  5       nXc;   a  X6   S-   U-   X6'   M(  XSU'   M.     [        USS5      nU=(       d!    [        R
                  " UR                  S5      n[        UR                  UUUUR                  S9$ )z-Build an APIResponse from a urllib3 response.z, reasonNrL   )r   r   r&   r   r'   )	r&   itemsrq   getattrhttp_status_phrasesrU   r   r   r   )	r   r   r   resp_headerskvkeyr   r   s	            r   _build_response#_BaseRequestContext._build_response  s     (*LL&&(DA'')C"$0$5$<q$@!$%S! ) x.H 3 7 7R H;;# 
 	
r   c                     / $ )zKGet cookies that should be sent with the request. Overridden by subclasses.rG   r   s     r   _get_cookies_for_request,_BaseRequestContext._get_cookies_for_request  s    	r   set_cookie_headersc                     g)zGProcess Set-Cookie headers from the response. Overridden by subclasses.NrG   )r   r   r   s      r   _handle_response_cookies,_BaseRequestContext._handle_response_cookies  s    r   c                 B   U R                  U5      nU R                  U5      nU R                  U5      nU(       a1  SR                  S U 5       5      nSU;   a  US   S-   U-   US'   OXdS'   U R	                  XC5      nU R                  X5      nU R                  X!XGU5      n[        X5      n	[        U5      n
U
(       a  U R                  X5        U R                  X5      nUR                  SU R                  5      nU(       a  UR                  (       d  [        U5      eU$ )zExecute an HTTP request with cookie handling.

Args:
    url: The request URL.
    method: The HTTP method.
    **kwargs: Optional arguments.

Returns:
    An APIResponse object.
z; c              3   :   #    U  H  oS     SUS    3v   M     g7f)rg   re   rh   NrG   ).0cs     r   	<genexpr>-_BaseRequestContext._fetch.<locals>.<genexpr>  s#     %\K[a61QwZL&AK[s   Cookier   )r   r   r   joinr   r   r   r   r   r   r   rU   r   r/   r
   )r   r   r   r   r&   matching_cookiescookie_headerr'   r   	final_urlr   r   fails                r   r   _BaseRequestContext._fetch  s    $%%f-  88= II%\K[%\\M7"$+H$5$<}$L!$1!!!'2!!#.$$V'H *$4	 5T:))*<H''8zz/1J1JK#H--r   )r   r   r   r   r   r   rL   N      >@
   F)r   r@   )#r   r   r   r   r    rB   rC   floatrA   rF   r   r   r   rU   r   r   r   r   r   r   r>   r   r   rD   r   r   r   BaseHTTPResponser   r   listr   r   r   r!   rG   r   r   r   r      s{   M /3$)++ CH~,+ 	+
 + "+ 
+
1s 
1c 
1k 
12 2s 2{ 21s 1c 1k 13 3 3 34# 4 4 42 2s 2{ 22 2c 2S 2[ 2  T#s(^ S#X T#s(^ T#s(^ PUX\P\ 2# tCH~ # 

 #
.238n
DIDL
Z^_bdg_gZh
		!	!
8
G$<$< 
3 
; 
*C DJ V49 V3 VSW V*# *s *c *k *r   r   c                   >  ^  \ rS rSrSr     SSSS\S\\\4   S-  S\S	\S
\	SS4U 4S jjjr
    SS\S\\\4   S-  S\\-  \R                  -  S-  S
\	SS4
S jjrSS\\R                  -  S-  S\\\4   4S jjrS\S\\   4S jrS\\   S\SS4S jrSrU =r$ )APIRequestContexti  a@  Makes HTTP requests with automatic browser cookie synchronization.

Cookies from the browser session are sent with API requests, and cookies
from API responses are synced back to the browser.

Args:
    driver: The WebDriver instance to sync cookies with.
    base_url: Optional base URL prepended to relative request paths.
    extra_headers: Optional headers included in every request.
    timeout: Default request timeout in seconds.
    max_redirects: Maximum number of redirects to follow.
    fail_on_status_code: If True, raise APIRequestFailure for non-2xx responses.
Ndriverr   r   r   r   r   r   r   c                 4   > [         TU ]  UUUUUS9  Xl        g N)r   r   r   r   r   )r   r   _driver)r   r  r   r   r   r   r   r   s          r   r   APIRequestContext.__init__  s-     	'' 3 	 	
 r   storage_state_IsolatedAPIRequestContextc           	      Z   / nUb  [        U[        [        R                  45      (       ae  [        R                  " U5      nUR	                  5       (       d  [        SU 35      e [        U5       n[        R                  " U5      nSSS5        OUn[        WR                  S/ 5      5      n[        UUUU R                  U R                   US9$ ! , (       d  f       NK= f! [        R                   a  n	[        SU SU	 35      U	eSn	A	f[         a  n	[        SU SU	 35      U	eSn	A	ff = f)a  Create an isolated API request context that does not sync with the browser.

Args:
    base_url: Optional base URL for this context.
    extra_headers: Optional headers for this context.
    storage_state: Optional cookies to pre-load, as a dict, JSON file path, or Path.
    fail_on_status_code: If True, raise APIRequestFailure for non-2xx responses.

Returns:
    An _IsolatedAPIRequestContext instance.
NzStorage state file not found: z#Invalid JSON in storage state file r   zCannot read storage state file cookies)r   r   r  r   r   r   )r   rB   pathlibPathexistsFileNotFoundErroropenr2   loadJSONDecodeErrorrr   OSErrorr  rU   r  r   r   )
r   r   r   r  r   r  	file_pathfstatees
             r   new_contextAPIRequestContext.new_context  s#   $ !$-#w||)<==#LL7	 ''))+.LYK,XYY]iA $		! ) &599Y34G)'MM-- 3
 	
 )++ d$'J9+UWXYWZ%[\bcc ]!$CI;bQRPS"TU[\\]sB   %C  0CC  
CC  C   D*4DD*D%%D*rR   c                 :   U R                   R                  5       nSU0nUbC  [        R                  " U5      n [	        US5       n[
        R                  " X5SS9  SSS5        U$ U$ ! , (       d  f       U$ = f! [         a  n[        SU SU 35      UeSnAff = f)zExport the current browser cookies as a storage state dict.

Args:
    path: Optional file path to save the storage state as JSON.

Returns:
    A dict with a "cookies" key containing the browser cookies.
r  Nw   )indentzCannot write storage state to r   )r  get_cookiesr  r  r  r2   dumpr   )r   rR   r  r#  r!  r"  r$  s          r   get_storage_state#APIRequestContext.get_storage_stateK  s     ,,**,!*G 4T*IX)S)QIIeq1 * u	 *)   X >ykA3OPVWWXs5   A9 A'A9 '
A61A9 6A9 9
BBBr   c                     U R                   R                  5       nSn U R                   R
                  nU(       a2  [        R                  R                  U5      R                  =(       d    SnU Vs/ s H  n[        XQU5      (       d  M  UPM     sn$ ! [         a    [        R	                  SSS9  / s $ f = f! [         a    [        R	                  SSS9   Nlf = fs  snf )z1Get matching browser cookies for the request URL.z"Could not retrieve browser cookiesTexc_inforL   z7Could not get current URL for host-only cookie matching)r  r+  	Exceptionloggerdebugcurrent_urlrW   rX   rY   rZ   ra   )r   r   browser_cookiesrI   currentr   s         r   r   *APIRequestContext._get_cookies_for_request_  s    	"ll668O
 	cll..G!'!6!6w!?!H!H!NB +V?aoan.U?VV  	LL=LMI	  	cLLR]aLb	cVs/   B AB: 2CC B76B7:CCr   c                 z   [         R                  R                  U5      nU H  n[        U5      nUR	                  S5      (       d  M&  UR                  SUR                  =(       d    S5        UR                  SS5        UR	                  S5      nUbC  U[        [        R                  " 5       5      ::  a!   U R                  R                  US   5        M   U R                  R                  U5        M     g! [         a     N/f = f! [         a)    [        R                  SUR	                  S5      S	S
9   GM  f = f)z,Sync Set-Cookie headers back to the browser.rg   rO   rL   rR   rM   rK   NzICould not sync cookie '%s' to browser (domain mismatch with current page)Tr0  )rW   rX   rY   r~   rU   r   rZ   rA   rV   r  delete_cookier2  
add_cookier3  warning)r   r   r   
parsed_url	sc_headerrH   rK   s          r   r   *APIRequestContext._handle_response_cookiesp  s   \\**3/
+I&y1F::f%%h
(;(;(ArBfc*ZZ)F!fDIIK0@&@LL..vf~> ''/ , ! 
  _JJv&!  s$   6C7D7
DD.D:9D:)r  r  )rL   NNFr)   )r   r   r   r   r    rB   rC   r  rA   rF   r   r  r  r%  r   r-  r  r   r   r!   r"   r#   s   @r   r  r    sA   " /3$)  CH~,	
   " 
 ( /3:>$)*
*
 CH~,*
 czGLL047	*

 "*
 
&*
XcGLL&84&? 4PSUXPX> (WC WDJ W"49 3 SW  r   r  c                      ^  \ rS rSrSr      SS\S\\\4   S-  S\\   S-  S\S\	S	\
S
S4U 4S jjjrS
\\\4   4S jrS\S
\\   4S jrS\\   S\S
S4S jrSrU =r$ )r  i  z{An isolated API request context that maintains its own cookie jar.

Does not synchronize cookies with any browser session.
Nr   r   r  r   r   r   r   c                 H   > [         TU ]  UUUUUS9  U=(       d    / U l        g r  )r   r   _cookies)r   r   r   r  r   r   r   r   s          r   r   #_IsolatedAPIRequestContext.__init__  s3     	'' 3 	 	
 %,Mrr   c                 0    S[        U R                  5      0$ )z3Return the current cookies as a storage state dict.r  )r  rB  r.   s    r   r-  ,_IsolatedAPIRequestContext.get_storage_state  s    4.//r   r   c                     [         R                  R                  U5      R                  =(       d    SnU R                   Vs/ s H  n[        X1U5      (       d  M  UPM     sn$ s  snf )z+Get matching cookies from the internal jar.rL   )rW   rX   rY   rZ   rB  ra   )r   r   rI   r   s       r   r   3_IsolatedAPIRequestContext._get_cookies_for_request  sH      ..s3<<B==T=aOAN,S=TTTs   A#A#r   c           
         [         R                  R                  U5      n[        [        R                  " 5       5      nU GH  n[        U5      nUR                  S5      (       d  M'  UR                  SUR                  =(       d    S5        UR                  SS5        US   UR                  SS5      UR                  SS5      4nU R                   Vs/ s H>  oR                  S5      UR                  SS5      UR                  SS5      4U:w  d  M<  UPM@     snU l	        UR                  S5      n	U	b  X::  a  M  U R                  R                  U5        GM     gs  snf )z-Store Set-Cookie headers in the internal jar.rg   rO   rL   rR   rM   rK   N)rW   rX   rY   rA   rV   r~   rU   r   rZ   rB  append)
r   r   r   r=  nowr>  rH   r   r   rK   s
             r   r   3_IsolatedAPIRequestContext._handle_response_cookies  s#   \\**3/
$))++I&y1F::f%%h
(;(;(ArBfc*&>6::h#;VZZPS=TUC  ==(aUU6]AEE(B<OQRQVQVW]_bQc,dhk,k=DM ZZ)F!fmMM  (! ,s   ;EE)rB  )rL   NNr	  r
  F)r   r   r   r   r    rB   rC   r  r  rA   rF   r   r   r-  r   r   r!   r"   r#   s   @r   r  r    s     /3%)$)22 CH~,2 dd"	2
 2 2 "2 
2 2$04S> 0UC UDJ U)49 )3 )SW ) )r   r  )rL   )&r    r2   loggingr  rV   urllib.parserW   email.utilsr   http.clientr   r   typingr   r   r   urllib3.util.retryr   #selenium.webdriver.remote.webdriverr   	getLoggerr   r3  r2  r
   r   rC   rB   rF   ra   r~   r  r  r   r   r   r  r  rG   r   r   <module>rT     s   $ V      - 8 %  $=			8	$	V	 	V0 0f2D 2s 2C 2 2j<C <D <~'":": tCy " 8 8  PS  A AHI+ IX6)!4 6)r   