
    f&                         d dl Z d dlmZ 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mZ ddlmZmZ ddlmZmZmZmZm Z   ejB                         Z"i Z#d Z$d Z% G d	 d
e&      Z'd Z(y)    N)Lock   )
RepositoryFunctionInfoRegisteredTypeInfoEnumInfo
ObjectInfoInterfaceInfoConstantInfo
StructInfo	UnionInfoCallbackInfoStructBoxedFundamental	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                 Z   | j                         }|sV| j                         }|r|j                  r|j                  S | j                         r|j	                         rt
        S t        S |j                         }|j                         }t        j                  d|z         }t        ||      S Ngi.repository.)
get_parent
get_g_typepytypeget_fundamentalis_instantiatabler   objectget_namespaceget_name	importlibimport_modulegetattr)object_infoparent_object_infogtype	namespacenamemodules         +/usr/lib/python3/dist-packages/gi/module.pyget_parent_for_objectr4   B   s    $//1 &&(U\\<<&&(U-D-D-F "002I&&(D$$%5	%ABF64      c                     g }| j                         D ]U  }|j                         }|j                         }t        j                  d|z         }|j                  t        ||             W |S r    )get_interfacesr(   r)   r*   r+   appendr,   )r-   
interfacesinterface_infor0   r1   r2   s         r3   get_interfaces_for_objectr;   \   sn    J%446 1"002	&&((()9I)EF'&$/01 r5   c                   *    e Zd ZdZddZd Zd Zd Zy)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                 ,   t         j                  ||       || _        || _        d|z   | _        t         j                  | j                        }|g| _        | j                  $t         j                  | j                        | _        t               | _	        y)z"Might raise gi._gi.RepositoryErrorr!   N)

repositoryrequire
_namespace_version__name__get_typelib_path__path__get_versionr   _lock)selfr0   versionpaths       r3   __init__zIntrospectionModule.__init__o   st     	9g.#(94**4??;== &224??CDMV
r5   c           
         t         j                  | j                  |      }|st        | j                  d|      t        |t              rw|j                         }| j                  5  |j                  }|1|j                         r8|j                  t              rt        |      }nN|t        k(  sJ t        |      }n7|j                  t               rt#        |      }n|t        k(  sJ t%        |      }||_        d|j)                         z   |_        dj-                  dd      }|j/                         D ]B  }|j1                         j3                  |      }t5        || ||j7                                      D |j9                         D ]  }t5        ||j                  |        |t        k7  r||_	        d d d        n t        |t:              r|j                         }t        |t<              r5t?        |      tA        fdtC        |      D              }	f|	z   }
tD        }nt        |tF              rtH        f}
tD        }nt        |tJ              rtL        f}
tD        }nt        |tN        tP        f      r|j                  tR              rtT        f}
nb|j                  tV              s|t        k(  s|jX                  |k(  rtZ        f}
n-t]        d|j)                         d|j_                               t`        }ntc        |      | j                  5  |t        k7  r,|j                  }|||
vr|| jd                  |<   |cd d d        S |d| j                  z   |d	} |||
|      }|t        k7  r||_	        d d d        n?t        |tf              r|}n,t        |th              r|j7                         }ntc        |      | jd                  |<   |S # 1 sw Y   xY w# 1 sw Y   &xY w)
Nz object has no attribute r!    abcdefgjhijklmnopqrstuvwxyzABCDEFGJHIJKLMNOPQRSTUVWXYZc              3   :   K   | ]  }t        |      s|  y wN)
issubclass).0	interfaceparents     r3   	<genexpr>z2IntrospectionModule.__getattr__.<locals>.<genexpr>   s$      #I*4VY*G $- #Is   zunable to create a wrapper for .)__info__
__module__	__gtype__)5r?   find_by_namerA   AttributeErrorrC   
isinstancer   r#   rG   r$   is_flagsis_ar   r   r   r   r   r   r   rX   r(   rY   	maketrans
get_valuesget_name_unescaped	translatesetattr	get_valueget_methodsr   r	   r4   tupler;   r   r   r   r
   r   r   r   r   r   r   fundamentalr   	TypeErrorr)   r   NotImplementedError__dict__r   r   )rH   r1   infog_typewrapperascii_upper_trans
value_info
value_namemethod_infor9   bases	metaclasstype_dict_rU   s                 @r3   __getattr__zIntrospectionModule.__getattr__   s   &&t= !%"6 7 7 dH%__&F !, --?}}!;;z2&/&7G#)Y#66#6&Ft&LG!;;y1&.v&6G#)Y#66#6&Ed&KG'+G$)9D<N<N<P)PG&
 )+55)7% '+oo&7 V
%/%B%B%D%N%NO`%a
WZ=Q=Q=S5TUV (,'7'7'9 L)=)={KL Y&$+FMC!, !,F 01__&F $
+.t4" #I>WX\>] #I I
	J.'	D,/"'	D-0#'	D:y"9:;;z*"HEkk,/	)((F2#IE#dN`N`Nbdhdqdqds$tuu&	)$// , Y&"MME(U%-?.3d+$, , !%"2T__"D!'
 $D%7 Y&$+FM+, ,. l+Gl+nn&G%d++
 &dE!, !,@, ,s   +EO,O#-O#O #O,c                 f    t         j                  | j                        }d| j                  d|dS )Nz<IntrospectionModule z from >)r?   rD   rA   )rH   rJ   s     r3   __repr__zIntrospectionModule.__repr__   s%    **4??;59__dKKr5   c                    t        t        | j                              }|j                  | j                  j                                t        j                  | j                        }|j                  d |D               t        |      S )Nc              3   \   K   | ]$  }t        |t              s|j                          & y wrQ   )r]   r   r)   )rS   rl   s     r3   rV   z.IntrospectionModule.__dir__.<locals>.<genexpr>   s'      :$$T<8 mmo :s   *,)
setdir	__class__updaterk   keysr?   	get_infosrA   list)rH   resultnamespace_infoss      r3   __dir__zIntrospectionModule.__dir__   sh    S()dmm((*+ %..t? :/ : 	: F|r5   rQ   )rC   rY   __qualname____doc__rK   rw   rz   r    r5   r3   r=   r=   g   s     kZLr5   r=   c                 |    | t         v r	t         |    S t        j                  |       }t        | |      }|t         | <   |S )z
    :Returns:
        An object directly wrapping the gi module without overrides.

    Might raise gi._gi.RepositoryError
    )_introspection_modulesgiget_required_versionr=   )r0   rI   r2   s      r3   get_introspection_moduler      sD     **%i00%%i0G G4F(.9%Mr5   ))r*   	threadingr   r   _gir   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   typesr   r   
_constantsr   r   r   r   r   get_defaultr?   r   r4   r;   r'   r=   r   r   r5   r3   <module>r      su   .   	     (  $Z##%
  !4V& Vrr5   