a
    xd                     @   s$  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Zd dlmZ d dlmZ e	jdZedZg dZdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zdd Zeedrdd Zndd Zdd Zd(ddZ d d! Z!d"d# Z"d$d% Z#G d&d' d'e$Z%dS ))    )absolute_importdivisionprint_functionN)six)	parse_qsl
STRIPE_LOGstripe)ior   utf8log_info	log_debugdashboard_linklogfmtc                 C   s$   t jrt| t jr| dS | S d S )Nutf-8)r   PY2
isinstance	text_typeencode)value r   C/var/www/html/Ranjet/env/lib/python3.9/site-packages/stripe/util.pyr
      s    
r
   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_dev&   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_level,   s
    
r"   c                 K   s<   t tf d| i|}t dkr.t|tjd t| d S )Nmessager   file)r   dictr"   printsysstderrloggerr   r#   paramsmsgr   r   r   r   5   s    
r   c                 K   s<   t tf d| i|}t dv r.t|tjd t| d S )Nr#   r   r$   )r   r&   r"   r'   r(   r)   r*   r    r+   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)r0   r   r   r   _test_or_live_environmentC   s    
r2   c                 C   s   dj t pd| dS )Nz/https://dashboard.stripe.com/{env}/logs/{reqid}test)envZreqid)formatr2   )Z
request_idr   r   r   r   L   s    
r   c                    s(   dd  d  fddt|  D S )Nc                 S   sf   t jrt|dr|d}t|t js0t |}td|rDt	|}td| rXt	| } dj
| |dS )Ndecoder   z\sz{key}={val}keyval)r   PY3hasattrr6   r   string_typesr   r/   searchreprr5   r7   r   r   r   fmtS   s    

zlogfmt.<locals>.fmt c                    s   g | ]\}} ||qS r   r   ).0r8   r9   r?   r   r   
<listcomp>d       zlogfmt.<locals>.<listcomp>)joinsorteditems)propsr   rB   r   r   R   s    r   compare_digestc                 C   s   t t| t|S N)hmacrI   r
   )val1val2r   r   r   secure_comparej   s    rN   c                 C   s   t | t | } }t| t|kr&dS d}tjrft| trft|trft| |D ]\}}|||A O }qNn(t| |D ]\}}|t|t|A O }qp|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   )r
   lenr   r:   r   byteszipord)rL   rM   resultxyr   r   r   rN   p   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   c                    s   d }t | tjjr| }|j} t | tr< fdd| D S t | trt | tjjs| 	 } | 
d}t |tjrt 
|tjj}ntjj}|j|  |dS | S d S )Nc                    s   g | ]}t | qS r   )convert_to_stripe_objectrA   ir.   stripe_accountstripe_versionr   r   rC      s   z,convert_to_stripe_object.<locals>.<listcomp>object)r^   r]   Zlast_response)r   r   stripe_responseZStripeResponsedatalistr&   Zstripe_objectZStripeObjectcopyr   r   r<   rX   Zconstruct_from)respr.   r^   r]   r`   
klass_nameklassr   r\   r   rY      s4    

rY   c                 C   s>   t | trdd | D S t | tr6dd t| 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_dictrZ   r   r   r   rC      rD   z#convert_to_dict.<locals>.<listcomp>c                 S   s   i | ]\}}|t |qS r   rg   )rA   kvr   r   r   
<dictcomp>   rD   z#convert_to_dict.<locals>.<dictcomp>N)r   rb   r&   r   	iteritems)objr   r   r   rh      s
    	

rh   c                 C   s   | d urd| iS d S )NzIdempotency-Keyr   )Zidempotency_keyr   r   r   populate_headers   s    rn   c                 C   s   |   }|| |S rJ   )rc   update)rT   rU   zr   r   r   merge_dicts   s    
rq   c                   @   s&   e Zd Zdd Zdd ZdddZdS )	class_method_variantc                 C   s
   || _ d S rJ   )class_method_name)selfrs   r   r   r   __init__   s    zclass_method_variant.__init__c                 C   s
   || _ | S rJ   )method)rt   rv   r   r   r   __call__   s    zclass_method_variant.__call__Nc                    s    t j fdd}|S )Nc                     s|    d ur j  g| R i |S t| dkr^t| d r^j | d g| dd  R i |S tj}|| i |S d S )Nr      )rv   rO   r   getattrrs   )argskwargsclass_methodrm   objtypert   r   r   _wrapper   s    $z.class_method_variant.__get__.<locals>._wrapper)	functoolswrapsrv   )rt   rm   r~   r   r   r}   r   __get__   s    
zclass_method_variant.__get__)N)__name__
__module____qualname__ru   rw   r   r   r   r   r   rr      s   rr   )NNN)&
__future__r   r   r   r   rK   r	   loggingr(   r   r/   r   r   Zstripe.six.moves.urllib.parser   r   r   r   	getLoggerr*   __all__r
   r   r"   r   r   r2   r   r   r;   rN   rX   rY   rh   rn   rq   r_   rr   r   r   r   r   <module>   s>   
		

 
*