
    {kfl                         d Z ddlmZ ddlmZ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 dd	lmZ d
dlmZ 	 ddlZddlmZ ddlmZ ddlmZ n# e$ r dZY nw xY wdZ G d de          ZdS )z5Google Cloud Storage result store backend for Celery.    )ThreadPoolExecutor)datetime	timedelta)getpid)RLock)bytes_to_str)
dictfilter)url_to_parts)ImproperlyConfigured   )KeyValueStoreBackendN)storage)Client)DEFAULT_RETRY)
GCSBackendc                   x     e Zd ZdZ fdZd Zd Zd Zd Ze	d             Z
e	d             Zd	 Zd
 Zd Z xZS )r   z)Google Cloud Storage task result backend.c                     t                      j        di | t                      | _        t	                      | _        t          | _        d | _        t          st          d          | j        j        }| j        r.|                                 } |j        di t!          |           |                    d          | _        | j        st          d          |                    d          | _        | j        st          d          |                    dd                              d          | _        t-          |                    d	d
                    | _        t1          |                    d          pd          | _        | j        dk     rt          d| j         d          | j        r+|                                 st          d| j                   d S d S )Nz8You must install google-cloud-storage to use gcs backend
gcs_bucketz:Missing bucket name: specify gcs_bucket to use gcs backendgcs_projectz6Missing project:specify gcs_project to use gcs backendgcs_base_path /gcs_threadpool_maxsize
   gcs_ttlr   zInvalid ttl: z# must be greater than or equal to 0z>Missing lifecycle rule to use gcs backend with ttl on bucket:  )super__init__r   _lockr   _pidr   _retry_policy_clientr   r   appconfurl_params_from_urlupdater	   getbucket_nameprojectstrip	base_pathint_threadpool_maxsizefloatttl _is_bucket_lifecycle_rule_exists)selfkwargsr$   
url_params	__class__s       S/var/www/html/nettyfy-visnx/env/lib/python3.11/site-packages/celery/backends/gcs.pyr   zGCSBackend.__init__   s   ""6"""WW
HH	* 	&J   x}8 	2..00JDK11*Z0011188L11 	&L   xx..| 	&H   /266<<SAA#&txx0H"'M'M#N#N ),,1228a<<&MMMM   X 	88:: *2#/2 2  	 	     c                     t          |          }|                     |          }	 |                    | j                  S # t          j        j        $ r Y d S w xY wNretry)r   	_get_blobdownload_as_bytesr!   r   blobNotFoundr2   keyr>   s      r6   r(   zGCSBackend.getE   sf    3~~c""	))0B)CCC|$ 	 	 	44	s   A AAc                     t          |          }|                     |          }| j        r.t          j                    t          | j                  z   |_        |                    || j                   d S )N)secondsr:   )	r   r<   r0   r   utcnowr   custom_timeupload_from_stringr!   )r2   rA   valuer>   s       r6   setzGCSBackend.setM   so    3~~c""8 	O'009TX3N3N3NNDT-?@@@@@r7   c                     t          |          }|                     |          }|                                r|                    | j                   d S d S r9   )r   r<   existsdeleter!   r@   s      r6   rK   zGCSBackend.deleteT   sW    3~~c"";;== 	2KKd0K11111	2 	2r7   c                     t                      5 }t          |                    | j        |                    cd d d            S # 1 swxY w Y   d S N)r   listmapr(   )r2   keyspools      r6   mgetzGCSBackend.mgetZ   s    !! 	2T40011	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2 	2s   (AAAc                    | j         5  | j        r*| j        t                      k    r| j        cddd           S t	          | j                  | _        t                      | _        t          j                            | j	        | j	        d          }| j        j
        }|                    d|           |j        j                            d|           | j        cddd           S # 1 swxY w Y   dS )zReturns a storage client.N)r*      )pool_connectionspool_maxsizemax_retrieszhttps://)r   r"   r    r   r   r*   requestsadaptersHTTPAdapterr.   _httpmount_auth_requestsession)r2   adapterclient_https      r6   clientzGCSBackend.client^   sI   
 Z 	  	 | $	VXX 5 5|	  	  	  	  	  	  	  	  "$,777DLDI '33!%!9!5 4  G
 ,,Kj'222%-33JHHH<#	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 s   %C(B!C((C,/C,c                 @    | j                             | j                  S rM   )ra   bucketr)   )r2   s    r6   rc   zGCSBackend.bucketv   s    {!!$"2333r7   c                 `    | j         r| j          d| n|}| j                            |          S )Nr   )r,   rc   r>   )r2   rA   key_bucket_paths      r6   r<   zGCSBackend._get_blobz   s9    7;~NT^33c3333{000r7   c                 z    | j         }|                                 |j        D ]}|d         d         dk    r dS dS )NactiontypeDeleteTF)rc   reloadlifecycle_rules)r2   rc   rules      r6   r1   z+GCSBackend._is_bucket_lifecycle_rule_exists~   sM    * 	 	DH~f%11tt 2ur7   c                 V    t          | j                  }|j        |j        d|j        S )N)r   r   )r
   r%   hostnamepathquery)r2   	url_partss     r6   r&   zGCSBackend._params_from_url   s9     **	 $,&^
 
 o
 	
r7   )__name__
__module____qualname____doc__r   r(   rH   rK   rR   propertyra   rc   r<   r1   r&   __classcell__)r5   s   @r6   r   r      s        33& & & & &P  A A A2 2 22 2 2     X . 4 4 X41 1 1  
 
 
 
 
 
 
r7   r   )ru   concurrent.futuresr   r   r   osr   	threadingr   kombu.utils.encodingr   kombu.utils.functionalr	   kombu.utils.urlr
   celery.exceptionsr   baser   rX   google.cloudr   google.cloud.storager   google.cloud.storage.retryr   ImportError__all__r   r   r7   r6   <module>r      sd   ; ; 1 1 1 1 1 1 ( ( ( ( ( ( ( (             - - - - - - - - - - - - ( ( ( ( ( ( 2 2 2 2 2 2 & & & & & &OOO$$$$$$++++++8888888   GGG s
 s
 s
 s
 s
% s
 s
 s
 s
 s
s   A AA