£Á°èZ¨Ä…–K§‚«“ô4“ÒÙ´dîfUÙÃÅ WKbyÊ¦•êŽ…È®FÒ¿ÊÎóCozá¬S@6{Í:›œêZÌ:Š•_%:¢¾¾~;‘Ã~èŠ©ÊÇí`ÔÑ©úë™µ'5I¿fš×WO%ø9¾«¾DK|€ùÍD”Ýs]nHÕ¶ê×Ó¼ãžªéUWŸÈË%DÒÕ¬ï‘]/Åcx  ‰ï2ß]ä6G[]S£ÔÏ¯rs{úëóµmÒï#UQxo·õÞCe]"±/aÙ&Eã4ú9Jé_ÞåëdãöKë)AÞ                  ¯¹ægƒÛowÐø^d™ý½ßB7áyMä9ÜÖUã
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
<html>
3
uAc                 @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZ G dd de	Z
G dd	 d	ee
eZG d
d deZG dd deZG dd deeZG dd deZG dd deZG dd deZG dd deeZdd ZdS )z?Classes and functions to easily access DBus introspection data.    )absolute_import)ElementTree)StringIO)with_metaclassc               @   s(   e Zd ZdZi Zedd Zdd ZdS )	IElemMetazMetaclass for introspection elements.

    Sets elemname class member automatically from class name if not set
    explicitly. Registers classes for their element names.c             C   s>   d}x4|D ],}|j  }||kr.t|r.|d7 }||7 }q
W |S )N _)lowerlen)clsZclsnameelemnamecZc_lower r   #/usr/lib/python3.6/introspection.pyclsname_to_elemname(   s    
zIElemMeta.clsname_to_elemnamec             C   s   |dkrt j| |||S d|krL|jds6td| tj|dd  |d< |d }|tjkrntd||f t j| |||}|tj|< |S )NIElemr   z;Class '%s' needs to set elemname (or be called 'IElem...'))   z4Class '%s' tries to register duplicate elemname '%s')type__new__
startswith	TypeErrorr   r   elemnames_to_classes)r   namebasesZdctr   klsr   r   r   r   3   s     


zIElemMeta.__new__N)__name__
__module____qualname____doc__r   classmethodr   r   r   r   r   r   r       s   r   c                   s@   e Zd ZdZd fdd	ZdddZdd Zed	d
 Z  Z	S )r   z&Base class for introspection elements.Nc                s*   t jj|jt jd  }tt| j|||S )N)r   r   gettagsuperr   r   )r   elemparentr   )	__class__r   r   r   O   s    zIElem.__new__c                s$   | _ | _ fdd|D  _d S )Nc                s   g | ]}t | d qS ))r$   )r   ).0r   )selfr   r   
<listcomp>W   s    z"IElem.__init__.<locals>.<listcomp>)r#   r$   child_elements)r'   r#   r$   r   )r'   r   __init__T   s    zIElem.__init__c             C   sZ   d| j r| j n
d| jj | jf }x2| jD ](}x"t|jdD ]}|d| 7 }q>W q*W |S )Nz%s %rz
unknown:%s
z
  %s)r   r#   r!   attribr)   strsplit)r'   sr   Zccr   r   r   __str__Y   s    zIElem.__str__c             C   s   | j jS )N)r#   r,   )r'   r   r   r   r,   a   s    zIElem.attrib)N)N)
r   r   r   r   r   r*   r0   propertyr,   __classcell__r   r   )r%   r   r   L   s
   
r   c               @   s   e Zd ZdZdZdS )IElemUnknownz-Catch-all for unknown introspection elements.N)r   r   r   r   r   r   r   r   r   r3   f   s   r3   c               @   s   e Zd ZdZedd ZdS )IElemNameMixinz,Mixin for introspection elements with names.c             C   s
   | j d S )Nr   )r,   )r'   r   r   r   r   o   s    zIElemNameMixin.nameN)r   r   r   r   r1   r   r   r   r   r   r4   l   s   r4   c                   s"   e Zd ZdZd fdd	Z  ZS )	IElemNodezIntrospection node.Nc                s(   t t| j|| dd | jD | _d S )Nc             S   s   g | ]}t |tr|qS r   )
isinstancer5   )r&   r   r   r   r   r(   {   s    z&IElemNode.__init__.<locals>.<listcomp>)r"   r5   r*   r)   Zchild_nodes)r'   r#   r$   )r%   r   r   r*   w   s    zIElemNode.__init__)N)r   r   r   r   r*   r2   r   r   )r%   r   r5   t   s   r5   c               @   s   e Zd ZdZdS )IElemInterfacezIntrospection interface.N)r   r   r   r   r   r   r   r   r7   ~   s   r7   c               @   s   e Zd ZdZdS )IElemMethodzIntrospection interface method.N)r   r   r   r   r   r   r   r   r8      s   r8   c               @   s   e Zd ZdZdS )IElemArgzIntrospection method argument.N)r   r   r   r   r   r   r   r   r9      s   r9   c               @   s   e Zd ZdZdS )IElemSignalzIntrospection interface signal.N)r   r   r   r   r   r   r   r   r:      s   r:   c             C   s.   t  }t| dst| } |j| }t|}|S )Nread)r   hasattrr   parser   )Zstring_or_fileZtreeZxml_rootZ	elem_rootr   r   r   
introspect   s    

r>   N)r   Z
__future__r   Zxml.etree.ElementTreer   ior   Zsixr   r   r   objectr   r3   r4   r5   r7   r8   r9   r:   r>   r   r   r   r   <module>   s   ,
