Ë
    ˜V.j�  ã                   ó  — d 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Z	dZ
ej                  j                  d«      xs dZ eej                  j                  d	«      xs e
«      ZdgZ eed
«      ZdZdZdZdZ G d„ de«      Zd„ Zdd„Zy)a6  Remote Debugger.

Introduction
============

This is a remote debugger for Celery tasks running in multiprocessing
pool workers.  Inspired by a lost post on dzone.com.

Usage
-----

.. code-block:: python

    from celery.contrib import rdb
    from celery import task

    @task()
    def add(x, y):
        result = x + y
        rdb.set_trace()
        return result

Environment Variables
=====================

.. envvar:: CELERY_RDB_HOST

``CELERY_RDB_HOST``
-------------------

    Hostname to bind to.  Default is '127.0.0.1' (only accessible from
    localhost).

.. envvar:: CELERY_RDB_PORT

``CELERY_RDB_PORT``
-------------------

    Base port to bind to.  Default is 6899.
    The debugger will try to find an available port starting from the
    base port.  The selected port will be logged by the worker.
é    N)ÚPdb)Úcurrent_process)ÚCELERY_RDB_HOSTÚCELERY_RDB_PORTÚDEFAULT_PORTÚRdbÚdebuggerÚ	set_traceió  r   z	127.0.0.1r   Ú	_getframezs{self.ident}: Couldn't find an available port.

Please specify one using the CELERY_RDB_PORT environment variable.
z‰{self.ident}: Ready to connect: telnet {self.host} {self.port}

Type `exit` in session to continue.

{self.ident}: Waiting for client...
z5{self.ident}: Now in session with {self.remote_addr}.z4{self.ident}: Session with {self.remote_addr} ended.c                   ó�   ‡ — e Zd ZdZdZdZdZeedde	j                  fˆ fd„	Zdd„Zd„ Zd	„ Zd
„ Zd„ Zd„ ZexZZd„ ZexZZd„ Zˆ xZS )r   zRemote debugger.zRemote DebuggerNéd   r   c                 óX  •— d| _         || _        t        j                  t        j                  f| _        | j                  ||||«      \  | _        }| j                  j                  d«       | j                  j                  d«       | j                  › d|› �| _        || _        || _        | j                  t        j!                  | ¬«      «       | j                  j#                  «       \  | _        }| j$                  j                  d«       dj'                  d„ |D «       «      | _        | j                  t*        j!                  | ¬«      «       | j$                  j-                  d«      x| _        xt        _        t        _        t0        ‰| �e  d| j.                  | j.                  ¬«       y )	NTé   Ú:©Úselfc              3   ó2   K  — | ]  }t        |«      –— Œ y ­w©N)Ústr)Ú.0Úvs     úTC:\xampp\htdocs\tradingbinance\backend\.venv\Lib\site-packages\celery/contrib/rdb.pyÚ	<genexpr>zRdb.__init__.<locals>.<genexpr>n   s   è ø€ Ð#<±G¨q¤C¨§F±Gùs   ‚ÚrwÚtab)ÚcompletekeyÚstdinÚstdout)ÚactiveÚoutÚsysr   r   Ú_prev_handlesÚget_avail_portÚ_sockÚsetblockingÚlistenÚmeÚidentÚhostÚportÚsayÚBANNERÚformatÚacceptÚ_clientÚjoinÚremote_addrÚSESSION_STARTEDÚmakefileÚ_handleÚsuperÚ__init__)	r   r)   r*   Úport_search_limitÚ	port_skewr    Ú	this_portÚaddressÚ	__class__s	           €r   r6   zRdb.__init__[   sJ  ø€ àˆŒØˆŒä ŸY™Y¬¯
©
Ð2ˆÔà $× 3Ñ 3Ø�$Ð)¨9ó!
ÑˆŒ
�Ið 	�
‰
×Ñ˜qÔ!Ø�
‰
×Ñ˜!ÔØŸ™�y  ) Ð-ˆŒ
ØˆŒ	ØˆŒ	Ø�‰”—‘ D�Ó)Ô*à $§
¡
× 1Ñ 1Ó 3ÑˆŒ�gØ�‰× Ñ  Ô#ØŸ8™8Ñ#<±GÓ#<Ó<ˆÔØ�‰”×'Ñ'¨TÐ'Ó2Ô3Ø04·±×0EÑ0EÀdÓ0KÐKˆŒÐK”s”y¤3¤:Ü‰Ñ UØ#Ÿ|™|°D·L±Lð 	õ 	Bó    c                 óp  — 	 t        «       j                  j                  d«      \  }}t        |«      }d }t        |«      D ]„  }t        j                  t        j                  t        j                  «      }|j                  t        j                  t        j                  d«       ||z   |z   }	 |j                  ||f«       ||fc S  t#        t$        j'                  | ¬«      «      ‚# t        $ r Y Œ¾w xY w# t        $ r7}	|	j                  t        j                  t        j                   fv rY d }	~	Œï‚ d }	~	ww xY w)NÚ-r   r   )r   ÚnameÚsplitÚintÚ
ValueErrorÚrangeÚsocketÚAF_INETÚSOCK_STREAMÚ
setsockoptÚ
SOL_SOCKETÚSO_REUSEADDRÚbindÚOSErrorÚerrnoÚ
EADDRINUSEÚEINVALÚ	ExceptionÚNO_AVAILABLE_PORTr-   )
r   r)   r*   Úsearch_limitÚskewÚ_r9   Úir$   Úexcs
             r   r#   zRdb.get_avail_portt   s  € ð	Ü%Ó'×,Ñ,×2Ñ2°3Ó7‰GˆAˆtÜ�t“9ˆDð ˆ	Ü�|Ö$ˆAÜ—M‘M¤&§.¡.´&×2DÑ2DÓEˆEØ×ÑœV×.Ñ.´×0CÑ0CÀQÔGØ˜t™ a™ˆIð(Ø—
‘
˜D )Ð,Ô-ð ˜iÐ'Ò'ð %ô Ô)×0Ñ0°dÐ0Ó;Ó<Ð<øô ò 	Ùð	ûô ò Ø—9‘9¤×!1Ñ!1´5·<±<Ð @Ñ@ÜØûðús/   ‚1C& Â-C5Ã&	C2Ã1C2Ã5	D5Ã>,D0Ä/D0Ä0D5c                 ó2   — t        || j                  ¬«       y )N)Úfile)Úprintr    )r   Úms     r   r+   zRdb.say‰   s   € Üˆa�d—h‘hÖr<   c                 ó   — | S r   © r   s    r   Ú	__enter__zRdb.__enter__Œ   s   € Øˆr<   c                 ó$   — | j                  «        y r   )Ú_close_session)r   Úexc_infos     r   Ú__exit__zRdb.__exit__�   s   € Ø×ÑÕr<   c                 óº  — | j                   x\  | _        | _        \  t        _        t        _        | j                  rŸ| j
                  �| j
                  j                  «        | j                  �| j                  j                  «        | j                  �| j                  j                  «        d| _        | j                  t        j                  | ¬«      «       y y )NFr   )r"   r   r   r!   r   r4   Úcloser/   r$   r+   ÚSESSION_ENDEDr-   r   s    r   r^   zRdb._close_session’   sŸ   € Ø:>×:LÑ:LÐLÑˆŒ
�D”KÑ"7¤#¤)¬S¬ZØ�;Š;Ø�|‰|Ð'Ø—‘×"Ñ"Ô$Ø�|‰|Ð'Ø—‘×"Ñ"Ô$Ø�z‰zÐ%Ø—
‘
× Ñ Ô"ØˆDŒKØ�H‰H”]×)Ñ)¨tÐ)Ó4Õ5ð r<   c                 óD   — | j                  «        | j                  «        y©Nr   )r^   Úset_continue©r   Úargs     r   Údo_continuezRdb.do_continuež   s   € Ø×ÑÔØ×ÑÔØr<   c                 óD   — | j                  «        | j                  «        yre   )r^   Úset_quitrg   s     r   Údo_quitzRdb.do_quit¤   s   € Ø×ÑÔØ�‰ŒØr<   c                 ó.   — t        j                  d «       y r   )r!   Úsettracer   s    r   rk   zRdb.set_quitª   s   € ä�‰�TÕr<   )r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r'   Ú
_prev_outsr$   r   r   r!   r   r6   r#   r+   r\   r`   r^   ri   Údo_cÚdo_contrl   Údo_qÚdo_exitrk   Ú__classcell__)r;   s   @r   r   r   T   sk   ø„ Ùà	€BØ€JØ€Eà+°/Ø#&°"¸#¿*¹*õBó2=ò* òòò
6òð !Ð €Dˆ7òð Ð€Dˆ7ör<   r   c                  óZ   — t         d   } | �| j                  st        «       x} t         d<   | S )z8Return the current debugger instance, or create if none.r   )Ú_currentr   r   )Úrdbs    r   r	   r	   ¯   s+   € ä
�1‰+€CØ
€{˜#Ÿ*š*Ü›EÐ!ˆŒh�q‰kØ€Jr<   c                 ó`   — | €t        «       j                  } t        «       j                  | «      S )z:Set break-point at current location, or a specified frame.)Ú_frameÚf_backr	   r
   )Úframes    r   r
   r
   ·   s%   € à€}Ü“—‘ˆÜ‹:×Ñ Ó&Ð&r<   r   )rr   rL   ÚosrD   r!   Úpdbr   Úbilliard.processr   Ú__all__r   ÚenvironÚgetr   rA   r   rz   Úgetattrr}   rP   r,   r2   rc   r   r	   r
   r[   r<   r   Ú<module>r‡      s¬   ðñ)óT Û 	Û Û 
Ý å ,ð€ð
 €à—*‘*—.‘.Ð!2Ó3ÒB°{€Ù�b—j‘j—n‘nÐ%6Ó7ÒG¸<ÓH€ð ˆ6€á	��kÓ	"€ðÐ ð
€ð J€ØF€ôXˆ#ô Xòvô'r<   