
    Yaj                    \    d dl mZ d dlZd dlmZ d dlmZ  G d d          Zdd	Z	dd
Z
dS )    )annotationsN)Decimal)CoinGeckoClientc                  (    e Zd ZddZd Zd Zd ZdS )	Resppayloadbytesc                    || _         d S Nr   )selfr   s     %tests/unit/test_coingecko_provider.py__init__zResp.__init__
   s    w    c                    | S r    r   s    r   	__enter__zResp.__enter__   s    r   c                    dS )NFr   )r   argss     r   __exit__zResp.__exit__   s    eer   c                    | j         S r   r   r   s    r   readz	Resp.read   s	    4<'r   N)r   r	   )__name__
__module____qualname__r   r   r   r   r   r   r   r   r   	   s7        >>>>$$$+++'''''r   r   returnNonec                     ddig } dfd	}t          ddd|| j                  }|                    d	d
          }d         dk    sJ | ddgk    sJ |j        t	          d          k    sJ |j        dk    sJ d S )Nnr      c                    dxx         dz  cc<   d         dk     r#t           j                            | ddd d           t          d          S )Nr            rate limiteds;   {"bitcoin":{"chf":0.00000001,"last_updated_at":1700000000}})urlliberror	HTTPErrorr   )urltimeoutcallss     r   openerzQtest_coingecko_client_retries_429_and_returns_quote_without_float.<locals>.opener   sR    c


a


:>>,((c>4NNNRSSSr   r$   g      ?g      ?)max_retriesinitial_backoff_secondsmax_backoff_secondsr-   sleeperbitcoinCHFz1E-8freshr!   )r   appendget_crypto_pricepricer   quality_status)sleepsr-   clientquoter,   s       @r   Atest_coingecko_client_retries_429_and_returns_quote_without_floatr=      s    !HEFT T T T T T
 C]`ioy  zG  H  H  HF##Iu55E:????c3Z;'&//))))7******r   c                     dd} t          dd| d           }|                    dd          }|j        J |j        d	k    sJ d
|j        pdv sJ d S )Nr!   c                H    t           j                            | ddd d           )Nr%   r&   )r'   r(   r)   )r*   r+   s     r   r-   zOtest_coingecko_client_429_after_retries_returns_stale_not_crash.<locals>.opener!   s     l$$S#~tTJJJr   r#   r   c                    d S r   r   )ss    r   <lambda>zQtest_coingecko_client_429_after_retries_returns_stale_not_crash.<locals>.<lambda>#   s    hl r   )r.   r/   r-   r1   r2   r3   stale429 r5   )r   r7   r8   r9   error_message)r-   r;   r<   s      r   ?test_coingecko_client_429_after_retries_returns_stale_not_crashrG       s    K K K KAf^l^lmmmF##Iu55E;7****U(.B//////r   )r   r   )
__future__r   urllib.errorr'   decimalr   jarvis_finance.market.providersr   r   r=   rG   r   r   r   <module>rL      s    " " " " " "           ; ; ; ; ; ;( ( ( ( ( ( ( (+ + + + 0 0 0 0 0 0r   