dbfdg 3 <_8@s(ddlmZddlZddlZddlZddlmZddlmZddl m Z m Z m Z m Z mZmZmZddlm Z e efddlmZdd lmZdejkod knrd d Zd dZGdddeZddZddZGdddeZe jeGdddeeZ ddZ!ddZ"GdddeeZ#dS)!)absolute_importN) TYPE_INVALID)generate_doc_string) InterfaceInfo ObjectInfo StructInfo VFuncInforegister_interface_infohook_up_vfunc_implementation GInterface)_gi)_propertyhelper) _signalhelpercCs t|dS)N__call__)hasattr)objr/usr/lib64/python3.6/types.pycallable1srcCs tjdd|}tjdd|jS)Nz(.)([A-Z][a-z]+)z\1_\2z([a-z0-9])([A-Z]))resublower)names1rrr snake_case5src@s<eZdZddZddZddZddZd d Zd d Zd S)MetaClassHelpercCs&x |jjD]}t||j|q WdS)N)__info__ get_methodssetattr__name__)cls method_inforrr_setup_methods;szMetaClassHelper._setup_methodscCsP|j}|j}|dkrdSx0|jD]$}|j}t||s$t||t|q$WdS)N)rZget_class_structrr!rr classmethod)r"infoZ class_structr#rrrr_setup_class_methods?s z$MetaClassHelper._setup_class_methodscCs>x8|jjD]*}|jjdd}t||t|j|jq WdS)N-_)rZ get_fieldsget_namereplacer property get_valueZ set_value)r"Z field_inforrrr _setup_fieldsJszMetaClassHelper._setup_fieldscCs4x.|jjD] }|j}|j}t|||q WdS)N)rZ get_constantsr*r-r )r"Z constant_inforvaluerrr_setup_constantsOsz MetaClassHelper._setup_constantsc Csjxb|jjD]R\}}|jd st| r0qd}d}x|jD]}t||d}|dk rht|trh|}Pt|d s@t|j d rq@t |j j }x0|j j D]"}|d||j fkr|}d}PqW|r@Pq@W|dkrt|j|tdd}|dk r|sTt||j} | dk rT|j} td||j j|j j | j| j | j j| j j ft||j|qWdS)NZdo_Fr get_vfuncszdo_%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 rrrZ get_type_namer1r*find_vfunc_info_in_interface __bases__lenfind_vfunc_conflict_in_basesZ get_container TypeError get_namespacer __gtype__) r" vfunc_nameZpy_vfuncZskip_ambiguity_check vfunc_infobasemethodZ base_namevZambiguous_baseZ base_inforrr _setup_vfuncsUsJ    zMetaClassHelper._setup_vfuncscCsh|jjd}|dks t|t r$dS|jdkr<|jdkr||kr>|Sq>Wt||j}|dk r|SqWdS)Nrr1)rrr1r*r;r9)rKrJklassZvfuncsr?rCZaklassrrrr;s     r;c@s eZdZdZddZddZdS)_GObjectMetaBasez8Metaclass for automatically registering GObject classes.cCs4tj||||tj|tj||j|jdS)N)type__init__propertyhelperZinstall_properties signalhelperZinstall_signals_type_registerr2)r"rrJdict_rrrrOs  z_GObjectMetaBase.__init__cCs2d|kr dS|jjdrdStj||jddS)Nr>z gi.overrides.Z__gtype_name__)rFr4r Z type_registerrE)r" namespacerrrrRs  z_GObjectMetaBase._type_registerN)r!rFrH__doc__rOrRrrrrrMsrMcs4eZdZdZfddZddZeddZZS) GObjectMetaz+Meta class used for GI GObject based types.cstt|j|||d}|jd|jjkr0d}d}| rJ|jtjkrJd}|rX|jn`|rt|jtrp|j |j |j |j t|jtr|j nt|jtrt|jjdS)NFzgi.repository.T)superrVrOrFrr=rDr7rr'r$r0rGr.rr get_g_type)r"rrJrSZ is_gi_definedZis_python_defined) __class__rrrOs&     zGObjectMeta.__init__cCst|S)N)mro)r"rrrrZszGObjectMeta.mrocCs@|tkr dS|jjdd}|dk r&|S|jjdr}t|dr:|t|jg7}qtjd|t|t|g7}qW|t|jg7}x|rx<|D]4}|dfdd|D}|rtjkrdqzPqzWdkrt d|j x8|ddD](}|o|dkr|d=|s|j |qWqnW|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/ r5zQMixin class %s is an old style class, please update this to derive from "object".rcs g|]}|ddkr|qS)rNr).0s) candidaterr =szmro..Nz8Cannot create a consistent method resolution order (MRO)) r9rlistr5warningswarnRuntimeWarningrZr r<appendremove)CrJZbases_of_subclassesrAZsubclass_basesZnot_headr)rbrrZs6     rZcOsdS)Nr)argskwargsrrrnothingRsrmcs,eZdZdZfddZeddZZS) StructMetaz*Meta class used for GI Struct based types.cstt|j||||jj}|tkr4|jdk r4dS|j|jxN|jj D]@}|j rP|j dkrP|j s~|jj dkrPt||_t|_PqPWdS)Nnewr)rWrnrOrrXrZpytyper.r$rZis_constructorr!Z get_argumentsZget_size staticmethod__new__rm)r"rrJrSZg_typer#)rYrrrOYs    zStructMeta.__init__cCs|tkr dSt|jS)Nr[)rnrr)r"rrrrUoszStructMeta.__doc__)r!rFrHrUrOr,r_rr)rYrrnVs rn)rr)rr)$Z __future__rsysrerZ _constantsrZ docstringrr rrrr r r r r[rrPrrQ version_inforrobjectrr8r;rNrMZ_install_metaclassrVrZrmrnrrrrs,   $   k .<