U
    	^%                     @   s   d dl mZ d dlZz
djZW n  ek
r>   d dlmZ Y nX d dlZddlmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZmZmZmZmZmZmZ ddlmZmZ ddlmZmZm Z m!Z!m"Z" e# Z$i Z%d	d
 Z&dd Z'G dd de(Z)dd Z*dS )    )absolute_importN )	maketrans   )
RepositoryFunctionInfoRegisteredTypeInfoEnumInfo
ObjectInfoInterfaceInfoConstantInfo
StructInfo	UnionInfoCallbackInfoStructBoxed	CCallbackenum_addenum_register_new_gtype_and_add	flags_add flags_register_new_gtype_and_add
GInterface)GObjectMeta
StructMeta)	TYPE_NONE
TYPE_BOXEDTYPE_POINTER	TYPE_ENUM
TYPE_FLAGSc                 C   sP   |   }|s(|  }|r$|jr$|jS tS | }| }td| }t||S Ngi.repository.)	Z
get_parent
get_g_typepytypeobjectget_namespaceget_name	importlibimport_modulegetattr)object_infoZparent_object_infoZgtype	namespacenamemodule r-   +/usr/lib/python3/dist-packages/gi/module.pyget_parent_for_objectH   s    
r/   c                 C   sD   g }|   D ]2}| }| }td| }|t|| q|S r   )Zget_interfacesr$   r%   r&   r'   appendr(   )r)   
interfacesZinterface_infor*   r+   r,   r-   r-   r.   get_interfaces_for_object_   s    r2   c                   @   s2   e Zd ZdZdddZdd Zdd Zd	d
 ZdS )IntrospectionModuleaU  An object which wraps an introspection typelib.

    This wrapping creates a python module like representation of the typelib
    using gi repository as a foundation. Accessing attributes of the module
    will dynamically pull them in and create wrappers for the members.
    These members are then cached on this introspection module.
    Nc                 C   sR   t || || _|| _d| | _t | j}|g| _| jdkrNt | j| _dS )z"Might raise gi._gi.RepositoryErrorr    N)
repositoryZrequire
_namespaceZ_version__name__get_typelib_path__path__Zget_version)selfr*   versionpathr-   r-   r.   __init__r   s    

zIntrospectionModule.__init__c                    s  t | j|}|s$td| j|f t|tr | }|j}|d kr|	 rz|
trdt|}q|tksptt|}n(|
trt|}n|tkstt|}||_d|  |_tdd}| D ]&}| |}t||||  q| D ]}t||j| q|tkr||_nt|trx| }t|trrt| t  fddt!|D }	 f|	 }
t"}nt|t#rt$f}
t"}nt|t%rt&f}
t"}ntt|t't(fr|
t)rt*f}
nB|
t+s|tks|j,|krt-f}
nt.d| |/ f t0}nt1||tkrH|j}|d k	rH||
krH|| j2|< |S |d| j |d}|||
|}|tkr||_n0t|t3r|}nt|t4r| }nt1||| j2|< |S )	Nz%r object has no attribute %rr    ZabcdefgjhijklmnopqrstuvwxyzZABCDEFGJHIJKLMNOPQRSTUVWXYZc                 3   s   | ]}t  |s|V  qd S N)
issubclass).0Z	interfaceparentr-   r.   	<genexpr>   s    
z2IntrospectionModule.__getattr__.<locals>.<genexpr>z$unable to create a wrapper for %s.%s)__info__
__module__Z	__gtype__)5r4   Zfind_by_namer5   AttributeErrorr6   
isinstancer	   r!   r"   Zis_flagsZis_ar   r   r   AssertionErrorr   r   r   r   rC   r$   rD   r   Z
get_valuesZget_name_unescaped	translatesetattrZ	get_valueZget_methodsr   r
   r/   tupler2   r   r   r   r   r   r   r   r   r   r   Zfundamentalr   	TypeErrorr%   r   NotImplementedError__dict__r   r   )r9   r+   infoZg_typewrapperZascii_upper_transZ
value_infoZ
value_nameZmethod_infor1   bases	metaclassZtype_Zdict_r-   r@   r.   __getattr__   s     













zIntrospectionModule.__getattr__c                 C   s   t | j}d| j|f S )Nz <IntrospectionModule %r from %r>)r4   r7   r5   )r9   r;   r-   r-   r.   __repr__   s    zIntrospectionModule.__repr__c                 C   sF   t t| j}|| j  t| j}|dd |D  t	|S )Nc                 s   s    | ]}t |ts| V  qd S r=   )rF   r   r%   )r?   rN   r-   r-   r.   rB      s    
z.IntrospectionModule.__dir__.<locals>.<genexpr>)
setdir	__class__updaterM   keysr4   Z	get_infosr5   list)r9   resultZnamespace_infosr-   r-   r.   __dir__   s
    zIntrospectionModule.__dir__)N)r6   rD   __qualname____doc__r<   rR   rS   r[   r-   r-   r-   r.   r3   j   s
   
jr3   c                 C   s0   | t krt |  S t| }t| |}|t | < |S )z
    :Returns:
        An object directly wrapping the gi module without overrides.

    Might raise gi._gi.RepositoryError
    )_introspection_modulesgiZget_required_versionr3   )r*   r:   r,   r-   r-   r.   get_introspection_module   s    

r`   )+Z
__future__r   r&   r   rE   stringr_   Z_gir   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   typesr   r   Z
_constantsr   r   r   r   r   Zget_defaultr4   r^   r/   r2   r#   r3   r`   r-   r-   r-   r.   <module>   s    
P 