U
    [e                     @   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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)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 ]V}z|j d }W n$ tk
rX   dt| j}Y nX | 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   Q/var/www/html/services/stratfitenv/lib/python3.8/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   ).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 q0d
|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

z#org.freedesktop.DBus.Introspectablezorg.freedesktop.DBus.Propertieszorg.freedesktop.DBus.Peerc              
   C   s   t |ttfr:t|d}t| |||W  5 Q R  S Q R X t| }|tj	t
||d d}|dD ]2}|jd tkr|qh|t|||  |d7 }qh|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iZinterface_noder   r   r   r8   U   s     

r8   SESSIONc                 C   sD   t |}tt| ||}| \}t|| ||}td|| d S )Nz#Written {} interface wrappers to {})r   r   r   Z
Introspectr8   printr   )r'   r   Zoutput_filebusconnZintrospectabler>   Zn_interfacesr   r   r   generateg   s
    
rG   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)requiredz-pz--pathz--busrC   )defaultz-oz--outputr   /_z.py)
argparseArgumentParseradd_argument
parse_argsoutputr'   replacerG   r   rE   )Zapr   rP   r   r   r   mainp   s     rR   __main__)rC   )__doc__rL   textwrapr   Zxml.etree.ElementTreeetreeZElementTreer9   Zjeepney.wrappersr   Zjeepney.io.blockingr   r   Zjeepneyr   r   r0   r"   r<   r=   r8   rG   rR   r   r   r   r   r   <module>   s&   	
	