Ë
    —V.jl  ã                   óÚ   — 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       €úUC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/backends/gcs.pyr   zGCSBackend.__init__   s‘  ø€ Ü‰ÑÑ"˜6Ò"Ü“WˆŒ
Ü“HˆŒ	Ü*ˆÔØˆŒåÜ&ØJóð ð �x‰x�}‰}ˆØ�8Š8Ø×.Ñ.Ó0ˆJØˆD�K‰KÑ1œ* ZÓ0Ò1àŸ8™8 LÓ1ˆÔØ×ÒÜ&ØLóð ð —x‘x Ó.ˆŒØ�|Š|Ü&ØHóð ð Ÿ™ /°2Ó6×<Ñ<¸SÓAˆŒÜ#& t§x¡xÐ0HÈ"Ó'MÓ#NˆÔ Ü˜Ÿ™ )Ó,Ò1°Ó2ˆŒØ�8‰8�aŠ<Ü&Ø §¡˜zÐ)LÐMóð ð �XŠXØ×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Ó"ˆð	Ø×)Ñ)°×0BÑ0BÐ)Ó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Ó"ˆØ�8Š8Ü'Ÿ™Ó0´9ÀTÇXÁXÔ3NÑNˆDÔØ×Ñ ¨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Ó"ˆØ�;‰;Œ=Ø�K‰K˜d×0Ñ0ˆKÕ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   s-   € ÜÔ! TÜ˜Ÿ™ §¡¨4Ó0Ó1÷ "×!Ò!ús	   ‹%:º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È   € ð
 �Z‹ZØ�|Š| §	¡	¬V«XÒ 5Ø—|‘|÷ ‰Zô "¨$¯,©,Ô7ˆDŒLÜ›ˆDŒIô ×'Ñ'×3Ñ3Ø!%×!9Ñ!9Ø!×5Ñ5Øð 4ó ˆGð
 Ÿ,™,×,Ñ,ˆKØ×Ñ˜j¨'Ô2Ø×%Ñ%×-Ñ-×3Ñ3°JÀÔHà—<‘<÷# �ZŠZú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Ÿ^™^Ð,¨A¨c¨UÑ3È3ˆØ�{‰{×Ñ Ó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~   s=   € Ø—‘ˆØ�‰ŒØ×*Ô*ˆ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:   € Ü  §¡Ó*ˆ	ð $×,Ñ,Ø&Ÿ^™^ñ
ð �o‰oð
ð 	
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*