Ë
    —V.jy  ã                   óö   — d 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mZmZ ddlmZ ddlmZ dZdZdZ e
e«      Z G d„ de«      Zy	# e$ r d	xZxZxZxZxZxZZY Œ/w xY w)z3The CosmosDB/SQL backend for Celery (experimental).é    )Úcached_property)Úbytes_to_str)Ú
_parse_url)ÚImproperlyConfigured)Ú
get_loggeré   )ÚKeyValueStoreBackendN)ÚDocumentClient)ÚConnectionPolicyÚConsistencyLevelÚPartitionKind)ÚHTTPFailure)ÚRetryOptions)ÚCosmosDBSQLBackendi”  i™  c                   óª   ‡ — e Zd ZdZ	 	 	 	 	 	 dˆ fd„	Zed„ «       Zed„ «       Zd„ Z	d„ Z
ed„ «       Zed„ «       Zd	„ Zed
„ «       Zd„ Zd„ Zd„ Zd„ Zˆ xZS )r   z CosmosDB/SQL backend for Celery.c                 óˆ  •— t        ‰
| �  |i |¤Ž t        €t        d«      ‚| j                  j
                  }	| j                  |«      \  | _        | _        |xs |	d   | _	        |xs |	d   | _
        	 t        t        |xs |	d   «      | _        |xs |	d   | _        |xs |	d   | _        y # t        $ r t        d«      ‚w xY w)NzIYou need to install the pydocumentdb library to use the CosmosDB backend.Úcosmosdbsql_database_nameÚcosmosdbsql_collection_nameÚcosmosdbsql_consistency_levelz"Unknown CosmosDB consistency levelÚcosmosdbsql_max_retry_attemptsÚcosmosdbsql_max_retry_wait_time)ÚsuperÚ__init__Úpydocumentdbr   ÚappÚconfr   Ú	_endpointÚ_keyÚ_database_nameÚ_collection_nameÚgetattrr   Ú_consistency_levelÚAttributeErrorÚ_max_retry_attemptsÚ_max_retry_wait_time)ÚselfÚurlÚdatabase_nameÚcollection_nameÚconsistency_levelÚmax_retry_attemptsÚmax_retry_wait_timeÚargsÚkwargsr   Ú	__class__s             €ú]C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/backends/cosmosdbsql.pyr   zCosmosDBSQLBackend.__init__!   s  ø€ ô 	‰Ñ˜$Ð) &Ò)äÐÜ&ð$ó%ð %ð �x‰x�}‰}ˆà$(§O¡O°CÓ$8Ñ!ˆŒ˜œ	ð ò .ØÐ,Ñ-ð 	Ôð
 ò 0ØÐ.Ñ/ð 	Ôð	MÜ&-Ü Ø!ò 6ØÐ4Ñ5ó'7ˆDÔ#ð ò 3ØÐ1Ñ2ð 	Ô ð
  ò 4ØÐ2Ñ3ð 	Õ!øô ò 	MÜ&Ð'KÓLÐLð	Mús   Á3B, Â,Cc                 ó|   — t        |«      \  }}}}}}}|r|st        d«      ‚|sd}|dk(  rdnd}|› d|› d|› �}||fS )NzInvalid URLi»  ÚhttpsÚhttpz://Ú:)r   r   )Úclsr'   Ú_ÚhostÚportÚpasswordÚschemeÚendpoints           r0   r   zCosmosDBSQLBackend._parse_urlM   s`   € ä+5°c«?Ñ(ˆˆ4��q˜( A qá™8Ü& }Ó5Ð5áØˆDà  CšK‘¨VˆØ�X˜S   a¨ vÐ.ˆØ˜Ð!Ð!ó    c                 ó  — t        «       }t        | j                  | j                  ¬«      |_        t	        | j
                  d| j                  i|| j                  ¬«      }| j                  |«       | j                  |«       |S )zÄReturn the CosmosDB/SQL client.

        If this is the first call to the property, the client is created and
        the database and collection are initialized if they don't yet exist.

        )Úmax_retry_attempt_countÚmax_wait_time_in_secondsÚ	masterKey)Úconnection_policyr*   )
r   r   r$   r%   r
   r   r   r"   Ú_create_database_if_not_existsÚ _create_collection_if_not_exists)r&   rA   Úclients      r0   Ú_clientzCosmosDBSQLBackend._client[   s|   € ô -Ó.ÐÜ)5Ø$(×$<Ñ$<Ø%)×%>Ñ%>ô*@ÐÔ&ô  Ø�N‰NØ˜$Ÿ)™)Ð$Ø/Ø"×5Ñ5ô	7ˆð 	×+Ñ+¨FÔ3Ø×-Ñ-¨fÔ5àˆr<   c                 óÔ   — 	 |j                  d| j                  i«       t        j                  d| j                  «       y # t        $ r}|j
                  t        k7  r‚ Y d }~y d }~ww xY w)NÚidzCreated CosmosDB database %s)ÚCreateDatabaser   ÚLOGGERÚinfor   Ústatus_codeÚERROR_EXISTS©r&   rD   Úexs      r0   rB   z1CosmosDBSQLBackend._create_database_if_not_existss   s`   € ð	-Ø×!Ñ! 4¨×)<Ñ)<Ð"=Ô>ô
 �K‰KÐ6Ø×+Ñ+õ-øô	 ò 	Ø�~‰~¤Ò-Øô .ûð	ús   ‚A  Á 	A'Á	A"Á"A'c                 ó&  — 	 |j                  | j                  | j                  dgt        j                  dœdœ«       t
        j                  d| j                  | j                  «       y # t        $ r}|j                  t        k7  r‚ Y d }~y d }~ww xY w)Nz/id)ÚpathsÚkind)rG   ÚpartitionKeyz!Created CosmosDB collection %s/%s)ÚCreateCollectionÚ_database_linkr    r   ÚHashrI   rJ   r   r   rK   rL   rM   s      r0   rC   z3CosmosDBSQLBackend._create_collection_if_not_exists}   sŠ   € ð	DØ×#Ñ#Ø×#Ñ#Ø×,Ñ,Ø,1¨7Ü*7×*<Ñ*<ñ">ñ?ô@ô �K‰KÐ;Ø×+Ñ+¨T×-BÑ-BõDøô	 ò 	Ø�~‰~¤Ò-Øô .ûð	ús   ‚;A) Á)	BÁ2BÂBc                 ó    — d| j                   z   S )Nzdbs/)r   ©r&   s    r0   rT   z!CosmosDBSQLBackend._database_link‹   s   € à˜×+Ñ+Ñ+Ð+r<   c                 ó:   — | j                   dz   | j                  z   S )Nz/colls/)rT   r    rW   s    r0   Ú_collection_linkz#CosmosDBSQLBackend._collection_link�   s   € à×"Ñ" YÑ.°×1FÑ1FÑFÐFr<   c                 ó&   — | j                   dz   |z   S )Nz/docs/)rY   ©r&   Úkeys     r0   Ú_get_document_linkz%CosmosDBSQLBackend._get_document_link“   s   € Ø×$Ñ$ xÑ/°#Ñ5Ð5r<   c                 óD   — |r|j                  «       rt        d«      ‚d|iS )Nz(Key cannot be none, empty or whitespace.rR   )ÚisspaceÚ
ValueError)r5   r\   s     r0   Ú_get_partition_keyz%CosmosDBSQLBackend._get_partition_key–   s$   € á�c—k‘k”mÜÐGÓHÐHà Ð$Ð$r<   c                 ó\  — t        |«      }t        j                  d| j                  | j                  |«       	 | j
                  j                  | j                  |«      | j                  |«      «      }|j                  d«      S # t        $ r}|j                  t        k7  r‚ Y d}~yd}~ww xY w)zxRead the value stored at the given key.

        Args:
              key: The key for which to read the value.

        z"Getting CosmosDB document %s/%s/%sÚvalueN)r   rI   Údebugr   r    rE   ÚReadDocumentr]   ra   Úgetr   rK   ÚERROR_NOT_FOUND)r&   r\   ÚdocumentrN   s       r0   rf   zCosmosDBSQLBackend.get�   s›   € ô ˜3ÓˆÜ�‰Ð9Ø×(Ñ(¨$×*?Ñ*?Àô	Fð		)Ø—|‘|×0Ñ0Ø×'Ñ'¨Ó,Ø×'Ñ'¨Ó,ó.ˆHð —<‘< Ó(Ð(øô ò 	Ø�~‰~¤Ò0ØÜûð	ús   ¹:B Â	B+ÂB&Â&B+c                 óä   — t        |«      }t        j                  d| j                  | j                  |«       | j
                  j                  | j                  ||dœ| j                  |«      «       y)z˜Store a value for a given key.

        Args:
              key: The key at which to store the value.
              value: The value to store.

        z#Creating CosmosDB document %s/%s/%s)rG   rc   N)	r   rI   rd   r   r    rE   ÚCreateDocumentrY   ra   )r&   r\   rc   s      r0   ÚsetzCosmosDBSQLBackend.set³   sd   € ô ˜3ÓˆÜ�‰Ð:Ø×(Ñ(¨$×*?Ñ*?Àô	Fð 	�‰×#Ñ#Ø×!Ñ!Ø Ñ'Ø×#Ñ# CÓ(õ	*r<   c                 óJ   — |D �cg c]  }| j                  |«      ‘Œ c}S c c}w )zqRead all the values for the provided keys.

        Args:
              keys: The list of keys to read.

        )rf   )r&   Úkeysr\   s      r0   ÚmgetzCosmosDBSQLBackend.mgetÄ   s$   € ñ *.Ó.© #�—‘˜•¨Ñ.Ð.ùÒ.s   … c                 óæ   — t        |«      }t        j                  d| j                  | j                  |«       | j
                  j                  | j                  |«      | j                  |«      «       y)zlDelete the value at a given key.

        Args:
              key: The key of the value to delete.

        z#Deleting CosmosDB document %s/%s/%sN)	r   rI   rd   r   r    rE   ÚDeleteDocumentr]   ra   r[   s     r0   ÚdeletezCosmosDBSQLBackend.deleteÍ   sa   € ô ˜3ÓˆÜ�‰Ð:Ø×(Ñ(¨$×*?Ñ*?Àô	Fð 	�‰×#Ñ#Ø×#Ñ# CÓ(Ø×#Ñ# CÓ(õ	*r<   )NNNNNN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úclassmethodr   r   rE   rB   rC   rT   rY   r]   ra   rf   rk   rn   rq   Ú__classcell__)r/   s   @r0   r   r      sª   ø„ Ù*ð Ø#Ø!%Ø#'Ø$(Ø%)õ*5ðX ñ"ó ð"ð ñó ðò.-òDð ñ,ó ð,ð ñGó ðGò6ð ñ%ó ð%ò)ò,*ò"/ö*r<   r   )ru   Úkombu.utilsr   Úkombu.utils.encodingr   Úkombu.utils.urlr   Úcelery.exceptionsr   Úcelery.utils.logr   Úbaser	   r   Úpydocumentdb.document_clientr
   Úpydocumentdb.documentsr   r   r   Úpydocumentdb.errorsr   Úpydocumentdb.retry_optionsr   ÚImportErrorÚ__all__rg   rL   rr   rI   r   © r<   r0   Ú<module>r…      s    ðÙ 9Ý 'Ý -Ý &å 2Ý 'å &ð=ÛÝ;ßXÑXÝ/Ý7ð
 "€ð €Ø€á	�HÓ	€ô|*Ð-õ |*øð ò =à8<ð=€Lð =�>ð =Ð$4ð =°}ð =Øð=Ø&ªð=ús   ¨ A" Á"A8Á7A8