o
    •ºé`Ö  ã                   @   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mZ ddlmZ G dd„ dƒZd	ZG d
d„ dƒZdZh d£Zdd„ Zddd„Zdd„ ZedkrUeƒ  dS dS )z5Generate a wrapper class from DBus introspection dataé    N)Úindent)ÚIntrospectable)Úopen_dbus_connectionÚProxy)Ú__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 | _| d¡D ]*}z|j d }W n ty+   d t| jƒ¡}Y nw | j |¡ | j |j d ¡ qd S )NÚnamezarg[@direction='in']zarg{}Útype)	Úattribr   Úin_argsÚ	signatureÚfindallÚKeyErrorÚformatÚlenÚappend)ÚselfÚxml_nodeÚargr   © r   ú1/usr/lib/python3/dist-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rd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   )Ú.0Ú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   sT   | j  d¡d }tj|| j | j| jd�g}| jD ]}| t| 	¡ dƒ¡ qd 
|¡S )NÚ.éÿÿÿÿ)Úcls_nameÚ	interfacer'   r(   z    Ú
)r   ÚsplitÚINTERFACE_CLASS_TEMPLATEr   r'   r(   r)   r   r   r   r   )r   r,   Ú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

>   úorg.freedesktop.DBus.Peerúorg.freedesktop.DBus.Propertiesú#org.freedesktop.DBus.Introspectablec                 C   s¬   t |ttfƒr#t|dƒ�}t| |||ƒW  d   ƒ S 1 sw   Y  t | ¡}| tj	t
||d�¡ d}| d¡D ]}|jd tv rDq:| t|||ƒ ¡ ¡ |d7 }q:|S )NÚw)Úversionr'   r(   r   r-   r   r   )Ú
isinstanceÚbytesÚstrÚopenÚcode_from_xmlÚETÚ
fromstringÚwriteÚMODULE_TEMPLATEr   r   r   r
   ÚIGNORE_INTERFACESr"   r   )Úxmlr'   r(   ÚfhÚfÚrootÚiÚinterface_noder   r   r   r;   U   s    ÿ
ÿ
r;   ÚSESSIONc                 C   sD   t |ƒ}tt| |ƒ|ƒ}| ¡ \}t|| ||ƒ}td ||¡ƒ d S )Nz#Written {} interface wrappers to {})r   r   r   Ú
Introspectr;   Úprintr   )r'   r   Úoutput_fileÚbusÚconnÚintrospectablerA   Ún_interfacesr   r   r   Úgenerateg   s
   
rO   c                  C   s‚   t  ¡ } | jdddd� | jdddd� | jddd	� |  d
d¡ |  ¡ }|jp4|jdd …  dd¡d }t|j|j||j	ƒ d S )Nz-nz--nameT)Úrequiredz-pz--pathz--busrG   )Údefaultz-oz--outputr   ú/Ú_z.py)
ÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsÚoutputr'   ÚreplacerO   r   rK   )Úapr   rX   r   r   r   Úmainp   s    r[   Ú__main__)rG   )Ú__doc__rT   Útextwrapr   Úxml.etree.ElementTreeÚetreeÚElementTreer<   Újeepney.wrappersr   Újeepney.io.blockingr   r   Újeepneyr   r   r0   r"   r?   r@   r;   rO   r[   r   r   r   r   r   Ú<module>   s$    	
	
ÿ