Ë
    —V.j.#  ã                   óÌ   — d Z ddl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Z
ddlZ
ddlZ
dZ ee«      Zd	Zd
ZdZdZdZdZdZdZd„ Z G d„ de	«      Zy# e$ r dZ
Y Œ2w xY w)z@Apache Cassandra result store backend using the DataStax driver.é    N)Ústates)ÚImproperlyConfigured)Ú
get_loggeré   )ÚBaseBackend)ÚCassandraBackendz
You need to install the cassandra-driver library to
use the Cassandra backend.  See https://github.com/datastax/python-driver
z�
CASSANDRA_AUTH_PROVIDER you provided is not a valid auth_provider class.
See https://datastax.github.io/python-driver/api/cassandra/auth.html.
z(Cassandra backend improperly configured.z!Cassandra backend not configured.zˆ
INSERT INTO {table} (
    task_id, status, result, date_done, traceback, children) VALUES (
        %s, %s, %s, %s, %s, %s) {expires};
z]
SELECT status, result, date_done, traceback, children
FROM {table}
WHERE task_id=%s
LIMIT 1
zà
CREATE TABLE {table} (
    task_id text,
    status text,
    result blob,
    date_done timestamp,
    traceback blob,
    children blob,
    PRIMARY KEY ((task_id), date_done)
) WITH CLUSTERING ORDER BY (date_done DESC);
z
    USING TTL {0}
c                 ó   — t        | d«      S )NÚutf8)Úbytes)Úxs    ú[C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/backends/cassandra.pyÚbuf_tr   C   s   € Ü��FÓÐó    c                   ó`   ‡ — e Zd ZdZdZdZdZ	 	 d
ˆ fd„	Zdd„Z	 dd„Z	dd„Z
d„ Zdˆ fd	„	Zˆ xZS )r   aG  Cassandra/AstraDB backend utilizing DataStax driver.

    Raises:
        celery.exceptions.ImproperlyConfigured:
            if module :pypi:`cassandra-driver` is not available,
            or not-exactly-one of the :setting:`cassandra_servers` and
            the :setting:`cassandra_secure_bundle_path` settings is set.
    NTc                 ó`  •— t        ‰| �  di |¤Ž t        st        t        «      ‚| j
                  j                  }|xs |j                  dd «      | _        |xs |j                  dd «      | _	        |xs |j                  dd «      | _
        |xs |j                  dd «      | _        |xs |j                  dd «      | _        |j                  di «      | _        | j                  xs | j                  }	|	r| j                  r| j                  st        t        «      ‚| j                  r| j                  rt        t        «      ‚|xs |j                  dd «      }
|
�t         j#                  |
«      nd| _        |j                  d	«      xs d
}|j                  d«      xs d
}t'        t        j(                  |t        j(                  j*                  «      | _        t'        t        j(                  |t        j(                  j*                  «      | _        d | _        |j                  dd «      }|j                  dd «      }|r;|r9t'        t        j2                  |d «      }|st        t4        «      ‚ |di |¤Ž| _        d | _        d | _        d | _        d | _        t?        j@                  «       | _!        y )NÚcassandra_serversÚcassandra_secure_bundle_pathÚcassandra_portÚcassandra_keyspaceÚcassandra_tableÚcassandra_optionsÚcassandra_entry_ttlÚ Úcassandra_read_consistencyÚLOCAL_QUORUMÚcassandra_write_consistencyÚcassandra_auth_providerÚcassandra_auth_kwargs© )"ÚsuperÚ__init__Ú	cassandrar   ÚE_NO_CASSANDRAÚappÚconfÚgetÚserversÚbundle_pathÚportÚkeyspaceÚtabler   ÚE_CASSANDRA_NOT_CONFIGUREDÚE_CASSANDRA_MISCONFIGUREDÚ	Q_EXPIRESÚformatÚ
cqlexpiresÚgetattrÚConsistencyLevelr   Úread_consistencyÚwrite_consistencyÚauth_providerÚauthÚ!E_NO_SUCH_CASSANDRA_AUTH_PROVIDERÚ_clusterÚ_sessionÚ_write_stmtÚ
_read_stmtÚ	threadingÚRLockÚ_lock)Úselfr'   r*   r+   Ú	entry_ttlr)   r(   Úkwargsr%   Údb_directionsÚexpiresÚ	read_consÚ
write_consr5   Úauth_kwargsÚauth_provider_classÚ	__class__s                   €r   r!   zCassandraBackend.__init__X   sG  ø€ ä‰ÑÑ"˜6Ò"åÜ&¤~Ó6Ð6à�x‰x�}‰}ˆØÒE $§(¡(Ð+>ÀÓ"EˆŒØ&ò 2¨$¯(©(Ø*¨Dó+2ˆÔàÒ<˜DŸH™HÐ%5°tÓ<ˆŒ	Ø ÒH D§H¡HÐ-AÀ4Ó$HˆŒØÒ?˜dŸh™hÐ'8¸$Ó?ˆŒ
Ø!%§¡Ð*=¸rÓ!BˆÔð Ÿ™Ò8¨×(8Ñ(8ˆÙ D§M¢M¸¿ºÜ&Ô'AÓBÐBà�<Š<˜D×,Ò,Ü&Ô'@ÓAÐAàÒD˜tŸx™xÐ(=¸tÓDˆð *1Ð)<ŒI×Ñ˜WÔ%À"ð 	Œð —H‘HÐ9Ó:ÒL¸nˆ	Ø—X‘XÐ;Ó<ÒNÀˆ
ä 'Ü×&Ñ&¨	Ü×&Ñ&×3Ñ3ó!5ˆÔô ")Ü×&Ñ&¨
Ü×&Ñ&×3Ñ3ó"5ˆÔð "ˆÔØŸ™Ð!:¸DÓAˆØ—h‘hÐ6¸Ó=ˆÙ™[Ü")¬)¯.©.¸-ÈÓ"NÐÙ&Ü*Ô+LÓMÐMÙ!4Ñ!C°{Ñ!CˆDÔàˆŒØˆŒØˆÔØˆŒÜ—_‘_Ó&ˆ�
r   c                 óÞ  — | j                   �y| j                  j                  «        	 | j                   �	 | j                  j                  «        y| j                  rQt        j                  j                  | j                  f| j                  | j                  dœ| j                  ¤Ž| _        nGt        j                  j                  dd| j                  i| j                  dœ| j                  ¤Ž| _        | j                  j                  | j                  «      | _         t
        j                  j!                  t"        j%                  | j&                  | j(                  ¬«      «      | _        | j,                  | j*                  _        t
        j                  j!                  t0        j%                  | j&                  ¬«      «      | _        | j4                  | j2                  _        |rjt
        j                  j!                  t6        j%                  | j&                  ¬«      «      }| j,                  |_        	 | j                   j9                  |«       | j                  j                  «        y# t
        j:                  $ r Y Œ0w xY w# t
        j<                  $ r6 | j                  �| j                  j?                  «        d| _        d| _         ‚ w xY w# | j                  j                  «        w xY w)zjPrepare the connection for action.

        Arguments:
            write (bool): are we a writer?
        N)r)   r5   Úsecure_connect_bundle)Úcloudr5   )r+   rC   )r+   r   ) r9   r>   ÚacquireÚreleaser'   r"   ÚclusterÚClusterr)   r5   r   r8   r(   Úconnectr*   ÚqueryÚSimpleStatementÚQ_INSERT_RESULTr/   r+   r0   r:   r4   Úconsistency_levelÚQ_SELECT_RESULTr;   r3   ÚQ_CREATE_RESULT_TABLEÚexecuteÚAlreadyExistsÚOperationTimedOutÚshutdown)r?   ÚwriteÚ	make_stmts      r   Ú_get_connectionz CassandraBackend._get_connectionŽ   s_  € ð �=‰=Ð$ØØ�
‰
×ÑÔð=	!Ø�}‰}Ð(Øðv �J‰J×ÑÕ ðs �|Š|Ü )× 1Ñ 1× 9Ñ 9Ø—L‘Lð!.Ø'+§y¡yØ"&×"4Ñ"4ñ!.ð ×,Ñ,ñ!.�•ô !*× 1Ñ 1× 9Ñ 9ð !.à/°×1AÑ1Aðð #'×"4Ñ"4ñ	!.ð
 ×,Ñ,ñ!.�”ð !ŸM™M×1Ñ1°$·-±-Ó@ˆDŒMô  )Ÿ™×>Ñ>Ü×&Ñ&ØŸ*™*¨d¯o©oð 'ó ?ó ˆDÔð 26×1GÑ1GˆD×ÑÔ.ä'Ÿo™o×=Ñ=Ü×&Ñ&¨T¯Z©ZÐ&Ó8óˆDŒOð 15×0EÑ0EˆD�O‰OÔ-áô &ŸO™O×;Ñ;Ü)×0Ñ0°t·z±zÐ0ÓBó�	ð /3×.DÑ.D�	Ô+ðØ—M‘M×)Ñ)¨)Ô4ð �J‰J×ÑÕ øô !×.Ñ.ò Ùðûô ×*Ñ*ò 	ð �}‰}Ð(Ø—‘×&Ñ&Ô(à ˆDŒMØ ˆDŒMØð	ûð �J‰J×ÑÕ ús=   ©J ÁG#J È5I+ É+JÉ>J Ê JÊJ ÊA	KËK ËK,c                 ó^  — | j                  d¬«       | j                  j                  | j                  ||t	        | j                  |«      «      | j                  j                  «       t	        | j                  |«      «      t	        | j                  | j                  |«      «      «      f«       y)z1Store return value and state of an executed task.T)r[   N)	r]   r9   rW   r:   r   Úencoder$   ÚnowÚcurrent_task_children)r?   Útask_idÚresultÚstateÚ	tracebackÚrequestrA   s          r   Ú_store_resultzCassandraBackend._store_resultÖ   s…   € ð 	×Ñ 4ÐÔ(à�‰×Ñ˜d×.Ñ.ØØÜ�$—+‘+˜fÓ%Ó&Ø�H‰H�L‰L‹NÜ�$—+‘+˜iÓ(Ó)Ü�$—+‘+˜d×8Ñ8¸ÓAÓBÓCð1
õ 	r   c                  ó   — y)Nzcassandra://r   )r?   Úinclude_passwords     r   Úas_urizCassandraBackend.as_uriä   s   € Ør   c           
      óP  — | j                  «        | j                  j                  | j                  |f«      j	                  «       }|st
        j                  ddœS |\  }}}}}| j                  ||| j                  |«      || j                  |«      | j                  |«      dœ«      S )z$Get task meta-data for a task by id.N)Ústatusrc   )rb   rl   rc   Ú	date_donere   Úchildren)	r]   r9   rW   r;   Úoner   ÚPENDINGÚmeta_from_decodedÚdecode)r?   rb   Úresrl   rc   rm   re   rn   s           r   Ú_get_task_meta_forz#CassandraBackend._get_task_meta_forç   sš   € à×ÑÔà�m‰m×#Ñ# D§O¡O°g°[ÓA×EÑEÓGˆÙÜ$Ÿn™n¸Ñ=Ð=à9<Ñ6ˆ�˜	 9¨hà×%Ñ%ØØØ—k‘k &Ó)Ø"ØŸ™ YÓ/ØŸ™ HÓ-ñ'
ó ð 	r   c                 ó–   •— |si n|}|j                  | j                  | j                  | j                  dœ«       t        ‰| �  ||«      S )N)r'   r*   r+   )Úupdater'   r*   r+   r    Ú
__reduce__)r?   ÚargsrA   rH   s      €r   rw   zCassandraBackend.__reduce__ú   sF   ø€ Ù!‘ vˆØ�‰ØŸ™ØŸ™Ø—j‘jñ"ô	#ô ‰wÑ! $¨Ó/Ð/r   )NNNNiR#  N)F)NN)T)r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   r(   Úsupports_autoexpirer!   r]   rg   rj   rt   rw   Ú__classcell__)rH   s   @r   r   r   G   sK   ø„ ñð €Gà€KàÐàJNØ(,õ4'ólF!ðR /3óóò÷&0ñ 0r   r   )r|   r<   Úceleryr   Úcelery.exceptionsr   Úcelery.utils.logr   Úbaser   r"   Úcassandra.authÚcassandra.clusterÚcassandra.queryÚImportErrorÚ__all__ry   Úloggerr#   r7   r-   r,   rS   rU   rV   r.   r   r   r   r   r   Ú<module>r‰      sž   ðÙ FÛ å Ý 2Ý 'å ðÛÛÛÛð
  €á	�HÓ	€ð€ð
%Ð !ð
 GÐ à@Ð ð€ð€ð
Ð ð€	ò
ôy0�{õ y0øðq ò Ø‚Iðús    A ÁA#Á"A#