o
    Þ­j3  ã                   @   sX   d dl Z d dlZd dlZd dlm  mZ e e¡Z	G dd„ dƒZ
G dd„ dejƒZdS )é    Nc                   @   s8   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
d„ ZdS )ÚRefreshThreadManagerzD
    Organizes exactly one background job that refresh a token.
    c                 C   s   d| _ t ¡ | _dS )zInitializes the manager.N)Ú_workerÚ	threadingÚLockÚ_lock©Úself© r	   úX/var/www/html/CropPilot/venv/lib/python3.10/site-packages/google/auth/_refresh_worker.pyÚ__init__   s   zRefreshThreadManager.__init__c                 C   s°   |du s|du rt  d¡‚| j�> | jdur%| jjdur%	 W d  ƒ dS | jdu s/| j ¡ sFt|t |¡d�| _| j 	¡  W d  ƒ dS W d  ƒ dS 1 sQw   Y  dS )au  Starts a refresh thread for the given credentials.
        The credentials are refreshed using the request parameter.
        request and cred MUST not be None

        Returns True if a background refresh was kicked off. False otherwise.

        Args:
            cred: A credentials object.
            request: A request object.
        Returns:
          bool
        NzQUnable to start refresh. cred and request must be valid and instantiated objects.F)ÚcredÚrequestT)
ÚeÚInvalidValuer   r   Ú_error_infoÚis_aliveÚRefreshThreadÚcopyÚdeepcopyÚstart)r   r   r   r	   r	   r
   Ústart_refresh#   s$   ÿþ
úý
üùz"RefreshThreadManager.start_refreshc                 C   sJ   | j � | jrd| j_W d  ƒ dS W d  ƒ dS 1 sw   Y  dS )zY
        Removes any errors that were stored from previous background refreshes.
        N)r   r   r   r   r	   r	   r
   Úclear_error>   s   
þ"ÿz RefreshThreadManager.clear_errorc                 C   s   | j  ¡ }d|d< |S )z2Pickle helper that serializes the _lock attribute.Nr   )Ú__dict__r   ©r   Ústater	   r	   r
   Ú__getstate__F   s   
z!RefreshThreadManager.__getstate__c                 C   s   t  ¡ |d< | j |¡ dS )z4Pickle helper that deserializes the _lock attribute.r   N)r   r   r   Úupdater   r	   r	   r
   Ú__setstate__L   s   z!RefreshThreadManager.__setstate__N)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r	   r	   r	   r
   r      s    r   c                       s(   e Zd ZdZ‡ fdd„Zdd„ Z‡  ZS )r   z,
    Thread that refreshes credentials.
    c                    s(   t ƒ jdi |¤Ž || _|| _d| _dS )záInitializes the thread.

        Args:
            cred: A Credential object to refresh.
            request: A Request object used to perform a credential refresh.
            **kwargs: Additional keyword arguments.
        Nr	   )Úsuperr   Ú_credÚ_requestr   )r   r   r   Úkwargs©Ú	__class__r	   r
   r   W   s   	
zRefreshThread.__init__c              
   C   sR   z
| j  | j¡ W dS  ty( } zt d|› �¡ || _W Y d}~dS d}~ww )z1
        Perform the credential refresh.
        z"Background refresh failed due to: N)r#   Úrefreshr$   Ú	ExceptionÚ_LOGGERÚerrorr   )r   Úerrr	   r	   r
   Úrune   s   €þzRefreshThread.run)r   r   r    r!   r   r-   Ú__classcell__r	   r	   r&   r
   r   R   s    r   )r   Úloggingr   Úgoogle.auth.exceptionsÚauthÚ
exceptionsr   Ú	getLoggerr   r*   r   ÚThreadr   r	   r	   r	   r
   Ú<module>   s   
: