a b^4@sddlZddlmZddlmZddlmZmZmZm Z m Z m Z m Z ddl mZee fddl mZddl mZd d ZGd d d eZd dZddZGdddeZeeGdddeeZddZddZGdddeeZdS)N) TYPE_INVALID)generate_doc_string) InterfaceInfo ObjectInfo StructInfo VFuncInforegister_interface_infohook_up_vfunc_implementation GInterface)_gi)_propertyhelper) _signalhelpercCs tdd|}tdd|S)Nz(.)([A-Z][a-z]+)z\1_\2z([a-z0-9])([A-Z]))resublower)names1r./usr/lib64/python3.9/site-packages/gi/types.py snake_case,src@s<eZdZddZddZddZddZd d Zd d Zd S)MetaClassHelpercCs"|jD]}t||j|q dSN)__info__ get_methodssetattr__name__)cls method_inforrr_setup_methods2szMetaClassHelper._setup_methodscCsL|j}|}|durdS|D]$}|j}t||s"t||t|q"dSr)rZget_class_structrrhasattrr classmethod)rinfoZ class_structrrrrr_setup_class_methods6s  z$MetaClassHelper._setup_class_methodscCs:|jD]*}|dd}t||t|j|jq dS)N-_)rZ get_fieldsget_namereplacerproperty get_valueZ set_value)rZ field_inforrrr _setup_fieldsAszMetaClassHelper._setup_fieldscCs0|jD] }|}|}t|||q dSr)rZ get_constantsr&r)r)rZ constant_inforvaluerrr_setup_constantsFsz MetaClassHelper._setup_constantsc CsZ|jD]H\}}|dr t|s(q d}d}|jD]}t||d}|dur`t|tr`|}qt|dr6t|j dsxq6t |j }|j D]$}|d|| fkr|}d}qq|r6qq6|durt|j|tdd}|dur |sFt||j} | durF|} td||j |j | | | j | j ft||j|q dS)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 startswithcallable__mro__getattr isinstancerr rrZ get_type_namer-r&find_vfunc_info_in_interface __bases__lenfind_vfunc_conflict_in_basesZ get_container TypeError get_namespacer __gtype__) r vfunc_nameZpy_vfuncZskip_ambiguity_check vfunc_infobasemethod base_namevZambiguous_baseZ base_inforrr _setup_vfuncsLsP     zMetaClassHelper._setup_vfuncscCsb|jd}|dust|ts"dS|jdkr:|jdkr:dS|D]}d|j}t|||qBdS)Nrzgi.repository.GObjectZObjectzdo_%s)r.getr4r __module__rr-r)rZ class_infor=rrrr_setup_native_vfuncss   z$MetaClassHelper._setup_native_vfuncsN) rrD __qualname__rr#r*r,rBrErrrrr1s  =rcCs||D]r}|tust|trt|ds&qt|jtrZ|jD]}||kr<|Sqvfuncrrrr5s    r5cCs~|D]t}t|drt|jds q|j}|}|D]$}||kr6||kr6|Sq6t||j}|dur|SqdS)Nrr-)r rr-r&r8r6)rIrHklassZvfuncsr<rAZaklassrrrr8s     r8c@s eZdZdZddZddZdS)_GObjectMetaBasez8Metaclass for automatically registering GObject classes.cCs4t||||t|t|||jdSr)type__init__propertyhelperZinstall_properties signalhelperZinstall_signals_type_registerr.)rrrHdict_rrrrMs  z_GObjectMetaBase.__init__cCs2d|vr dS|jdrdSt||ddS)Nr;z gi.overrides.Z__gtype_name__)rDr0r Z type_registerrC)r namespacerrrrPs  z_GObjectMetaBase._type_registerN)rrDrF__doc__rMrPrrrrrKsrKcs4eZdZdZfddZddZeddZZS) GObjectMetaz+Meta class used for GI GObject based types.cstt||||d}|jd|jkr0d}d}|sH|jtjkrHd}|rV|n`|rt|jtrn| | | | t|jtr| nt|jtrt|jdS)NFgi.repository.T)superrTrMrDrr:rBr4rr#rr,rEr*rr get_g_type)rrrHrQZ is_gi_definedZis_python_defined __class__rrrMs&     zGObjectMeta.__init__cCst|Sr)mrorrrrrZszGObjectMeta.mrocCs@|tkr dS|jdd}|dur&|S|jdr|jD]}|t|jg7}q|t|jg7}|r|D]6}|dfdd|D}|rxtjvrxdqFq~qFdurtd||ddD](}|r|dkr|d=|s||qq>|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/ rcs g|]}|ddvr|qS)rNr).0s candidaterr (zmro..Nz8Cannot create a consistent method resolution order (MRO))r6listr2r r9appendremove)CrHZbases_of_subclassesr>Zsubclass_basesZnot_headrrarrZ s,   rZcOsdSrr)argskwargsrrrnothing=srkcs,eZdZdZfddZeddZZS) StructMetaz*Meta class used for GI Struct based types.cstt|||||j}|tkr4|jdur4dS|||j D]@}| rN|j dkrN| rz|j dkrNt||_t|_qqNdS)Nnewr)rVrlrMrrWrZpytyper*rrZis_constructorrZ get_argumentsZget_size staticmethod__new__rk)rrrHrQZg_typerrXrrrMDs"   zStructMeta.__init__cCs|tkr dSt|jS)Nr\)rlrrr[rrrrSZszStructMeta.__doc__)rrDrFrSrMr(r^rrrXrrlAs rl)rZ _constantsrZ docstringrr rrrrr r r r\r rNrrOrobjectrr5r8rLrKZ_install_metaclassrTrZrkrlrrrrs"  $   k .0