a
    !f.                     @   s8  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mZ d dlmZmZmZmZmZmZmZmZmZ d dlmZ d dlZerd dlmZ ejdZe dZ!ej"e#d	< g d
Z$e%edrej&Z&n<es0edZ'e(dde)eee*  e+ee'ge'f dddZ&dd Z,dd Z-dd Z.dd Z/dd Z0dd Z1dd Z2e%edr~d d! Z3nd"d! Z3d#d$ Z4eeee)ef ed% f Z5ed=eeee)ef f ee) ee) ee) eee)ef  eed&  d&d'd(d)Z6ed>ee5 ee) ee) ee) eee)ef  eed&  ed& d'd*d)Z6d?e5ee) ee) ee) eee)ef  eed&  ed&ed& f d'd+d)Z6d,d- Z7ee)ee)e)f d.d/d0Z8eddd.d1d0Z8ee)df eee)e)f df d.d2d0Z8ed3Z9eee)ef  e)e9ee9 d4d5d6Z:d7d8 Z;d9d: Z<G d;d< d<e=Z>dS )@    N)	parse_qsl
quote_plus)TypeTYPE_CHECKING)	CallableTypeVarUnionoverloadDictListcastAnyOptional)StripeResponse)StripeObject
STRIPE_LOGstripelogger)ior   log_info	log_debugdashboard_linklogfmt
deprecatedr   _T   category
stacklevel)__msgr   r   returnc                   s   t t d fdd}|S )N)__argr    c                    s   d u r _  S t trf j jtjutfdd}t| _  _ |_  S t	 rt  fdd}  _ |_ |S t
d d S )Nc                    s^   t j d d tjur4| g|R i |S sR|s@|rRt| j dn| S d S )Nr   r   z() takes no arguments)warningswarnobject__new__	TypeError__name__)clsargskwargs)r   r   has_initoriginal_newr    L/var/www/html/python-backend/venv/lib/python3.9/site-packages/stripe/util.pyr%   F   s    

z.deprecated.<locals>.decorator.<locals>.__new__c                     s"   t jd d  | i |S )Nr   r   )r"   r#   )r)   r*   )r!   r   r   r   r-   r.   wrapperX   s    
z.deprecated.<locals>.decorator.<locals>.wrapperzY@deprecated decorator with non-None category must be applied to a class or callable, not )Z__deprecated__
isinstancetyper%   __init__r$   	functoolswrapsstaticmethodcallabler&   )r!   r%   r/   r   r   r   )r!   r+   r,   r.   	decorator>   s*    

zdeprecated.<locals>.decorator)r   )r   r   r   r8   r-   r7   r.   r   8   s    )c                   C   s   dt jv odt jddv S )NAPPENGINE_RUNTIMEZDevSERVER_SOFTWARE )osenvirongetr-   r-   r-   r.   is_appengine_devj   s    r?   c                   C   s$   t jdv rt jS tdv rtS d S d S )Ndebuginfo)r   logr   r-   r-   r-   r.   _console_log_levelp   s
    
rD   c                 K   s<   t tf d| i|}t dkr.t|tjd t| d S )NmessagerA   file)r   dictrD   printsysstderrr   rA   rE   paramsmsgr-   r-   r.   r   y   s    
r   c                 K   s<   t tf d| i|}t dv r.t|tjd t| d S )NrE   r@   rF   )r   rH   rD   rI   rJ   rK   r   rB   rL   r-   r-   r.   r      s    
r   c                  C   s4   t jd u rd S tdt j} | d u r(d S |  d S )Nzsk_(live|test)_r   )r   api_keyrematchgroups)rQ   r-   r-   r.   _test_or_live_environment   s    
rS   c                 C   s   dj t pd| dS )Nz/https://dashboard.stripe.com/{env}/logs/{reqid}test)envZreqid)formatrS   )Z
request_idr-   r-   r.   r      s    
r   c                    s(   dd  d  fddt|  D S )Nc                 S   s\   t |dr|d}t|ts&t|}td|r:t|}td| rNt| } dj| |dS )Ndecodezutf-8z\sz{key}={val}keyval)hasattrrW   r0   strrP   searchreprrV   rX   r-   r-   r.   fmt   s    


zlogfmt.<locals>.fmt c                    s   g | ]\}} ||qS r-   r-   ).0rY   rZ   r_   r-   r.   
<listcomp>       zlogfmt.<locals>.<listcomp>)joinsorteditems)propsr-   rb   r.   r      s    r   compare_digestc                 C   s   t | |S N)hmacri   )val1val2r-   r-   r.   secure_compare   s    rn   c                 C   s   t | t |krdS d}t| trNt|trNt| |D ]\}}|||A O }q6n4t| |D ](\}}|ttt|ttt|A O }qX|dkS )a[  
        Returns True if the two strings are equal, False otherwise.
        The time taken is independent of the number of characters that match.
        For the sake of simplicity, this function executes in constant time
        only when the two strings have the same length. It short-circuits when
        they have different lengths.
        Fr   )lenr0   byteszipordr   r\   )rl   rm   resultxyr-   r-   r.   rn      s    "c                  C   s   ddl m}  | S )Nr   OBJECT_CLASSES)Zstripe.object_classesrw   rv   r-   r-   r.   get_object_classes   s    rx   Respr   )resprO   stripe_versionstripe_accountrM   klass_r    c                 C   s   d S rj   r-   rz   rO   r{   r|   rM   r}   r-   r-   r.   convert_to_stripe_object   s    	r   c                 C   s   d S rj   r-   r~   r-   r-   r.   r      s    	c           
         s   d }t | tjjr"| }tt|j} t | trD fdd| D S t | trt | tj	j
s|  } | d}t |trt |tj	j
}nd ur}ntj	j
}|j|  |d}	|d urt|	drt|	ddkst|	ddkr||	_|	S td| S d S )Nc              	      s$   g | ]}t td | dqS )z%Union[StripeResponse, Dict[str, Any]])r}   )r   r   ra   irO   r}   r|   r{   r-   r.   rc      s   z,convert_to_stripe_object.<locals>.<listcomp>r$   )r{   r|   Zlast_responselistZsearch_resultr   )r0   r   stripe_responser   r   ry   datar   rH   Zstripe_objectr   copyr>   r\   rx   Zconstruct_fromr[   getattrZ_retrieve_params)
rz   rO   r{   r|   rM   r}   r   
klass_nameklassobjr-   r   r.   r      sL    



c                 C   s<   t | trdd | D S t | tr4dd |  D S | S dS )zConverts a StripeObject back to a regular dict.

    Nested StripeObjects are also converted back to regular dicts.

    :param obj: The StripeObject to convert.

    :returns: The StripeObject as a dict.
    c                 S   s   g | ]}t |qS r-   convert_to_dictr   r-   r-   r.   rc   7  rd   z#convert_to_dict.<locals>.<listcomp>c                 S   s   i | ]\}}|t |qS r-   r   )ra   kvr-   r-   r.   
<dictcomp><  rd   z#convert_to_dict.<locals>.<dictcomp>N)r0   r   rH   rg   )r   r-   r-   r.   r   -  s
    	

r   )idempotency_keyr    c                 C   s   d S rj   r-   r   r-   r-   r.   populate_headersA  s    r   c                 C   s   d S rj   r-   r   r-   r-   r.   r   H  s    c                 C   s   | d urd| iS d S )NzIdempotency-Keyr-   r   r-   r-   r.   r   M  s    T)rM   key_namedefault_valuer    c                 C   s6   |}d }| d ur&|| v r&| | }| |= |d u r2|}|S rj   r-   )rM   r   r   valueZparams_valuer-   r-   r.   read_special_variableX  s    r   c                 C   s   |   }|| |S rj   )r   update)rt   ru   zr-   r-   r.   merge_dictsh  s    
r   c                 C   s   t | }|S rj   )r   )idZquotedIdr-   r-   r.   sanitize_idn  s    r   c                   @   sN   e Zd ZU dd ZedZeed< eedddZde	e
e  d	d
dZdS )class_method_variantc                 C   s
   || _ d S rj   )class_method_name)selfr   r-   r-   r.   r2   t  s    zclass_method_variant.__init__r   method)r   r    c                 C   s   || _ tt| S rj   )r   r   r   )r   r   r-   r-   r.   __call__{  s    zclass_method_variant.__call__N)objtypec                    s    t j fdd}|S )Nc                     s    d ur j  g| R i |S t| dkrfd urft| d rfj | d g| dd  R i |S tj}|| i |S d S )Nr   r   )r   ro   r0   r   r   )r)   r*   class_methodr   r   r   r-   r.   _wrapper  s    
$z.class_method_variant.__get__.<locals>._wrapper)r3   r4   r   )r   r   r   r   r-   r   r.   __get__  s    
zclass_method_variant.__get__)N)r'   
__module____qualname__r2   r   r   r   __annotations__r   r   r   r   r-   r-   r-   r.   r   s  s
   
r   )NNNNN)NNNNN)NNNNN)?r3   rk   r   loggingrJ   r<   rP   r"   r   urllib.parser   r   Ztyping_extensionsr   r   typingr   r   r   r	   r
   r   r   r   r   Zstripe.stripe_responser   Zstripe.stripe_objectr   r=   r>   r   	getLoggerr   Loggerr   __all__r[   r   r   DeprecationWarningr\   Warningintr?   rD   r   r   rS   r   r   rn   rx   ry   r   r   r   r   r   r   r   r$   r   r-   r-   r-   r.   <module>   s   
,



2		
     
     
     
D

