a
    xd$/                     @   sp   d dl mZmZm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 dd Zdd ZG d	d
 d
eZdS )    )absolute_importdivisionprint_functionN)deepcopy)api_requestorutilsixc                 C   sT   t | trD|pi }|  }t| t|  D ]}d||< q2|S | d urP| S dS )N )
isinstancedictcopysetkeys)currentpreviousdiffkey r   L/var/www/html/Ranjet/env/lib/python3.9/site-packages/stripe/stripe_object.py_compute_diff   s    

r   c                 C   sr   | pg } |pg }i }t | D ]P\}}t||kr8|| nd }t|drZ|||t|< qt|||t|< q|S )N	serialize)	enumeratelenhasattrr   strr   )arrayr   paramsivZprevious_itemr   r   r   _serialize_list   s    
r   c                       s$  e Zd ZG dd dejZd5 fdd	Zedd Z fdd	Z	 fd
dZ
dd Z fddZ fddZ fddZ fddZdd Zdd Zed6ddZd7 fdd	Zedd  Zd8d!d"Zd9d#d$Zd%d& Zd'd( Zd)d* Zd+d, Zed-d. Zd/d0 Z fd1d2Z fd3d4Z  Z S ):StripeObjectc                       s   e Zd Z fddZ  ZS )zStripeObject.ReprJSONEncoderc                    s(   t |tjrt|S ttj| |S N)r
   datetimer   Z_encode_datetimesuperr    ReprJSONEncoderdefault)selfobj	__class__r   r   r%   &   s    
z$StripeObject.ReprJSONEncoder.default)__name__
__module____qualname__r%   __classcell__r   r   r(   r   r$   %   s   r$   Nc                    sj   t t|   t | _t | _|| _|| _d | _t	
| d| t	
| d| t	
| d| |rf|| d< d S )Napi_keystripe_versionstripe_accountid)r#   r    __init__r   _unsaved_values_transient_values_last_response_retrieve_params	_previousobject__setattr__)r&   r1   r.   r/   r0   last_responser   r(   r   r   r2   +   s    	zStripeObject.__init__c                 C   s   | j S r!   )r5   r&   r   r   r   r:   D   s    zStripeObject.last_responsec                    s&   |D ]}| j | qtt| |S r!   )r3   addr#   r    update)r&   Zupdate_dictkr(   r   r   r=   H   s    zStripeObject.updatec                    s4   |d dks|| j v r(tt| ||S || |< d S Nr   _)__dict__r#   r    r9   r&   r>   r   r(   r   r   r9   N   s    zStripeObject.__setattr__c              
   C   sR   |d dkrt |z
| | W S  tyL } zt |j W Y d }~n
d }~0 0 d S r?   )AttributeErrorKeyErrorargsr&   r>   errr   r   r   __getattr__U   s    
zStripeObject.__getattr__c                    s0   |d dks|| j v r&tt| |S | |= d S r?   )rA   r#   r    __delattr__r&   r>   r(   r   r   rI   ^   s    zStripeObject.__delattr__c                    sT   |dkr t d|t| ||f t| ds2t | _| j| tt| || d S )Nr	   a:  You cannot set %s to an empty string on this object. The empty string is treated specially in our requests. If you'd like to delete the property using the save() method on this object, you may set %s.%s = None. Alternatively, you can pass %s='' to delete the property when using a resource method such as modify().r3   )	
ValueErrorr   r   r   r3   r<   r#   r    __setitem__rB   r(   r   r   rL   d   s    	
zStripeObject.__setitem__c                    sl   zt t| |W S  tyf } z<|| jv rNtd||dt|  f n|W Y d }~n
d }~0 0 d S )Nz%r.  HINT: The %r attribute was set in the past.It was then wiped when refreshing the object with the result returned by Stripe's API, probably as a result of a save().  The attributes currently available on this object are: %sz, )r#   r    __getitem__rD   r4   joinlistr   rF   r(   r   r   rM   v   s    
	zStripeObject.__getitem__c                    s4   t t| | t| dr0|| jv r0| j| d S )Nr3   )r#   r    __delitem__r   r3   removerJ   r(   r   r   rP      s    zStripeObject.__delitem__c                 C   s   |  | d S r!   )r=   )r&   stater   r   r   __setstate__   s    zStripeObject.__setstate__c                 C   s,   t | | dd | j| j| jft| f}|S )Nr1   )typegetr.   r/   r0   r   )r&   Zreduce_valuer   r   r   
__reduce__   s    

zStripeObject.__reduce__c                 C   s0   | | d||||d}|j|||||d |S )Nr1   )r.   r/   r0   r:   )rU   refresh_from)clsvaluesr   r/   r0   r:   instancer   r   r   construct_from   s    	zStripeObject.construct_fromFc           
   
      s   |pt |dd | _|p t |dd | _|p2t |dd | _|pDt |dd | _|r^| jt| | _n0t|  t| }| j|B | _t | _| 	  | jt| | _t
|D ]&\}}	tt| |t|	||| q|| _d S )Nr.   r/   r0   r5   )getattrr.   r/   r0   r5   r3   r   r   r4   clearr   	iteritemsr#   r    rL   r   convert_to_stripe_objectr7   )
r&   rY   r.   partialr/   r0   r:   removedr>   r   r(   r   r   rW      s2    	
zStripeObject.refresh_fromc                 C   s   d S r!   r   )rX   r   r   r   api_base   s    zStripeObject.api_basec                 C   sR   |d u r| j }tj| j|  | j| jd}|||||\}}t	||| j| jS N)r   rb   api_versionaccount)
r6   r   APIRequestorr.   rb   r/   r0   requestr   r_   )r&   methodurlr   headers	requestorresponser.   r   r   r   rg      s    zStripeObject.requestc                 C   sB   |d u r| j }tj| j|  | j| jd}|||||\}}|S rc   )r6   r   rf   r.   rb   r/   r0   request_stream)r&   rh   ri   r   rj   rk   rl   r@   r   r   r   rm      s    zStripeObject.request_streamc                 C   s   t | jg}t| dtjr.|| d t| dtjrV|d| df  dd|tt	| t
| f }tjr|dS |S d S )Nr8   r1   zid=%sz<%s at %s> JSON: %s zutf-8)rT   r*   r
   rU   r   string_typesappendrN   hexr1   r   PY2encode)r&   Zident_partsZunicode_reprr   r   r   __repr__  s    

zStripeObject.__repr__c                 C   s   t j|  dd| jdS )NT   )	sort_keysindentrX   )jsondumpsto_dict_recursiver$   r;   r   r   r   __str__  s    zStripeObject.__str__c                 C   s   t | S r!   )r   r;   r   r   r   to_dict#  s    zStripeObject.to_dictc                    s$   dd   fddt t| D S )Nc                 S   s&   | d u rd S t | tr|  S | S d S r!   )r
   r    rz   )valuer   r   r   maybe_to_dict_recursive'  s
    
z?StripeObject.to_dict_recursive.<locals>.maybe_to_dict_recursivec                    s2   i | ]*\}}|t |tr&tt |n |qS r   )r
   rO   map).0r   r}   r~   r   r   
<dictcomp>/  s
   z2StripeObject.to_dict_recursive.<locals>.<dictcomp>)r   r^   r   r;   r   r   r   rz   &  s    
zStripeObject.to_dict_recursivec                 C   s   | j S r!   )r1   r;   r   r   r   	stripe_id6  s    zStripeObject.stripe_idc                 C   s   i }| j pt }|p| jpi }t| D ]\}}|dks(t|trP|drPq(q(t|tj	j
jrdq(q(t|dr|||d }|i kr|||< q(||v rt|||d ||< q(|dkr(|d ur(t|||d ||< q(|S )Nr1   r@   r   Zadditional_owners)r3   r   r7   r   r^   r
   r   
startswithstripeZapi_resourcesZabstractZAPIResourcer   r   rU   r   r   )r&   r   r   Zunsaved_keysr>   r   childr   r   r   r   :  s"    

zStripeObject.serializec                    sN   t | d| j| j| jd}| j|_t| D ]\}}tt |	|| q.|S )Nr1   )r/   r0   )
r    rU   r.   r/   r0   r6   r   r^   r#   rL   )r&   copiedr>   r   r(   r   r   __copy__T  s    zStripeObject.__copy__c                    sD   |   }||t| < t| D ] \}}tt||t|| q|S r!   )r   r1   r   r^   r#   r    rL   r   )r&   memor   r>   r   r(   r   r   __deepcopy__j  s
    zStripeObject.__deepcopy__)NNNNN)NNN)NFNNN)NN)NN)!r*   r+   r,   rx   JSONEncoderr$   r2   propertyr:   r=   r9   rH   rI   rL   rM   rP   rS   rV   classmethodr[   rW   rb   rg   rm   rt   r{   r|   rz   r   r   r   r   r-   r   r   r(   r   r    $   sT        
	
        +



r    )
__future__r   r   r   r"   rx   r   r   r   r   r   r   r   r   r   r    r   r   r   r   <module>   s   
