
     hD:                         d dl mZmZm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 d dlZd dlmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZmZ d Zdd
Zd Zd Z  G d de!          Z"dS )    )absolute_importdivisionprint_functionN)OrderedDict)erroroauth_errorhttp_clientversionutilsix)MultipartDataGenerator)	urlencodeurlsplit
urlunsplit)StripeResponseStripeStreamResponsec                     | j         rA| j                             |           't          j        |                                           }n&t          j        |                                           }t          |          S N)	tzinfo	utcoffsetcalendartimegmutctimetupletimemktime	timetupleint)dttimeutc_timestamps     P/var/www/html/Sam_Eipo/venv/lib/python3.11/site-packages/stripe/api_requestor.py_encode_datetimer!      sg    } 80088D (;(;(=(=>>F$4$4$6$677}    %s[%s]c                 j    t                      }t          j        |          D ]\  }}|||| |fz  <   |S r   )r   r   	iteritems)keydatafmtdsubkeysubvalues         r    _encode_nested_dictr,      sD    AM$// * *!)#f
Hr"   c              #      K   t          j        |           D ]e\  }}t          j        |          }|t	          |d          r||j        fV  9t          |t                    st          |t                    ryt          |          D ]h\  }}t          |t                    r1t          d||fz  |          }t          |          D ]\  }}||fV  Kd||fz  t          j        |          fV  it          |t                    r-t          ||          }t          |          D ]\  }}	||	fV  t          |t          j                  r|t          |          fV  M|t          j        |          fV  gd S )N	stripe_idz%s[%d])r   r%   r   utf8hasattrr.   
isinstancelisttuple	enumeratedictr,   _api_encodedatetimer!   )
r'   r&   valueisvsubdictkvr*   r+   s
             r    r6   r6   #   s     mD)) * *
Uinn=UK(( 	*(((((t$$ 	*
5%(@(@ 	*"5)) ? ?2b$'' ?1(c1X2ErJJG +G 4 4 % %1 !f% $sAh.	">>>>>? t$$ 	*)#u55G$/$8$8 ) ) x((((()x011 	*(//00000	%(()))))+* *r"   c                 f    t          |           \  }}}}}|r|d|}t          |||||f          S )N&)r   r   )urlqueryschemenetlocpath
base_queryfragments          r    _build_api_urlrG   <   sI    19#.FFD*h .%::uu-vvtUH=>>>r"   c                   ~    e Zd Z	 	 	 	 	 ddZed             ZddZddZd Zd Z	d Z
d	 Z	 	 	 ddZd Zd Zd ZdS )APIRequestorNc                    |pt           j        | _        || _        |pt           j        | _        || _        d | _        ddl m} ddl m} |r	|| _        d S t           j	        r4t           j	        | _        || j        k    rt          j        d           d S d S t          j        ||          t           _	        t           j	        | _        || _        d S )Nr   )verify_ssl_certs)proxyzstripe.proxy was updated after sending a request - this is a no-op. To use a different proxy, set stripe.default_http_client to a new client configured with the proxy.)rK   rL   )stripeapi_baseapi_keyapi_versionstripe_account_default_proxyrK   rL   _clientdefault_http_clientwarningswarnr	   new_default_http_client)selfr&   clientrN   rP   accountverifyrL   s           r    __init__zAPIRequestor.__init__F   s     !3FO&<&*<%"555555       	(!DLLL' 	(!5DL+++1     ,+ *5)L!'u* * *F& "5DL"'Dr"   c                 p    |d         }|d         r|d|d         z  }|d         r|d|d         dz  }|S )Nnamer
   /r@   z () )clsinfostrs      r    format_app_infozAPIRequestor.format_app_infom   sT    6l	? 	.CDOO--C; 	,Cd5kkk++C
r"   c                     |                      |                                |||d          \  }}}}|                     |||          }	|	|fS )NFis_streaming)request_rawlowerinterpret_response)
rX   methodr@   paramsheadersrbodyrcoderheaders
my_api_keyresps
             r    requestzAPIRequestor.requestv   s\    -1-=-=LLNNCu .> .
 .
*uh
 &&ueX>>Zr"   c                     |                      |                                |||d          \  }}}}|                     |||          }	|	|fS )NTrg   )ri   rj   interpret_streaming_response)
rX   rl   r@   rm   rn   streamrp   rq   rr   rs   s
             r    request_streamzAPIRequestor.request_stream}   s\    .2.>.>LLNNCt /? /
 /
+x 00IIZr"   c                    	 |d         }n1# t           t          f$ r t          j        d||fz  |||          w xY wd }t	          |t
          j                  r|                     |||||          }||                     |||||          }|)Nr   z@Invalid response object from API: %r (HTTP response code was %d))	KeyError	TypeErrorr   APIErrorr1   r   string_typesspecific_oauth_errorspecific_api_error)rX   ro   rp   rs   rq   
error_dataerrs          r    handle_error_responsez"APIRequestor.handle_error_response   s    		gJJ)$ 	 	 	."EN+  	 
 j#"233 	++udHj C ;))udHj C 	s    .9c           	      n   t          j        d|                    d          |                    d          |                    d          |                    d                     |dk    s|dk    rD|                    d          d	k    r+t          j        |                    d          ||||          S |d
v r|                    d          dk    r+t          j        |                    d          ||||          S t          j        |                    d          |                    d          |                    d          ||||          S |dk    r+t          j        |                    d          ||||          S |dk    rSt          j        |                    d          |                    d          |                    d          ||||          S |dk    r+t          j	        |                    d          ||||          S t          j
        |                    d          ||||          S )NzStripe API error receivedcodetypemessageparam)
error_code
error_typeerror_messageerror_parami    
rate_limit)r   i  idempotency_errori  i  i  )r   log_infogetr   RateLimitErrorIdempotencyErrorInvalidRequestErrorAuthenticationError	CardErrorPermissionErrorr|   )rX   ro   rp   rs   rq   r   s         r    r   zAPIRequestor.specific_api_error   sD   '!~~f--!~~f--$..33"w//	
 	
 	
 	
 C<<SLLZ^^F33|CC'y))5%x   j  ~~f%%)<<<-NN9--ueT8   0NN9--NN7++NN6**   c\\,y))5%x   c\\?y))w''v&&   c\\(y))5%x   >y))5%x  r"   c                 `   |                     d|          }t          j        d||           ||||||g}|dk    rt          j        | S |dk    rt          j        | S |dk    rt          j        | S |dk    rt          j        | S |dk    rt          j        | S |d	k    rt          j	        | S d S )
Nerror_descriptionzStripe OAuth error received)r   r   invalid_clientinvalid_grantinvalid_requestinvalid_scopeunsupported_grant_typeunsupported_response_type)
r   r   r   r   InvalidClientErrorInvalidGrantErrorr   InvalidScopeErrorUnsupportedGrantTypeErrorUnsupportedResponseTypeError)rX   ro   rp   rs   rq   r   descriptionargss           r    r~   z!APIRequestor.specific_oauth_error   s    hh2J??)!)	
 	
 	
 	
 KtXF)))1488?**0$77,,,2D99?**0$773338$??666;TBBtr"   c                 |   dt           j        }t          j        r%|d|                     t          j                  z   z  }t           j        dd| j        j        d}dt          j        gdt          j        gdd	 gfD ](\  }}	  |            }n# t          $ r d
}Y nw xY w|||<   )t          j        rt          j        |d<   t          j        |          |d|d}| j        r
| j        |d<   |dk    r9d|d<   |                    dt          t          j                                         | j        
| j        |d<   |S )NzStripe/v1 PythonBindings/ pythonrM   )bindings_versionlang	publisherhttpliblang_versionplatformunamec                  N    d                     t          j                              S )Nr   )joinr   r   ra   r"   r    <lambda>z.APIRequestor.request_headers.<locals>.<lambda>   s    chhx~'7'788 r"   z
(disabled)applicationzBearer )zX-Stripe-Client-User-Agentz
User-AgentAuthorizationzStripe-Accountpostz!application/x-www-form-urlencodedContent-TypezIdempotency-KeyzStripe-Version)r
   VERSIONrM   app_infore   rS   r^   r   python_version	ExceptionjsondumpsrQ   
setdefaultrd   uuiduuid4rP   )	rX   rO   rl   
user_agentuaattrfuncvalrn   s	            r    request_headerszAPIRequestor.request_headers   s    6=ooG
? 	F# 4 4V_ E EEEJ !(!|(	
 
 X45*+889
 		 		JD$
#dff # # #"#BtHH? 	0 &B} +/*R..$*,3G5
 
  	<(,(;G$%V&IGN#0#djll2C2CDDD'(,(8G$%s   
BBBFc                    | j         r| j         }nddlm } |}|t          j        d          | j        |}t          t          t          |pi                               }	|	                    dd                              dd          }	|d	k    s|d
k    r|rt          ||	          }d}
n|dk    re|`|
                    d          dk    rGt                      }|                    |pi            |                                }
d|j        |d<   n|	}
nt          j        d|d          |                     ||          }|t#          j        |          D ]
\  }}|||<   t'          j        d||           t'          j        d|	| j                   |r"| j                            ||||
          \  }}}n!| j                            ||||
          \  }}}t'          j        d||           t'          j        d|           d|v r0|d         }t'          j        dt'          j        |                     ||||fS )z3
        Mechanism for issuing an API call
        r   )rO   NzNo API key provided. (HINT: set your API key using "stripe.api_key = <API-KEY>"). You can generate API keys from the Stripe web interface.  See https://stripe.com/api for details, or email support@stripe.com if you have any questions.z%5B[z%5D]r   deleter   r   zmultipart/form-datazmultipart/form-data; boundary=zUnrecognized HTTP method ze.  This may indicate a bug in the Stripe bindings.  Please contact support@stripe.com for assistance.zRequest to Stripe api)rl   rD   zPost details)	post_datarP   zStripe API response)rD   response_codezAPI response body)bodyz
Request-IdzDashboard link for request)link)rO   rM   r   r   rN   r   r2   r6   replacerG   r   r   
add_paramsget_post_databoundaryAPIConnectionErrorr   r   r%   r   r   	log_debugrP   rS   request_stream_with_retriesrequest_with_retriesdashboard_link)rX   rl   r@   rm   supplied_headersrh   rr   rO   abs_urlencoded_paramsr   	generatorrn   r&   r8   rcontentrp   rq   
request_ids                      r    ri   zAPIRequestor.request_raw  s    < 	!JJ&&&&&& J+   !MM33/"4FLb(A(A#B#BCC
 (//s;;CCE3OOU??f00 B(.AAIIv ,$((88() ) 344	$$V\r222%3355		 ;D:L:LN !"  +		** "(*   &&z6::'!m,<== % %
U$-f7KKKK$(	
 	
 	
 	
  	
 88) 	
 )-(I(I)) )%HeX 	+'OOOO*::::8##!,/JN,(44   
 *44r"   c                 $    d|cxk    odk     nc  S )N   i,  ra   )rX   rp   s     r    _should_handle_code_as_errorz)APIRequestor._should_handle_code_as_error~  s'    %%%%%#%%%%%%r"   c                 .   	 t          |d          r|                    d          }t          |||          }n*# t          $ r t	          j        d||fz  |||          w xY w|                     |          r|                     |||j        |           |S )Ndecodezutf-8z>Invalid response body from API: %s (HTTP response code was %d))	r0   r   r   r   r   r|   r   r   r'   )rX   ro   rp   rq   rs   s        r    rk   zAPIRequestor.interpret_response  s    	uh'' .W--!%99DD 	 	 	..16?  	 ,,U33 	J&&ueTYIIIs	   69 'A c                 .   |                      |          rpt          |d          r|                                }n4t          |d          r|                                }nt	          d          |                     |||          S t          |||          S )Ngetvaluereadz`HTTP client %s does not return an IOBase object which can be consumed when streaming a response.)r   r0   r   r   NotImplementedErrorrk   r   )rX   rw   rp   rq   json_contents        r    rv   z)APIRequestor.interpret_streaming_response  s    
 ,,U33 	Avz** %00(( %{{}})A  
 **<III'x@@@r"   )NNNNN)NN)NNF)__name__
__module____qualname__r\   classmethodre   rt   rx   r   r   r~   r   ri   r   rk   rv   ra   r"   r    rI   rI   E   s        %( %( %( %(N   [                :4 4 4l  4( ( (\ a5 a5 a5 a5F& & &  "A A A A Ar"   rI   )r#   )#
__future__r   r   r   r   r7   r   r   r   r   rU   collectionsr   rM   r   r   r	   r
   r   r   stripe.multipart_data_generatorr   stripe.six.moves.urllib.parser   r   r   stripe.stripe_responser   r   r!   r,   r6   rG   objectrI   ra   r"   r    <module>r      s~   @ @ @ @ @ @ @ @ @ @        # # # # # #  F F F F F F F F F F F F F F F F B B B B B B I I I I I I I I I I G G G G G G G G     * * *2? ? ?_A _A _A _A _A6 _A _A _A _A _Ar"   