o
    rN)j                  	   @   sJ  d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
mZmZmZmZ dejfddZdefd	d
ZdddZdedefddZeee	eef f Zdeeeef  de	eef deeeef  fddZdededefddZdededefddZdededefddZdeeef de
eeef ddf fddZdS )     N)OrderedDict)Decimal)AnyDict	GeneratorMappingOptionalTupleUniondttimec                 C   sB   | j r| j | d urt|  }t|S t|  }t|S N)	tzinfo	utcoffsetcalendartimegmutctimetupletimemktime	timetupleint)r   utc_timestamp r   o/var/www/html/finance.cargoinsureonline.com/_shared/backend-venv/lib/python3.10/site-packages/stripe/_encode.py_encode_datetime	   s
   r   returnc                 C   s   t | S r   )str)decr   r   r   _encode_decimal   s   r   %s[%s]c                 C   sD   t  }t|dr|j n| }|D ]\}}|||| |f < q|S )N_data)r   hasattrr   items)keydatafmtdr!   subkeysubvaluer   r   r   _encode_nested_dict   s
   r(   valuec                 C   s*   t | tjr
t| S t | trt| S | S )z
    Handles taking arbitrary values and making sure they're JSON encodable.

    Only cares about types that can appear on StripeObject that but are not serializable by default (like Decimal).
    )
isinstancedatetimer   r   r   )r)   r   r   r   _make_suitable_for_json   s
   
r,   paramsschemac                 C   sP   | du rdS i }|   D ]\}}||}|dur!t||||< q|||< q|S )z
    Coerce V2 request params according to the given encoding schema.

    For fields marked as "int64_string", converts int values to str so they
    are serialized as JSON strings on the wire. Recurses into nested objects
    and arrays.
    N)r!   get_coerce_value)r-   r.   resultr"   r)   field_schemar   r   r   _coerce_v2_params0   s   

r3   encodec                   sb   | du rdS |r
t nt |rtnt t| tr! fdd| D S t|  r/t| ts/| S | S )u   
    Coerce an int64_string value in either direction.

    encode=True:  int → str (request serialization)
    encode=False: str → int (response hydration)
    Nc                    s,   g | ]}t | rt |ts|n|qS r   )r*   bool.0v	from_typeto_typer   r   
<listcomp>V   s    
z(_coerce_int64_string.<locals>.<listcomp>)r   r   r*   listr5   r)   r4   r   r9   r   _coerce_int64_stringH   s   
r?   c                   sh   | du rdS t | tr fdd| D S  r)t | tttfr't | ts't| S | S t | tr2t| S | S )u   
    Coerce a decimal_string value in either direction.

    encode=True:  Decimal/int/float → str (request serialization)
    encode=False: str → Decimal (response hydration)
    Nc                    s   g | ]}t | d qS )r4   )_coerce_decimal_stringr6   r@   r   r   r<   l   s    z*_coerce_decimal_string.<locals>.<listcomp>)r*   r=   r   r   floatr5   r   r   r>   r   r@   r   rA   a   s   

rA   c                    s~   | du rdS  dkrt | ddS  dkrt| ddS t tr=t| tr- fdd| D S t| tr;tt|  p9i S | S | S )z3Coerce a single value according to its schema node.Nint64_stringTr@   decimal_stringc                    s,   g | ]}t |trtt| pi n|qS r   )r*   dictr3   r6   r.   r   r   r<      s    z!_coerce_value.<locals>.<listcomp>)r?   rA   r*   rE   r=   r3   )r)   r.   r   rF   r   r0   z   s   



r0   r#   c                 c   sz   |   }|D ]\}}|d u rqt|dr|t|dfV  qt|ts(t|trzt|D ]L\}}d||f }t|ts@t|drTt||}t	|D ]	\}}	||	fV  qIq,t|ttfrst|tt|}t	|D ]	\}}	||	fV  qhq,||fV  q,qt|tst|drt||}t	|D ]	\}
}|
|fV  qqt|t
j
r|t|fV  qt|tr|t| fV  q||fV  qd S )Nidz%s[%d]r   )r!   r    getattrr*   r=   tuple	enumeraterE   r(   _api_encoder+   r   r5   r   lower)r#   r!   r"   r)   isvencoded_keysubdictkr8   r&   r'   r   r   r   rK      sF   



rK   )r   )r   r+   r   collectionsr   decimalr   typingr   r   r   r   r   r	   r
   r   r   r   r(   r,   _SchemaNoder3   r5   r?   rA   r0   rK   r   r   r   r   <module>   s4    $	



