o
    L)jY                  	   @   s  d dl Z d dlmZ d dlmZmZmZ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mZmZmZmZ d dlZd dlmZ d dlmZmZmZ d dlmZmZm Z  d dl!m"Z"m#Z# d d	l$m%Z% d d
l&m'Z' erpd dl(m)Z) edee*e
f deee*e
f  dee*e
f fddZ+ede,deee*e
f  de,fddZ+de,deee*e
f  de,fddZ+deee
  dee
 dee*e
f fddZ-G dd dZ.edZ/G dd de.ee/ Z0dS )    N)deepcopy)TYPE_CHECKINGTypeLiteralSelf
deprecated)AnyDictGenericListOptionalMappingSetTupleClassVarTypeVarUnioncastoverload)_util)StripeResponseStripeStreamResponseStripeStreamResponseAsync)_coerce_int64_string_coerce_decimal_string_make_suitable_for_json)PERSISTENT_OPTIONS_KEYSextract_options_from_dict)ApiMode)BaseAddress_APIRequestorcurrentpreviousreturnc                 C      d S N r"   r#   r'   r'   z/var/www/html/finance-dev.cargoinsureonline.com/_shared/backend-venv/lib/python3.10/site-packages/stripe/_stripe_object.py_compute_diff.      r*   c                 C   r%   r&   r'   r(   r'   r'   r)   r*   4   r+   c                 C   sf   t | tr+ttttf | } |pi }|  }t| t|  D ]}d||< q"|S | d ur1| S dS )N )	
isinstancedictr   r	   strr   copysetkeys)r"   r#   diffkeyr'   r'   r)   r*   :   s   

arrayc                 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hasattrr6   r/   r*   )r5   r#   paramsivprevious_itemr'   r'   r)   _serialize_listG   s   
r>   c                       s  e Zd ZU eeef ed< eeeef  ed< 					dxdddee dee dee dee d	ee d
ed defddZ	e
dd Ze
dd Ze
dd Ze
dee fddZdeeef ddfddZes{ fddZdd Z fdd Zd!ed"eddfd#d$Zd!edefd%d&Zd!eddfd'd(Zd!edefd)d*Zd+edefd,d-Zd.eeef ddfd/d0Zdeed1f fd2d3Ze			dyd4d5d6eeef d7ee dee dee d	ee d8e de!fd9d:Z"edd;d6d<d	ee d=dd8e de!f
d>d?Z#		@			dzd4d5d6eeef dee dAee dee dee d	ee d8e ddfdBdCZ$d@dddDd6d<dAee d	ee d=ed d8e ddfdEdFZ%e&dG	d{dHdIdJe'dK dLedeeeef  dMe(dd f
dNdOZ)		d|dJe'dK dLedeeeef  dPee*e  dMe(dd fdQdRZ+		d|dJe'dK dLedeeeef  dPee*e  dMe(dd fdSdTZ,	d{dHdIdJedLedeeeef  dMe(de-f
dUdVZ.	d{dHdIdJedLedeeeef  dMe(de/f
dWdXZ0defdYdZZ1defd[d\Z2	@d}d^ed_edeeef fd`daZ3d~d_edeeef fdbdcZ4ddeeeef  deeef fdedfZ5ddgdhZ6diee7ef dd fdjdkZ8i Z9e:eeef  edl< i Z;e:eee<d  f  edm< g Z=e:e*e  edn< i Z>e:eeef  edo< dpedee<d   fdqdrZ?dpefdsdtZ@dpeduedefdvdwZA  ZBS )StripeObject_retrieve_params	_previousN)
_requestoridapi_keystripe_versionstripe_accountlast_responserB   r!   r:   c          	      K   sf   i | _ t | _t | _|| _|| _d | _ddlm} |d u r&|j	|||dn|| _
|r1|| d< d S d S )Nr   r    rD   rE   rF   rC   )_datar1   _unsaved_values_transient_values_last_responser@   rA   stripe._api_requestorr!   _global_with_optionsrB   )	selfrC   rD   rE   rF   rG   rB   r:   r!   r'   r'   r)   __init__\   s$   
zStripeObject.__init__c                 C      | j jS r&   )rB   rD   rO   r'   r'   r)   rD         zStripeObject.api_keyc                 C   rQ   r&   )rB   rF   rR   r'   r'   r)   rF      rS   zStripeObject.stripe_accountc                 C   rQ   r&   )rB   rE   rR   r'   r'   r)   rE      rS   zStripeObject.stripe_versionr$   c                 C   s   | j S r&   )rL   rR   r'   r'   r)   rG      s   zStripeObject.last_responseupdate_dictc                 C   s&   |D ]}| j | q| j| d S r&   )rJ   addrI   update)rO   rT   kr'   r'   r)   rV      s   zStripeObject.updatec                    sR   |t v r| j||i| _d S |d dks|| jv r#tt| ||S || |< d S Nr   _)r   rB   _new_requestor_with_options__dict__superr?   __setattr__rO   rW   r<   	__class__r'   r)   r]      s   zStripeObject.__setattr__c              
   C   sX   |d dkr
t |z|| jv r| j| }| | W S  ty+ } zt |j |d }~ww rX   )AttributeError_field_remappingsKeyErrorargs)rO   rW   errr'   r'   r)   __getattr__   s   


zStripeObject.__getattr__c                    s0   |d dks|| j v rtt| |S | |= d S rX   )r[   r\   r?   __delattr__rO   rW   r_   r'   r)   rg      s   
zStripeObject.__delattr__rW   r<   c                 C   s\   |dkrt d|t| ||f t| dst | _t| ds!i | _| j| || j|< 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().rJ   rI   )
ValueErrorr/   r9   r1   rJ   rI   rU   r^   r'   r'   r)   __setitem__   s   
	
zStripeObject.__setitem__c                 C   s|   z| j | W S  ty= } z+|| jv r$td||dt| j  f ddlm} t| |r7|dkr7td|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   )Invoicepayment_intentzThe 'payment_intent' attribute is no longer available on Invoice objects. See the docs for more details: https://docs.stripe.com/changelog/basil/2025-03-31/add-support-for-multiple-partial-payments-on-invoices#why-is-this-a-breaking-change)	rI   rc   rK   joinlistr2   stripe._invoicerk   r-   )rO   rW   re   rk   r'   r'   r)   __getitem__   s"   
	zStripeObject.__getitem__c                 C   s4   | j |= t| dr|| jv r| j| d S d S d S )NrJ   )rI   r9   rJ   removerh   r'   r'   r)   __delitem__   s   zStripeObject.__delitem__c                 C   
   || j v S r&   )rI   rh   r'   r'   r)   __contains__      
zStripeObject.__contains__otherc                 C   s*   t |trt| t|u o| j|jkS tS r&   )r-   r?   typerI   NotImplemented)rO   rv   r'   r'   r)   __eq__   s   
zStripeObject.__eq__statec                 C   s    | j | | j|  d S r&   )rI   rV   rJ   r2   )rO   rz   r'   r'   r)   __setstate__   s   zStripeObject.__setstate__.c                 C   s.   t | t| dd | j| j| jf| j f}|S )NrC   )rw   getattrrD   rE   rF   rI   r0   )rO   reduce_valuer'   r'   r)   
__reduce__   s   

zStripeObject.__reduce__V1)api_modevaluesr4   r   c                C   s*   ddl m} | j||j|||d||dS )Nr   r    rH   )r   	requestorr   rG   )rM   r!   _construct_fromrN   )clsr   r4   rE   rF   rG   r   r!   r'   r'   r)   construct_from  s   zStripeObject.construct_from)rG   z#Union[Dict[str, Any], StripeObject]r   c                C   s>   t |tr|jn|}| |d||d}|j||||d |S )NrC   )rG   rB   )r   rG   r   r   )r-   r?   rI   get_refresh_from)r   r   rG   r   r   rawinstancer'   r'   r)   r      s   	zStripeObject._construct_fromFpartialc             
   C   s(   | j |||| j|||d|d d S )NrH   )r   r   rG   r   r   )r   rB   rZ   )rO   r   rD   r   rE   rF   rG   r   r'   r'   r)   refresh_from7  s   
zStripeObject.refresh_from)r   rG   r   c             
      s  |pj _ |pt|dd _t|tr|j}|r"jt| _ntj t| }j	|B _	t _j
  j	t| _	| D ]=\}}||}||}	|	rl fdd| D }
nttttt f tj|d j  d}
|
j|< qH|_d S )NrL   c                    s:   i | ]\}}||d u rd nt ttj|d j dqS )Nrespr:   klass_r   r   )r   r?   r   _convert_to_stripe_objectrB   ).0rW   r<   r   inner_classrO   r'   r)   
<dictcomp>u  s     z.StripeObject._refresh_from.<locals>.<dictcomp>r   )rB   r|   rL   r-   r?   rI   rJ   r1   r2   rK   clearitems_coerce_field_value_get_inner_class_type _get_inner_class_is_beneath_dictr   r   r   r   r   rA   )rO   r   r   rG   r   r   removedrW   r<   is_dictobjr'   r   r)   r   P  sB   	





zStripeObject._refresh_fromz:This will be removed in a future version of stripe-python.api)base_addressmethod)r   postdeleteurlr   c                C   s   t j| ||||dS )N)r:   r   )r?   _request)rO   r   r   r:   r   r'   r'   r)   request  s   	zStripeObject.requestusagec                C   s2   |d u r| j }t|\}}| jj||||||dS N)r:   optionsr   r   )r@   r   rB   r   rO   r   r   r:   r   r   request_optionsrequest_paramsr'   r'   r)   r     s   	zStripeObject._requestc                   s:   |d u r| j }t|\}}| jj||||||dI d H S r   )r@   r   rB   request_asyncr   r'   r'   r)   _request_async  s   	zStripeObject._request_asyncc                C   s0   |d u r| j }t|\}}| jj|||||dS N)r:   r   r   )r@   r   rB   request_streamrO   r   r   r:   r   r   r   r'   r'   r)   _request_stream  s   zStripeObject._request_streamc                   s8   |d u r| j }t|\}}| jj|||||dI d H S r   )r@   r   rB   request_stream_asyncr   r'   r'   r)   _request_stream_async  s   z"StripeObject._request_stream_asyncc                 C   sv   t | jg}t| dd }t|tr|| t| dd }t|tr)|d|f  dd|tt| t| f }|S )NobjectrC   zid=%sz<%s at %s> JSON: %s )	rw   __name__r|   r-   r/   appendrm   hexrC   )rO   ident_partsobj_strobj_idunicode_reprr'   r'   r)   __repr__  s   



zStripeObject.__repr__c                 C   s   t j|  ddtdS )NT   )	sort_keysindentdefault)jsondumps_to_dict_recursiver   rR   r'   r'   r)   __str__  s   zStripeObject.__str__T	recursivefor_jsonc                 C   s   |r| j |dS | j S )z
        Dump the object's backing data. Recurses by default, but you can opt-out of that behavior by passing `recursive=False`.
        Pass `for_json=True` to convert non-JSON-serializable values (e.g. Decimal -> str)
        r   )r   rI   r0   )rO   r   r   r'   r'   r)   to_dict  s   
zStripeObject.to_dictc                    sN   dt tttttf f  dt tttf  f fddfdd| j D S )z?
        used by __str__ to serialize the whole object
        valuer$   c                    s2   | d u rd S t | tr| j dS  rt| S | S )Nr   )r-   r?   r   r   )r   r   r'   r)   maybe_to_dict_recursive&  s   
z@StripeObject._to_dict_recursive.<locals>.maybe_to_dict_recursivec              	      s<   i | ]\}}|t |trtt ttt |n |qS r'   )r-   rn   mapr   r   r   )r   r4   r   )r   r'   r)   r   2  s    z3StripeObject._to_dict_recursive.<locals>.<dictcomp>)r   r   r?   r	   r/   r   rI   r   )rO   r   r'   )r   r   r)   r   !  s   
zStripeObject._to_dict_recursiver#   c           	      C   s   i }| j pt }|p| jpi }t|tr|j}t|}| j D ]O\}}|dks-|dr.q t|t	j
r5q t|drL|||d }|i krK|||< q ||v r\t|||d ||< q |dkro|d urot|||d ||< q |S )NrC   rY   r6   additional_owners)rJ   r1   rA   r-   r?   rI   r.   r   
startswithstripeAPIResourcer9   r6   r   r*   r>   )	rO   r#   r:   unsaved_keysprevious_rawprevrW   r<   childr'   r'   r)   r6   9  s,   

zStripeObject.serializec                 C   sH   t t| dd | j| j| jd}| j|_| j D ]	\}}||j|< q|S )NrC   )rE   rF   )r?   r|   rD   rE   rF   r@   rI   r   )rO   copiedrW   r<   r'   r'   r)   __copy__X  s   
zStripeObject.__copy__memoc                 C   s<   |   }||t| < | j D ]\}}t|||j|< q|S r&   )r   rC   rI   r   r   )rO   r   r   rW   r<   r'   r'   r)   __deepcopy__n  s
   zStripeObject.__deepcopy__rb   _inner_class_types_inner_class_dicts_field_encodings
field_namec                 C   s   | j |S r&   )r   r   rO   r   r'   r'   r)   r     s   z"StripeObject._get_inner_class_typec                 C   rs   r&   )r   r   r'   r'   r)   r     ru   z-StripeObject._get_inner_class_is_beneath_dictr   c                 C   sL   | j |}|du s|du r|S |dkrt|ddS |dkr$t|ddS |S )z
        Convert JSON types to more applicable Python types, if able.

        For example, "int64_string"s become `int`s.
        Nint64_stringF)encodedecimal_string)r   r   r   r   )rO   r   r   encodingr'   r'   r)   r     s   
z StripeObject._coerce_field_value)NNNNN)NNN)NFNNNr&   )NN)TF)F)r$   r?   )Cr   
__module____qualname__r   r/   r   __annotations__r   r   rP   propertyrD   rF   rE   rG   rV   r   r]   rf   rg   rj   rp   rr   r   boolrt   ry   r	   r{   r   r~   classmethodr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r6   r   intr   rb   r   r   r   r   r   r   r   r   __classcell__r'   r'   r_   r)   r?   X   s  
 

#



		
	


C





	






r?   Tc                   @   sP   e Zd ZdZdefddZdedefddZded	efd
dZ	defddZ
dS )UntypedStripeObjecta.  
    A normal StripeObject, but it exposes `__getattr__`/`__setattr__` instead of hiding them, effectively removing type information.

    Because metadata & similar are supposed to be an untyped `dict`, we don't want to show type errors for arbitrary key access.

    Is generic on its value type
    kwargsc                  O   s   t d)Nz(this is not for runtime use, just typing)ri   )rd   r   r'   r'   r)   rP     s   zUntypedStripeObject.__init__rW   r<   c                 C   r%   r&   r'   r^   r'   r'   r)   r]         zUntypedStripeObject.__setattr__r$   c                 C   r%   r&   r'   rh   r'   r'   r)   rf     r   zUntypedStripeObject.__getattr__c                 C   r%   r&   r'   rh   r'   r'   r)   rg     r   zUntypedStripeObject.__delattr__N)r   r   r   __doc__r   rP   r/   r   r]   rf   rg   r'   r'   r'   r)   r     s    r   )1r   r0   r   typing_extensionsr   r   r   r   r   typingr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   stripe._stripe_responser   r   r   stripe._encoder   r   r   stripe._request_optionsr   r   stripe._api_moder   stripe._base_addressr   rM   r!   r/   r*   r   r>   r?   r   r   r'   r'   r'   r)   <module>   sd   <





    J