o
    i-                     @   s   d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZ d dlmZmZmZmZ d dlmZmZmZ er\d d	lmZ d d
lmZ d dlmZ d dlmZ d dlmZ G dd ded ed ed Z dS )    )CreateableAPIResource)DeletableAPIResource)
ListObject)ListableAPIResource)StripeObject)class_method_variantsanitize_id)ClassVarOptionalcastoverload)LiteralUnpackTYPE_CHECKING)TestClockAdvanceParams)TestClockCreateParams)TestClockDeleteParams)TestClockListParams)TestClockRetrieveParamsc                   @   s@  e Zd ZU dZdZeed  ed< G dd deZ	e
ed< 	 eed  ed< 	 e
ed	< 	 e
ed
< 	 eed< 	 eed< 	 ee ed< 	 ed ed< 	 ed ed< 	 e	ed< ededed dd fddZeededed dd fddZeded dd fddZedded dd fddZededed dd fddZeededed dd fdd Zeded dd fd!d Zed"ded dd fd#d Zeded$ dd fd%d&Zeded$ dd fd'd(Zed)eded* dd fd+d,Zeed)eded* dd fd-d.Zeded* dd fd/d.Zed0ded* dd fd1d.Zed)eded* dd fd2d3Zeed)eded* dd fd4d5Zeded* dd fd6d5Zed7ded* dd fd8d5Zeded9 ded  fd:d;Zeded9 ded  fd<d=Zededed> dd fd?d@Z ededed> dd fdAdBZ!de	iZ"dCS )D	TestClocka  
    A test clock enables deterministic control over objects in testmode. With a test clock, you can create
    objects at a frozen time in the past or future, and advance to a specific future time to observe webhooks and state changes. After the clock advances,
    you can either validate the current state of your scenario (and test your assumptions), change the current state of your scenario (and test more complex scenarios), or keep advancing forward in time.
    ztest_helpers.test_clockOBJECT_NAMEc                   @   s2   e Zd ZU G dd deZee ed< deiZdS )zTestClock.StatusDetailsc                   @   s   e Zd ZU eed< dS )z!TestClock.StatusDetails.Advancingtarget_frozen_timeN)__name__
__module____qualname__int__annotations__ r   r   /var/www/snowflake_co_dev_github/snow_flake_back_end_deploy/env/lib/python3.10/site-packages/stripe/test_helpers/_test_clock.py	Advancing.   s   
 r   	advancingN)r   r   r   r   r   r
   r   _inner_class_typesr   r   r   r   StatusDetails-   s   
 r"   createdTdeleteddeletes_afterfrozen_timeidlivemodenameobject)r    internal_failurereadystatusstatus_details
test_clockparamsr   returnc                 K   s"   t d| jddjt|d|dS )
        Starts advancing a test clock to a specified time in the future. Advancement is done when status changes to Ready.
        r   post1/v1/test_helpers/test_clocks/{test_clock}/advancer/   r0   )r   _static_requestformatr   clsr/   r0   r   r   r   _cls_advance]   s   zTestClock._cls_advancec                 K      dS r2   Nr   r/   r0   r   r   r   advanceo      zTestClock.advancec                 K   r<   r=   r   selfr0   r   r   r   r?   y   s   r;   c              	   K   s(   t d| jddjt| dd|dS )r2   r   r3   r4   r'   r5   r6   )r   _requestr8   r   getrA   r   r   r   r?      s   c                    s*   t d| jddjt|d|dI dH S )r2   r   r3   r4   r5   r6   N)r   _static_request_asyncr8   r   r9   r   r   r   _cls_advance_async   s   
zTestClock._cls_advance_asyncc                       dS r=   r   r>   r   r   r   advance_async      zTestClock.advance_asyncc                    rG   r=   r   rA   r   r   r   rH         rF   c              	      s0   t d| jddjt| dd|dI dH S )r2   r   r3   r4   r'   r5   r6   N)r   _request_asyncr8   r   rD   rA   r   r   r   rH      s   
r   c                 K   s   t d| jd|  |dS )\
        Creates a new test clock that can be attached to new customers and quotes.
        r   r3   r6   )r   r7   	class_urlr:   r0   r   r   r   create   s   zTestClock.createc                    s"   t d| jd|  |dI dH S )rL   r   r3   r6   N)r   rE   rM   rN   r   r   r   create_async   s   
zTestClock.create_asyncsidr   c                 K   s*   d|   t|f }td| jd||dS )'
        Deletes a test clock.
        %s/%sr   deleter6   )rM   r   r   r7   r:   rQ   r0   urlr   r   r   _cls_delete   s   zTestClock._cls_deletec                 K   r<   rR   Nr   rQ   r0   r   r   r   rT      r@   zTestClock.deletec                 K   r<   rX   r   rA   r   r   r   rT     s   rW   c                 K   s   | j d|  |dS )rR   rT   r6   )_request_and_refreshinstance_urlrA   r   r   r   rT     s
   c                    s2   d|   t|f }td| jd||dI dH S )rR   rS   r   rT   r6   N)rM   r   r   rE   rU   r   r   r   _cls_delete_async  s   
zTestClock._cls_delete_asyncc                    rG   rX   r   rY   r   r   r   delete_async)  rI   zTestClock.delete_asyncc                    rG   rX   r   rA   r   r   r   r]   3  rJ   r\   c                    s   | j d|  |dI dH S )rR   rT   r6   N)_request_and_refresh_asyncr[   rA   r   r   r   r]   <  s   r   c                 K   s4   | j d|  |d}t|tstdt|j |S )5
        Returns a list of your test clocks.
        rD   r6   %Expected list object from API, got %s)r7   rM   
isinstancer   	TypeErrortyper   r:   r0   resultr   r   r   listI  s   
zTestClock.listc                    s<   | j d|  |dI dH }t|tstdt|j |S )r_   rD   r6   Nr`   )rE   rM   ra   r   rb   rc   r   rd   r   r   r   
list_async]  s   
zTestClock.list_asyncr   c                 K   s   | |fi |}|   |S ))
        Retrieves a test clock.
        )refreshr:   r'   r0   instancer   r   r   retrieveq  s   zTestClock.retrievec                    s$   | |fi |}|  I dH  |S )rh   N)refresh_asyncrj   r   r   r   retrieve_async|  s   zTestClock.retrieve_asyncN)#r   r   r   __doc__r   r	   r   r   r   r"   r   r
   strboolclassmethodr   r;   r   staticmethodr?   r   rF   rH   rO   rP   rW   rT   r\   r]   r   rf   rg   rl   rn   r!   r   r   r   r   r      sZ  
 


r   N)!stripe._createable_api_resourcer   stripe._deletable_api_resourcer   stripe._list_objectr   stripe._listable_api_resourcer   stripe._stripe_objectr   stripe._utilr   r   typingr	   r
   r   r   typing_extensionsr   r   r   5stripe.params.test_helpers._test_clock_advance_paramsr   4stripe.params.test_helpers._test_clock_create_paramsr   4stripe.params.test_helpers._test_clock_delete_paramsr   2stripe.params.test_helpers._test_clock_list_paramsr   6stripe.params.test_helpers._test_clock_retrieve_paramsr   r   r   r   r   r   <module>   s&   
