Ë
    UV.j°(  ã                  ó4  — d Z ddlmZ ddlZddlZddl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mZ dd	lmZ dd
lmZmZ ddlmZmZ ddlmZ dZdj9                   eee«      «      Zej@                  dk(  r>ddl!Z!ddl"Z"ddl#Z#e"jH                  Z%dZ&e"jN                  Z( e!jR                  «       Z*d„ Z+d„ Z,n*ej@                  dk(  rddl-Z-ddl-m%Z%m&Z& d„ Z+d„ Z,n e.d«      ‚ edg d¢«      Z/ G d„ dej`                  «      Z0 G d„ dejb                  «      Z1y)a†	  File-system Transport module for kombu.

Transport using the file-system as the message store. Messages written to the
queue are stored in `data_folder_in` directory and
messages read from the queue are read from `data_folder_out` directory. Both
directories must be created manually. Simple example:

* Producer:

.. code-block:: python

    import kombu

    conn = kombu.Connection(
        'filesystem://', transport_options={
            'data_folder_in': 'data_in', 'data_folder_out': 'data_out'
        }
    )
    conn.connect()

    test_queue = kombu.Queue('test', routing_key='test')

    with conn as conn:
        with conn.default_channel as channel:
            producer = kombu.Producer(channel)
            producer.publish(
                        {'hello': 'world'},
                        retry=True,
                        exchange=test_queue.exchange,
                        routing_key=test_queue.routing_key,
                        declare=[test_queue],
                        serializer='pickle'
            )

* Consumer:

.. code-block:: python

    import kombu

    conn = kombu.Connection(
        'filesystem://', transport_options={
            'data_folder_in': 'data_out', 'data_folder_out': 'data_in'
        }
    )
    conn.connect()

    def callback(body, message):
        print(body, message)
        message.ack()

    test_queue = kombu.Queue('test', routing_key='test')

    with conn as conn:
        with conn.default_channel as channel:
            consumer = kombu.Consumer(
                conn, [test_queue], accept=['pickle']
            )
            consumer.register_callback(callback)
            with consumer:
                conn.drain_events(timeout=1)

Features
========
* Type: Virtual
* Supports Direct: Yes
* Supports Topic: Yes
* Supports Fanout: Yes
* Supports Priority: No
* Supports TTL: No

Connection String
=================
Connection string is in the following format:

.. code-block::

    filesystem://

Transport Options
=================
* ``data_folder_in`` - directory where are messages stored when written
  to queue.
* ``data_folder_out`` - directory from which are messages read when read from
  queue.
* ``store_processed`` - if set to True, all processed messages are backed up to
  ``processed_folder``.
* ``processed_folder`` - directory where are backed up processed files.
* ``control_folder`` - directory where are exchange-queue table stored.
é    )ÚannotationsN)Ú
namedtuple)ÚPath)ÚEmpty)Ú	monotonic)ÚChannelError)Úvirtual)Úbytes_to_strÚstr_to_bytes)ÚdumpsÚloads)Úcached_property)é   r   r   Ú.Úntc                ó„   — t        j                  | j                  «       «      }t        j                  ||ddt        «       y)úCreate file lock.r   ì     þ N)Ú	win32fileÚ_get_osfhandleÚfilenoÚ
LockFileExÚ__overlapped)ÚfileÚflagsÚhfiles      ú\C:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\kombu/transport/filesystem.pyÚlockr   }   s.   € ä×(Ñ(¨¯©«Ó7ˆÜ×Ñ˜U E¨1¨j¼,ÕGó    c                ó‚   — t        j                  | j                  «       «      }t        j                  |ddt        «       y)úRemove file lock.r   r   N)r   r   r   ÚUnlockFileExr   )r   r   s     r   Úunlockr#   ‚   s,   € ä×(Ñ(¨¯©«Ó7ˆÜ×Ñ˜u a¨´\ÕBr   Úposix)ÚLOCK_EXÚLOCK_SHc                óL   — t        j                  | j                  «       |«       y)r   N)ÚfcntlÚflockr   )r   r   s     r   r   r   �   s   € ä�‰�D—K‘K“M 5Õ)r   c                óh   — t        j                  | j                  «       t         j                  «       y)r!   N)r(   r)   r   ÚLOCK_UN)r   s    r   r#   r#   ‘   s   € ä�‰�D—K‘K“M¤5§=¡=Õ1r   z9Filesystem plugin only defined for NT and POSIX platformsÚexchange_queue_t)Úrouting_keyÚpatternÚqueuec                  óž   — e Zd ZdZdZd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zed
„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zed„ «       Zy)ÚChannelzFilesystem Channel.Tc                óª  — | j                   |› d�z  }	 |j                  d«      }	 t        |t        «       t	        t        |j                  «       «      «      }|D �cg c]
  }t        |Ž ‘Œ c}t        |«       |j                  «        S c c}w # t        |«       |j                  «        w xY w# t        $ r g cY S t        $ r t        d|› �«      ‚w xY w)Nú	.exchangeÚrzCannot open )Úcontrol_folderÚopenr   r&   r   r
   Úreadr,   r#   ÚcloseÚFileNotFoundErrorÚOSErrorr   )ÚselfÚexchanger   Úf_objÚexchange_tableÚqs         r   Ú	get_tablezChannel.get_table¤   s¼   € Ø×"Ñ"¨ z°Ð%;Ñ;ˆð	6Ø—I‘I˜c“NˆEðÜ�UœGÔ$Ü!&¤|°E·J±J³LÓ'AÓ!B�Ù6DÓE±n°Ô(¨!Ò,°nÑEä�u”Ø—‘•ùò Føä�u”Ø—‘•ûÜ ò 	ØŠIÜò 	6Ü ¨d¨VÐ4Ó5Ð5ð	6ús:   ”B. ¦6B ÁB	Á+B Á-B. Â	B ÂB+Â+B. Â.CÂ;Cc                ó  — | j                   |› d�z  }| j                   j                  d¬«       t        |xs d|xs d|xs d«      }	 |j                  «       r¥|j	                  dd¬«      }t        |t        «       t        t        |j                  «       «      «      }|D �	cg c]
  }	t        |	Ž ‘Œ }
}	||
vr�|
j                  d|«       |j                  d«       |j                  t        t        |
«      «      «       nI|j	                  dd¬«      }t        |t        «       |g}
|j                  t        t        |
«      «      «       t        |«       |j!                  «        y c c}	w # t        «       |j!                  «        w xY w)	Nr3   T)Úexist_okÚ zrb+r   ©Ú	bufferingÚwb)r5   Úmkdirr,   Úexistsr6   r   r%   r   r
   r7   ÚinsertÚseekÚwriter   r   r#   r8   )r;   r<   r-   r.   r/   r   Ú	queue_valr=   r>   r?   Úqueuess              r   Ú_queue_bindzChannel._queue_bind´   s?  € Ø×"Ñ"¨ z°Ð%;Ñ;ˆØ×Ñ×!Ñ!¨4Ð!Ô0Ü$ [Ò%6°B¸ºÀ2Ø%*¢[¨bó2ˆ	ð	Ø�{‰{Œ}ØŸ	™	 %°1˜	Ó5�Ü�UœGÔ$Ü!&¤|°E·J±J³LÓ'AÓ!B�Ù8FÓG¹°1Ô*¨AÒ.¸�ÐGØ FÑ*Ø—M‘M ! YÔ/Ø—J‘J˜q”MØ—K‘K¤¬U°6«]Ó ;Õ<àŸ	™	 $°!˜	Ó4�Ü�UœGÔ$Ø#˜�Ø—‘œL¬¨v«Ó7Ô8ä�5ŒMØ�K‰K�Mùò Høô �5ŒMØ�K‰K�Mús    Á	AE( Â"E#Â1BE( Å#E( Å(Fc                ól   — | j                  |«      D ]   } | j                  |j                  |fi |¤Ž Œ" y ©N)r@   Ú_putr/   )r;   r<   Úpayloadr-   Úkwargsr?   s         r   Ú_put_fanoutzChannel._put_fanoutÌ   s.   € Ø—‘ Ö)ˆAØˆD�I‰I�a—g‘g˜wÑ1¨&Ó1ñ *r   c                ó  — dj                  t        t        t        «       dz  «      «      t	        j
                  «       |«      }t        j                  j                  | j                  |«      }	 t        |dd¬«      }t        |t        «       |j                  t        t        |«      «      «       	 t%        |«       |j'                  «        y# t         $ r t#        d|›d�«      ‚w xY w# t%        «       |j'                  «        w xY w)	zPut `message` onto `queue`.z{}_{}.{}.msgiè  rF   r   rD   zCannot add file z to directoryN)ÚformatÚintÚroundr   ÚuuidÚuuid4ÚosÚpathÚjoinÚdata_folder_outr6   r   r%   rK   r   r   r:   r   r#   r8   )r;   r/   rR   rS   ÚfilenameÚfs         r   rQ   zChannel._putÐ   sË   € à!×(Ñ(¬¬U´9³;ÀÑ3EÓ-FÓ)GÜ)-¯©«°uó>ˆä—7‘7—<‘< × 4Ñ 4°hÓ?ˆð		Ü�X˜t¨qÔ1ˆAÜ�”GÔØ�G‰G”L¤ w£Ó0Õ1ô
 �1ŒIØ�G‰G�Iøô ò 	>ÜØ" 8 ,¨mÐ<ó>ð >ð	>ûô �1ŒIØ�G‰G�Iús   Á.AC ÃC%Ã%C( Ã(Dc                ó  — d|z   dz   }t        j                  | j                  «      }t        |«      }t	        |«      dkD  �r|j                  d«      }|j                  |«      dk  rŒ5| j                  r| j                  }nt        j                  «       }	 t        j                  t         j                  j                  | j                  |«      |«       t         j                  j                  ||«      }	 t!        |d«      }|j#                  «       }|j%                  «        | j                  st        j&                  |«       t+        t-        |«      «      S t/        «       ‚# t        $ r Y �Œ9w xY w# t        $ r t)        d|›d�«      ‚w xY w)zGet next message from `queue`.r   ú.msgr   ÚrbzCannot read file z from queue.)r[   ÚlistdirÚdata_folder_inÚsortedÚlenÚpopÚfindÚstore_processedÚprocessed_folderÚtempfileÚ
gettempdirÚshutilÚmover\   r]   r:   r6   r7   r8   Úremover   r   r
   r   )r;   r/   Ú
queue_findÚfolderr_   rk   r`   rR   s           r   Ú_getzChannel._getá   sV  € à˜5‘[ 6Ñ)ˆ
Ü—‘˜D×/Ñ/Ó0ˆÜ˜“ˆÜ�&‹k˜A‹oØ—z‘z !“}ˆHð �}‰}˜ZÓ(¨1Ò,Øà×#Ò#Ø#'×#8Ñ#8Ñ ä#+×#6Ñ#6Ó#8Ð ðä—‘œBŸG™GŸL™L¨×)<Ñ)<¸hÓGØ,ô.ô —w‘w—|‘|Ð$4°hÓ?ˆHðBÜ˜ 4Ó(�ØŸ&™&›(�Ø—‘”	Ø×+Ò+Ü—I‘I˜hÔ'ô
 œ gÓ.Ó/Ð/ä‹gˆøô# ò âðûô ò BÜ"Ø'¨ |°<Ð@óBð BðBús   Â>E  Ã5AE0 Å 	E-Å,E-Å0F	c                ó„  — d}d|z   dz   }t        j                  | j                  «      }t        |«      dkD  ry|j	                  «       }	 |j                  |«      dk  rŒ4t         j                  j                  | j                  |«      }t        j                  |«       |dz  }t        |«      dkD  rŒy|S # t        $ r Y Œw xY w)z!Remove all messages from `queue`.r   r   rb   r   )
r[   rd   re   rg   rh   ri   r\   r]   rp   r:   ©r;   r/   Úcountrq   rr   r_   s         r   Ú_purgezChannel._purge	  s±   € àˆØ˜5‘[ 6Ñ)ˆ
ä—‘˜D×/Ñ/Ó0ˆÜ�&‹k˜AŠoØ—z‘z“|ˆHðà—=‘= Ó,¨qÒ0ØäŸ7™7Ÿ<™<¨×(;Ñ(;¸XÓF�Ü—	‘	˜(Ô#à˜‘
�ô �&‹k˜A‹oð" ˆøô ò ñ ðús   Á	B3 ÁAB3 Â3	B?Â>B?c                óâ   — d}d|› d�}t        j                  | j                  «      }t        |«      dkD  r9|j	                  «       }|j                  |«      dk  rŒ3|dz  }t        |«      dkD  rŒ9|S )z<Return the number of messages in `queue` as an :class:`int`.r   r   rb   r   )r[   rd   re   rg   rh   ri   ru   s         r   Ú_sizezChannel._size"  sq   € àˆà˜˜˜t�_ˆ
Ü—‘˜D×/Ñ/Ó0ˆÜ�&‹k˜AŠoØ—z‘z“|ˆHð �}‰}˜ZÓ(¨1Ò,Øà�Q‰JˆEô �&‹k˜A‹oð ˆr   c                óB   — | j                   j                  j                  S rP   )Ú
connectionÚclientÚtransport_options©r;   s    r   r}   zChannel.transport_options3  s   € à�‰×%Ñ%×7Ñ7Ð7r   c                ó:   — | j                   j                  dd«      S )Nre   Údata_in©r}   Úgetr~   s    r   re   zChannel.data_folder_in7  s   € à×%Ñ%×)Ñ)Ð*:¸IÓFÐFr   c                ó:   — | j                   j                  dd«      S )Nr^   Údata_outr�   r~   s    r   r^   zChannel.data_folder_out;  s   € à×%Ñ%×)Ñ)Ð*;¸ZÓHÐHr   c                ó:   — | j                   j                  dd«      S )Nrj   Fr�   r~   s    r   rj   zChannel.store_processed?  s   € à×%Ñ%×)Ñ)Ð*;¸UÓCÐCr   c                ó:   — | j                   j                  dd«      S )Nrk   Ú	processedr�   r~   s    r   rk   zChannel.processed_folderC  s   € à×%Ñ%×)Ñ)Ð*<¸kÓJÐJr   c                óL   — t        | j                  j                  dd«      «      S )Nr5   Úcontrol)r   r}   r‚   r~   s    r   r5   zChannel.control_folderG  s!   € ä�D×*Ñ*×.Ñ.Ð/?ÀÓKÓLÐLr   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úsupports_fanoutr@   rN   rT   rQ   rs   rw   ry   Úpropertyr}   r   re   r^   rj   rk   r5   © r   r   r1   r1   Ÿ   s°   „ Ùà€Oò6ò ò02òò"&òPò2ð" ñ8ó ð8ð ñGó ðGð ñIó ðIð ñDó ðDð ñKó ðKð ñMó ñMr   r1   c                  ó¸   ‡ — e Zd ZdZej
                  j                  j                  d eg d¢«      ¬«      Ze	Z	 ej                  «       ZdZdZdZˆ fd„Zd„ Zˆ xZS )	Ú	TransportzFilesystem Transport.F)ÚdirectÚtopicÚfanout)ÚasynchronousÚexchange_typer   Ú
filesystemc                óH   •— t        ‰| �  |fi |¤Ž | j                  | _        y rP   )ÚsuperÚ__init__Úglobal_stateÚstate)r;   r|   rS   Ú	__class__s      €r   r›   zTransport.__init__[  s"   ø€ Ü‰Ñ˜Ñ* 6Ò*Ø×&Ñ&ˆ�
r   c                 ó   — y)NzN/Ar�   r~   s    r   Údriver_versionzTransport.driver_version_  s   € Ør   )rŠ   r‹   rŒ   r�   r	   r’   Ú
implementsÚextendÚ	frozensetr1   ÚBrokerStaterœ   Údefault_portÚdriver_typeÚdriver_namer›   r    Ú__classcell__)rž   s   @r   r’   r’   L  sc   ø„ Ùà×"Ñ"×-Ñ-×4Ñ4ØÙÒ =Ó>ð 5ó €Jð
 €Gà&�7×&Ñ&Ó(€LØ€LØ€KØ€Kô'ör   r’   )2r�   Ú
__future__r   r[   rn   rl   rY   Úcollectionsr   Úpathlibr   r/   r   Útimer   Úkombu.exceptionsr   Úkombu.transportr	   Úkombu.utils.encodingr
   r   Úkombu.utils.jsonr   r   Úkombu.utils.objectsr   ÚVERSIONr]   ÚmapÚstrÚ__version__ÚnameÚ
pywintypesÚwin32conr   ÚLOCKFILE_EXCLUSIVE_LOCKr%   r&   ÚLOCKFILE_FAIL_IMMEDIATELYÚLOCK_NBÚ
OVERLAPPEDr   r   r#   r(   ÚRuntimeErrorr,   r1   r’   r�   r   r   Ú<module>r¾      s  ðñYõv #ã 	Û Û Û Ý "Ý Ý Ý å )Ý #ß ;ß )Ý /à
€Ø�h‰h‘s˜3 Ó(Ó)€ð ‡7�7ˆd‚?ãÛÛà×.Ñ.€Gà€GØ×0Ñ0€GØ(�:×(Ñ(Ó*€LòHó
Cð ‡W�W�Òãß&ò*ó2ñ ØCóEð Eñ Ð0ÚAóCÐ ôjMˆg�o‰oô jMôZ�×!Ñ!õ r   