
    >a                     l   S SK JrJrJr  S SKJr  S SKrS SKJr  S SK	J
r
  S SKJr  S SKJr  S SKJr  S S	KJrJr  S S
KJrJrJrJr  S SKJr  S SKJrJrJrJr  S SK J!r!J"r"  S SK#J$r$  S SK%J&r&  SSK'J(r(J)r)J*r*J+r+J,r,  \
" SSS9   " S S5      r-SS jr. " S S5      r/ " S S\!5      r0 " S S5      r1SS jr2g)     )as_completedFuturewait_for)countN)Optional)warn)IOLoop)IOStream)Event)Queue	QueueFull)
SASLParsermake_auth_externalBEGINAuthenticationError)get_bus)ParserMessageTypeMessageMessageFlag)	ProxyBase
unwrap_msg)Router)message_bus   )MessageFiltersFilterHandleReplyMatcherRouterClosedcheck_replyablezsjeepney.io.tornado is deprecated. Tornado is now built on top of asyncio, so please use jeepney.io.asyncio instead.   )
stacklevelc                   L    \ rS rSrS\4S jrSS.S\4S jjrS\4S	 jrS
 r	Sr
g)DBusConnection   streamc                 X    Xl         [        5       U l        [        SS9U l        S U l        g )Nr   )start)r&   r   parserr   outgoing_serialunique_name)selfr&   s     2lib/python3.13/site-packages/jeepney/io/tornado.py__init__DBusConnection.__init__   s$    h$1~    Nserialmessagec                   #    Uc  [        U R                  5      nU R                  R                  UR	                  U5      5      I S h  vN   g  N7fN)nextr*   r&   write	serialiser,   r3   r2   s      r-   sendDBusConnection.send!   s=     >$../Fkk 1 1& 9:::s   AAA	Areturnc                    #     U R                   R                  5       nUb  U$ U R                  R                  SSS9I S h  vN nU R                   R	                  U5        M^   N!7f)NTi   partial)r)   get_next_messager&   
read_bytesadd_data)r,   msgbs      r-   receiveDBusConnection.receive'   s]     ++..0C
kk,,T4,@@AKK  # 
 As   >A$ A""A$c                 8    U R                   R                  5         g r5   )r&   closer,   s    r-   rH   DBusConnection.close0   s    r0   )r*   r)   r&   r+   )__name__
__module____qualname____firstlineno__r
   r.   r   r:   rE   rH   __static_attributes__ r0   r-   r$   r$      s0     x   6: ;' ;$w $r0   r$   c                   #    [        U 5      n[        [        R                  " [        R                  S95      nUR	                  U5      I S h  vN   UR                  S[        5       -   5      I S h  vN   [        5       nUR                  (       d`  UR                  UR                  SSS9I S h  vN 5        UR                  (       a  [        UR                  5      eUR                  (       d  M`  UR                  [        5      I S h  vN   [        U5      n[        U5       n[!        [#        [$        U5      R'                  5       S5      I S h  vN nUS   Ul        S S S 5        U$  GN N N Nf N!! , (       d  f       U$ = f7f)N)family    i   Tr>   
   r   )r   r
   socketAF_UNIXconnectr7   r   r   authenticatedfeedrA   errorr   r   r$   
DBusRouterr   Proxyr   Hellor+   )busbus_addrr&   auth_parserconnrouter
reply_bodys          r-   open_dbus_connectionrd   4   s2    s|Hfmm6>>:;F
..
"""
,,u133
444,K''v00t0DDE%k&7&788 '''
 ,,u
&!D	D	V#E+v$>$D$D$FKK
%a= 
 K# #4 E 
 L 
	 Ksx   AFE)#F1E,2=F/E.0?F1F	E0
F$,E4E2E4F,F.F0F2E44
F>Fc                       \ rS rSrS\4S jrSS.S jrS rSSS	.S
\\	   4S jjr
S rS rS r\S 5       rS\4S jrS\4S jrS rSrg)r[   K   ra   c                     Xl         [        5       U l        [        5       U l        [        5       U l        [        R                  " 5       R                  U R                  5        [        [        5      U l        g r5   )ra   r   _repliesr   _filtersr   _stop_receivingr	   currentadd_callback	_receiverr   r   rb   )r,   ra   s     r-   r.   DBusRouter.__init__L   sJ    	$&($w%%dnn5 Vnr0   Nr1   c                R   #    U R                   R                  XS9I S h  vN   g  N7f)Nr1   )ra   r:   r9   s      r-   r:   DBusRouter.sendV   s     iinnWn444s   '%'c                 z  #    [        U5        U R                  R                  5       (       a  [        S5      e[	        U R
                  R                  5      nU R                  R                  U[        5       5       nU R                  XS9I S h  vN   UI S h  vN sS S S 5        $  N N! , (       d  f       g = f7f)NzThis DBusRouter has stoppedr1   )r    rj   is_setr   r6   ra   r*   rh   catchr   r:   )r,   r3   r2   	reply_futs       r-   send_and_get_replyDBusRouter.send_and_get_replyY   s      &&((<==dii//0]]  2i))G)333#O 323# 32sB   A9B;;B*B&	B*B(B*
B;&B*(B**
B84B;r   )queuebufsizerw   c                R    [        U R                  X=(       d    [        U5      5      $ )aT  Create a filter for incoming messages

Usage::

    with router.filter(rule) as queue:
        matching_msg = await queue.get()

:param jeepney.MatchRule rule: Catch messages matching this rule
:param tornado.queues.Queue queue: Matched messages will be added to this
:param int bufsize: If no queue is passed in, create one with this size
)r   ri   r   )r,   rulerw   rx   s       r-   filterDBusRouter.filterd   s     DMM41H%.IIr0   c                 8    U R                   R                  5         g r5   )rj   setrI   s    r-   stopDBusRouter.stopr   s      "r0   c                     U $ r5   rP   rI   s    r-   	__enter__DBusRouter.__enter__u   s    r0   c                 $    U R                  5         g)NF)r   r,   exc_typeexc_valexc_tbs       r-   __exit__DBusRouter.__exit__x   s    		r0   c                 .    U R                   R                  $ r5   )ra   r+   rI   s    r-   r+   DBusRouter.unique_name~   s    yy$$$r0   r3   c                 2  #    UR                   R                  [        R                  :X  aN  UR                   R                  [
        R                  -  (       d"  [        U R                  U5      I S h  vN 5      $ U R                  U5      I S h  vN   g  N" N7fr5   )
headermessage_typer   method_returnflagsr   no_reply_expectedr   ru   r:   )r,   r3   s     r-   send_messageDBusRouter.send_message   si     ++{/H/HH --0M0MMD$;$;G$DDEE))G$$$ E$s$   A.B0B1BBBBrC   c                     U R                   R                  U5      (       a  gU R                  R                  U5       H  n UR                  R                  U5        M!     g! [         a     M1  f = f)zHandle one received messageN)rh   dispatchri   matchesrw   
put_nowaitr   )r,   rC   r{   s      r-   	_dispatchDBusRouter._dispatch   s^    ==!!#&&mm++C0F'', 1  s   A!!
A/.A/c                   #      [        U R                  R                  5       U R                  R	                  5       /5       H_  nUI Sh  vN nUc#    SU l        U R                  R                  5         gU R                  U5        U R                  R                  U5        Ma     M   N\! SU l        U R                  R                  5         f = f7f)z'Receiver loop - runs in a separate taskNF)r   ra   rE   rj   wait
is_runningrh   drop_allr   rb   incoming)r,   cororC   s      r-   rm   DBusRouter._receiver   s     	%($))*;*;*=t?S?S?X?X?Z)[\D $*C{ $DOMM""$ NN3'KK((- ] $ $DOMM""$s/   CAB) 
B'B) "C53B) )#CC)ri   rh   rj   ra   r   rb   )rK   rL   rM   rN   r$   r.   r:   ru   r   r   r{   r   r   r   propertyr+   r   r   r   rm   rO   rP   r0   r-   r[   r[   K   sv    %^ % -1 5	% 7;A JXe_ J# % %%' %	W 	%r0   r[   c                   <   ^  \ rS rSrS\4U 4S jjrS rS rSrU =r	$ )r\      rb   c                 0   > [         TU ]  U5        X l        g r5   )superr.   _router)r,   msggenrb   	__class__s      r-   r.   Proxy.__init__   s     r0   c                 N    SR                  U R                  U R                  5      $ )NzProxy({}, {}))format_msggenr   rI   s    r-   __repr__Proxy.__repr__   s    %%dllDLLAAr0   c                    ^ ^ UU 4S jnU$ )Nc                     >#    T" U 0 UD6nUR                   R                  [        R                  L d   e[	        TR
                  R                  U5      I S h  vN 5      $  N7fr5   )r   r   r   method_callr   r   ru   )argskwargsrC   make_msgr,   s      r-   inner!Proxy._method_call.<locals>.inner   sS     D+F+C::**k.E.EEEEDLL$C$CC$HHIIHs   AA#A!	A#rP   )r,   r   r   s   `` r-   _method_callProxy._method_call   s    	J
 r0   )r   )
rK   rL   rM   rN   r[   r.   r   r   rO   __classcell__)r   s   @r-   r\   r\      s    z B r0   r\   c                   2    \ rS rSrSrSrSS jrS rS rSr	g)_RouterContext   Nc                     Xl         g r5   r^   )r,   r^   s     r-   r.   _RouterContext.__init__   s    r0   c                    #    [        U R                  5      I S h  vN U l        [        U R                  5      U l        U R                  $  N/7fr5   )rd   r^   ra   r[   rb   rI   s    r-   
__aenter___RouterContext.__aenter__   s7     .txx88	 +{{ 9s   AA0Ac                 t   #    U R                   R                  5         U R                  R                  5         g 7fr5   )rb   r   ra   rH   r   s       r-   	__aexit___RouterContext.__aexit__   s#     		s   68)r^   ra   rb   SESSION)
rK   rL   rM   rN   ra   rb   r.   r   r   rO   rP   r0   r-   r   r      s    DF
r0   r   c                     [        U 5      $ )a{  Open a D-Bus 'router' to send and receive messages.

Use as an async context manager::

    async with open_dbus_router() as req:
        ...

:param str bus: 'SESSION' or 'SYSTEM' or a supported address.
:return: :class:`DBusRouter`

This is a shortcut for::

    conn = await open_dbus_connection()
    async with conn:
        async with conn.router() as req:
            ...
)r   r   s    r-   open_dbus_routerr      s    $ #r0   r   )3asyncior   r   r   	itertoolsr   rU   typingr   warningsr   tornado.ioloopr	   tornado.iostreamr
   tornado.locksr   tornado.queuesr   r   jeepney.authr   r   r   r   jeepney.busr   jeepney.low_levelr   r   r   r   jeepney.wrappersr   r   jeepney.routingr   jeepney.bus_messagesr   commonr   r   r   r   r    r$   rd   r[   r\   r   r   rP   r0   r-   <module>r      s    2 2     ! %  + S S  G G 2 " ,   :FGI 4.[% [%|I " "r0   