o
    ˷e_4                     @   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r"|pi }|  }t| t|  D ]}d||< q|S | d ur(| S dS )N )
isinstancedictcopysetkeys)currentpreviousdiffkey r   K/var/www/ideatree/venv/lib/python3.10/site-packages/stripe/stripe_object.py_compute_diff   s   

r   c                 C   sr   | pg } |pg }i }t | D ](\}}t||kr|| nd }t|dr-|||t|< qt|||t|< q|S )N	serialize)	enumeratelenhasattrr   strr   )arrayr   paramsivprevious_itemr   r   r   _serialize_list   s   
r    c                       sT  e Zd ZG dd dejZ					d7 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			d8ddZ					d9 fdd	Zedd  Zd:d!d"Z						d;d#d$Zd:d%d&Zd'd( Zd)d* Zd+d, Zd-d. Zed/d0 Zd1d2 Z fd3d4Z fd5d6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   _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                    sn   t t|   t | _t | _|| _|| _d | _t	
| d| t	
| d| t	
| d| |r5|| d< d S 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(   r3   r0   r1   r2   last_responser   r*   r   r   r4   +   s   	zStripeObject.__init__c                 C      | j S r"   )r7   r(   r   r   r   r<   D      zStripeObject.last_responsec                    s&   |D ]}| j | qtt| |S r"   )r5   addr%   r!   update)r(   update_dictkr*   r   r   rA   H   s   zStripeObject.updatec                    s4   |d dks|| j v rtt| ||S || |< d S Nr   _)__dict__r%   r!   r;   r(   rC   r   r*   r   r   r;   N   s   zStripeObject.__setattr__c              
   C   sB   |d dkr
t |z| | W S  ty  } zt |j d }~ww rD   )AttributeErrorKeyErrorargsr(   rC   errr   r   r   __getattr__U   s   

zStripeObject.__getattr__c                    s0   |d dks|| j v rtt| |S | |= d S rD   )rF   r%   r!   __delattr__r(   rC   r*   r   r   rN   ^   s   
zStripeObject.__delattr__c                    sT   |dkrt d|t| ||f t| dst | _| j| tt| || d S )Nr	   a8  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().r5   )	
ValueErrorr   r   r   r5   r@   r%   r!   __setitem__rG   r*   r   r   rQ   d   s   
	zStripeObject.__setitem__c                    sZ   z	t t| |W S  ty, } z|| jv r&td||dt|  f |d }~ww )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__rI   r6   joinlistr   rK   r*   r   r   rR   v   s   
	zStripeObject.__getitem__c                    s<   t t| | t| dr|| jv r| j| d S d S d S )Nr5   )r%   r!   __delitem__r   r5   removerO   r*   r   r   rU      s   zStripeObject.__delitem__c                 C   s   |  | d S r"   )rA   )r(   stater   r   r   __setstate__   s   zStripeObject.__setstate__c                 C   s,   t | | dd | j| j| jft| f}|S )Nr3   )typegetr0   r1   r2   r   )r(   reduce_valuer   r   r   
__reduce__   s   

zStripeObject.__reduce__c                 C   s0   | | d||||d}|j|||||d |S )Nr3   )r0   r1   r2   r<   )rZ   refresh_from)clsvaluesr   r1   r2   r<   instancer   r   r   construct_from   s   	zStripeObject.construct_fromFc           
   
      s   |pt |dd | _|pt |dd | _|pt |dd | _|p"t |dd | _|r/| jt| | _nt|  t| }| j|B | _t | _| 	  | jt| | _t
|D ]\}}	tt| |t|	||| qT|| _d S )Nr0   r1   r2   r7   )getattrr0   r1   r2   r7   r5   r   r   r6   clearr   	iteritemsr%   r!   rQ   r   convert_to_stripe_objectr9   )
r(   r_   r0   partialr1   r2   r<   removedrC   r   r*   r   r   r]      s2   	

zStripeObject.refresh_fromc                 C   s   d S r"   r   )r^   r   r   r   api_base   s   zStripeObject.api_basec                 C   s   t j| ||||dS )N)headersr   )r!   _request)r(   methodurlr   ri   r   r   r   request   s   
zStripeObject.requestc	                 C   s   |d u rd n|  }t|d|}t|d|}t|d|}t|d|}t|d|}|p1| j}|p6| j}|p;| j}|p@| j}tj|| 	 ||d}	|d urb|d u rVi n|  }|
t| |	||||\}
}t|
||||S )Nr0   idempotency_keyr1   r2   ri   r   rh   api_versionaccount)r   r   read_special_variabler2   r1   r0   r8   r   APIRequestorrh   rA   populate_headersrm   re   )r(   method_url_r0   rn   r1   r2   ri   r   	requestorresponser   r   r   rj      s:   




zStripeObject._requestc                 C   sB   |d u r| j }tj| j|  | j| jd}|||||\}}|S )Nro   )r8   r   rs   r0   rh   r1   r2   request_stream)r(   rk   rl   r   ri   rw   rx   rE   r   r   r   ry      s   zStripeObject.request_streamc                 C   s   t | jg}t| dtjr|| d t| dtjr+|d| df  dd|tt	| t
| f }tjrC|dS |S )Nr:   r3   zid=%sz<%s at %s> JSON: %s zutf-8)rY   r,   r
   rZ   r   string_typesappendrS   hexr3   r   PY2encode)r(   ident_partsunicode_reprr   r   r   __repr__-  s   

zStripeObject.__repr__c                 C   s   t j|  dd| jdS )NT   )	sort_keysindentr^   )jsondumpsto_dict_recursiver&   r>   r   r   r   __str__A  s   zStripeObject.__str__c                 C   s   t | S r"   )r   r>   r   r   r   to_dictI  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 r"   )r
   r!   r   )valuer   r   r   maybe_to_dict_recursiveM  s
   
z?StripeObject.to_dict_recursive.<locals>.maybe_to_dict_recursivec                    s2   i | ]\}}|t |trtt |n |qS r   )r
   rT   map).0r   r   r   r   r   
<dictcomp>U  s    z2StripeObject.to_dict_recursive.<locals>.<dictcomp>)r   rd   r   r>   r   r   r   r   L  s   
zStripeObject.to_dict_recursivec                 C   r=   r"   )r3   r>   r   r   r   	stripe_id\  r?   zStripeObject.stripe_idc                 C   s   i }| j pt }|p| jpi }t| D ]V\}}|dks&t|tr'|dr'qt|tj	j
jr0qt|drG|||d }|i krF|||< q||v rWt|||d ||< q|dkrj|d urjt|||d ||< q|S )Nr3   rE   r   additional_owners)r5   r   r9   r   rd   r
   r   
startswithstripeapi_resourcesabstractAPIResourcer   r   rZ   r   r    )r(   r   r   unsaved_keysrC   r   childr   r   r   r   `  s&   
zStripeObject.serializec                    sN   t | d| j| j| jd}| j|_t| D ]\}}tt |	|| q|S )Nr3   )r1   r2   )
r!   rZ   r0   r1   r2   r8   r   rd   r%   rQ   )r(   copiedrC   r   r*   r   r   __copy__z  s   zStripeObject.__copy__c                    sD   |   }||t| < t| D ]\}}tt||t|| q|S r"   )r   r3   r   rd   r%   r!   rQ   r   )r(   memor   rC   r   r*   r   r   __deepcopy__  s
   zStripeObject.__deepcopy__)NNNNN)NNN)NFNNN)NN)NNNNNN)"r,   r-   r.   r   JSONEncoderr&   r4   propertyr<   rA   r;   rM   rN   rQ   rR   rU   rX   r\   classmethodra   r]   rh   rm   rj   ry   r   r   r   r   r   r   r   r   r/   r   r   r*   r   r!   $   sd    
	
+



.
r!   )
__future__r   r   r   r#   r   r   r   r   r   r   r   r   r    r   r!   r   r   r   r   <module>   s    
