B
    R[                 @   s   d Z ddlZddlmZ ddlm  mZ ddlm	Z	 ddl
mZ ddlmZ G dd dZd	ZG d
d dZdZdddhZdd ZdddZdd Zedkre  dS )z5Generate a wrapper class from DBus introspection data    N)indent)Introspectable)connect_and_authenticate)__version__c               @   s$   e Zd Zdd Zdd Zdd ZdS )Methodc          	   C   s   |j d | _g | _g | _xd|dD ]V}y|j d }W n$ tk
rZ   dt| j}Y nX | j| | j|j d  q$W d S )Nnamezarg[@direction='in']zarg{}type)	attribr   in_args	signaturefindallKeyErrorformatlenappend)selfxml_nodeargr    r   .lib/python3.7/site-packages/jeepney/bindgen.py__init__   s    zMethod.__init__c             C   s   dj | jdS )Nz=def {name}(self):
    return new_method_call(self, '{name}')
)r   )r   r   )r   r   r   r   _make_code_noargs   s    zMethod._make_code_noargsc             C   sV   | j s|  S d| j }d| j}t| j dkr8dnd|}dj| j|||dS )Nz,     z({},)z({})zxdef {name}(self, {args}):
    return new_method_call(self, '{name}', '{signature}',
                           {tuple})
)r   argsr   tuple)r
   r   joinr   r   r   r   )r   r   r   r   r   r   r   	make_code   s    zMethod.make_codeN)__name__
__module____qualname__r   r   r   r   r   r   r   r   
   s   r   z
class {cls_name}(MessageGenerator):
    interface = {interface!r}

    def __init__(self, object_path={path!r},
                 bus_name={bus_name!r}):
        super().__init__(object_path=object_path, bus_name=bus_name)
c               @   s   e Zd Zdd Zdd ZdS )	Interfacec             C   s2   |j d | _|| _|| _dd |dD | _d S )Nr   c             S   s   g | ]}t |qS r   )r   ).0Znoder   r   r   
<listcomp>7   s    z&Interface.__init__.<locals>.<listcomp>method)r	   r   pathbus_namer   methods)r   r   r%   r&   r   r   r   r   3   s    zInterface.__init__c             C   sX   | j dd }tj|| j | j| jdg}x"| jD ]}|t|	 d q2W d
|S )N.)cls_name	interfacer%   r&   z    
)r   splitINTERFACE_CLASS_TEMPLATEr   r%   r&   r'   r   r   r   r   )r   r*   Zchunksr$   r   r   r   r   9   s    zInterface.make_codeN)r   r   r    r   r   r   r   r   r   r!   2   s   r!   z"""Auto-generated DBus bindings

Generated by jeepney version {version}

Object path: {path}
Bus name   : {bus_name}
"""

from jeepney.wrappers import MessageGenerator, new_method_call

z#org.freedesktop.DBus.Introspectablezorg.freedesktop.DBus.Propertieszorg.freedesktop.DBus.Peerc          	   C   s   t |ttfr.t|d}t| |||S Q R X t| }|tj	t
||d d}x@|dD ]2}|jd tkrrq^|t|||  |d7 }q^W |S )Nw)versionr%   r&   r   r+   r   r   )
isinstancebytesstropencode_from_xmlETZ
fromstringwriteMODULE_TEMPLATEr   r   r   r	   IGNORE_INTERFACESr!   r   )xmlr%   r&   ZfhfrootiZinterface_noder   r   r   r5   U   s    

r5   SESSIONc             C   sF   t |}t| | }||d }t|| ||}td|| d S )Nr   z#Written {} interface wrappers to {})r   r   Z
IntrospectZsend_and_get_replyr5   printr   )r%   r   Zoutput_filebusZconnmsgr:   Zn_interfacesr   r   r   generateg   s
    rB   c              C   s   t  } | jdddd | jdddd | jddd	 | d
d |  }|jph|jdd  ddd }t|j|j||j	 d S )Nz-nz--nameT)Zrequiredz-pz--pathz--busr>   )defaultz-oz--outputr   /_z.py)
argparseArgumentParseradd_argument
parse_argsoutputr%   replacerB   r   r@   )Zapr   rJ   r   r   r   mainp   s     rL   __main__)r>   )__doc__rF   textwrapr   Zxml.etree.ElementTreeZetreeZElementTreer6   Zjeepney.wrappersr   Zjeepney.integrate.blockingr   Zjeepneyr   r   r.   r!   r8   r9   r5   rB   rL   r   r   r   r   r   <module>   s$   &
	