
    +h~k                        U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlmZ d dlmZmZmZmZmZmZmZ d dlmZmZ 	 d dlmZ d dlm	Z 	 d dlZ	 d dlZ	 e e!d<   ejD                  Z#e$e!d<   e$e!d<   e$e!d	<   e#jK                  d
      D  cg c]
  }  e$|        c} \  Z&Z'Z(e&e'e(fdk  r"e jR                  jU                  de#d       dZ	 	 d dl,m-Z- d dl.m/Z/m0Z0 d Z1d Z2 G d de3      Z4 G d de4      Z5 G d de4      Z6 G d de4      Z7 G d de4      Z8y# e$ r Y w xY w# e$ r dZY w xY wc c} w # e+$ r Y qw xY w# e$ r dZY ~w xY w# e$ r dZ-Y w xY w)    N)errorutil)RequestMetrics)AnyDictOptionalTupleClassVarUnioncast)NoReturn	TypedDictversionmajorminorpatch.)r      r   zWarning: the Stripe library requires that your Python "requests" library be newer than version 0.8.8, but your "requests" library is version a#  . Stripe will fall back to an alternate HTTP library so everything should work. We recommend upgrading your "requests" library. If you have any questions, please contact support@stripe.com. (HINT: running "pip install -U requests" should upgrade your requests library to the latest version.))urlfetch)urlparseParseResultc                  T    t        t        t        j                         dz              S )Ni  )introundtime     E/var/www/html/venv/lib/python3.12/site-packages/stripe/http_client.py_now_msr   H   s    uTYY[4'())r   c                      t         rt        }nHt        rt        }n;t        rt
        }n.t        }t        j                  dk  rt        j                  d        || i |S )N)      	   zWarning: the Stripe library is falling back to urllib2 because neither requests nor pycurl are installed. urllib2's SSL implementation doesn't verify server certificates. For improved security, we suggest installing requests.)r   UrlFetchClientrequestsRequestsClientpycurlPycurlClientUrllib2Clientsysversion_infowarningswarn)argskwargsimpls      r   new_default_http_clientr1   L   sP    		i'MM    r   c                      e Zd ZU ee   ed<    G d de      ZdZdZ	dZ
ee   ed<   eed<   	 	 dd
edeeeef      fdZ	 ddeeeef   fdZ	 ddeeeef   fdZd ZddZddZd Zd ZddZddZd Zd Zd Zd Zy	)
HTTPClientnamec                   .    e Zd ZU ee   ed<   ee   ed<   y)HTTPClient._ProxyhttphttpsN)__name__
__module____qualname__r   str__annotations__r   r   r   _Proxyr6   d   s    sm}r   r>   r!         ?<   _proxy_verify_ssl_certsNverify_ssl_certsproxyc                     || _         |r0t        |t              r||d}t        |t              st	        d      |r|j                         nd | _        t        j                         | _	        y )N)r7   r8   zqProxy(ies) must be specified as either a string URL or a dict() with string URL under the https and/or http keys.)
rB   
isinstancer<   dict
ValueErrorcopyrA   	threadinglocal_thread_local)selfrC   rD   s      r   __init__zHTTPClient.__init__n   sf    
 "2%%!&7t !  ',ejjl&__.r   returnc                 .    | j                  ||||d      S NFis_streaming_request_with_retries_internalrM   methodurlheaders	post_datas        r   request_with_retrieszHTTPClient.request_with_retries   s'     22C)% 3 
 	
r   c                 .    | j                  ||||d      S NTrR   rT   rV   s        r   request_stream_with_retriesz&HTTPClient.request_stream_with_retries   s'     22C)$ 3 
 	
r   c                    | j                  |       d}	 t               }	 |r| j                  ||||      }n| j                  ||||      }d }	| j                  ||	|      rm|	r"t        j                  d|	j                  z         |dz  }| j                  ||      }t        j                  d||||fz         t        j                  |       n|| j                  ||       |S |	J |	# t        j
                  $ r}
|
}	d }Y d }
~
d }
~
ww xY w)Nr   z Encountered a retryable error %s   zBInitiating retry %i for request %s %s after sleeping %.2f seconds.)_add_telemetry_headerr   request_streamrequestr   APIConnectionError_should_retryr   log_infouser_message_sleep_time_secondsr   sleep_record_request_metrics)rM   rW   rX   rY   rZ   rS   num_retriesrequest_startresponseconnection_errore
sleep_times               r   rU   z)HTTPClient._request_with_retries_internal   s8    	""7+#IM
 #22Wi H  $||FC)LH#' 
 !!(,<kJ#MM:*778 q !55k8L
1&Z@A 

:&'00=I#O+777**M  ++  #$  s   -C* *D=DDc                     t        d      )Nz.HTTPClient subclasses must implement `request`NotImplementedErrorrV   s        r   rc   zHTTPClient.request   s    !<
 	
r   c                     t        d      )Nz5HTTPClient subclasses must implement `request_stream`rr   rV   s        r   rb   zHTTPClient.request_stream   s    !C
 	
r   c                     || j                         k\  ry||j                  S |\  }}}|d|v r|d   dk(  ry|d   dk(  ry|dk(  ry|dk\  ryy)NFzstripe-should-retryfalsetrueTi  i  )_max_network_retriesshould_retry)rM   rm   api_connection_errorrk   _status_coderheaderss          r   re   zHTTPClient._should_retry   s    $3355
 (444#+ ; $9X$E-.'9-.&8 # #r   c                     ddl m} |S )Nr   )max_network_retries)striper   )rM   r   s     r   rx   zHTTPClient._max_network_retries   s    . #"r   c                 \    |y |\  }}}	 t        |d         S # t        t        f$ r Y y w xY w)Nzretry-after)r   KeyErrorrH   )rM   rm   r{   r}   s       r   _retry_after_headerzHTTPClient._retry_after_header   sB    !1h	x.//*% 		s    ++c                 &   t        t        j                  d|dz
  z  z  t        j                        }| j	                  |      }t        t        j                  |      }| j                  |      xs d}|t        j                  k  rt        ||      }|S )Nr!   r`   r   )minr3   INITIAL_DELAY	MAX_DELAY_add_jitter_timemaxr   MAX_RETRY_AFTER)rM   rk   rm   sleep_secondsretry_afters        r   rh   zHTTPClient._sleep_time_seconds  s     $$kAo(>?  

 --m< J44mD ..x8=A*444];Mr   c                 D    |ddt        j                  dd      z   z  z  }|S )Nr?   r`   r   )randomuniform)rM   r   s     r   r   zHTTPClient._add_jitter_time  s)     	FNN1a$8 899r   c                     t        | j                  dd       }t        j                  r.|r+d|j	                         i}t        j                  |      |d<   y y y )Nlast_request_metricszX-Stripe-Client-Telemetry)getattrrL   r   enable_telemetrypayloadjsondumps)rM   rY   r   	telemetrys       r   ra   z HTTPClient._add_telemetry_header  s]    & 6 
 ""';&(<(D(D(FI 48::i3HG/0	 (<"r   c                     |\  }}}d|v r?t         j                  r.|d   }t               |z
  }t        ||      | j                  _        y y y )Nz
Request-Id)r   r   r   r   rL   r   )rM   rm   rl   r{   r}   
request_idrequest_duration_mss          r   rj   z"HTTPClient._record_request_metrics)  sV    !1h8#(?(?!,/J"))m";6D/7D3 )@#r   c                     t        d      )Nz,HTTPClient subclasses must implement `close`rr   rM   s    r   closezHTTPClient.close2  s    !:
 	
r   TNN)r9   r:   r;   r
   r<   r=   r   r>   r   r   r   r   boolr   rN   r	   r   r   r[   r^   rU   rc   rb   re   rx   r   rh   r   ra   rj   r   r   r   r   r3   r3   a   s    
3-  IMOV "&.2// c6k*+/6 /3
	sC}	
 /3
	sC}	
-+^



#J#*I
r   r3   c                   L     e Zd ZdZd	 fd	Zd
dZd
dZd ZdefdZ	d Z
 xZS )r&   r%   c                 n    t        t        | 
  di | || _        || _        t
        J t
        | _        y )Nr   )superr&   rN   _session_timeoutr%   )rM   timeoutsessionr/   	__class__s       r   rN   zRequestsClient.__init__;  s6    nd,6v6### r   c                 .    | j                  ||||d      S rQ   _request_internalrV   s        r   rc   zRequestsClient.requestC  %    %%C)% & 
 	
r   c                 .    | j                  ||||d      S r]   r   rV   s        r   rb   zRequestsClient.request_streamH  %    %%C)$ & 
 	
r   c                    i }| j                   rt        j                  |d<   nd|d<   | j                  r| j                  |d<   |rd|d<   t	        | j
                  dd       7| j                  xs | j                  j                         | j
                  _	        	 	  | j
                  j                  j                  ||f||| j                  d|}|r|j                  }	n|j                  }	|j                  }
	
j$                  fS # t        $ r}t        d|      d }~ww xY w# t         $ r}| j#                  |       Y d }~Md }~ww xY w)	NverifyFproxiesTstreamr   )rY   datar   a  Warning: It looks like your installed version of the "requests" library is not compatible with Stripe's usage thereof. (HINT: The most likely cause is that your "requests" library is out of date. You can fix that by running "pip install -U requests".) The underlying error was: )rB   r   ca_bundle_pathrA   r   rL   r   r%   Sessionr   rc   r   	TypeErrorrawcontentr|   	Exception_handle_request_errorrY   )rM   rW   rX   rY   rZ   rS   r/   resultro   r   r|   s              r   r   z RequestsClient._request_internalM  sX   !!%44F8$F8;; $F9#F84%%y$7?8!6!6!8 & 	*;++33;; $" MM $  **
 !.. ,,K V^^331   346 &  	* &&q))	*s6   6D 'D% 	D"DD""D% %	E	.EE	rO   c                    t        || j                  j                  j                        r)d}t	        |      j
                  dt        |      }d}nt        || j                  j                  j                  | j                  j                  j                  f      r(d}t	        |      j
                  dt        |      }d}nt        || j                  j                  j                        r(d}t	        |      j
                  dt        |      }d}n?d}dt	        |      j
                  d}t        |      r|d	t        |      z  }n|d
z  }d}t        j                  |      d|dz   }t        j                  ||      )NCould not verify Stripe's SSL certificate.  Please make sure that your network is not intercepting certificates.  If this problem persists, let us know at support@stripe.com.: FziUnexpected error communicating with Stripe.  If this problem persists, let us know at support@stripe.com.TzUnexpected error communicating with Stripe. It looks like there's probably a configuration issue locally.  If this problem persists, let us know at support@stripe.com.zA z was raisedz with error message z with no error message

(Network error: )ry   )rF   r%   
exceptionsSSLErrortyper9   r<   TimeoutConnectionErrorRequestExceptiontextwrapfillr   rd   )rM   ro   msgerrry   s        r   r   z$RequestsClient._handle_request_error  sX    a11::;&  #1g..A7C L((00((88
& 
 #1g..A7CL4==33DDE& 
 #1g..A7C L.  (,Aw'7'79C1v3q6;;// LmmC #EE&&sFFr   c                 |    t        | j                  dd       %| j                  j                  j                          y y )Nr   )r   rL   r   r   r   s    r   r   zRequestsClient.close  s5    4%%y$7C&&,,. Dr   )P   Nr   r9   r:   r;   r4   rN   rc   rb   r   r   r   r   __classcell__r   s   @r   r&   r&   8  s1    D!



44l4G( 4Gl/r   r&   c                   L     e Zd ZdZd	 fd	Zd
dZd
dZd ZdefdZ	d Z
 xZS )r$   r   c                     t         t        |   ||       |rt        d      || _        || _        t        J t        | _        y )NrC   rD   zNo proxy support in urlfetch library. Set stripe.default_http_client to either RequestsClient, PycurlClient, or Urllib2Client instance to use a proxy.)r   r$   rN   rH   rB   	_deadliner   )rM   rC   rD   deadliner   s       r   rN   zUrlFetchClient.__init__  sZ    nd,-U 	- 	
 J  "2 "### r   c                 .    | j                  ||||d      S rQ   r   rV   s        r   rc   zUrlFetchClient.request  r   r   c                 .    | j                  ||||d      S r]   r   rV   s        r   rb   zUrlFetchClient.request_stream  r   r   c                    	 | j                   j                  |||| j                  | j                  |      }|r=t        j                  j                  t        j                  j                              }nj                  }||j                  |j                  fS # | j                   j                  $ r}| j                  ||       Y d }~d }~ww xY w)N)rX   rW   rY   validate_certificater   r   )r   fetchrB   r   Errorr   r   ioBytesIOr<   encoder   r|   rY   )	rM   rW   rX   rY   rZ   rS   r   ro   r   s	            r   r   z UrlFetchClient._request_internal  s    	/]](( &*%;%;! ) 
F ggoocjj&@AGnnG**FNN:: }}"" 	/&&q#..	/s   5B C4CCrO   c                 X   t        || j                  j                        rd|d}nHt        || j                  j                        rd}n%t        || j                  j                        rd}nd}t        j                  |      dz   t        |      z   dz   }t        j                  |      )Nz6The Stripe library attempted to fetch an invalid URL (zg). This is likely due to a bug in the Stripe Python bindings. Please let us know at support@stripe.com.z0There was a problem retrieving data from Stripe.zThere was a problem receiving all of your data from Stripe.  This is likely due to a bug in Stripe. Please let us know at support@stripe.com.hUnexpected error communicating with Stripe. If this problem persists, let us know at support@stripe.com.r   r   )
rF   r   InvalidURLErrorDownloadErrorResponseTooLargeErrorr   r   r<   r   rd   )rM   ro   rX   r   s       r   r   z$UrlFetchClient._handle_request_error  s    a667
 -02  4==667DC4==>>?< G 
 mmC #99CFBSH&&s++r   c                      y r   r   r   s    r   r   zUrlFetchClient.close      r   )TN7   r   r   r   s   @r   r$   r$     s-    D!,



;.,x ,2r   r$   c                        e Zd ZU  G d ded      ZdZee   ed<   d fd	Zd Z	dd	Z
dd
Zd ZdefdZdee   fdZd Z xZS )r(   c                   .    e Zd ZU ee   ed<   ee   ed<   y)PycurlClient._ParsedProxyr7   r8   N)r9   r:   r;   r   r   r=   r   r   r   _ParsedProxyr     s    {##$$r   r   F)totalr'   _parsed_proxyc                 D   t         t        |   ||       t        J t        | _        t        j                         | _        i | _        | j                  rK| j                  }|j                         D ]+  \  }}t        t        t        |            | j                  |<   - y y Nr   )r   r(   rN   r'   Curl_curlr   rA   itemsr   r   r<   )rM   rC   rD   proxy_schemevaluer   s         r   rN   zPycurlClient.__init__  s    lD*-U 	+ 	
 !!![[]
 ;;[[F!' H .6d36F-G""6*H r   c                     d|vri S |j                  dd      d   }t        j                  |      }t        d t        |      j	                         D              S )Nz
r`   c              3   F   K   | ]  \  }}|j                         |f  y wr   lower.0kvs      r   	<genexpr>z-PycurlClient.parse_headers.<locals>.<genexpr>6  s     Etq!QWWYNE   !)splitemailmessage_from_stringrG   r   )rM   r   raw_headersrY   s       r   parse_headerszPycurlClient.parse_headers1  sR    Ijj+A.++K8EtG}/B/B/DEEEr   c                 .    | j                  ||||d      S rQ   r   rV   s        r   rc   zPycurlClient.request8  r   r   c                 .    | j                  ||||d      S r]   r   rV   s        r   rb   zPycurlClient.request_stream=  r   r   c           
      n
   t         j                  j                         }t         j                  j                         }| j                  j	                          | j                  |      }|r|j                  r:| j                  j                  | j                  j                  |j                         |j                  r:| j                  j                  | j                  j                  |j                         |j                  s|j                  rI| j                  j                  | j                  j                  |j                  d|j                         |dk(  r1| j                  j                  | j                  j                  d       n|dk(  ra| j                  j                  | j                  j                   d       | j                  j                  | j                  j"                  |       n>| j                  j                  | j                  j$                  |j'                                | j                  j                  | j                  j(                  |       | j                  j                  | j                  j*                  |j,                         | j                  j                  | j                  j.                  |j,                         | j                  j                  | j                  j0                  d       | j                  j                  | j                  j2                  d       | j                  j                  | j                  j4                  d       | j                  j                  | j                  j6                  t9        t;        |      j=                               D 	
cg c]  \  }	}
|	d|
 c}
}	       | j>                  r?| j                  j                  | j                  j@                  tB        jD                         n0| j                  j                  | j                  jF                  d       	 | j                  jI                          |r|jO                  d	       |}n|jQ                         jS                  d
      }| j                  jU                  | j                  jV                        }| jY                  |jQ                         jS                  d
            }|||fS c c}
}	w # | j                  jJ                  $ r}| jM                  |       Y d }~d }~ww xY w)N:getr`   post   r   r   Fr   utf-8)-r   r   r   r   reset
_get_proxyhostnamesetoptr'   PROXYport	PROXYPORTusernamepasswordPROXYUSERPWDHTTPGETPOST
POSTFIELDSCUSTOMREQUESTupperURLWRITEFUNCTIONwriteHEADERFUNCTIONNOSIGNALCONNECTTIMEOUTTIMEOUT
HTTPHEADERiterrG   r   rB   CAINFOr   r   SSL_VERIFYHOSTperformr   r   seekgetvaluedecodegetinfoRESPONSE_CODEr  )rM   rW   rX   rY   rZ   rS   br}   rD   r   r   ro   rcontentrcodes                 r   r   zPycurlClient._request_internalB  su   GGOO77??$ 	

$~~

!!$++"3"3U^^Dzz

!!$++"7"7D~~

!!KK,,$~~u~~>
 U?JJdkk1115vJJdkk..2JJdkk44i@JJdkk77H 	

$++//3/

$++33QWW=

$++44hnnE

$++..2

$++44b9

$++--r2

KK""+/W0C0C0E+FG41aAG	
 !!JJdkk00&2G2GHJJdkk88%@	*JJ  FF1IHzz|**73H

""4;;#<#<=$$X%6%6%8%?%?%HI''+ H {{   	*&&q))	*s   4S:	T   T4T//T4rO   c                    |j                   d   | j                  j                  | j                  j                  | j                  j                  fv rd}d}nD|j                   d   | j                  j
                  | j                  j                  fv rd}d}nd}d}t        j                  |      dz   |j                   d   z   d	z   }t        j                  ||
      )Nr   zCould not connect to Stripe.  Please check your internet connection and try again.  If this problem persists, you should check Stripe's service status at https://twitter.com/stripestatus, or let us know at support@stripe.com.Tr   Fr   r   r`   r   r   )r.   r'   E_COULDNT_CONNECTE_COULDNT_RESOLVE_HOSTE_OPERATION_TIMEOUTEDE_SSL_CACERTE_SSL_PEER_CERTIFICATEr   r   r   rd   )rM   ro   r   ry   s       r   r   z"PycurlClient._handle_request_error  s    66!9KK))KK..KK--
 
&   LVVAYKK$$KK..
 

&  !LG  !LmmC #99AFF1IEK&&sFFr   c                     | j                   rJ| j                   }|r|j                  d      d   nd }|r$|j                  ||j                  |dd             S y )Nr  r   )r   r   r  )rM   rX   rD   r   s       r   r  zPycurlClient._get_proxy  sR    &&E*-SYYs^A&4Fyy6!B<)@AAr   c                      y r   r   r   s    r   r   zPycurlClient.close  r   r   r   r   )r9   r:   r;   r   r   r4   r   r=   rN   r  rc   rb   r   r   r   r   r  r   r   r   s   @r   r(   r(     sd    %y % DL))H(F



?(B!G( !GF+!6 r   r(   c                   L     e Zd ZdZd	 fd	Zd
dZd
dZd ZdefdZ	d Z
 xZS )r)   zurllib.requestc                     t         t        |   ||       d | _        | j                  rUt        j                  t        t        t        t        f   | j                              }t        j                  |      | _        y y r   )r   r)   rN   _openerrA   urllibrequestProxyHandlerr   r   r<   build_opener)rM   rC   rD   r   s      r   rN   zUrllib2Client.__init__  sm    mT+-U 	, 	
 ;; "..T#s(^T[[1E )55e<DL r   c                 .    | j                  ||||d      S rQ   r   rV   s        r   rc   zUrllib2Client.request  r   r   c                 .    | j                  ||||d      S r]   r   rV   s        r   rb   zUrllib2Client.request_stream  r   r   c                    t        |t              r|j                  d      }t        j                  |||      }dvr
fd|_        	 | j                  r| j                  j                  |      nt        j                  |      }|r|}n|j                         }|j                  }	t        |j                               }t        d t%        t        |      j'                               D              }	|fS # t        j                  $ r?}
|
j                  }	|
j                         }t        |
j                               }Y d }
~
d }
~
wt        j                  t         f$ r}
| j#                  |
       Y d }
~
d }
~
ww xY w)Nr  )r  r	  c                  $     j                         S r   )r  )rW   s   r   <lambda>z1Urllib2Client._request_internal.<locals>.<lambda>  s    V\\^ r   c              3   F   K   | ]  \  }}|j                         |f  y wr   r   r   s      r   r   z2Urllib2Client._request_internal.<locals>.<genexpr>  s     ITQ1779a.Ir   )rF   r<   r   r;  Request
get_methodr:  openurlopenreadcoderG   infourlliberror	HTTPErrorURLErrorrH   r   r#  r   )rM   rW   rX   rY   rZ   rS   reqrm   r-  r.  ro   lhs    `          r   r   zUrllib2Client._request_internal  s4   i%!((1I##CG<(3CN	*
 << !!#&"**3/  ##==?MME8==?+G IT$w-2E2E2G-HII"" $$ 	%FFEvvxH1668nG$$j1 	*&&q))	*s%   	A6C6 6E:	5EE:E55E:rO   c                 ~    d}t        j                  |      dz   t        |      z   dz   }t        j                  |      )Nr   r   r   )r   r   r<   r   rd   )rM   ro   r   s      r   r   z#Urllib2Client._handle_request_error  sB    K 	 mmC #99CFBSH&&s++r   c                      y r   r   r   s    r   r   zUrllib2Client.close  r   r   r   r   r   r   s   @r   r)   r)     s.    D=



 #D,( ,r   r)   )9r*   r   r,   r   r   r   rJ   r   r   r   r   stripe.request_metricsr   typingr   r   r   r	   r
   r   r   typing_extensionsr   r   urllib.requestrc   r;  urllib.errorrK  ImportErrorr'   r%   r<   r=   __version__r   r   r   r   r   r   stderrr  r   google.appengine.apir   urllib.parser   r   r   r1   objectr3   r&   r$   r(   r)   )is   0r   <module>r^     s   
          1 D D D 1	*&
&&


/6}}S/AB!s1vBue
 5% 9,JJ 6=?	 H-
 /*!*T
 T
nC/Z C/LTZ TnZ: ZzFJ Fu  		  F C   H<  Hsl   D& D1 !E &3E D>(E E &D.-D.1D;:D;>E E
EEEE%$E%