3 <_1@sddlZddlZddlZddlZddlmZddlmZddlm Z ddl m Z m Z ddlm Z e eeZiZddZGd d d ejZGd d d eZd dZddZeZddZddZeiiedfddZdddZdS)N) get_loader)PyGIDeprecationWarning) CallableInfo) TYPE_NONE TYPE_INVALID) extend_pathcsfdd}|S)Ncsj|_j|_|S)N)__name__ __module__)wrapper)wrapped /usr/lib64/python3.6/__init__.pyassignszwraps..assignr )r rr )r r wrapss rcs8eZdZdZfddZddZddZdd ZZS) OverridesProxyModulez7Wraps a introspection module and contains all overridescstt|j|j||_dS)N)superr__init__r_introspection_module)selfintrospection_module) __class__r r r!s zOverridesProxyModule.__init__cCs t|j|S)N)getattrr)rnamer r r __getattr__&sz OverridesProxyModule.__getattr__cCs6tt|j}|j|jj|jt|jt|S)N)setdirrupdate__dict__keysrsorted)rresultr r r __dir__)szOverridesProxyModule.__dir__cCsdt|j|jfS)Nz<%s %r>)typerr)rr r r __repr__/szOverridesProxyModule.__repr__) rr __qualname____doc__rrr!r# __classcell__r r )rr rs  rc@s0eZdZdZddZddZddZdd Zd S) _DeprecatedAttributezA deprecation descriptor for OverridesProxyModule subclasses. Emits a PyGIDeprecationWarning on every access and tries to act as a normal instance attribute (can be replaced and deleted). cCs$||_||_td|||f|_dS)Nz#%s.%s is deprecated; use %s instead)_attr_valuer_warning)r namespaceattrvalue replacementr r r r:s z_DeprecatedAttribute.__init__cCs(|dkrt|jtj|jdd|jS)N) stacklevel)AttributeErrorr(warningswarnr*r))rinstanceownerr r r __get__As z_DeprecatedAttribute.__get__cCs$|j}tt||t|||dS)N)r(delattrr"setattr)rr4r-r,r r r __set__Gsz_DeprecatedAttribute.__set__cCstt||jdS)N)r7r"r()rr4r r r __delete__Msz_DeprecatedAttribute.__delete__N)rr r$r%rr6r9r:r r r r r'3s r'cCs|jjddd }d|}|tjk}tjj|}t|dtfi}||}|tj|<ddlm}|||<zHd|}y t|} Wnt k rd} YnX| dkr|St j |} Wd||=tj|=|r|tj|<X||_ g} t | d r| j} xD| D]<} yt| | } Wnt tfk rwYnXt|| | qWxptj|gD]`\}}yt||}Wn"t k rvtd |YnXt||t||||}t|||q>W|S) zLoads overrides for an introspection module. Either returns the same module again in case there are no overrides or a proxy module including overrides. Doesn't cache the result. .zgi.repository.Z ProxyModuler/)modulesz gi.overrides.N__all__z1%s was set deprecated but wasn't added to __all__)rrsplitsysr=getr"rZimporterrr1 importlib import_moduleZ_overrides_modulehasattrr>r TypeErrorr8_deprecated_attrspopAssertionErrorr7r')rr+Z module_keyZhas_oldZ old_moduleZ proxy_typeproxyr=Zoverride_package_nameZoverride_loaderZ override_modZ override_allvaritemr,r.r-deprecated_attrr r r load_overridesRsV           rNc st|tr>|}|jjddd }tjd|fdd}|St|tjrXtd|nyt |d}Wn"t k rtd|j YnX|jj d st d ||jf|j}|tkr||_|jjddd }tjd|t|j ||Sd S)aDecorator for registering an override. Other than objects added to __all__, these can get referenced in the same override module via the gi.repository module (get_parent_for_object() does for example), so they have to be added to the module immediately. r;r<zgi.repository.cst|j||S)N)r8r)func)moduler r r szoverride..wrapperz"func must be a gi function, got %sZ__info__zKCan not override a type %s, which is not in a gobject introspection typelibz gi.overrideszUYou have tried override outside of the overrides module. This is not allowed (%s, %s)Nr?r?) isinstancerr r@rAr=types FunctionTyperFrr1r startswithKeyErrorZ get_g_typerZpytyper8)Ztype_rOr+r infoZg_typer )rPr overrides2    rWcstfdd}|S)z7Decorator for marking methods and classes as deprecatedcs$tjdjftdd||S)Nz %s is deprecated; use %s insteadr/)r0)r2r3rr)argskwargs)fnr.r r r s zdeprecated..wrapped)r)rZr.r r )rZr.r deprecatedsr[cCstj|gj||fdS)a:Marks a module level attribute as deprecated. Accessing it will emit a PyGIDeprecationWarning warning. e.g. for ``deprecated_attr("GObject", "STATUS_FOO", "GLib.Status.FOO")`` accessing GObject.STATUS_FOO will emit: "GObject.STATUS_FOO is deprecated; use GLib.Status.FOO instead" :param str namespace: The namespace of the override this is called in. :param str namespace: The attribute name (which gets added to __all__). :param str replacement: The replacement text which will be included in the warning. N)rG setdefaultappend)r+r,r.r r r rMsrMr/csfdd}|S)aWrapper for deprecating GObject based __init__ methods which specify defaults already available or non-standard defaults. :param callable super_init_func: Initializer to wrap. :param list arg_names: Ordered argument name list. :param list ignore: List of argument names to ignore when calling the wrapped function. This is useful for function which take a non-standard keyword that is munged elsewhere. :param dict deprecated_aliases: Dictionary mapping a keyword alias to the actual g_object_newv keyword. :param dict deprecated_defaults: Dictionary of non-standard defaults that will be used when the keyword is not explicitly passed. :param Exception category: Exception category of the error. :param int stacklevel: Stack level for the deprecation passed on to warnings.warn :returns: Wrapped version of ``super_init_func`` which gives a deprecation warning when non-keyword args or aliases are used. :rtype: callable c sZ|r:tjddjdt|dtt|}ni}|j|g}x4jD](\}}||krV|j|||<|j |qVW|rtjddjfddt |Ddjt |fdg}x2jD]&\}}||krΈ|||<|j |qW|r*tjddjfd dt |Ddx"D]}||kr0|j|q0W|f|S) zInitializer for a GObject based classes with support for property sets through the use of explicit keyword arguments. zUsing positional arguments with the GObject constructor has been deprecated. Please specify keyword(s) for "%s" or use a class specific constructor. See: https://wiki.gnome.org/PyGObject/InitializerDeprecationsz, N)r0zThe keyword(s) "%s" have been deprecated in favor of "%s" respectively. See: https://wiki.gnome.org/PyGObject/InitializerDeprecationsc3s|]}|VqdS)Nr ).0k)deprecated_aliasesr r /sz4deprecated_init..new_init..zInitializer is relying on deprecated non-standard defaults. Please update to explicitly use: %s See: https://wiki.gnome.org/PyGObject/InitializerDeprecationsc3s|]}d||fVqdS)z%s=%sNr )r^r_)deprecated_defaultsr r ra>s) r2r3joinlendictzipritemsrHr]r) rrXrYZ new_kwargsZ aliases_usedkeyaliasZ defaults_usedr-) arg_namescategoryr`rbignorer0super_init_funcr r new_inits<       z!deprecated_init..new_initr )rmrjrlr`rbrkr0rnr )rjrkr`rbrlr0rmr deprecated_inits3rocstfdd}|S)aTranslate method's return value for stripping off success flag. There are a lot of methods which return a "success" boolean and have several out arguments. Translate such a method to return the out arguments on success and None on failure. csL||}|dr4t|dkr&|dS|ddSnrDp@dSdS)Nrr/r<z call failed)rd)rXrYret)exc_strexc_typefail_retmethodr r r Rs   z%strip_boolean_result..wrapped)r)rtrrrqrsr r )rqrrrsrtr strip_boolean_resultKs ru)NNN)rRr2rCrAZpkgutilrZgirZgi._girZ gi._constantsrrr__path__rrGr ModuleTyperobjectr'rNrWZ overridefuncr[rMtuplerorur r r r s.     V-  Q