B
    R[*                 @   s   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
mZmZmZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ G dd dZG dd deZedddZedkre eZe dej! dS )    N)Future)	coroutine)IOLoop)IOStream)
SASLParsermake_auth_externalBEGINAuthenticationError)get_bus)ParserMessageType)	ProxyBase)Router)message_busc               @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )DBusConnectionc                sv   t   _t  _tt _t  _d  _t	j	t	j
d _t jdd _ fdd} j||  jj jd d S )N)Zfamilyi   )Zread_chunk_sizec                  s    j dt   d S )N    )streamwriter    )selfr   8lib/python3.7/site-packages/jeepney/integrate/tornado.py	connected   s    z*DBusConnection.__init__.<locals>.connected)Zstreaming_callback)r   auth_parserr   parserr   r   routerauthenticationunique_namesocketZAF_UNIXZ_sockr   r   ZconnectZread_until_closedata_received)r   bus_addrr   r   )r   r   __init__   s    
zDBusConnection.__init__c             C   s*   | j t | jd | | jj d S )NT)r   r   r   r   Z
set_resultdata_received_post_authr   buffer)r   r   r   r   _authenticated   s    zDBusConnection._authenticatedc             C   sR   | j  r| |S | j| | jjr2|   n| jjrN| j t	| jj d S )N)
r   doner!   r   feedZauthenticatedr#   errorZset_exceptionr	   )r   datar   r   r   r   $   s    


zDBusConnection.data_receivedc             C   s&   x | j |D ]}| j| qW d S )N)r   r%   r   Zincoming)r   r'   msgr   r   r   r!   .   s    z&DBusConnection.data_received_post_authc             C   s6   | j  std| j|}| }| j| |S )Nz/Wait for authentication before sending messages)r   r$   RuntimeErrorr   ZoutgoingZ	serialiser   r   )r   messageZfuturer'   r   r   r   send_message2   s    
zDBusConnection.send_messageN)__name__
__module____qualname__r    r#   r   r!   r+   r   r   r   r   r      s
   
r   c                   s,   e Zd Z fddZdd Zdd Z  ZS )Proxyc                s   t  | || _d S )N)superr    _connection)r   ZmsggenZ
connection)	__class__r   r   r    <   s    zProxy.__init__c             C   s   d | j| jS )NzProxy({}, {}))formatZ_msggenr1   )r   r   r   r   __repr__@   s    zProxy.__repr__c                s    fdd}|S )Nc                 s(    | |}|j jtjkstj|S )N)headerZmessage_typer   Zmethod_callAssertionErrorr1   r+   )argskwargsr(   )make_msgr   r   r   innerD   s    
z!Proxy._method_call.<locals>.innerr   )r   r9   r:   r   )r9   r   r   _method_callC   s    zProxy._method_call)r,   r-   r.   r    r4   r;   __classcell__r   r   )r2   r   r/   ;   s   r/   SESSIONc             c   s2   t | }t|}|jV  tt| V d |_|S )Nr   )r
   r   r   r/   r   ZHellor   )Zbusr   connr   r   r   connect_and_authenticateL   s
    r?   __main__zUnique name is:)r=   )"r   Ztornado.concurrentr   Ztornado.genr   Ztornado.ioloopr   Ztornado.iostreamr   Zjeepney.authr   r   r   r	   Zjeepney.busr
   Zjeepney.low_levelr   r   Zjeepney.wrappersr   Zjeepney.routingr   Zjeepney.bus_messagesr   r   r/   r?   r,   ZcurrentZrun_syncr>   printr   r   r   r   r   <module>   s"   -