o
    ˷es                     @   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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rqdd Zndd Zdd Z 	d,ddZ!d d! Z"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
quote_plus
STRIPE_LOGstripe)ior   utf8log_info	log_debugdashboard_linklogfmtc                 C   s    t jrt| t jr| dS | S )Nutf-8)r   PY2
isinstance	text_typeencode)value r   B/var/www/ideatree/venv/lib/python3.10/site-packages/stripe/util.pyr      s   
r   c                   C   s   dt jv odt jddv S )NAPPENGINE_RUNTIME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 )Ndebuginfo)r	   logr   r   r   r   r   _console_log_level+   s
   
r$   c                 K   s<   t tdd| i|}t dkrt|tjd t| d S )Nmessager!   filer   )r   dictr$   printsysstderrloggerr!   r%   paramsmsgr   r   r   r   4      
r   c                 K   s<   t td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   r   ;   r0   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)r3   r   r   r   _test_or_live_environmentB   s   
r5   c                 C   s   dj t pd| dS )Nz/https://dashboard.stripe.com/{env}/logs/{reqid}test)envreqid)formatr5   )
request_idr   r   r   r   K   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st |}td|r"t	|}td| r,t	| } dj
| |dS )Ndecoder   z\sz{key}={val}keyval)r   PY3hasattrr;   r   string_typesr   r2   searchreprr9   r<   r   r   r   fmtR   s   

zlogfmt.<locals>.fmt c                    s   g | ]	\}} ||qS r   r   ).0r=   r>   rD   r   r   
<listcomp>c       zlogfmt.<locals>.<listcomp>)joinsorteditems)propsr   rG   r   r   Q   s    r   compare_digestc                 C   s   t t| t|S N)hmacrN   r   )val1val2r   r   r   secure_comparei   s   rS   c                 C   s   t | t |} }t| t|krdS d}tjr6t| tr6t|tr6t| |D ]
\}}|||A O }q'|dkS t| |D ]\}}|t|t|A O }q;|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)rQ   rR   resultxyr   r   r   rS   n   s   c                  C   s   ddl m}  | S )Nr   OBJECT_CLASSES)stripe.object_classesr\   r[   r   r   r   get_object_classes   s   r^   c           	         s   d }t | tjjr| }|j} t | tr fdd| D S t | trit | tjjsi| 	 } | 
d}t |tjrCt 
|tjj}ntjj}|j|  |d}|d urgt|drg|jdksd|jdkrg||_|S | S )Nc                    s   g | ]	}t | qS r   )convert_to_stripe_objectrF   ir1   stripe_accountstripe_versionr   r   rH      s    z,convert_to_stripe_object.<locals>.<listcomp>object)rd   rc   last_responselistsearch_result)r   r	   stripe_responseStripeResponsedatarg   r(   stripe_objectStripeObjectcopyr   r   rA   r^   construct_fromr@   re   _retrieve_params)	respr1   rd   rc   r.   ri   
klass_nameklassobjr   rb   r   r_      s@   

r_   c                 C   s:   t | trdd | D S t | trdd t| D S | 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   rH      s    z#convert_to_dict.<locals>.<listcomp>c                 S   s   i | ]	\}}|t |qS r   ru   )rF   kvr   r   r   
<dictcomp>   rI   z#convert_to_dict.<locals>.<dictcomp>)r   rg   r(   r   	iteritems)rt   r   r   r   rv      s
   
	
rv   c                 C   s   | d urd| iS d S )NzIdempotency-Keyr   )idempotency_keyr   r   r   populate_headers      r|   c                 C   s6   |}d }| d ur|| v r| | }| |= |d u r|}|S rO   r   )r.   key_namedefault_valuer   params_valuer   r   r   read_special_variable   s   r   c                 C   s   |   }|| |S rO   )rn   update)rY   rZ   zr   r   r   merge_dicts   s   
r   c                 C   s   t | }t|}|S rO   )r   r   )idutf8idquotedIdr   r   r   sanitize_id   r}   r   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 rO   )class_method_name)selfr   r   r   r   __init__   s   
zclass_method_variant.__init__c                 C   s
   || _ | S rO   )method)r   r   r   r   r   __call__   s   zclass_method_variant.__call__Nc                    s    t j fdd}|S )Nc                     sx    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 )Nr      )r   rT   r   getattrr   )argskwargsclass_methodrt   objtyper   r   r   _wrapper   s   $z.class_method_variant.__get__.<locals>._wrapper)	functoolswrapsr   )r   rt   r   r   r   r   r   __get__   s   
zclass_method_variant.__get__rO   )__name__
__module____qualname__r   r   r   r   r   r   r   r      s    r   )NNNN))
__future__r   r   r   r   rP   r
   loggingr*   r   r2   r	   r   stripe.six.moves.urllib.parser   r   r   r   r   	getLoggerr,   __all__r   r   r$   r   r   r5   r   r   r@   rS   r^   r_   rv   r|   r   r   r   re   r   r   r   r   r   <module>   sD    
		


6