
    D6il                         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 dZ G d de      Zy# e$ r dZY w xY w)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                   l     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        |   di | t               | _        t	               | _        t        | _        d | _        t        st        d      | j                  j                  }| j                  r+| j                         } |j                  di t!        |       |j#                  d      | _        | j$                  st        d      |j#                  d      | _        | j&                  st        d      |j#                  dd      j)                  d      | _        t-        |j#                  d	d
            | _        t1        |j#                  d      xs d      | _        | j2                  dk  rt        d| j2                   d      | j2                  r)| j5                         st        d| j$                         y y )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       V/home/azureuser/techstart-app/venv/lib/python3.12/site-packages/celery/backends/gcs.pyr   zGCSBackend.__init__   s   "6"W
H	*&J  xx}}88..0JDKK1*Z0188L1&L  xx.||&H  /26<<SA#&txx0H"'M#N ),1288a<&z)LM  XX88:*#//02  ;     c                     t        |      }| j                  |      }	 |j                  | j                        S # t        j
                  j                  $ r Y y w xY wNretry)r   	_get_blobdownload_as_bytesr!   r   blobNotFoundr2   keyr>   s      r6   r(   zGCSBackend.getE   sU    3~~c"	))0B0B)CC||$$ 		s   : AAc                     t        |      }| j                  |      }| j                  r0t        j                         t        | j                        z   |_        |j                  || j                         y )N)secondsr:   )	r   r<   r0   r   utcnowr   custom_timeupload_from_stringr!   )r2   rA   valuer>   s       r6   setzGCSBackend.setM   sW    3~~c"88'09TXX3NNDT-?-?@r7   c                     t        |      }| j                  |      }|j                         r|j                  | j                         y y r9   )r   r<   existsdeleter!   r@   s      r6   rK   zGCSBackend.deleteT   s<    3~~c";;=KKd00K1 r7   c                     t               5 }t        |j                  | j                  |            cd d d        S # 1 sw Y   y xY wN)r   listmapr(   )r2   keyspools      r6   mgetzGCSBackend.mgetZ   s6    ! 	2T401	2 	2 	2s	   %:Ac                 *   | j                   5  | j                  r,| j                  t               k(  r| j                  cddd       S t	        | j
                        | _        t               | _        t        j                  j                  | j                  | j                  d      }| j                  j                  }|j                  d|       |j                  j                  j                  d|       | j                  cddd       S # 1 sw Y   yxY w)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^   s    
 ZZ 	 ||		VX 5||	  	  "$,,7DLDI ''33!%!9!9!55 4 G
 ,,,,Kj'2%%--33JH<<#	  	  	 s   /D	B9D		Dc                 L    | j                   j                  | j                        S rM   )ra   bucketr)   )r2   s    r6   rc   zGCSBackend.bucketv   s    {{!!$"2"233r7   c                 v    | j                   r| j                    d| n|}| j                  j                  |      S )Nr   )r,   rc   r>   )r2   rA   key_bucket_paths      r6   r<   zGCSBackend._get_blobz   s4    7;~~T^^,AcU33{{00r7   c                 x    | j                   }|j                          |j                  D ]  }|d   d   dk(  s y y)NactiontypeDeleteTF)rc   reloadlifecycle_rules)r2   rc   rules      r6   r1   z+GCSBackend._is_bucket_lifecycle_rule_exists~   sB    ** 	DH~f%1	 r7   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   s:     *	 $,,&^^
 oo
 	
r7   )__name__
__module____qualname____doc__r   r(   rH   rK   rR   propertyra   rc   r<   r1   r&   __classcell__)r5   s   @r6   r   r      sX    3&PA22    . 4 4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      s`    ; 1 (   - - ( 2 &$+8 s
% s
  Gs   A   A*)A*