o
    QS\j                     @  sN   d Z ddlmZ ddlmZmZ ddlmZ ddhZddddZdddZ	dS )zIEvaluate subscription access independently from payment-provider details.    )annotations)datetimetimezone)AnyactivetrialingNstatusstrmetadatadict[str, Any] | Nonenowdatetime | Nonereturndict[str, Any]c                 C  sv   |pt tj}| pd }t|pi d}|dko"|d uo"||k}||tv p)|||r0| nd |r7ddS |dS )Nmissinggrace_untilpast_duegrace_period)r   access_allowedin_grace_periodr   access_reason)	r   r   r   utclower_parse_datetimegetDIRECT_ACCESS_STATES	isoformat)r   r
   r   
normalizedr   in_grace r   platform/billing/lifecycle.pyevaluate_subscription   s   
r!   valuer   c                 C  sP   | sd S zt t| dd}W n
 ty   Y d S w |jr!|S |jtjdS )NZz+00:00)tzinfo)r   fromisoformatr	   replace
ValueErrorr$   r   r   )r"   parsedr   r   r    r      s   r   )N)r   r	   r
   r   r   r   r   r   )r"   r   r   r   )
__doc__
__future__r   r   r   typingr   r   r!   r   r   r   r   r    <module>   s    