???<!-- GIF89;a -->
123123123123
.....................................................................................................................................???<!-- GIF89;a -->
123123123123
.....................................................................................................................................3
<_8                 @   s(  d dl mZ d dlZd dlZd dlZddlmZ ddlmZ ddl	m
Z
mZmZmZmZmZmZ ddlm	Z	 eef ddlmZ dd	lmZ dej  kod k n  rdd Zdd ZG dd deZdd Zdd ZG dd deZe	je G dd deeZ dd Z!dd Z"G dd deeZ#dS )!    )absolute_importN   )TYPE_INVALID)generate_doc_string)InterfaceInfo
ObjectInfo
StructInfo	VFuncInforegister_interface_infohook_up_vfunc_implementation
GInterface)_gi)_propertyhelper)_signalhelper   c             C   s
   t | dS )N__call__)hasattr)obj r   /usr/lib64/python3.6/types.pycallable1   s    r   c             C   s    t jdd| }t jdd|j S )Nz(.)([A-Z][a-z]+)z\1_\2z([a-z0-9])([A-Z]))resublower)names1r   r   r   
snake_case5   s    r   c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )MetaClassHelperc             C   s&   x | j j D ]}t| |j| qW d S )N)__info__get_methodssetattr__name__)clsmethod_infor   r   r   _setup_methods;   s    zMetaClassHelper._setup_methodsc             C   sP   | j }|j }|d krd S x0|j D ]$}|j}t| |s$t| |t| q$W d S )N)r   Zget_class_structr   r!   r   r    classmethod)r"   infoZclass_structr#   r   r   r   r   _setup_class_methods?   s    
z$MetaClassHelper._setup_class_methodsc             C   s>   x8| j j D ]*}|j jdd}t| |t|j|j qW d S )N-_)r   Z
get_fieldsget_namereplacer    property	get_valueZ	set_value)r"   Z
field_infor   r   r   r   _setup_fieldsJ   s    zMetaClassHelper._setup_fieldsc             C   s4   x.| j j D ] }|j }|j }t| || qW d S )N)r   Zget_constantsr*   r-   r    )r"   Zconstant_infor   valuer   r   r   _setup_constantsO   s    z MetaClassHelper._setup_constantsc          
   C   sj  xb| j j D ]R\}}|jd st| r0qd}d }x| jD ]}t||d }|d k	rht|trh|}P t|d s@t|j	d rq@t
|j	j }x0|j	j D ]"}|d||j f kr|}d}P qW |r@P q@W |d krt| j|tdd  }|d k	r|sTt|| j}	|	d k	rT|j }
td|| j	j | j	j |
j |
j |	j	j |	j	j f t|| j| qW d S )NZdo_Fr   
get_vfuncszdo_%s_%sTzTMethod %s() on class %s.%s is ambiguous with methods in base classes %s.%s and %s.%s)__dict__items
startswithr   __mro__getattr
isinstancer	   r   r   r   Zget_type_namer1   r*   find_vfunc_info_in_interface	__bases__lenfind_vfunc_conflict_in_basesZget_container	TypeErrorget_namespacer   	__gtype__)r"   
vfunc_nameZpy_vfuncZskip_ambiguity_check
vfunc_infobasemethodZ	base_namevZambiguous_baseZ	base_infor   r   r   _setup_vfuncsU   sJ    
zMetaClassHelper._setup_vfuncsc             C   sh   | j jd}|d ks t|t r$d S | jdkr<| jdkr<d S x&|j D ]}d|j }t| || qFW d S )Nr   zgi.repository.GObjectZObjectzdo_%s)r2   getr7   r   
__module__r!   r1   r    )r"   Z
class_infor@   r   r   r   r   _setup_native_vfuncs   s    
z$MetaClassHelper._setup_native_vfuncsN)	r!   rF   __qualname__r$   r'   r.   r0   rD   rG   r   r   r   r   r   :   s   =r   c             C   s|   xv| D ]n}|t kst|t  st|d r,qt|jtr\x"|jj D ]}|j |krD|S qDW t|j	|}|d k	r|S qW d S )Nr   )
r   
issubclassr   r7   r   r   r1   r*   r8   r9   )basesr?   rA   vfuncr   r   r   r8      s    
r8   c             C   s~   xx|D ]p}t |d st |jd r&q|jj }| j }x$|D ]}|j |kr>|| kr>|S q>W t| |j}|d k	r|S qW d S )Nr   r1   )r   r   r1   r*   r;   r9   )rK   rJ   klassZvfuncsr?   rC   Zaklassr   r   r   r;      s    


r;   c               @   s    e Zd ZdZdd Zdd ZdS )_GObjectMetaBasez8Metaclass for automatically registering GObject classes.c             C   s4   t j| ||| tj|  tj|  | j| j d S )N)type__init__propertyhelperZinstall_propertiessignalhelperZinstall_signals_type_registerr2   )r"   r   rJ   dict_r   r   r   rO      s    

z_GObjectMetaBase.__init__c             C   s2   d|krd S | j jdrd S tj| |jd d S )Nr>   zgi.overrides.Z__gtype_name__)rF   r4   r   Ztype_registerrE   )r"   	namespacer   r   r   rR      s
    z_GObjectMetaBase._type_registerN)r!   rF   rH   __doc__rO   rR   r   r   r   r   rM      s   rM   c                   s4   e Zd ZdZ fddZdd Zedd Z  ZS )GObjectMetaz+Meta class used for GI GObject based types.c                s   t t| j||| d}| jd| jj  kr0d}d}| rJ| jtjkrJd}|rX| j  n`|rt| jtrp| j	  | j
  | j  | j  t| jtr| j  nt| jtrt| jj  d S )NFzgi.repository.T)superrV   rO   rF   r   r=   rD   r7   r   r'   r$   r0   rG   r.   r   r
   
get_g_type)r"   r   rJ   rS   Zis_gi_definedZis_python_defined)	__class__r   r   rO      s&    

zGObjectMeta.__init__c             C   s   t | S )N)mro)r"   r   r   r   rZ     s    zGObjectMeta.mroc             C   s@   | t krdS | jjdd}|dk	r&|S | jjdr<t| jS dS )zFMeta class property which shows up on any class using this meta-class. rU   Ngi.repository.gi.overrides)r\   r]   )rV   r2   rE   rF   r4   r   r   )r"   docr   r   r   rU     s    
zGObjectMeta.__doc__)r!   rF   rH   rU   rO   rZ   r,   __classcell__r   r   )rY   r   rV      s   rV   c                s  g }| gg}| j rlxH| j D ]>}t|dr:|t|jg7 }qtjd| t |t|g7 }qW |t| j g7 }x|rx<|D ]4}|d   fdd|D }|rt j krd qzP qzW  dkrt	d|j
  x8|dd D ](}|o|d  kr|d= |s|j| qW qnW |S )a\  Compute the class precedence list (mro) according to C3, with GObject
    interface considerations.

    We override Python's MRO calculation to account for the fact that
    GObject classes are not affected by the diamond problem:
    http://en.wikipedia.org/wiki/Diamond_problem

    Based on http://www.python.org/download/releases/2.3/mro/
    r5   zQMixin class %s is an old style class, please update this to derive from "object".r   c                s    g | ]} |d d kr|qS )r   Nr   ).0s)	candidater   r   
<listcomp>=  s    zmro.<locals>.<listcomp>Nz8Cannot create a consistent method resolution order (MRO))r9   r   listr5   warningswarnRuntimeWarningrZ   r   r<   appendremove)CrJ   Zbases_of_subclassesrA   Zsubclass_basesZnot_headr   )rb   r   rZ     s6    


rZ   c              O   s   d S )Nr   )argskwargsr   r   r   nothingR  s    rm   c                   s,   e Zd ZdZ fddZedd Z  ZS )
StructMetaz*Meta class used for GI Struct based types.c                s   t t| j||| | jj }|tkr4|jd k	r4d S | j  | j  xN| jj	 D ]@}|j
 rP|jdkrP|j  s~| jj dkrPt|| _t| _P qPW d S )Nnewr   )rW   rn   rO   r   rX   r   Zpytyper.   r$   r   Zis_constructorr!   Zget_argumentsZget_sizestaticmethod__new__rm   )r"   r   rJ   rS   Zg_typer#   )rY   r   r   rO   Y  s    



zStructMeta.__init__c             C   s   | t krdS t| jS )Nr[   )rn   r   r   )r"   r   r   r   rU   o  s    zStructMeta.__doc__)r!   rF   rH   rU   rO   r,   r_   r   r   )rY   r   rn   V  s   rn   )r   r   )r   r   )$Z
__future__r   sysre   r   Z
_constantsr   Z	docstringr   r   r   r   r   r	   r
   r   r   r[   r   rP   r   rQ   version_infor   r   objectr   r8   r;   rN   rM   Z_install_metaclassrV   rZ   rm   rn   r   r   r   r   <module>   s,   $k
.<